- npipe.c:
* Use RtlPrefixUnicodeString instead of RtlPrefixString with casts.
* Check results of RtlCreateUnicodeString and RtlPrefixUnicodeString, return FALSE if they fail and set an appropriate last error.
* Free the string created with RtlCreateUnicodeString instead of leaking memory.
* Fix a path type check (RtlPathTypeUncAbsolute instead of RtlPathTypeRootLocalDevice).
- path.c: I prefer seeing the default case at the end of the switch (no functional changes).
[NTOS:MM]
- Use RtlPrefixUnicodeString instead of RtlPrefixString with casts.
[RTL]
- RtlPrefixString acts on general PSTRINGs (which are not UNICODE).
- Remove extra spaces between names of functions and parentheses.
- Clarify the fact that we run over characters.
svn path=/trunk/; revision=60085
/* Start by making a unicode string of the name */
TRACE("Sent path: %S\n", lpNamedPipeName);
/* Start by making a unicode string of the name */
TRACE("Sent path: %S\n", lpNamedPipeName);
- RtlCreateUnicodeString(&NamedPipeName, lpNamedPipeName);
+ if (!RtlCreateUnicodeString(&NamedPipeName, lpNamedPipeName))
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
NameLength = NamedPipeName.Length / sizeof(WCHAR);
/* All slashes must become backslashes */
NameLength = NamedPipeName.Length / sizeof(WCHAR);
/* All slashes must become backslashes */
{
/* Make sure it's a valid prefix */
RtlInitUnicodeString(&PipePrefix, L"\\\\.\\pipe\\");
{
/* Make sure it's a valid prefix */
RtlInitUnicodeString(&PipePrefix, L"\\\\.\\pipe\\");
- RtlPrefixString((PANSI_STRING)&PipePrefix, (PANSI_STRING)&NewName, TRUE);
+ if (!RtlPrefixUnicodeString(&PipePrefix, &NewName, TRUE))
+ {
+ /* The name is invalid */
+ WARN("Invalid name!\n");
+ RtlFreeUnicodeString(&NamedPipeName);
+ BaseSetLastNTError(STATUS_OBJECT_PATH_SYNTAX_BAD);
+ return FALSE;
+ }
/* Move past it */
NewName.Buffer += 9;
/* Move past it */
NewName.Buffer += 9;
TRACE("NewName: %wZ\n", &NewName);
RtlInitUnicodeString(&DevicePath, L"\\DosDevices\\pipe\\");
}
TRACE("NewName: %wZ\n", &NewName);
RtlInitUnicodeString(&DevicePath, L"\\DosDevices\\pipe\\");
}
- else if (Type == RtlPathTypeRootLocalDevice)
+ else if (Type == RtlPathTypeUncAbsolute)
{
/* The path is \\server\\pipe\name; find the pipename itself */
p = &NewName.Buffer[2];
{
/* The path is \\server\\pipe\name; find the pipename itself */
p = &NewName.Buffer[2];
{
/* The name is invalid */
WARN("Invalid name!\n");
{
/* The name is invalid */
WARN("Invalid name!\n");
+ RtlFreeUnicodeString(&NamedPipeName);
BaseSetLastNTError(STATUS_OBJECT_PATH_SYNTAX_BAD);
return FALSE;
}
BaseSetLastNTError(STATUS_OBJECT_PATH_SYNTAX_BAD);
return FALSE;
}
else
{
WARN("Invalid path type\n");
else
{
WARN("Invalid path type\n");
+ RtlFreeUnicodeString(&NamedPipeName);
BaseSetLastNTError(STATUS_OBJECT_PATH_SYNTAX_BAD);
return FALSE;
}
BaseSetLastNTError(STATUS_OBJECT_PATH_SYNTAX_BAD);
return FALSE;
}
WaitPipeInfo = RtlAllocateHeap(RtlGetProcessHeap(), 0, WaitPipeInfoSize);
if (WaitPipeInfo == NULL)
{
WaitPipeInfo = RtlAllocateHeap(RtlGetProcessHeap(), 0, WaitPipeInfoSize);
if (WaitPipeInfo == NULL)
{
+ RtlFreeUnicodeString(&NamedPipeName);
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
{
/* Fail; couldn't open */
WARN("Status: %lx\n", Status);
{
/* Fail; couldn't open */
WARN("Status: %lx\n", Status);
- BaseSetLastNTError(Status);
- RtlFreeUnicodeString(&NamedPipeName);
RtlFreeHeap(RtlGetProcessHeap(), 0, WaitPipeInfo);
RtlFreeHeap(RtlGetProcessHeap(), 0, WaitPipeInfo);
+ RtlFreeUnicodeString(&NamedPipeName);
+ BaseSetLastNTError(Status);
{
/* Failure to wait on the pipe */
WARN("Status: %lx\n", Status);
{
/* Failure to wait on the pipe */
WARN("Status: %lx\n", Status);
- BaseSetLastNTError (Status);
+ BaseSetLastNTError(Status);
/* Check what kind of path this is and how many slashes to skip */
switch (RtlDetermineDosPathNameType_U(Path))
{
/* Check what kind of path this is and how many slashes to skip */
switch (RtlDetermineDosPathNameType_U(Path))
{
+ case RtlPathTypeUncAbsolute:
+ case RtlPathTypeLocalDevice:
+ {
+ /* Keep going until we bypass the path indicators */
+ for (ReturnPath = Path + 2, i = 2; (i > 0) && (*ReturnPath); ReturnPath++)
+ {
+ /* We look for 2 slashes, so keep at it until we find them */
+ if ((*ReturnPath == L'\\') || (*ReturnPath == L'/')) i--;
+ }
+
+ return ReturnPath;
+ }
+
case RtlPathTypeDriveAbsolute:
return Path + 3;
case RtlPathTypeDriveAbsolute:
return Path + 3;
case RtlPathTypeRootLocalDevice:
default:
return NULL;
case RtlPathTypeRootLocalDevice:
default:
return NULL;
-
- case RtlPathTypeUncAbsolute:
- case RtlPathTypeLocalDevice:
-
- /* Keep going until we bypass the path indicators */
- for (ReturnPath = Path + 2, i = 2; (i > 0) && (*ReturnPath); ReturnPath++)
- {
- /* We look for 2 slashes, so keep at it until we find them */
- if ((*ReturnPath == L'\\') || (*ReturnPath == L'/')) i--;
- }
-
- return ReturnPath;
BOOLEAN
NTAPI
RtlPrefixString(
BOOLEAN
NTAPI
RtlPrefixString(
- PCANSI_STRING String1,
- PCANSI_STRING String2,
+ PSTRING String1,
+ PSTRING String2,
BOOLEAN CaseInsensitive
);
BOOLEAN CaseInsensitive
);
BOOLEAN
NTAPI
RtlPrefixString(
BOOLEAN
NTAPI
RtlPrefixString(
- PANSI_STRING String1,
- PANSI_STRING String2,
- BOOLEAN CaseInsensitive)
+ PSTRING String1,
+ PSTRING String2,
+ BOOLEAN CaseInsensitive)
- if (String2->Length < String1->Length) return FALSE;
+ if (String2->Length < String1->Length)
+ return FALSE;
- Length = String1->Length;
+ NumChars = String1->Length;
pc1 = String1->Buffer;
pc2 = String2->Buffer;
pc1 = String1->Buffer;
pc2 = String2->Buffer;
- if (RtlUpperChar (*pc1++) != RtlUpperChar (*pc2++))
+ if (RtlUpperChar(*pc1++) != RtlUpperChar(*pc2++))
{
if (*pc1++ != *pc2++)
return FALSE;
{
if (*pc1++ != *pc2++)
return FALSE;
{
PWCHAR pc1;
PWCHAR pc2;
{
PWCHAR pc1;
PWCHAR pc2;
if (String2->Length < String1->Length)
return FALSE;
if (String2->Length < String1->Length)
return FALSE;
InLoadOrderLinks);
/* Check if it matches */
InLoadOrderLinks);
/* Check if it matches */
- if (RtlPrefixString((PSTRING)&ForwarderName,
- (PSTRING)&LdrEntry->BaseDllName,
- TRUE))
+ if (RtlPrefixUnicodeString(&ForwarderName,
+ &LdrEntry->BaseDllName,
+ TRUE))
{
/* Get the forwarder export directory */
ForwardExportDirectory =
{
/* Get the forwarder export directory */
ForwardExportDirectory =