Esempio n. 1
0
File: paths.c Progetto: jeoerl/arcan
void arcan_set_namespace_defaults()
{
/* when CWD is correctly set to the installation path */
	char* respath = "./resources";
	size_t len = strlen(respath);

/* typically inside build-directory */
	if (!arcan_isdir(respath)){
		respath = "../resources";
	}

	char debug_dir[ len + sizeof("/logs") ];
	char state_dir[ len + sizeof("/savestates") ];
	char font_dir[ len + sizeof("/fonts") ];

	snprintf(debug_dir, sizeof(debug_dir), "%s/logs", respath);
	snprintf(state_dir, sizeof(state_dir), "%s/savestates", respath);
	snprintf(font_dir, sizeof(font_dir), "%s/fonts", respath);

	arcan_softoverride_namespace(respath, RESOURCE_APPL_SHARED);
	arcan_softoverride_namespace(state_dir, RESOURCE_SYS_APPLSTATE);
	arcan_softoverride_namespace(debug_dir, RESOURCE_SYS_DEBUG);
	arcan_softoverride_namespace(font_dir, RESOURCE_SYS_FONT);
	arcan_softoverride_namespace("./", RESOURCE_SYS_BINS);
	arcan_softoverride_namespace("./", RESOURCE_SYS_LIBS);
}
Esempio n. 2
0
char* arcan_find_resource(const char* label,
	enum arcan_namespaces space, enum resource_type ares)
{
	if (label == NULL || verify_traverse(label) == NULL)
		return NULL;

	size_t label_len = strlen(label);

	for (int i = 1, j = 0; i <= RESOURCE_SYS_ENDM; i <<= 1, j++){
		if ((space & i) == 0 || !namespaces.paths[j])
			continue;

		char scratch[ namespaces.lenv[j] + label_len + 2 ];
		snprintf(scratch, sizeof(scratch),
			label[0] == '/' ? "%s%s" : "%s/%s",
			namespaces.paths[j], label
		);

		if (
			((ares & ARES_FILE) && arcan_isfile(scratch)) ||
			((ares & ARES_FOLDER) && arcan_isdir(scratch))
		)
			return strdup(scratch);
	}

	return NULL;
}
Esempio n. 3
0
File: paths.c Progetto: jeoerl/arcan
static char* unix_find(const char* fname)
{
	char* res = NULL;
	char* pathtbl[] = {
		".",
		NULL, /* fill in with HOME */
		"/usr/local/share/arcan",
		"/usr/share/arcan",
		NULL /* NULL terminates */
	};

	if (getenv("HOME")){
		size_t len = strlen( getenv("HOME") ) + 9;
		pathtbl[1] = malloc(len);
		snprintf(pathtbl[1], len, "%s/.arcan", getenv("HOME") );
	}
	else
		pathtbl[1] = strdup("");

	size_t fn_l = strlen(fname);
	for (char** base = pathtbl; *base != NULL; base++){
		char buf[ fn_l + strlen(*base) + 2 ];
		snprintf(buf, sizeof(buf), "%s/%s", *base, fname);

		if (arcan_isdir(buf)){
			res = strdup(buf);
			break;
		}
	}

	free(pathtbl[1]);
	return res;
}
Esempio n. 4
0
/*
 * current several namespaces are (legacy) specified relative
 * to the old resources namespace, since those are expanded in
 * set_namespace_defaults where the command-line switch isn't
 * available, we have to generate these dependent namespaces
 * overrides as well.
 */
static void override_resspaces(const char* respath)
{
	size_t len = strlen(respath);
	if (len == 0 || !arcan_isdir(respath)){
		arcan_warning("-p argument ignored, invalid path specified.");
		return;
	}

	char debug_dir[ len + sizeof("/logs") ];
	char state_dir[ len + sizeof("/savestates") ];
	char font_dir[ len + sizeof("/fonts") ];

	snprintf(debug_dir, sizeof(debug_dir), "%s/logs", respath);
	snprintf(state_dir, sizeof(state_dir), "%s/savestates", respath);
	snprintf(font_dir, sizeof(font_dir), "%s/fonts", respath);

	arcan_override_namespace(respath, RESOURCE_APPL_SHARED);
	arcan_override_namespace(debug_dir, RESOURCE_SYS_DEBUG);
	arcan_override_namespace(state_dir, RESOURCE_APPL_STATE);
	arcan_override_namespace(font_dir, RESOURCE_SYS_FONT);
}