Home | History | Annotate | Download | only in lib
      1 #include <dprintf.h>
      2 #include <fcntl.h>
      3 #include <stdio.h>
      4 #include <string.h>
      5 #include <core.h>
      6 #include <fs.h>
      7 
      8 __export char ConfigName[FILENAME_MAX];
      9 __export char config_cwd[FILENAME_MAX];
     10 
     11 /*
     12  * This searches for a specified set of filenames in a specified set
     13  * of directories.  If found, set the current working directory to
     14  * match.
     15  */
     16 int search_dirs(struct com32_filedata *filedata,
     17 		const char *search_directories[],
     18 		const char *filenames[],
     19 		char *realname)
     20 {
     21     char namebuf[FILENAME_MAX];
     22     const char *sd, **sdp;
     23     const char *sf, **sfp;
     24 
     25     for (sdp = search_directories; (sd = *sdp); sdp++) {
     26 	for (sfp = filenames; (sf = *sfp); sfp++) {
     27 	    snprintf(namebuf, sizeof namebuf,
     28 		     "%s%s%s",
     29 		     sd, (*sd && sd[strlen(sd)-1] == '/') ? "" : "/",
     30 		     sf);
     31 	    if (realpath(realname, namebuf, FILENAME_MAX) == (size_t)-1)
     32 		continue;
     33 	    dprintf("Config search: %s\n", realname);
     34 	    if (open_file(realname, O_RDONLY, filedata) >= 0) {
     35 		chdir(sd);
     36 		return 0;	/* Got it */
     37 	    }
     38 	}
     39     }
     40 
     41     return -1;
     42 }
     43