blob: bb1dabf98c24b5e067e502dc0ed8048925e32393 [file] [log] [blame]
#include <dprintf.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <core.h>
#include <fs.h>
__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;
}