This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: Re: Handling special characters (\/:*?"<>|) gracefully

mwoehlke wrote:
> (Speaking of case sensitivity, is it a Windows limitation that Cygwin
> can't do this? I'm pretty sure it isn't an NTFS limitation,
> as Interix has true case-sensitivity.)

You are right--NTFS can handle it, although the normal Windows
file and directory handling routines cannot. Managed mounts
deal with the problem by encoding the actual names stored in
the underlying file system. I experimented with this approach
at one point, but didn't like the issues caused by using up
to 3 characters to represent each character in the path name.
The last I checked, there were still some 256-character limits
floating around in Windows (at least in the non-Unicode APIs).
I haven't looked into the current solution--perhaps it deals
with this in a way I didn't consider.

Another approach would have been to provide replacements for
certain Windows library functions that use native NT functions
internally to get around the limitations. I believe the total
list of needed replacements is:

 CopyFile             CopyFileEx
 CreateDirectory      CreateDirectoryEx
 CreateFile           DeleteFile
 FindFirstFile        FindFirstFileEx
 GetFileAttributes    GetFileAttributesEx
 GetFullPathName      GetLongPathName
 GetShortPathName     GetBinaryType
 MoveFile             MoveFileEx
 MoveFileWithProgress RemoveDirectory
 ReplaceFile          SearchPath
 SetCurrentDirectory  SetFileAttributes
 SetFileSecurity      FindFirstChangeNotification

Of course, this would have been an NT-specific solution.

I actually use a version of such a library to create some of
the otherwise-uncreatable files in a /dev directory (which is
not on a managed mount). That way, I can do:

 $ ls /dev
 audio      com3     kmem    sda1   tty18  tty3   tty41  tty53  tty8
 aux        com4     lpt1    sr0    tty19  tty30  tty42  tty54  tty9
 cdrom      com5     lpt2    tty    tty2   tty31  tty43  tty55  ttyS0
 clipboard  com6     lpt3    tty0   tty20  tty32  tty44  tty56  ttyS1
 com1       com7     lpt4    tty1   tty21  tty33  tty45  tty57  ttyS10
 com10      com8     mem     tty10  tty22  tty34  tty46  tty58  ttyS11
 com11      com9     null    tty11  tty23  tty35  tty47  tty59  ttyS12
 com12      con      pipe    tty12  tty24  tty36  tty48  tty6   ttyS13
 com13      conin    port    tty13  tty25  tty37  tty49  tty60  ttyS14
 com14      conout   ptmx    tty14  tty26  tty38  tty5   tty61  ttyS15
 com15      console  random  tty15  tty27  tty39  tty50  tty62  ttyS2
 com16      dsp      scd0    tty16  tty28  tty4   tty51  tty63  ttyS3
 com2       fifo     sda     tty17  tty29  tty40  tty52  tty7   ttyS4


Unsubscribe info:
Problem reports:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]