Hugs, Mac OS X 10.1.5, and pathnames
Hamilton Richards
ham@cs.utexas.edu
Fri, 13 Sep 2002 13:41:04 -0500
I originally wrote:
> > In OS X, pathnames have two distinct syntaxes. The GUI uses the pre-X
>> syntax, in which a pathname begins with a volume name and the
>> separator is `:', as in
>>
>> Macintosh HD:Users:ham:Documents:whatever.hs
>>
>> In the Darwin (i.e., unix) command-line "underworld", a pathname
>> begins with /Volumes, spaces are escaped with `\', and the separator
>> is `/', as in
>>
>> /Volumes/Macintosh\ HD/Users/ham/Documents/whatever.hs
>>
>> When you drag a file icon onto the command line, Terminal does the
>> right thing-- it converts the pathname from the GUI syntax to the
>> Darwin syntax, and utilities such as more work just as they should.
>>
>> Hugs, however, doesn't do so well. For example,
>>
>> Prelude> :l /Volumes/Macintosh\ HD/Users/ham/Documents/whatever.hs
>> Reading file "/Volumes/Macintosh\":
>> ERROR "/Volumes/Macintosh\" - Unable to open file "/Volumes/Macintosh\"
>>
>> Quoting the pathname changes the problem, but doesn't cure it:
>>
>> Prelude> :l "/Volumes/Macintosh\ HD/Users/ham/Documents/whatever.hs"
>> ERROR - Missing `\' terminating string literal gap
>>
>> Apparently what's confusing Hugs is the `\', because removing it
>> cures the problem:
>>
>> Prelude> :l "/Volumes/Macintosh HD/Users/ham/Documents/whatever.hs"
>> Reading file "/Volumes/Macintosh HD/Users/ham/Documents/whatever.hs":
>>
>> Is this problem unavoidable, or is it just an oversight?
At 6:02 AM +0100 9/1/02, Glynn Clements replied:
>
>The backslash isn't actually part of the pathname; it's added to
>prevent the shell from splitting the pathname into multiple arguments.
>The shell converts the backslash-space sequence into a space.
>
>The same issue arises in other languages; e.g. in C,
>
> const char *name = "/Volumes/Macintosh
>HD/Users/ham/Documents/whatever.hs";
> FILE *fp = fopen(name, "r");
>
>would work, but including the backslash would break it.
>
>--
>Glynn Clements <glynn.clements@virgin.net>
>
I do actually understand that the backslash isn't part of the
pathname. My question is whether there's any reason Hugs couldn't
treat backslashes in its command line as C shells do.
I suspect it's just something no one thought about, because spaces
are uncommon in unix file names.
--Ham
--
------------------------------------------------------------------
Hamilton Richards Department of Computer Sciences
Senior Lecturer The University of Texas at Austin
512-471-9525 1 University Station C0500
Taylor Hall 5.138 Austin, Texas 78712-1188
ham@cs.utexas.edu hrichrds@swbell.net
------------------------------------------------------------------