43 lines
1.0 KiB
C
43 lines
1.0 KiB
C
#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;
|
|
}
|