176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <dprintf.h> 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <fcntl.h> 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdio.h> 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <string.h> 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <core.h> 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <fs.h> 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman__export char ConfigName[FILENAME_MAX]; 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman__export char config_cwd[FILENAME_MAX]; 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This searches for a specified set of filenames in a specified set 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * of directories. If found, set the current working directory to 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * match. 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint search_dirs(struct com32_filedata *filedata, 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *search_directories[], 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *filenames[], 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char *realname) 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char namebuf[FILENAME_MAX]; 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *sd, **sdp; 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *sf, **sfp; 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman for (sdp = search_directories; (sd = *sdp); sdp++) { 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman for (sfp = filenames; (sf = *sfp); sfp++) { 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman snprintf(namebuf, sizeof namebuf, 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman "%s%s%s", 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman sd, (*sd && sd[strlen(sd)-1] == '/') ? "" : "/", 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman sf); 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (realpath(realname, namebuf, FILENAME_MAX) == (size_t)-1) 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman continue; 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman dprintf("Config search: %s\n", realname); 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (open_file(realname, O_RDONLY, filedata) >= 0) { 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman chdir(sd); 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return 0; /* Got it */ 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return -1; 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 43