=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/load.c,v retrieving revision 1.10 retrieving revision 1.14 diff -u -p -r1.10 -r1.14 --- OpenXM_contrib2/asir2000/parse/load.c 2004/03/02 07:44:02 1.10 +++ OpenXM_contrib2/asir2000/parse/load.c 2004/03/18 01:59:41 1.14 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/parse/load.c,v 1.9 2001/12/25 02:39:06 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/load.c,v 1.13 2004/03/05 08:45:49 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -106,21 +106,25 @@ extern JMP_BUF exec_env; char *search_executable(char *name) { char *c,*s,*ret; - int len; + int len,nlen; char dir[BUFSIZ],path[BUFSIZ]; struct stat buf; + nlen = strlen(name); for ( s = (char *)getenv("PATH"); s; ) { c = (char *)index(s,':'); - if ( c ) { - len = c-s; - strncpy(dir,s,len); s = c+1; dir[len] = 0; - } else { - strcpy(dir,s); s = 0; - } + len = c ? c-s : strlen(s); + if ( len >= BUFSIZ ) continue; + strncpy(dir,s,len); dir[len] = 0; + if ( c ) s = c+1; + else s = 0; + if ( len+nlen+1 >= BUFSIZ ) continue; sprintf(path,"%s/%s",dir,name); if ( !stat(path,&buf) && !(buf.st_mode & S_IFDIR) - && !access(path,X_OK) ) { +#if !defined(VISUAL) + && !access(path,X_OK) +#endif + ) { len = strlen(path)+1; ret = (char *)MALLOC(len); strcpy(ret,path); @@ -154,10 +158,14 @@ void env_init() { } if ( !(asir_pager = getenv("PAGER")) ) { japanese = 0; - if ( (e = getenv("LANGUAGE")) && strstr(e,"ja") ) japanese = 1; - else if ( (e = getenv("LC_ALL")) && strstr(e,"ja") ) japanese = 1; - else if ( (e = getenv("LC_CTYPE")) && strstr(e,"ja") ) japanese = 1; - else if ( (e = getenv("LANG")) && strstr(e,"ja") ) japanese = 1; + if ( (e = getenv("LANGUAGE")) && + (!strncmp(e,"japan",5) || !strncmp(e,"ja_JP",5)) ) japanese = 1; + else if ( (e = getenv("LC_ALL")) && + (!strncmp(e,"japan",5) || !strncmp(e,"ja_JP",5)) ) japanese = 1; + else if ( (e = getenv("LC_CTYPE")) && + (!strncmp(e,"japan",5) || !strncmp(e,"ja_JP",5)) ) japanese = 1; + else if ( (e = getenv("LANG")) && + (!strncmp(e,"japan",5) || !strncmp(e,"ja_JP",5)) ) japanese = 1; if ( japanese ) asir_pager = search_executable("jless"); if ( !asir_pager ) {