mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
Fix NSURL path on Windows for UNC paths
This commit is contained in:
parent
f0e33a48d5
commit
48c8a1a6a1
3 changed files with 29 additions and 13 deletions
|
@ -1,3 +1,9 @@
|
|||
2023-07-26 Frederik Seiffert <frederik@algoriddim.com>
|
||||
|
||||
* Source/NSURL.m:
|
||||
* Tests/base/NSURL/basic.m:
|
||||
Fix NSURL path on Windows for UNC paths.
|
||||
|
||||
2023-07-25 Frederik Seiffert <frederik@algoriddim.com>
|
||||
|
||||
* Headers/Foundation/NSFileManager.h:
|
||||
|
|
|
@ -1497,24 +1497,24 @@ static NSUInteger urlAlign;
|
|||
}
|
||||
|
||||
#if defined(_WIN32)
|
||||
/* On windows a file URL path may be of the form C:\xxx (ie we should
|
||||
* not insert the leading slash).
|
||||
/* On Windows a file URL path may be of the form C:\xxx or \\xxx,
|
||||
* and in both cases we should not insert the leading slash.
|
||||
* Also the vertical bar symbol may have been used instead of the
|
||||
* colon, so we need to convert that.
|
||||
*/
|
||||
if (myData->isFile == YES)
|
||||
{
|
||||
if (ptr[1] && isalpha(ptr[1]))
|
||||
{
|
||||
if (ptr[2] == ':' || ptr[2] == '|')
|
||||
{
|
||||
if (ptr[3] == '\0' || ptr[3] == '/' || ptr[3] == '\\')
|
||||
{
|
||||
ptr[2] = ':';
|
||||
ptr++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((ptr[1] && isalpha(ptr[1]))
|
||||
&& (ptr[2] == ':' || ptr[2] == '|')
|
||||
&& (ptr[3] == '\0' || ptr[3] == '/' || ptr[3] == '\\'))
|
||||
{
|
||||
ptr[2] = ':';
|
||||
ptr++; // remove leading slash
|
||||
}
|
||||
else if (ptr[1] == '\\' && ptr[2] == '\\')
|
||||
{
|
||||
ptr++; // remove leading slash
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return ptr;
|
||||
|
|
|
@ -105,6 +105,16 @@ int main()
|
|||
"File URL C:\\WINDOWS is file:///C:%%5CWINDOWS/");
|
||||
PASS_EQUAL([url resourceSpecifier], @"/C:%5CWINDOWS/",
|
||||
"resourceSpecifier of C:\\WINDOWS is /C:%5CWINDOWS/");
|
||||
|
||||
// UNC path
|
||||
url = [NSURL fileURLWithPath: @"\\\\SERVER\\SHARE\\"];
|
||||
str = [url path];
|
||||
PASS_EQUAL(str, @"\\\\SERVER\\SHARE\\",
|
||||
"Path of file URL \\\\SERVER\\SHARE\\ is \\\\SERVER\\SHARE\\");
|
||||
PASS_EQUAL([url description], @"file:///%5C%5CSERVER%5CSHARE%5C",
|
||||
"File URL \\\\SERVER\\SHARE\\ is file:///%5C%5CSERVER%5CSHARE%5C");
|
||||
PASS_EQUAL([url resourceSpecifier], @"/%5C%5CSERVER%5CSHARE%5C",
|
||||
"resourceSpecifier of \\\\SERVER\\SHARE\\ is /%5C%5CSERVER%5CSHARE%5C");
|
||||
#else
|
||||
url = [NSURL fileURLWithPath: @"/usr"];
|
||||
str = [url path];
|
||||
|
|
Loading…
Reference in a new issue