blob: 514585acb396d55436444ab8dc7e0c22fb95f1e0 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26#include <stdio.h>
27#include <string.h>
28#include <jni.h>
29
30#include "jli_util.h"
31
32/*
33 * Returns a pointer to a block of at least 'size' bytes of memory.
34 * Prints error message and exits if the memory could not be allocated.
35 */
36void *
37JLI_MemAlloc(size_t size)
38{
39 void *p = malloc(size);
40 if (p == 0) {
41 perror("malloc");
42 exit(1);
43 }
44 return p;
45}
46
47/*
48 * Equivalent to realloc(size).
49 * Prints error message and exits if the memory could not be reallocated.
50 */
51void *
52JLI_MemRealloc(void *ptr, size_t size)
53{
54 void *p = realloc(ptr, size);
55 if (p == 0) {
56 perror("realloc");
57 exit(1);
58 }
59 return p;
60}
61
62/*
63 * Wrapper over strdup(3C) which prints an error message and exits if memory
64 * could not be allocated.
65 */
66char *
67JLI_StringDup(const char *s1)
68{
69 char *s = strdup(s1);
70 if (s == NULL) {
71 perror("strdup");
72 exit(1);
73 }
74 return s;
75}
76
77/*
78 * Very equivalent to free(ptr).
79 * Here to maintain pairing with the above routines.
80 */
81void
82JLI_MemFree(void *ptr)
83{
84 free(ptr);
85}
86
87/*
88 * Makes a copy of arguments
89 */
90char**
91JLI_CopyArgs(int argc, const char **iargv)
92{
93 int i;
94 char** oargv = (char**)JLI_MemAlloc(sizeof(char*)*(argc+1));
95 for (i = 0 ; i < argc+1 ; i++) {
96 oargv[i] = (iargv[i] == NULL) ? NULL : JLI_StringDup(iargv[i]);
97 if (iargv[i] != NULL && JLI_IsTraceLauncher() == JNI_TRUE) {
98 printf("\targv[%d] = '%s'\n",i,iargv[i]);
99 }
100 }
101 return oargv;
102}
103
104/*
105 * debug helpers we use
106 */
107static jboolean _launcher_debug = JNI_FALSE;
108
109void
110JLI_TraceLauncher(const char* fmt, ...)
111{
112 va_list vl;
113 if (_launcher_debug != JNI_TRUE) return;
114 va_start(vl, fmt);
115 vprintf(fmt,vl);
116 va_end(vl);
117}
118
119void
120JLI_SetTraceLauncher()
121{
122 if (getenv("_JAVA_LAUNCHER_DEBUG") != 0) {
123 _launcher_debug = JNI_TRUE;
124 JLI_TraceLauncher("----_JAVA_LAUNCHER_DEBUG----\n");
125 }
126}
127
128jboolean
129JLI_IsTraceLauncher()
130{
131 return _launcher_debug;
132}
133
134int
135JLI_StrCCmp(const char *s1, const char* s2)
136{
137 return JLI_StrNCmp(s1, s2, JLI_StrLen(s2));
138}