bool GetJREPathFromEnvVars(char* path, size_t pathSize, const char* arch)
{
	bool found = false;

	static const size_t possLoc_sizeMax = 32;
	char* possLoc[possLoc_sizeMax];
	size_t possLoc_i = 0;

	possLoc[possLoc_i++] = util_allocStrCpy("JAVA_HOME");
	possLoc[possLoc_i++] = util_allocStrCpy("JDK_HOME");
	possLoc[possLoc_i++] = util_allocStrCpy("JRE_HOME");

	size_t l;
	for (l=0; l < possLoc_i; ++l) {
		const char* envPath = getenv(possLoc[l]);
		if (envPath != NULL) {
			found = GetJREPathFromBase(path, pathSize, envPath, arch);
			if (found) {
				simpleLog_logL(LOG_LEVEL_NOTICE, "JRE found in env var \"%s\"!", possLoc[l]);
				goto locSearchEnd;
			}
		}
	}
 locSearchEnd:

	// cleanup
	for (l=0; l < possLoc_i; ++l) {
		free(possLoc[l]);
		possLoc[l] = NULL;
	}

	return found;
}
Example #2
0
static bool GetJREPathWhichJava(char* path, size_t pathSize, const char* arch)
{
	static const char* suf = "/bin/java";
	const size_t suf_size = strlen(suf);

	bool found = false;

	// execute
	FILE* cmd_fp = popen("which java  | sed 's/[\\n\\r]/K/g'", "r");
	if (cmd_fp == NULL) {
		return found;
	}

	// parse results
	static const size_t line_sizeMax = 512;
	char line[line_sizeMax];
	if (fgets(line, line_sizeMax, cmd_fp)) {
		if (*line == '/') { // -> absolute path
			size_t line_size = strlen(line);
			if (*(line+line_size-1) == '\n') {
				// remove trailing '\n'
				*(line+line_size-1) = '\0';
				line_size--;
			}

			simpleLog_logL(SIMPLELOG_LEVEL_FINEST,
					"which line \"%s\"!", line);

			if (line_size > suf_size
					&& strcmp(line+(line_size-suf_size), suf) == 0) {
				// line ends with suf
				simpleLog_logL(SIMPLELOG_LEVEL_FINER,
						"JRE found with `which java`!");
				// remove suf
				*(line+(line_size-suf_size)) = '\0';
				found = GetJREPathFromBase(path, pathSize, line, arch);
			}
		}
	}
	pclose(cmd_fp);

	return found;
}
Example #3
0
static bool GetJREPathInCommonLocations(char* path, size_t pathSize, const char* arch)
{
	bool found = false;

	static const size_t possLoc_sizeMax = 32;
	char* possLoc[possLoc_sizeMax];
	size_t possLoc_i = 0;

	possLoc[possLoc_i++] = util_allocStrCpy("/usr/local/jdk*");
	possLoc[possLoc_i++] = util_allocStrCpy("/usr/lib/jvm/java-?-sun");
	possLoc[possLoc_i++] = util_allocStrCpy("/usr/lib/jvm/java-?-*");
	possLoc[possLoc_i++] = util_allocStrCpy("~/jdk*");
	possLoc[possLoc_i++] = util_allocStrCpy("~/bin/jdk*");
	possLoc[possLoc_i++] = util_allocStrCpy("~/jre*");
	possLoc[possLoc_i++] = util_allocStrCpy("~/bin/jre*");

	static const size_t globHits_sizeMax = 32;
	char* globHits[globHits_sizeMax];
	size_t l, g;
	for (l=0; l < possLoc_i; ++l) {
		const size_t globHits_size = ExecFileSystemGlob(globHits, globHits_sizeMax, possLoc[l]);
		for (g=0; g < globHits_size; ++g) {
			found = GetJREPathFromBase(path, pathSize, globHits[g], arch);
			if (found) {
				simpleLog_logL(SIMPLELOG_LEVEL_FINER,
						"JRE found common location env var \"%s\"!",
						possLoc[l]);
				goto locSearchEnd;
			}
		}
	}
 locSearchEnd:

	// cleanup
	for (l=0; l < possLoc_i; ++l) {
		free(possLoc[l]);
		possLoc[l] = NULL;
	}

	return found;
}