diff options
author | Christopher Faylor <me@cgf.cx> | 2003-08-17 16:33:15 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2003-08-17 16:33:15 +0000 |
commit | 293ce8104da2b49fde7682913264339df7b70cd4 (patch) | |
tree | 7004923c4a075e7936da231ee733d0ad1c38c6e7 /winsup/cygwin/path.cc | |
parent | 597b518cb9f90c37bff84a44edf503a9a37d50f4 (diff) | |
download | cygnal-293ce8104da2b49fde7682913264339df7b70cd4.tar.gz cygnal-293ce8104da2b49fde7682913264339df7b70cd4.tar.bz2 cygnal-293ce8104da2b49fde7682913264339df7b70cd4.zip |
* path.cc (special_name): Accommodate all special names with extensions.
Diffstat (limited to 'winsup/cygwin/path.cc')
-rw-r--r-- | winsup/cygwin/path.cc | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 7241994a2..bffddce9b 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -1418,24 +1418,21 @@ special_name (const char *s, int inc = 1) if (strpbrk (s, special_chars)) return !strncasematch (s, "%2f", 3); - // FIXME: add com0 and {com,lpt}N.* - if (strcasematch (s, "nul") - || strncasematch (s, "nul.", 4) - || strcasematch (s, "aux") - || strncasematch (s, "aux.", 4) - || strcasematch (s, "prn") - || strncasematch (s, "prn.", 4) - || strcasematch (s, "con") - || strncasematch (s, "con.", 4) - || strcasematch (s, "conin$") - || strcasematch (s, "conout$")) + const char *p; + if (strcasematch (s, "conin$") || strcasematch (s, "conout$")) return -1; - if (!strncasematch (s, "com", 3) - && !strncasematch (s, "lpt", 3)) + + if (strncasematch (s, "nul", 3) + || strncasematch (s, "aux", 3) + || strncasematch (s, "prn", 3) + || strncasematch (s, "con", 3)) + p = s + 3; + else if (strncasematch (s, "com", 3) || strncasematch (s, "lpt", 3)) + (void) strtoul (s + 3, (char **) &p, 10); + else return false; - char *p; - (void) strtoul (s + 3, &p, 10); - return -(*p == '\0'); + + return (*p == '\0' || *p == '.') ? -1 : false; } bool |