X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/9bfb11f906e129d121bf46790c7fd5d5fcde406b..54a72868e6b4d3001918d57884c8cf74ec8f9b8b:/src/w32.c diff --git a/src/w32.c b/src/w32.c index 9fe88833b4..9ad82c7a23 100644 --- a/src/w32.c +++ b/src/w32.c @@ -1,6 +1,6 @@ /* Utility and Unix shadow routines for GNU Emacs on the Microsoft W32 API. Copyright (C) 1994, 1995, 2000, 2001, 2002, 2003, 2004, - 2005, 2006 Free Software Foundation, Inc. + 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -32,6 +32,7 @@ Boston, MA 02110-1301, USA. #include #include #include +#include /* for _mbspbrk */ /* must include CRT headers *before* config.h */ @@ -739,7 +740,7 @@ get_long_basename (char * name, char * buf, int size) int len = 0; /* must be valid filename, no wild cards or other invalid characters */ - if (strpbrk (name, "*?|<>\"")) + if (_mbspbrk (name, "*?|<>\"")) return 0; dir_handle = FindFirstFile (name, &find_data); @@ -814,7 +815,7 @@ is_unc_volume (const char *filename) if (!IS_DIRECTORY_SEP (ptr[0]) || !IS_DIRECTORY_SEP (ptr[1]) || !ptr[2]) return 0; - if (strpbrk (ptr + 2, "*?|<>\"\\/")) + if (_mbspbrk (ptr + 2, "*?|<>\"\\/")) return 0; return 1; @@ -2386,8 +2387,12 @@ stat (const char * path, struct stat * buf) } name = (char *) map_w32_filename (path, &path); - /* must be valid filename, no wild cards or other invalid characters */ - if (strpbrk (name, "*?|<>\"")) + /* Must be valid filename, no wild cards or other invalid + characters. We use _mbspbrk to support multibyte strings that + might look to strpbrk as if they included literal *, ?, and other + characters mentioned below that are disallowed by Windows + filesystems. */ + if (_mbspbrk (name, "*?|<>\"")) { errno = ENOENT; return -1;