1 /* 2 * Copyright (c) 2005, 2018, Oracle and/or its affiliates. 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. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #ifndef _JLI_UTIL_H 27 #define _JLI_UTIL_H 28 29 #include <stdlib.h> 30 #include <string.h> 31 #include <stdio.h> 32 33 #ifndef NO_JNI 34 #include <jni.h> 35 #else 36 #define jboolean int 37 #define JNI_TRUE 1 38 #define JNI_FALSE 0 39 #endif 40 41 #define JLDEBUG_ENV_ENTRY "_JAVA_LAUNCHER_DEBUG" 42 43 JNIEXPORT void * JNICALL 44 JLI_MemAlloc(size_t size); 45 46 void *JLI_MemRealloc(void *ptr, size_t size); 47 48 JNIEXPORT char * JNICALL 49 JLI_StringDup(const char *s1); 50 51 JNIEXPORT void JNICALL 52 JLI_MemFree(void *ptr); 53 54 int JLI_StrCCmp(const char *s1, const char *s2); 55 jboolean JLI_HasSuffix(const char *s1, const char *s2); 56 57 typedef struct { 58 char *arg; 59 jboolean has_wildcard; 60 } StdArg; 61 62 JNIEXPORT StdArg * JNICALL 63 JLI_GetStdArgs(); 64 65 JNIEXPORT int JNICALL 66 JLI_GetStdArgc(); 67 68 JNIEXPORT int JNICALL 69 JLI_GetAppArgIndex(); 70 71 #define JLI_StrLen(p1) strlen((p1)) 72 #define JLI_StrChr(p1, p2) strchr((p1), (p2)) 73 #define JLI_StrRChr(p1, p2) strrchr((p1), (p2)) 74 #define JLI_StrCmp(p1, p2) strcmp((p1), (p2)) 75 #define JLI_StrNCmp(p1, p2, p3) strncmp((p1), (p2), (p3)) 76 #define JLI_StrCat(p1, p2) strcat((p1), (p2)) 77 #define JLI_StrCpy(p1, p2) strcpy((p1), (p2)) 78 #define JLI_StrNCpy(p1, p2, p3) strncpy((p1), (p2), (p3)) 79 #define JLI_StrStr(p1, p2) strstr((p1), (p2)) 80 #define JLI_StrSpn(p1, p2) strspn((p1), (p2)) 81 #define JLI_StrCSpn(p1, p2) strcspn((p1), (p2)) 82 #define JLI_StrPBrk(p1, p2) strpbrk((p1), (p2)) 83 #define JLI_StrTok(p1, p2) strtok((p1), (p2)) 84 85 /* On Windows lseek() is in io.h rather than the location dictated by POSIX. */ 86 #ifdef _WIN32 87 #include <windows.h> 88 #include <io.h> 89 #include <process.h> 90 #define JLI_StrCaseCmp(p1, p2) stricmp((p1), (p2)) 91 #define JLI_StrNCaseCmp(p1, p2, p3) strnicmp((p1), (p2), (p3)) 92 int JLI_Snprintf(char *buffer, size_t size, const char *format, ...); 93 JNIEXPORT void JNICALL 94 JLI_CmdToArgs(char *cmdline); 95 #define JLI_Lseek _lseeki64 96 #define JLI_PutEnv _putenv 97 #define JLI_GetPid _getpid 98 #else /* NIXES */ 99 #include <unistd.h> 100 #include <strings.h> 101 #define JLI_StrCaseCmp(p1, p2) strcasecmp((p1), (p2)) 102 #define JLI_StrNCaseCmp(p1, p2, p3) strncasecmp((p1), (p2), (p3)) 103 #define JLI_Snprintf snprintf 104 #define JLI_PutEnv putenv 105 #define JLI_GetPid getpid 106 #ifdef __solaris__ 107 #define JLI_Lseek llseek 108 #endif 109 #ifdef __linux__ 110 #define _LARGFILE64_SOURCE 111 #define JLI_Lseek lseek64 112 #endif 113 #ifdef _ALLBSD_SOURCE 114 #define JLI_Lseek lseek 115 #endif 116 #ifdef _AIX 117 #define JLI_Lseek lseek 118 #endif 119 #endif /* _WIN32 */ 120 121 /* 122 * Make launcher spit debug output. 123 */ 124 void JLI_TraceLauncher(const char* fmt, ...); 125 126 JNIEXPORT void JNICALL 127 JLI_SetTraceLauncher(); 128 129 jboolean JLI_IsTraceLauncher(); 130 131 /* 132 * JLI_List - a dynamic list of char* 133 */ 134 struct JLI_List_ 135 { 136 char **elements; 137 size_t size; 138 size_t capacity; 139 }; 140 typedef struct JLI_List_ *JLI_List; 141 142 JNIEXPORT JLI_List JNICALL 143 JLI_List_new(size_t capacity); 144 145 void JLI_List_free(JLI_List l); 146 void JLI_List_ensureCapacity(JLI_List l, size_t capacity); 147 148 /* e must be JLI_MemFree-able */ 149 JNIEXPORT void JNICALL 150 JLI_List_add(JLI_List l, char *e); 151 152 /* a copy is made out of beg */ 153 void JLI_List_addSubstring(JLI_List l, const char *beg, size_t len); 154 char *JLI_List_combine(JLI_List sl); 155 char *JLI_List_join(JLI_List l, char sep); 156 JLI_List JLI_List_split(const char *str, char sep); 157 158 JNIEXPORT void JNICALL 159 JLI_InitArgProcessing(jboolean hasJavaArgs, jboolean disableArgFile); 160 161 JNIEXPORT JLI_List JNICALL 162 JLI_PreprocessArg(const char *arg, jboolean expandSourceOpt); 163 164 JNIEXPORT jboolean JNICALL 165 JLI_AddArgsFromEnvVar(JLI_List args, const char *var_name); 166 167 #endif /* _JLI_UTIL_H */ 168