diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index debfe630e..ea7b93f2a 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,19 @@ +2008-02-01 Corinna Vinschen + + * string.h: Re-enable inline strcasematch and strncasematch + implementations and rename to ascii_strcasematch/ascii_strncasematch. + * dcrt0.cc: Replace str[n]casematch with ascii_str[n]casematch where + applicable. + * environ.cc: Ditto. + * fhandler_process.cc: Ditto. + * hookapi.cc: Ditto. + * path.cc: Ditto. + * spawn.cc: Ditto. + * strace.cc: Ditto. + * syscalls.cc: Ditto. + * uinfo.cc: Ditto. + * winf.cc: Ditto. + 2008-01-31 Corinna Vinschen * dcrt0.cc (dll_crt0_1): Use GetCommandLineW and convert to current diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index a9679c90c..1c5464f92 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -892,7 +892,7 @@ dll_crt0_1 (void *) if (__progname) { char *cp = strchr (__progname, '\0') - 4; - if (cp > __progname && strcasematch (cp, ".exe")) + if (cp > __progname && ascii_strcasematch (cp, ".exe")) *cp = '\0'; } diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc index d21e6f726..de6de9b9e 100644 --- a/winsup/cygwin/environ.cc +++ b/winsup/cygwin/environ.cc @@ -459,7 +459,7 @@ glob_init (const char *buf) allow_glob = false; ignore_case_with_glob = false; } - else if (strncasematch (buf, "ignorecase", 10)) + else if (ascii_strncasematch (buf, "ignorecase", 10)) { allow_glob = true; ignore_case_with_glob = true; @@ -477,17 +477,17 @@ check_case_init (const char *buf) if (!buf || !*buf) return; - if (strncasematch (buf, "relax", 5)) + if (ascii_strncasematch (buf, "relax", 5)) { pcheck_case = PCHECK_RELAXED; debug_printf ("File case checking set to RELAXED"); } - else if (strcasematch (buf, "adjust")) + else if (ascii_strcasematch (buf, "adjust")) { pcheck_case = PCHECK_ADJUST; debug_printf ("File case checking set to ADJUST"); } - else if (strcasematch (buf, "strict")) + else if (ascii_strcasematch (buf, "strict")) { pcheck_case = PCHECK_STRICT; debug_printf ("File case checking set to STRICT"); @@ -519,11 +519,11 @@ codepage_init (const char *buf) if (!buf || !*buf) return; - if (strcasematch (buf, "oem")) + if (ascii_strcasematch (buf, "oem")) current_codepage = oem_cp; - else if (strcasematch (buf, "ansi")) + else if (ascii_strcasematch (buf, "ansi")) current_codepage = ansi_cp; - else if (strcasematch (buf, "utf8")) + else if (ascii_strcasematch (buf, "utf8")) current_codepage = utf8_cp; else debug_printf ("Wrong codepage name: %s", buf); @@ -545,13 +545,13 @@ set_proc_retry (const char *buf) static void set_ntsec (const char *buf) { - allow_ntsec = (buf && strcasematch (buf, "yes")); + allow_ntsec = (buf && ascii_strcasematch (buf, "yes")); } static void set_smbntsec (const char *buf) { - allow_smbntsec = (buf && strcasematch (buf, "yes")); + allow_smbntsec = (buf && ascii_strcasematch (buf, "yes")); } /* The structure below is used to set up an array which is used to @@ -636,7 +636,7 @@ parse_options (char *buf) p = strtok_r (NULL, " \t", &lasts)) { char *keyword_here = p; - if (!(istrue = !strncasematch (p, "no", 2))) + if (!(istrue = !ascii_strncasematch (p, "no", 2))) p += 2; else if (!(istrue = *p != '-')) p++; @@ -648,7 +648,7 @@ parse_options (char *buf) ch = 0; for (parse_thing *k = known; k->name != NULL; k++) - if (strcasematch (p, k->name)) + if (ascii_strcasematch (p, k->name)) { switch (k->disposition) { @@ -901,7 +901,7 @@ static NO_COPY spenv spenvs[] = char * spenv::retrieve (bool no_envblock, const char *const env) { - if (env && !strncasematch (env, name, namelen)) + if (env && !ascii_strncasematch (env, name, namelen)) return NULL; debug_printf ("no_envblock %d", no_envblock); diff --git a/winsup/cygwin/fhandler_process.cc b/winsup/cygwin/fhandler_process.cc index 8f9c9bd04..380c25862 100644 --- a/winsup/cygwin/fhandler_process.cc +++ b/winsup/cygwin/fhandler_process.cc @@ -456,7 +456,7 @@ fhandler_process::fill_filebuf () if (len > 4) { char *s = filebuf + len - 4; - if (strcasematch (s, ".exe")) + if (ascii_strcasematch (s, ".exe")) *s = 0; } } @@ -618,7 +618,7 @@ format_process_stat (_pinfo *p, char *destbuf, size_t maxsize) if (len > 4) { char *s = cmd + len - 4; - if (strcasematch (s, ".exe")) + if (ascii_strcasematch (s, ".exe")) *s = 0; } } @@ -744,7 +744,7 @@ format_process_status (_pinfo *p, char *destbuf, size_t maxsize) if (len > 4) { char *s = cmd + len - 4; - if (strcasematch (s, ".exe")) + if (ascii_strcasematch (s, ".exe")) *s = 0; } } diff --git a/winsup/cygwin/hookapi.cc b/winsup/cygwin/hookapi.cc index 7f8917a71..975879bf6 100644 --- a/winsup/cygwin/hookapi.cc +++ b/winsup/cygwin/hookapi.cc @@ -55,7 +55,7 @@ rvadelta (PIMAGE_NT_HEADERS pnt, DWORD import_rva) for (int i = 0; i < pnt->FileHeader.NumberOfSections; i++) if (section[i].VirtualAddress <= import_rva && (section[i].VirtualAddress + section[i].Misc.VirtualSize) > import_rva) - // if (strncasematch ((char *) section[i].Name, ".idata", IMAGE_SIZEOF_SHORT_NAME)) + // if (ascii_strncasematch ((char *) section[i].Name, ".idata", IMAGE_SIZEOF_SHORT_NAME)) return section[i].VirtualAddress - section[i].PointerToRawData; return -1; } @@ -190,7 +190,7 @@ hook_or_detect_cygwin (const char *name, const void *fn, WORD& subsys) // Iterate through each import descriptor, and redirect if appropriate for (PIMAGE_IMPORT_DESCRIPTOR pd = pdfirst; pd->FirstThunk; pd++) { - if (!strcasematch (rva (PSTR, hm, pd->Name - delta), "cygwin1.dll")) + if (!ascii_strcasematch (rva (PSTR, hm, pd->Name - delta), "cygwin1.dll")) continue; if (!fn) return (void *) "found it"; // just checking if executable used cygwin1.dll diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 8d7703e40..e013d0b74 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -1194,9 +1194,9 @@ out: { const char *p = strchr (path, '\0') - 4; if (p >= path && - (strcasematch (".exe", p) || - strcasematch (".bat", p) || - strcasematch (".com", p))) + (ascii_strcasematch (".exe", p) || + ascii_strcasematch (".bat", p) || + ascii_strcasematch (".com", p))) path_flags |= PATH_EXEC; } @@ -1562,20 +1562,21 @@ special_name (const char *s, int inc = 1) int n; const char *p = NULL; - if (strncasematch (s, "conin$", n = 5) - || strncasematch (s, "conout$", n = 7) - || strncasematch (s, "nul", n = 3) - || strncasematch (s, "aux", 3) - || strncasematch (s, "prn", 3) - || strncasematch (s, "con", 3)) + if (ascii_strncasematch (s, "conin$", n = 5) + || ascii_strncasematch (s, "conout$", n = 7) + || ascii_strncasematch (s, "nul", n = 3) + || ascii_strncasematch (s, "aux", 3) + || ascii_strncasematch (s, "prn", 3) + || ascii_strncasematch (s, "con", 3)) p = s + n; - else if (strncasematch (s, "com", 3) || strncasematch (s, "lpt", 3)) + else if (ascii_strncasematch (s, "com", 3) + || ascii_strncasematch (s, "lpt", 3)) strtoul (s + 3, (char **) &p, 10); if (p && (*p == '\0' || *p == '.')) return -1; return (strchr (s, '\0')[-1] == '.') - || (strpbrk (s, special_chars) && !strncasematch (s, "%2f", 3)); + || (strpbrk (s, special_chars) && !ascii_strncasematch (s, "%2f", 3)); } bool @@ -2890,7 +2891,7 @@ is_floppy (const char *dos) char dev[256]; if (!QueryDosDevice (dos, dev, 256)) return false; - return strncasematch (dev, "\\Device\\Floppy", 14); + return ascii_strncasematch (dev, "\\Device\\Floppy", 14); } extern "C" FILE * @@ -3468,7 +3469,7 @@ suffix_scan::has (const char *in_path, const suffix_info *in_suffixes) { /* Check if the extension matches a known extension */ for (const suffix_info *ex = in_suffixes; ex->name != NULL; ex++) - if (strcasematch (ext_here, ex->name)) + if (ascii_strcasematch (ext_here, ex->name)) { nextstate = SCAN_JUSTCHECK; suffixes = NULL; /* Has an extension so don't scan for one. */ @@ -3477,7 +3478,7 @@ suffix_scan::has (const char *in_path, const suffix_info *in_suffixes) } /* Didn't match. Use last resort -- .lnk. */ - if (strcasematch (ext_here, ".lnk")) + if (ascii_strcasematch (ext_here, ".lnk")) { nextstate = SCAN_HASLNK; suffixes = NULL; @@ -4173,7 +4174,7 @@ realpath (const char *path, char *resolved) if (!transparent_exe && real_path.known_suffix) { char *c = strrchr (real_path.normalized_path, '.'); - if (!c || !strcasematch (c, real_path.known_suffix)) + if (!c || !ascii_strcasematch (c, real_path.known_suffix)) tack_on = strlen (real_path.known_suffix); } diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index 67e064fb1..aee90753d 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -528,7 +528,7 @@ loop: risk, but we don't want to disable this behaviour for older OSes because it's still heavily used by some users. They have been warned. */ - if (!strcasematch (wstname, "WinSta0")) + if (!ascii_strcasematch (wstname, "WinSta0")) { char sid[128]; @@ -942,12 +942,12 @@ int av::fixup (const char *prog_arg, path_conv& real_path, const char *ext) { const char *p; - bool exeext = strcasematch (ext, ".exe"); - if (exeext && real_path.iscygexec () || strcasematch (ext, ".bat")) + bool exeext = ascii_strcasematch (ext, ".exe"); + if (exeext && real_path.iscygexec () || ascii_strcasematch (ext, ".bat")) return 0; if (!*ext && ((p = ext - 4) > real_path.get_win32 ()) - && (strcasematch (p, ".bat") || strcasematch (p, ".cmd") - || strcasematch (p, ".btm"))) + && (ascii_strcasematch (p, ".bat") || ascii_strcasematch (p, ".cmd") + || ascii_strcasematch (p, ".btm"))) return 0; while (1) { @@ -1034,7 +1034,7 @@ av::fixup (const char *prog_arg, path_conv& real_path, const char *ext) just_shell: if (!pgm) { - if (strcasematch (ext, ".com")) + if (ascii_strcasematch (ext, ".com")) break; pgm = (char *) "/bin/sh"; arg1 = NULL; diff --git a/winsup/cygwin/strace.cc b/winsup/cygwin/strace.cc index c29a8de2d..92d7fc742 100644 --- a/winsup/cygwin/strace.cc +++ b/winsup/cygwin/strace.cc @@ -167,7 +167,8 @@ strace::vsprntf (char *buf, const char *func, const char *infmt, va_list ap) p = pn; if (p != progname) strcpy (progname, p); - if ((p = strrchr (progname, '.')) != NULL && strcasematch (p, ".exe")) + if ((p = strrchr (progname, '.')) != NULL + && ascii_strcasematch (p, ".exe")) *p = '\000'; p = progname; char tmpbuf[20]; diff --git a/winsup/cygwin/string.h b/winsup/cygwin/string.h index cb870646e..ad262e82d 100644 --- a/winsup/cygwin/string.h +++ b/winsup/cygwin/string.h @@ -61,15 +61,10 @@ strechr (const char *s, int c) #ifdef __INSIDE_CYGWIN__ -/* Don't use. Not NLS aware. */ -#if 0 // Not NLS aware extern const char isalpha_array[]; -#undef strcasematch -#define strcasematch cygwin_strcasematch - static inline int -cygwin_strcasematch (const char *cs, const char *ct) +ascii_strcasematch (const char *cs, const char *ct) { register int __res; int d0, d1; @@ -95,11 +90,8 @@ cygwin_strcasematch (const char *cs, const char *ct) return __res; } -#undef strncasematch -#define strncasematch cygwin_strncasematch - static inline int -cygwin_strncasematch (const char *cs, const char *ct, size_t n) +ascii_strncasematch (const char *cs, const char *ct, size_t n) { register int __res; int d0, d1, d2; @@ -126,7 +118,7 @@ cygwin_strncasematch (const char *cs, const char *ct, size_t n) return __res; } -#else + #undef strcasecmp #define strcasecmp cygwin_strcasecmp int __stdcall cygwin_strcasecmp (const char *, const char *); @@ -137,7 +129,6 @@ int __stdcall cygwin_strncasecmp (const char *, const char *, size_t); #define strcasematch(s1,s2) (!cygwin_strcasecmp ((s1),(s2))) #define strncasematch(s1,s2,n) (!cygwin_strncasecmp ((s1),(s2),(n))) -#endif #undef strlwr #define strlwr cygwin_strlwr diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 32539aad2..1f5bc5fe5 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -1459,8 +1459,8 @@ rename_append_suffix (path_conv &pc, const char *path, size_t len, { char buf[len + 5]; - if (strcasematch (path + len - 4, ".lnk") - || strcasematch (path + len - 4, ".exe")) + if (ascii_strcasematch (path + len - 4, ".lnk") + || ascii_strcasematch (path + len - 4, ".exe")) len -= 4; stpcpy (stpncpy (buf, path, len), suffix); pc.check (buf, PC_SYM_NOFOLLOW); @@ -1529,8 +1529,8 @@ rename (const char *oldpath, const char *newpath) goto out; } if (oldpc.known_suffix - && (strcasematch (oldpath + olen - 4, ".lnk") - || strcasematch (oldpath + olen - 4, ".exe"))) + && (ascii_strcasematch (oldpath + olen - 4, ".lnk") + || ascii_strcasematch (oldpath + olen - 4, ".exe"))) old_explicit_suffix = true; nlen = strlen (newpath); @@ -1559,8 +1559,8 @@ rename (const char *oldpath, const char *newpath) goto out; } if (newpc.known_suffix - && (strcasematch (newpath + nlen - 4, ".lnk") - || strcasematch (newpath + nlen - 4, ".exe"))) + && (ascii_strcasematch (newpath + nlen - 4, ".lnk") + || ascii_strcasematch (newpath + nlen - 4, ".exe"))) new_explicit_suffix = true; /* This test is necessary in almost every case, so just do it once here. */ diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc index 97cd584dc..c91d77967 100644 --- a/winsup/cygwin/uinfo.cc +++ b/winsup/cygwin/uinfo.cc @@ -367,7 +367,7 @@ cygheap_user::env_logsrv (const char *name, size_t namelen) const char *mydomain = domain (); const char *myname = winname (); - if (!mydomain || strcasematch (myname, "SYSTEM")) + if (!mydomain || ascii_strcasematch (myname, "SYSTEM")) return almost_null; char logsrv[INTERNET_MAX_HOST_NAME_LENGTH + 3]; diff --git a/winsup/cygwin/winf.cc b/winsup/cygwin/winf.cc index 81c58db4f..924e60403 100644 --- a/winsup/cygwin/winf.cc +++ b/winsup/cygwin/winf.cc @@ -141,7 +141,7 @@ av::unshift (const char *what, int conv) { cygwin_conv_to_posix_path (what, buf); char *p = strchr (buf, '\0') - 4; - if (p > buf && strcasematch (p, ".exe")) + if (p > buf && ascii_strcasematch (p, ".exe")) *p = '\0'; what = buf; }