pspp-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Bug #33255 (Windows cannot open files with non-ascii names)


From: John Darrington
Subject: Re: Bug #33255 (Windows cannot open files with non-ascii names)
Date: Fri, 9 Oct 2015 07:29:12 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

On Thu, Oct 08, 2015 at 09:29:35PM -0700, Ben Pfaff wrote:
     On Thu, Oct 08, 2015 at 06:47:05PM +0200, John Darrington wrote:
     > In addition to the changes I've submitted for review, I think the 
resolution to this 
     > problem involves work in src/data/make-file.c
     > 
     > The issue is, this module contains a lot of calls to posix file 
functions, such as 
     > open, rename, unlink etc.
     > 
     > These work in w32 so long as there are no non-ascii characters in the 
filenames.
     > To get other characters to work, we have to do two things:
     > 
     > 1. Convert the filenames to UTF-16LE
     > AND
     > 2. replace the function calls by their WideChar equivalents.
     > 
     > Step 2  however has caveats:
     > 
     > open --> _wopen is no problem.
     > unlink --> _wunlink is no problem.
     > rename --> _wrename will not work, because windows rename refuses to 
overwrite an existing file.  We will 
     >  have to use the native Windows function MoveFileW
     > 
     > Not sure about stat.
     > 
     > 
     > It may end up being easier to have a platform specific implementation of 
make-file.c
     > 
     > What do you think?
     
     Can this be fixed in Gnulib somehow?

It probably can be.  The question one has to ask is does it make sense to do so:

The awkward issue is the _wrename function.   The POSIX rename silently 
overwrites
the target.  The Windows rename (and presumably the corresponding _wrename) 
however 
fails with an error if the target exists.

Now some years ago, we (you actually!) contributed a replacement rename to 
Gnulib 
such that it behaves per POSIX on Windows.  I think it is perfectly possible to 
write a replacement _wrename for w32 which behaves in a more POSIX like way,
however then it will not behave how Microsoft's documentation says.

Perhaps it might make sense to have a "widechar" version of rename in Gnulib, 
but
call it something other than _wrename.


     
     A system-specific implementation makes sense except that we lack proper
     resources to test it.

That is true.  The pros and cons of both solutions need to be considered 
carefully.

J'

-- 
Avoid eavesdropping.  Send strong encryted email.
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://sks-keyservers.net or any PGP keyserver for public key.

Attachment: signature.asc
Description: Digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]