=================================================================== RCS file: /home/cvs/OpenXM/src/util/ox_pathfinder.c,v retrieving revision 1.8 retrieving revision 1.11 diff -u -p -r1.8 -r1.11 --- OpenXM/src/util/ox_pathfinder.c 2003/11/16 07:14:11 1.8 +++ OpenXM/src/util/ox_pathfinder.c 2003/12/03 03:21:16 1.11 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/util/ox_pathfinder.c,v 1.7 2003/09/08 02:43:47 takayama Exp $ */ +/* $OpenXM: OpenXM/src/util/ox_pathfinder.c,v 1.10 2003/12/01 03:15:37 takayama Exp $ */ /* Moved from misc-2003/07/cygwin/test.c */ #include @@ -860,6 +860,68 @@ char *generateTMPfileName(char *seed) { return NULL; } +#define MAXTMP2 0xffffff +char *generateTMPfileName2(char *seed,char *ext,int usetmp,int win){ + char *tmp; + char *fname; + char *tt; + int num; + static int prevnum=0; + int i; + int clean = 0; + if (usetmp) { + tmp = getenv("TMP"); + if (tmp == NULL) { + tmp = getenv("TEMP"); + } + if ((tmp == NULL) && (strcmp(getOStypes(),"Windows-native") != 0)) { + tmp = "/tmp"; + } + tmp = winPathToCygwinPath(tmp); + }else{ + tmp = NULL; + } + if (tmp != NULL) { + fname = (char *)mymalloc(strlen(tmp)+strlen(seed)+40); + if (fname == NULL) nomemory(fname); + }else{ + fname = (char *)mymalloc(strlen(seed)+40); + if (fname == NULL) nomemory(fname); + } + for (num=prevnum+1; num MAXTMP2-10) && (!clean)) { + /* Clean the old garbages. */ + for (i=0; i= 0) && (buf.st_mtime+120 < time(NULL))) { + unlink(fname); + } + } + } + num = 0; clean=1; prevnum=0; + } + } + } + return NULL; +} char *getCppPath(void) { static char *cpp = "/usr/local/bin/cpp"; @@ -893,11 +955,11 @@ char *getCppPath(void) { char *getCommandPath(char *cmdname) { char *path; - int ostype; char *msg; char *path2; + char *ss; int i,j; - ostype = getOStypei(); /* Todo: getCommandPath_win */ + /* Use /cygdrive format always. */ if (cmdname == NULL) return NULL; if (strlen(cmdname) < 1) { errorPathFinder("getCommandPath: cmdname is an empty string.\n"); @@ -914,28 +976,39 @@ char *getCommandPath(char *cmdname) return cmdname; } - path = getOpenXM_HOME(); + path = getOpenXM_HOME(); /* It will return /cygdrive for windows. */ if (path != NULL) { - path2 = (char *)mymalloc(strlen(path)+strlen(cmdname)+5); + path2 = (char *)mymalloc(strlen(path)+5); strcpy(path2,path); - strcat(path2,"bin/"); - strcat(path2,cmdname); - if (getFileSize(path2) >= 0) { /* Todo: isExecutableFile() */ - return path2; - } + strcat(path2,"bin"); + ss = oxWhich(cmdname,path2); + if (ss != NULL) return ss; } - path = (char *)getenv("PATH"); + path = (char *)getenv("PATH"); /* Todo: it will not give /cygdrive format*/ + ss = oxWhich(cmdname,path); + if (ss == NULL) { + errorPathFinder("oxWhich_unix: could not find it in the path string.\n"); + } + return ss; +} + +char *oxWhich(char *cmdname,char *path) { + return(oxWhich_unix(cmdname,path)); +} + +char *oxWhich_unix(char *cmdname,char *path) { + char *path2; + int i,j; if (path == NULL) { return NULL; } - path2 = (char *)mymalloc(strlen(path)+strlen(cmdname)+1); - for (i=0, j=0; i < strlen(path); i++) { + path2 = (char *)mymalloc(strlen(path)+strlen(cmdname)+2); + for (i=0, j=0; i <= strlen(path); i++) { path2[j] = 0; - if (path[i] == ':') { + if ((path[i] == ':') || (path[i] == 0)) { strcat(path2,"/"); strcat(path2,cmdname); - if (getFileSize(path2) >= 0) { /* Todo: isExecutableFile() */ return path2; } @@ -944,7 +1017,49 @@ char *getCommandPath(char *cmdname) path2[j] = path[i]; j++; path2[j] = 0; } } - errorPathFinder("getCommandPath: could not find it in the PATH\n"); return NULL; +} + +char *oxEvalEnvVar(char *s) { + int n, i,j; + char *es; + char *news; + int flag,flag2; + flag=-1; + n = strlen(s); + es = (char *)mymalloc(n+1); es[0] = 0; + if (es == NULL) nomemory(1); + for (i=0; i= 0) { + es = (char *)getenv(es); + if (es == NULL) es=""; + news = (char *) mymalloc(n+5+strlen(es)); + if (news == NULL) nomemory(1); + j = 0; + for (i=0; i