fixed GetCurrentDirectoryA() to properly handle the case where the
caller only queries the required buffer size.
Modified: trunk/reactos/lib/kernel32/file/curdir.c
_____
Modified: trunk/reactos/lib/kernel32/file/curdir.c
--- trunk/reactos/lib/kernel32/file/curdir.c 2005-01-17 21:40:12 UTC
(rev 13103)
+++ trunk/reactos/lib/kernel32/file/curdir.c 2005-01-17 22:05:00 UTC
(rev 13104)
@@ -38,39 +38,51 @@
ANSI_STRING AnsiString;
UNICODE_STRING UnicodeString;
- /* initialize ansi string */
- AnsiString.Length = 0;
- AnsiString.MaximumLength = nBufferLength;
- AnsiString.Buffer = lpBuffer;
-
/* allocate buffer for unicode string */
UnicodeString.Length = 0;
UnicodeString.MaximumLength = nBufferLength * sizeof(WCHAR);
- UnicodeString.Buffer = RtlAllocateHeap (RtlGetProcessHeap (),
- 0,
-
UnicodeString.MaximumLength);
+ if (nBufferLength > 0)
+ {
+ UnicodeString.Buffer = RtlAllocateHeap
(RtlGetProcessHeap (),
+ 0,
+
UnicodeString.MaximumLength);
+ /* initialize ansi string */
+ AnsiString.Length = 0;
+ AnsiString.MaximumLength = nBufferLength;
+ AnsiString.Buffer = lpBuffer;
+ }
+ else
+ {
+ UnicodeString.Buffer = NULL;
+ }
/* get current directory */
UnicodeString.Length = RtlGetCurrentDirectory_U
(UnicodeString.MaximumLength,
UnicodeString.Buffer);
- DPRINT("UnicodeString.Buffer %S\n", UnicodeString.Buffer);
+ if (nBufferLength > 0)
+ {
+ DPRINT("UnicodeString.Buffer %wZ\n", &UnicodeString);
- /* convert unicode string to ansi (or oem) */
- if (bIsFileApiAnsi)
- RtlUnicodeStringToAnsiString (&AnsiString,
- &UnicodeString,
- FALSE);
+ /* convert unicode string to ansi (or oem) */
+ if (bIsFileApiAnsi)
+ RtlUnicodeStringToAnsiString (&AnsiString,
+ &UnicodeString,
+ FALSE);
+ else
+ RtlUnicodeStringToOemString (&AnsiString,
+ &UnicodeString,
+ FALSE);
+ DPRINT("AnsiString.Buffer %s\n", AnsiString.Buffer);
+
+ /* free unicode string */
+ RtlFreeHeap (RtlGetProcessHeap (),
+ 0,
+ UnicodeString.Buffer);
+ }
else
- RtlUnicodeStringToOemString (&AnsiString,
- &UnicodeString,
- FALSE);
- DPRINT("AnsiString.Buffer %s\n", AnsiString.Buffer);
-
- /* free unicode string */
- RtlFreeHeap (RtlGetProcessHeap (),
- 0,
- UnicodeString.Buffer);
-
+ {
+ AnsiString.Length = UnicodeString.Length /
sizeof(WCHAR);
+ }
return AnsiString.Length;
}