1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <dprintf.h>
#include <stdio.h>
#include <string.h>
#include <core.h>
#include <fs.h>
/*
* Common implementation of load_config
*
* 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_config(const char *search_directories[], const char *filenames[])
{
char confignamebuf[FILENAME_MAX];
com32sys_t regs;
const char *sd, **sdp;
const char *sf, **sfp;
for (sdp = search_directories; (sd = *sdp); sdp++) {
for (sfp = filenames; (sf = *sfp); sfp++) {
memset(®s, 0, sizeof regs);
snprintf(confignamebuf, sizeof confignamebuf,
"%s%s%s",
sd, (*sd && sd[strlen(sd)-1] == '/') ? "" : "/",
sf);
if (realpath(ConfigName, confignamebuf, FILENAME_MAX) == (size_t)-1)
continue;
regs.edi.w[0] = OFFS_WRT(ConfigName, 0);
dprintf("Config search: %s\n", ConfigName);
call16(core_open, ®s, ®s);
if (!(regs.eflags.l & EFLAGS_ZF)) {
chdir(sd);
return 0; /* Got it */
}
}
}
return -1;
}
|