ntdll: Simplify the RtlIsDosDeviceName_U implementation.

This commit is contained in:
Alexandre Julliard 2008-10-29 15:21:51 +01:00
parent 6b4d22ca2c
commit 6be25f8cb1
1 changed files with 11 additions and 17 deletions

View File

@ -287,30 +287,24 @@ ULONG WINAPI RtlIsDosDeviceName_U( PCWSTR dos_name )
if (!strcmpiW( dos_name, consoleW ))
return MAKELONG( sizeof(conW), 4 * sizeof(WCHAR) ); /* 4 is length of \\.\ prefix */
return 0;
case ABSOLUTE_DRIVE_PATH:
case RELATIVE_DRIVE_PATH:
start = dos_name + 2; /* skip drive letter */
break;
default:
start = dos_name;
break;
}
end = dos_name + strlenW(dos_name) - 1;
while (end >= dos_name && *end == ':') end--; /* remove all trailing ':' */
/* find start of file name */
for (start = end; start >= dos_name; start--)
{
if (IS_SEPARATOR(start[0])) break;
/* check for ':' but ignore if before extension (for things like NUL:.txt) */
if (start[0] == ':' && start[1] != '.') break;
}
start++;
for (p = start; *p; p++) if (IS_SEPARATOR(*p)) start = p + 1;
/* truncate at extension and ':' */
for (end = start; *end; end++) if (*end == '.' || *end == ':') break;
end--;
/* remove extension */
if ((p = strchrW( start, '.' )))
{
end = p - 1;
if (end >= dos_name && *end == ':') end--; /* remove trailing ':' before extension */
}
/* remove trailing spaces */
while (end >= dos_name && *end == ' ') end--;
while (end >= start && *end == ' ') end--;
/* now we have a potential device name between start and end, check it */
switch(end - start + 1)