[KERNEL32]
authorPierre Schweitzer <pierre@reactos.org>
Tue, 22 Feb 2011 18:56:46 +0000 (18:56 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Tue, 22 Feb 2011 18:56:46 +0000 (18:56 +0000)
Don't make FindFirstChangeNotificationA() rely on Wine's strings conversions functions

svn path=/trunk/; revision=50868

reactos/dll/win32/kernel32/file/cnotify.c

index 3f6420b..37814a1 100644 (file)
@@ -9,10 +9,14 @@
  *                  Created 01/11/98
  */
 
+/* INCLUDES *****************************************************************/
+
 #include <k32.h>
 #define NDEBUG
 #include <debug.h>
 
+/* FUNCTIONS ****************************************************************/
+
 /*
  * @implemented
  */
@@ -35,20 +39,30 @@ FindCloseChangeNotification (HANDLE hChangeHandle)
  */
 HANDLE
 WINAPI
-FindFirstChangeNotificationA (
-       LPCSTR  lpPathName,
-       BOOL    bWatchSubtree,
-       DWORD   dwNotifyFilter
-       )
+FindFirstChangeNotificationA(IN LPCSTR lpPathName,
+                             IN BOOL bWatchSubtree,
+                             IN DWORD dwNotifyFilter)
 {
-       PWCHAR PathNameW;
-
-   if (!(PathNameW = FilenameA2W(lpPathName, FALSE)))
-      return INVALID_HANDLE_VALUE;
-
-   return FindFirstChangeNotificationW (PathNameW ,
-                                               bWatchSubtree,
-                                               dwNotifyFilter);
+    NTSTATUS Status;
+    ANSI_STRING PathNameString;
+
+    RtlInitAnsiString(&PathNameString, lpPathName);
+    Status = RtlAnsiStringToUnicodeString(&(NtCurrentTeb()->StaticUnicodeString), &PathNameString, FALSE);
+    if (!NT_SUCCESS(Status))
+    {
+        if (Status != STATUS_BUFFER_OVERFLOW)
+        {
+            SetLastError(ERROR_FILENAME_EXCED_RANGE);
+        }
+        else
+        {
+            BaseSetLastNTError(Status);
+        }
+        return INVALID_HANDLE_VALUE;
+    }
+
+    return FindFirstChangeNotificationW(NtCurrentTeb()->StaticUnicodeString.Buffer,
+                                        bWatchSubtree, dwNotifyFilter);
 }