You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Martin Hauner <ma...@gmx.net> on 2009/10/25 10:33:50 UTC

dirent_uri-test failure on Windows ...?

Hi,

I get a test failure with my mingw build in dirent_uri-test: 
test_dirent_get_absolute.

After stepping into the code to find the problem, which is a drive letter case 
mismatch again, I thought this should fail with a visual studio build too (vs 
2008 express). And indeed it does.

The reason seems to be that "everyone" thinks the drive letters should be upper 
case (there are various comments in svn and apr that the letter must be upper 
case) but GetFullPathNameW returns a path with a lower case drive letter.

That's just an observation. I never cared about lower or upper case drive 
letters before. So I have no idea why this is so and what is right ;-))

The issue is inside apr but I wonder if anyone else is getting this?


I'm not sure if anyone can follow this, but here is what's happening inside the 
test and apr:

Test Case: dirent_uri-test.c (test_dirent_get_absolute, Line 2220)

{ "C:abc", "@/abc" },

expect_abs: 0x3dda98 "C:/Development/mingw/svn-trunk/subversion/tests/cmdline/abc"

svn_dirent_get_absolute
apr_filepath_merge (file_io/win32/filepath.c, apr 1.3)
   Line 362
   apr_filepath_root  => addroot = "C:", addtype = APR_EINCOMPLETE
   Line 424
   filepath_drive_get => lowercase drive letter (GetFullPathNameW)
   Line 437
   apr_filepath_root  => baseroot = "c:/", basetype = APR_EABSOLUTE
   Line 537
   else if (addroot[0] && addroot[1] == ':' && !addroot[2])
   Line 543
   if (addroot[0] == baseroot[0] && baseroot[1] == ':') {

here it fails because the case does not match!

and svn reports an
   SVN_ERR_BAD_FILENAME, "Couldn't determine absolute path of 'C:abc'"

If I change the case in gdb by hand the tests succeeds.

-- 
Martin

Subcommander 2.0.0 Beta 5 - http://subcommander.tigris.org
a Win32/Unix/MacOSX subversion GUI client & diff/merge tool.

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2411150

RE: dirent_uri-test failure on Windows ...?

Posted by Bert Huijben <rh...@sharpsvn.net>.
> -----Original Message-----
> From: Martin Hauner [mailto:martin.hauner@gmx.net]
> Sent: zondag 25 oktober 2009 11:34
> To: dev@subversion.tigris.org
> Subject: dirent_uri-test failure on Windows ...?
> 
> Hi,
> 
> I get a test failure with my mingw build in dirent_uri-test:
> test_dirent_get_absolute.
> 
> After stepping into the code to find the problem, which is a drive
> letter case
> mismatch again, I thought this should fail with a visual studio build
> too (vs
> 2008 express). And indeed it does.
> 
> The reason seems to be that "everyone" thinks the drive letters should
> be upper
> case (there are various comments in svn and apr that the letter must be
> upper
> case) but GetFullPathNameW returns a path with a lower case drive
> letter.

Ok.. I found a way to reproduce getting a lower case path. (I never saw this
issue before)

Open a cmd.exe

Type
> cd c:\Windows

And your c: cwd will be "c:\Windows" (lower case 'c')

Type 
> cd C:\Windows\System32

And your c: cwd will be "C:\Windows\System32" (upper case 'C')

If you just use "d:' to switch drives, you will never get a lower case drive
letter.


The reason you see this is most likely that you use a different shell, or it
would have been reported years ago.


I assume this will have to be fixed in apr and not in Subversion, as apr
returns an error here. It would help us if apr would normalize its output to
upper case here, instead of returning the right 'as is' value.

	Bert

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2411238

RE: dirent_uri-test failure on Windows ...?

Posted by Bert Huijben <rh...@sharpsvn.net>.
> -----Original Message-----
> From: Martin Hauner [mailto:martin.hauner@gmx.net]
> Sent: zondag 25 oktober 2009 11:34
> To: dev@subversion.tigris.org
> Subject: dirent_uri-test failure on Windows ...?
> 
> Hi,
> 
> I get a test failure with my mingw build in dirent_uri-test:
> test_dirent_get_absolute.
> 
> After stepping into the code to find the problem, which is a drive
> letter case
> mismatch again, I thought this should fail with a visual studio build
> too (vs
> 2008 express). And indeed it does.
> 
> The reason seems to be that "everyone" thinks the drive letters should
> be upper
> case (there are various comments in svn and apr that the letter must be
> upper
> case) but GetFullPathNameW returns a path with a lower case drive
> letter.
> 
> That's just an observation. I never cared about lower or upper case
> drive
> letters before. So I have no idea why this is so and what is right ;-))
> 
> The issue is inside apr but I wonder if anyone else is getting this?
> 
> 
> I'm not sure if anyone can follow this, but here is what's happening
> inside the
> test and apr:
> 
> Test Case: dirent_uri-test.c (test_dirent_get_absolute, Line 2220)
> 
> { "C:abc", "@/abc" },
> 
> expect_abs: 0x3dda98 "C:/Development/mingw/svn-
> trunk/subversion/tests/cmdline/abc"
> 
> svn_dirent_get_absolute
> apr_filepath_merge (file_io/win32/filepath.c, apr 1.3)
>    Line 362
>    apr_filepath_root  => addroot = "C:", addtype = APR_EINCOMPLETE
>    Line 424
>    filepath_drive_get => lowercase drive letter (GetFullPathNameW)
>    Line 437
>    apr_filepath_root  => baseroot = "c:/", basetype = APR_EABSOLUTE
>    Line 537
>    else if (addroot[0] && addroot[1] == ':' && !addroot[2])
>    Line 543
>    if (addroot[0] == baseroot[0] && baseroot[1] == ':') {
> 
> here it fails because the case does not match!
> 
> and svn reports an
>    SVN_ERR_BAD_FILENAME, "Couldn't determine absolute path of 'C:abc'"
> 
> If I change the case in gdb by hand the tests succeeds.

Added an XFail test on this specific issue in r40370.

	Bert

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2414367