[CRT]
[reactos.git] / reactos / dll / win32 / user32 / misc / rtlstr.c
1 /*
2 * PROJECT: ReactOS user32.dll
3 * FILE: lib/user32/misc/rtlstr.c
4 * PURPOSE: Large Strings
5 * PROGRAMMER:
6 * UPDATE HISTORY:
7 *
8 */
9
10 /* INCLUDES ******************************************************************/
11
12 #include <user32.h>
13
14 #include <wine/debug.h>
15
16 WINE_DEFAULT_DEBUG_CHANNEL(user32);
17
18 /* FUNCTIONS *****************************************************************/
19 VOID
20 NTAPI
21 RtlInitLargeAnsiString(IN OUT PLARGE_ANSI_STRING DestinationString,
22 IN PCSZ SourceString,
23 IN INT Unknown)
24 {
25 ULONG DestSize;
26
27 if (SourceString)
28 {
29 DestSize = strlen(SourceString);
30 DestinationString->Length = DestSize;
31 DestinationString->MaximumLength = DestSize + sizeof(CHAR);
32 }
33 else
34 {
35 DestinationString->Length = 0;
36 DestinationString->MaximumLength = 0;
37 }
38
39 DestinationString->Buffer = (PCHAR)SourceString;
40 DestinationString->bAnsi = TRUE;
41 }
42
43 VOID
44 NTAPI
45 RtlInitLargeUnicodeString(IN OUT PLARGE_UNICODE_STRING DestinationString,
46 IN PCWSTR SourceString,
47 IN INT Unknown)
48 {
49 ULONG DestSize;
50
51 if (SourceString)
52 {
53 DestSize = wcslen(SourceString) * sizeof(WCHAR);
54 DestinationString->Length = DestSize;
55 DestinationString->MaximumLength = DestSize + sizeof(WCHAR);
56 }
57 else
58 {
59 DestinationString->Length = 0;
60 DestinationString->MaximumLength = 0;
61 }
62
63 DestinationString->Buffer = (PWSTR)SourceString;
64 DestinationString->bAnsi = FALSE;
65 }
66
67 BOOL
68 NTAPI
69 RtlLargeStringToUnicodeString( PUNICODE_STRING DestinationString,
70 PLARGE_STRING SourceString)
71 {
72 ANSI_STRING AnsiString;
73
74 RtlInitUnicodeString(DestinationString, NULL);
75 if (DestinationString && SourceString && SourceString->bAnsi)
76 {
77 RtlInitAnsiString(&AnsiString, (LPSTR)SourceString->Buffer);
78 return NT_SUCCESS(RtlAnsiStringToUnicodeString(DestinationString, &AnsiString, TRUE));
79 }
80 else if (DestinationString && SourceString)
81 {
82 return RtlCreateUnicodeString(DestinationString, SourceString->Buffer);
83 }
84 else
85 return FALSE;
86 }