Mercurial > hg > xemacs-beta
comparison src/sysdep.c @ 462:0784d089fdc9 r21-2-46
Import from CVS: tag r21-2-46
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:44:37 +0200 |
parents | 223736d75acb |
children | 7039e6323819 |
comparison
equal
deleted
inserted
replaced
461:120ed4009e51 | 462:0784d089fdc9 |
---|---|
31 | 31 |
32 #include <config.h> | 32 #include <config.h> |
33 | 33 |
34 #ifdef WIN32_NATIVE | 34 #ifdef WIN32_NATIVE |
35 #ifdef MINGW | 35 #ifdef MINGW |
36 #include <mingw32/process.h> | 36 #include <mingw/process.h> |
37 #else | 37 #else |
38 /* <process.h> should not conflict with "process.h", as per ANSI definition. | 38 /* <process.h> should not conflict with "process.h", as per ANSI definition. |
39 This is not true with visual c though. The trick below works with | 39 This is not true with visual c though. The trick below works with |
40 VC4.2b, 5.0 and 6.0. It assumes that VC is installed in a kind of | 40 VC4.2b, 5.0 and 6.0. It assumes that VC is installed in a kind of |
41 standard way, so include path ends with /include. | 41 standard way, so include path ends with /include. |
2983 return rtnval; | 2983 return rtnval; |
2984 #else /* MULE */ | 2984 #else /* MULE */ |
2985 if (rtnval == NULL) /* End of directory */ | 2985 if (rtnval == NULL) /* End of directory */ |
2986 return NULL; | 2986 return NULL; |
2987 { | 2987 { |
2988 Extcount external_len; | |
2989 int ascii_filename_p = 1; | |
2990 const Extbyte * const external_name = (const Extbyte *) rtnval->d_name; | 2988 const Extbyte * const external_name = (const Extbyte *) rtnval->d_name; |
2991 | 2989 Extcount external_len = strlen (rtnval->d_name); |
2992 /* Optimize for the common all-ASCII case, computing len en passant */ | 2990 const Bufbyte *internal_name; |
2993 for (external_len = 0; external_name[external_len] ; external_len++) | 2991 Bytecount internal_len; |
2994 { | 2992 |
2995 if (!BYTE_ASCII_P (external_name[external_len])) | 2993 TO_INTERNAL_FORMAT (DATA, (external_name, external_len), |
2996 ascii_filename_p = 0; | 2994 ALLOCA, (internal_name, internal_len), |
2997 } | 2995 Qfile_name); |
2998 if (ascii_filename_p) | 2996 |
2997 /* check for common case of ASCII filename */ | |
2998 if (internal_len == external_len && | |
2999 !memcmp (external_name, internal_name, internal_len)) | |
2999 return rtnval; | 3000 return rtnval; |
3000 | 3001 |
3001 { /* Non-ASCII filename */ | 3002 { /* Non-ASCII filename */ |
3002 static Bufbyte_dynarr *internal_DIRENTRY; | 3003 static Bufbyte_dynarr *internal_DIRENTRY; |
3003 const Bufbyte *internal_name; | |
3004 Bytecount internal_len; | |
3005 if (!internal_DIRENTRY) | 3004 if (!internal_DIRENTRY) |
3006 internal_DIRENTRY = Dynarr_new (Bufbyte); | 3005 internal_DIRENTRY = Dynarr_new (Bufbyte); |
3007 else | 3006 else |
3008 Dynarr_reset (internal_DIRENTRY); | 3007 Dynarr_reset (internal_DIRENTRY); |
3009 | 3008 |
3010 Dynarr_add_many (internal_DIRENTRY, (Bufbyte *) rtnval, | 3009 Dynarr_add_many (internal_DIRENTRY, (Bufbyte *) rtnval, |
3011 offsetof (DIRENTRY, d_name)); | 3010 offsetof (DIRENTRY, d_name)); |
3012 | 3011 |
3013 TO_INTERNAL_FORMAT (DATA, (external_name, external_len), | |
3014 ALLOCA, (internal_name, internal_len), | |
3015 Qfile_name); | |
3016 | 3012 |
3017 Dynarr_add_many (internal_DIRENTRY, internal_name, internal_len); | 3013 Dynarr_add_many (internal_DIRENTRY, internal_name, internal_len); |
3018 Dynarr_add (internal_DIRENTRY, '\0'); /* NUL-terminate */ | 3014 Dynarr_add (internal_DIRENTRY, '\0'); /* NUL-terminate */ |
3019 return (DIRENTRY *) Dynarr_atp (internal_DIRENTRY, 0); | 3015 return (DIRENTRY *) Dynarr_atp (internal_DIRENTRY, 0); |
3020 } | 3016 } |