#include #include #include #include #include #include __export char ConfigName[FILENAME_MAX]; __export char config_cwd[FILENAME_MAX]; /* * This searches for a specified set of filenames in a specified set * of directories. If found, set the current working directory to * match. */ int search_dirs(struct com32_filedata *filedata, const char *search_directories[], const char *filenames[], char *realname) { char namebuf[FILENAME_MAX]; const char *sd, **sdp; const char *sf, **sfp; for (sdp = search_directories; (sd = *sdp); sdp++) { for (sfp = filenames; (sf = *sfp); sfp++) { snprintf(namebuf, sizeof namebuf, "%s%s%s", sd, (*sd && sd[strlen(sd)-1] == '/') ? "" : "/", sf); if (realpath(realname, namebuf, FILENAME_MAX) == (size_t)-1) continue; dprintf("Config search: %s\n", realname); if (open_file(realname, O_RDONLY, filedata) >= 0) { chdir(sd); return 0; /* Got it */ } } } return -1; }