dlls/shlwapi PathIsValidChar

Ge van Geldorp gvg at reactos.com
Thu Oct 21 14:02:08 CDT 2004


Did this patch: http://www.winehq.org/hypermail/wine-patches/2004/09/0446.html
fall through the cracks or is it not acceptable?
Included against current CVS again below.

Changelog:
  Ge van Geldorp <gvg at reactos.com>
  - Implement PathIsValidCharA/W

Index: dlls/shlwapi/path.c
===================================================================
RCS file: /home/wine/wine/dlls/shlwapi/path.c,v
retrieving revision 1.48
diff -u -r1.48 path.c
--- dlls/shlwapi/path.c	5 Oct 2004 18:07:14 -0000	1.48
+++ dlls/shlwapi/path.c	21 Oct 2004 18:56:30 -0000
@@ -3989,3 +3989,101 @@
     return S_OK;
   return E_FAIL;
 }
+
+#define PATH_CHAR_CLASS_LETTER      0x0001
+#define PATH_CHAR_CLASS_ASTERIX     0x0002
+#define PATH_CHAR_CLASS_DOT         0x0004
+#define PATH_CHAR_CLASS_BACKSLASH   0x0008
+#define PATH_CHAR_CLASS_COLON       0x0010
+#define PATH_CHAR_CLASS_SEMICOLON   0x0020
+#define PATH_CHAR_CLASS_COMMA       0x0040
+#define PATH_CHAR_CLASS_SPACE       0x0080
+#define PATH_CHAR_CLASS_OTHER_VALID 0x0100
+#define PATH_CHAR_CLASS_DOUBLEQUOTE 0x0200
+
+/*************************************************************************
+ * PathIsValidCharAW     [internal]
+ *
+ * Check if a char is of a certain class
+ */
+static BOOL WINAPI PathIsValidCharAW(unsigned Ch, DWORD Class)
+{
+  static struct
+  {
+    char Ch;
+    DWORD Class;
+  } CharClass[] =
+  {
+    { ' ', PATH_CHAR_CLASS_SPACE },
+    { '!', PATH_CHAR_CLASS_OTHER_VALID },
+    { '"', PATH_CHAR_CLASS_DOUBLEQUOTE },
+    { '#', PATH_CHAR_CLASS_OTHER_VALID },
+    { '$', PATH_CHAR_CLASS_OTHER_VALID },
+    { '%', PATH_CHAR_CLASS_OTHER_VALID },
+    { '&', PATH_CHAR_CLASS_OTHER_VALID },
+    { '\'', PATH_CHAR_CLASS_OTHER_VALID },
+    { '(', PATH_CHAR_CLASS_OTHER_VALID },
+    { ')', PATH_CHAR_CLASS_OTHER_VALID },
+    { '*', PATH_CHAR_CLASS_ASTERIX },
+    { '+', PATH_CHAR_CLASS_OTHER_VALID },
+    { ',', PATH_CHAR_CLASS_COMMA },
+    { '-', PATH_CHAR_CLASS_OTHER_VALID },
+    { '.', PATH_CHAR_CLASS_DOT },
+    { ':', PATH_CHAR_CLASS_COLON },
+    { ';', PATH_CHAR_CLASS_SEMICOLON },
+    { '=', PATH_CHAR_CLASS_OTHER_VALID },
+    { '?', PATH_CHAR_CLASS_LETTER },
+    { '@', PATH_CHAR_CLASS_OTHER_VALID },
+    { '[', PATH_CHAR_CLASS_OTHER_VALID },
+    { '\\', PATH_CHAR_CLASS_BACKSLASH },
+    { ']', PATH_CHAR_CLASS_OTHER_VALID },
+    { '^', PATH_CHAR_CLASS_OTHER_VALID },
+    { '_', PATH_CHAR_CLASS_OTHER_VALID },
+    { '`', PATH_CHAR_CLASS_OTHER_VALID },
+    { '{', PATH_CHAR_CLASS_OTHER_VALID },
+    { '}', PATH_CHAR_CLASS_OTHER_VALID },
+    { '~', PATH_CHAR_CLASS_OTHER_VALID },
+    { 0x7f, PATH_CHAR_CLASS_OTHER_VALID }
+  };
+  unsigned Index;
+
+  if (('A' <= Ch && Ch <= 'Z') || ('a' <= Ch && Ch <= 'z'))
+  {
+    return (Class & PATH_CHAR_CLASS_LETTER);
+  }
+
+  if (('0' <= Ch && Ch <= '9') || 0x80 <= Ch)
+  {
+    return (Class & PATH_CHAR_CLASS_OTHER_VALID);
+  }
+
+  for (Index = 0; Index < sizeof(CharClass) / sizeof(CharClass[0]); Index++)
+  {
+    if (Ch == CharClass[Index].Ch)
+    {
+      return (Class & CharClass[Index].Class);
+    }
+  }
+
+  return FALSE;
+}
+
+/*************************************************************************
+ * @     [SHLWAPI.455]
+ *
+ * Check if an Ascii char is of a certain class
+ */
+BOOL WINAPI PathIsValidCharA(char Ch, DWORD Class)
+{
+  return PathIsValidCharAW((unsigned) Ch, Class);
+}
+
+/*************************************************************************
+ * @     [SHLWAPI.456]
+ *
+ * Check if an Unicode char is of a certain class
+ */
+BOOL WINAPI PathIsValidCharW(WCHAR Ch, DWORD Class)
+{
+  return PathIsValidCharAW((unsigned) Ch, Class);
+}
Index: dlls/shlwapi/shlwapi.spec
===================================================================
RCS file: /home/wine/wine/dlls/shlwapi/shlwapi.spec,v
retrieving revision 1.96
diff -u -r1.96 shlwapi.spec
--- dlls/shlwapi/shlwapi.spec	25 Sep 2004 00:29:30 -0000	1.96
+++ dlls/shlwapi/shlwapi.spec	21 Oct 2004 18:56:30 -0000
@@ -452,8 +452,8 @@
 452 stub -noname CharUpperNoDBCSW
 453 stub -noname CharLowerNoDBCSA
 454 stub -noname CharLowerNoDBCSW
-455 stub -noname PathIsValidCharA
-456 stub -noname PathIsValidCharW
+455 stdcall -noname PathIsValidCharA(long long)
+456 stdcall -noname PathIsValidCharW(long long)
 457 stub -noname GetLongPathNameWrapW
 458 stub -noname GetLongPathNameWrapA
 459 stdcall -noname SHExpandEnvironmentStringsA(str ptr long) kernel32.ExpandEnvironmentStringsA



More information about the wine-patches mailing list