Hi John,
Have you tried to use sqlite3_open with a path that contains non-ascii chars
and make it work at the same time in Win9x and win2K? 
The 2 apps I mentioned before (sqLiteExplorer and SQLiteSpy) both fail the
above test (and for a good reason)
Costas

P.S. As I said, you can make an app work on both of these OSs, but with
external manipulation. 

> -----Original Message-----
> From: John Stanton [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, August 08, 2006 11:13 AM
> To: sqlite-users@sqlite.org
> Subject: Re: [sqlite] Problems opening db in win9x and utf8 filename
> 
> Our Sqlite applications work not only on Win98 and Win2000 but also on
> Linux, AIX and Solaris.  Where did we go wrong?
> 
> Costas Stergiou wrote:
> > Hi all,
> > I saw no more comments on this suggestion. It is very simple to program
> > around this issue in user code, but I would like to see it fixed in the
> > library level. Unless someone has made this work-around in his code, an
> > application cannot work at the same time in Win9x and Win2k if there is
> any
> > ansii char in the filepath.
> > Costas
> >
> >
> >
> >>-----Original Message-----
> >>From: Costas Stergiou [mailto:[EMAIL PROTECTED]
> >>Sent: Saturday, August 05, 2006 11:47 PM
> >>To: sqlite-users@sqlite.org
> >>Subject: RE: [sqlite] Problems opening db in win9x and utf8 filename
> >>
> >>
> >>
> >>>I no longer have a win98 system to test with, but based on my
> >>>understanding...
> >>>
> >>>os_win.c attempts to convert the filename from UTF-8 to UTF-16.  If it
> >>>succeeds, it calls CreateFileW;
> >>
> >>Actually, there is a flag there that caused the convertion to UTF-16 to
> >>'fail' (it doesn't really fail, just that the utf8ToUnicode returns 0).
> >>
> >>
> >>>if it fails, it calls CreateFileA with
> >>>the original string.
> >>
> >>Exactly
> >>
> >>
> >>>CreateFileW is a nonfunctional stub on win98, so
> >>>when you pass a UTF-8 filename sqlite takes that codepath and fails.
> >>>An ANSI filename won't pass the UTF-8 conversion, so CreateFileA is
> >>>called with the ANSI string.
> >>
> >>Actually, in Win98 it will pass the conversion, but as I said above, the
> >>function fails by a check: "if (!isNT())"
> >>
> >>
> >>>That doesn't necessarily explain win2k though.  Perhaps the current
> >>>user locale does not match the ANSI encoding of the filename you're
> >>>passing in?  Internally win2k only uses the Unicode version, so
> >>>CreateFileA must do an implict conversion to Unicode using the current
> >>>user codepage.
> >>
> >>Now that I checked the code, it actually does.
> >>Unfortunately, the way the code is setup makes it necessary for the
> caller
> >>to check in which OS it runs and either use UTF8 paths or ansii ones. I
> >>think this is not a good technique (and not actually intended from what
> I
> >>have read in the docs) since the sqlite3_open does not give a truly
> >>uniform
> >>interface to the caller.
> >>
> >>My suggestion is this:
> >>The sqlite3_open should always expect a utf8 path (as the docs say). If
> in
> >>win2k everything works fine. If in win98 it should convert the path to
> >>utf16
> >>and THEN convert it to ansii using the CP_ACP (current ansii code page).
> >>This will work for 99.9% cases since in non-English win9x OS, almost
> 99.9%
> >>ansii strings are in the system's locale.
> >>I think this is also the expected behavior (and what I have programmed
> my
> >>app to do, until I tested it in win98).
> >>
> >>To make these changes, all the logic of os_win.c should change to
> >>accommodate the above. I would certainly say that the way it currently
> >>works
> >>is wrong (bug).
> >>Of course, there is the problem of breaking existing code (since many
> >>win9x
> >>user will not have read the docs, or else someone would have mentioned
> >>this
> >>behavior looong time agoe).
> >>To maintain compatibility (e.g. to accept ansii non-utf8 paths), a check
> >>can
> >>be made on whether the supplied path is in utf8 (heuristically this has
> >>almost 100% success) and then do the above.
> >>
> >>Costas
> >>
> >>
> >>
> >>
> >>>MSLU does provide a functional CreateFileW wrapper for win9x, but I
> >>>don't believe the stock sqlite binaries are built with it.
> >>>
> >>>
> >>>On 8/5/06, Peter Cunderlik <[EMAIL PROTECTED]> wrote:
> >>>
> >>>
> >>>>I think you will never succeed using UTF-8 encoded filenames on those
> >>>>systems. I don't know how it can be done programmatically, but each
> >>>>file or directory name has its 8.3 name as well, i.e. "Program Files"
> >>>>would be "progra~1". I think this is the safest way how to pass
> >>>>filenames to SQLite. It should work on Win 9x as well as 2K and XP.
> >>>
> >>>NTFS can have 8.3 shortname creation disabled.  Systems running
> >>>without it are not common but do exist, so you should avoid relying on
> >>>them if at all possible.
> >
> >
> >
> >



Reply via email to