Eli Zaretskii <e...@gnu.org> skribis: >> From: l...@gnu.org (Ludovic Courtès) >> Date: Mon, 09 Jun 2014 21:42:36 +0200 >> >> Eli Zaretskii <e...@gnu.org> skribis: >> >> > 3. load.test fails: >> > >> > FAIL: load.test: search-path for "foo.scm" yields "dir1/foo.scm" >> > >> > (The messages are misleading: "yields" should be "should yield".) >> > >> > The test fails because: >> > >> > . it compares file names with equal?, which fails when Windows >> > file names with mixed forward and backslashes are used, and/or >> > when the files differ but for letter case >> > >> > . the expected result uses a relative file name of temp-dir, while >> > search-path returns absolute file names >> > >> > Fixed by using "/" to create a file name from its parts in load.c: >> > >> > --- libguile/load.c~ 2014-02-28 23:01:27 +0200 >> > +++ libguile/load.c 2014-06-08 13:27:24 +0300 >> > @@ -452,11 +452,15 @@ scm_c_string_has_an_ext (char *str, size >> > return 0; >> > } >> > >> > +#if 0 >> > #ifdef __MINGW32__ >> > #define FILE_NAME_SEPARATOR_STRING "\\" >> > #else >> > #define FILE_NAME_SEPARATOR_STRING "/" >> > #endif >> > +#else >> > +#define FILE_NAME_SEPARATOR_STRING "/" >> > +#endif >> > >> > static int >> > is_file_name_separator (SCM c) >> > >> > I don't see any reasons to use the backslashes when constructing >> > Windows file names. Unless someone can tell why using backslashes >> > is a good idea, I propose to remove the Windows setting of >> > FILE_NAME_SEPARATOR_STRING. >> >> I’m confused: this was added in 4bab7f01 precisely to support MinGW or >> Windows. Similarly, boot-9.scm has ‘file-name-separator-string’ and >> related stuff. This was the result of the discussion at >> <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=10474#89>. > > Sorry, that's my fault: I didn't explain the problem in enough detail. > > There's nothing wrong with the 4bab7f01 commit per se (and you will > see that its only part that I changed is the definition of > FILE_NAME_SEPARATOR_STRING for MinGW). The problem is not in that > commit, it is elsewhere: in Scheme code, in this case in the test > suite, that compares file names as simple strings. Such comparisons > fail if the file names differ by the style of directory separators: > one uses forward slashes, the other backslashes, or some mix thereof. > > Now, FILE_NAME_SEPARATOR_STRING is used only for constructing file > names from their parts. It is not used for testing a particular > file-name character for being a directory separator. Therefore, we > can discard the separate definition of FILE_NAME_SEPARATOR_STRING for > Windows, and use "/" on all platforms. This makes the problem of > comparing file names easier, and in particular lets Guile pass > load.test. But it doesn't solve the problem entirely.
OK. This and your other message clarify things, thanks. > To solve this problem completely, we need a function that > canonicalizes a file name wrt directory separators -- converts all > backslashes to forward slashes. Does Guile have such a function? My understanding of your other message is that you now advocate trying hard to stick to slashes instead of backslashes, in which case a file name canonicalization function is practically unnecessary, right? Thanks, Ludo’.