/* Checks if commandline argument contains property specified * and analyze it as boolean property (true/false). * Returns -1 if the argument does not contain the parameter; * Returns 1 if the argument contains the parameter and its value is "true"; * Returns 0 if the argument contains the parameter and its value is "false". */ int GetBoolParamValue(const char *paramName, const char *arg) { const char * paramValue = GetParamValue(paramName, arg); if (paramValue != NULL) { if (JLI_StrCaseCmp(paramValue, "true") == 0) { return 1; } if (JLI_StrCaseCmp(paramValue, "false") == 0) { return 0; } } return -1; }
/* * Read the manifest from the specified jar file and fill in the manifest_info * structure with the information found within. * * Error returns are as follows: * 0 Success * -1 Unable to open jarfile * -2 Error accessing the manifest from within the jarfile (most likely * a manifest is not present, or this isn't a valid zip/jar file). */ int JLI_ParseManifest(char *jarfile, manifest_info *info) { int fd; zentry entry; char *lp; char *name; char *value; int rc; char *splashscreen_name = NULL; if ((fd = open(jarfile, O_RDONLY #ifdef O_LARGEFILE | O_LARGEFILE /* large file mode */ #endif #ifdef O_BINARY | O_BINARY /* use binary mode on windows */ #endif )) == -1) { return (-1); } info->manifest_version = NULL; info->main_class = NULL; info->jre_version = NULL; info->jre_restrict_search = 0; info->splashscreen_image_file_name = NULL; if (rc = find_file(fd, &entry, manifest_name) != 0) { close(fd); return (-2); } manifest = inflate_file(fd, &entry, NULL); if (manifest == NULL) { close(fd); return (-2); } lp = manifest; while ((rc = parse_nv_pair(&lp, &name, &value)) > 0) { if (JLI_StrCaseCmp(name, "Manifest-Version") == 0) info->manifest_version = value; else if (JLI_StrCaseCmp(name, "Main-Class") == 0) info->main_class = value; else if (JLI_StrCaseCmp(name, "JRE-Version") == 0) info->jre_version = value; else if (JLI_StrCaseCmp(name, "JRE-Restrict-Search") == 0) { if (JLI_StrCaseCmp(value, "true") == 0) info->jre_restrict_search = 1; } else if (JLI_StrCaseCmp(name, "Splashscreen-Image") == 0) { info->splashscreen_image_file_name = value; } } close(fd); if (rc == 0) return (0); else return (-2); }
/* * Block current thread and continue execution in a new thread */ int ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void * args) { int rslt = 0; unsigned thread_id; #ifndef STACK_SIZE_PARAM_IS_A_RESERVATION #define STACK_SIZE_PARAM_IS_A_RESERVATION (0x10000) #endif /* * STACK_SIZE_PARAM_IS_A_RESERVATION is what we want, but it's not * supported on older version of Windows. Try first with the flag; and * if that fails try again without the flag. See MSDN document or HotSpot * source (os_win32.cpp) for details. */ HANDLE thread_handle = (HANDLE)_beginthreadex(NULL, (unsigned)stack_size, continuation, args, STACK_SIZE_PARAM_IS_A_RESERVATION, &thread_id); if (thread_handle == NULL) { thread_handle = (HANDLE)_beginthreadex(NULL, (unsigned)stack_size, continuation, args, 0, &thread_id); } /* AWT preloading (AFTER main thread start) */ #ifdef ENABLE_AWT_PRELOAD /* D3D preloading */ if (awtPreloadD3D != 0) { char *envValue; /* D3D routines checks env.var J2D_D3D if no appropriate * command line params was specified */ envValue = getenv("J2D_D3D"); if (envValue != NULL && JLI_StrCaseCmp(envValue, "false") == 0) { awtPreloadD3D = 0; } /* Test that AWT preloading isn't disabled by J2D_D3D_PRELOAD env.var */ envValue = getenv("J2D_D3D_PRELOAD"); if (envValue != NULL && JLI_StrCaseCmp(envValue, "false") == 0) { awtPreloadD3D = 0; } if (awtPreloadD3D < 0) { /* If awtPreloadD3D is still undefined (-1), test * if it is turned on by J2D_D3D_PRELOAD env.var. * By default it's turned OFF. */ awtPreloadD3D = 0; if (envValue != NULL && JLI_StrCaseCmp(envValue, "true") == 0) { awtPreloadD3D = 1; } } } if (awtPreloadD3D) { AWTPreload(D3D_PRELOAD_FUNC); } #endif /* ENABLE_AWT_PRELOAD */ if (thread_handle) { WaitForSingleObject(thread_handle, INFINITE); GetExitCodeThread(thread_handle, &rslt); CloseHandle(thread_handle); } else { rslt = continuation(args); } #ifdef ENABLE_AWT_PRELOAD if (awtPreloaded) { AWTPreloadStop(); } #endif /* ENABLE_AWT_PRELOAD */ return rslt; }