This commit sounds like FilenameA2W is some evil we should get rid of as soon as possible, otherwise it takes over the world.

In fact, FilenameA2W is the same stuff which you just unwrapped, so instead of 1 line, there are 20 lines now. The only thing would be setting correct LastError, but for some reason I think Wine did it right too (they have tests).

In my opinion, it makes sense to either rewrite the buggy code (buggy being really buggy or questionable origin, if code comes from Wine it doesn't automatically mean it's buggy), or let the shared code be shared and just update it from the latest Wine.

WBR,
Aleksey Bragin.

On Feb 22, 2011, at 9:43 PM, [email protected] wrote:

Author: pschweitzer
Date: Tue Feb 22 18:43:38 2011
New Revision: 50867

URL: http://svn.reactos.org/svn/reactos?rev=50867&view=rev
Log:
[KERNEL32]
Don't make GetBinaryTypeA() rely on Wine's strings conversions functions

Modified:
    trunk/reactos/dll/win32/kernel32/file/bintype.c

Modified: trunk/reactos/dll/win32/kernel32/file/bintype.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/ kernel32/file/bintype.c?rev=50867&r1=50866&r2=50867&view=diff ====================================================================== ======== --- trunk/reactos/dll/win32/kernel32/file/bintype.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/file/bintype.c [iso-8859-1] Tue Feb 22 18:43:38 2011
@@ -301,23 +301,43 @@
  */
 BOOL
 WINAPI
-GetBinaryTypeA (
-    LPCSTR  lpApplicationName,
-    LPDWORD lpBinaryType
-    )
+GetBinaryTypeA(IN LPCSTR lpApplicationName,
+               OUT LPDWORD lpBinaryType)
 {
-  PWCHAR ApplicationNameW;
-
-  if(!lpApplicationName || !lpBinaryType)
-  {
-    SetLastError(ERROR_INVALID_PARAMETER);
-    return FALSE;
-  }
-
-  if (!(ApplicationNameW = FilenameA2W(lpApplicationName, FALSE)))
-     return FALSE;
-
-  return GetBinaryTypeW(ApplicationNameW, lpBinaryType);
+    ANSI_STRING ApplicationNameString;
+    UNICODE_STRING ApplicationNameW;
+    BOOL StringAllocated = FALSE, Result;
+    NTSTATUS Status;
+
+    RtlInitAnsiString(&ApplicationNameString, lpApplicationName);
+
+ if (ApplicationNameString.Length * sizeof(WCHAR) >= NtCurrentTeb()->StaticUnicodeString.MaximumLength)
+    {
+        StringAllocated = TRUE;
+ Status = RtlAnsiStringToUnicodeString(&ApplicationNameW, &ApplicationNameString, TRUE);
+    }
+    else
+    {
+ Status = RtlAnsiStringToUnicodeString(&(NtCurrentTeb()- >StaticUnicodeString), &ApplicationNameString, FALSE);
+    }
+
+    if (!NT_SUCCESS(Status))
+    {
+        BaseSetLastNTError(Status);
+        return FALSE;
+    }
+
+    if (StringAllocated)
+    {
+ Result = GetBinaryTypeW(ApplicationNameW.Buffer, lpBinaryType);
+        RtlFreeUnicodeString(&ApplicationNameW);
+    }
+    else
+    {
+ Result = GetBinaryTypeW(NtCurrentTeb()- >StaticUnicodeString.Buffer, lpBinaryType);
+    }
+
+    return Result;
 }

 /* EOF */




_______________________________________________
Ros-dev mailing list
[email protected]
http://www.reactos.org/mailman/listinfo/ros-dev

Reply via email to