-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 17.03.2013 18:55, JonY wrote:> On 3/17/2013 18:37, Erik de Castro Lopo wrote: >> JonY wrote: >> >>> On 3/17/2013 10:33, Janne Hyv?rinen wrote: >>>> Here's a patch that makes MSVC compiled flac.exe able to use >>>> wildcards and encode/decode files with Unicode characters in >>>> names. It may not be the prettiest code but it fulfills its >>>> primary purpose. I tried to alter FLAC code as little as >>>> possible. It replaces argv with utf-8 encoded version and >>>> only converts to usable Unicode for file functions. That >>>> means printed texts and tags that contain non-ascii >>>> characters will be broken, but it is fixable if these changes >>>> are acceptable. >>>> >>> >>> Can this be reworked without the defines? This way, it should >>> support mingw builds too. >> >> +1 >> >> I'd like to see some way to do this to: >> >> a) Make this usable from MinGW compiled binaries. b) Reduce the >> the amount of inline #ifdef hackery. >> > > A simple way to do this is to make all C IO calls that need OS > specific hacks go into the compatibility module. Eg for open() > calls: > > int _flac_open(....){ #if win32 ... #else if os2 ... #else ... > [generic call to open() without hacks] #endif } > > All those ifdefs will at least be confined rather than spread out > through the code.I did it plibc-style: in compat.h: #if defined(_WIN32) #define FOPEN grabbag__fopen_utf8_wrapper #else #define FOPEN fopen #endif in grabbag: #if defined(_WIN32) <implement grabbag__fopen_utf8_wrapper, which has the same signature as fopen, but does utf8->utf16 conversion internally, then calls wfopen> #endif and replace "fopen" with "FOPEN" everywhere else. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (MingW32) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJRRdrIAAoJEOs4Jb6SI2CwL4YH/Ayixx9r3XitYI0j1FH+xQd3 lrhJ3I3Di1uE0/LES9/mL65T6yBvwov1LDoL4JMHMK4/mH78s0wDZXYr6h/FoEhW 8XpxRL6ujDfCEb2cp76KAcZLL3rcO4uEsgVJsXBtkC5K+zpjzgMVnasg+oH/Z6sS PdqPg/w+40FOgkYszMUwwJJJF/y2uTZXSOZoDyM8glx2oMhrAHmi0Yx7ksehndSo wN6JaJFe3IdprOZdyLXpxsPxiNt1MiR0b7BKg4bAFt8evStcD9d/CHSJ3te5134v d4YswJj/GQ1y9fJLpW+wPSEYmcJbi+Brkfo8OYs5pcs2Tsv0ZfQ80ItoJZ91CyQ=ZnwK -----END PGP SIGNATURE-----
JonY
2013-Mar-17 22:10 UTC
[flac-dev] Patch to add Unicode filename support for win32 flac
On 3/17/2013 23:01, LRN wrote:>> All those ifdefs will at least be confined rather than spread out >> through the code. > I did it plibc-style: > > in compat.h: > #if defined(_WIN32) > #define FOPEN grabbag__fopen_utf8_wrapper > #else > #define FOPEN fopen > #endif > > in grabbag: > #if defined(_WIN32) > <implement grabbag__fopen_utf8_wrapper, which has the same signature > as fopen, but does utf8->utf16 conversion internally, then calls wfopen> > #endif > > and replace "fopen" with "FOPEN" everywhere else.Don't do that, it leaks into the system headers and breaks mingw if FLAC_USE_FOPEN_UTF8 is defined. Call the wrappers directly instead of using a macro. -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 834 bytes Desc: OpenPGP digital signature Url : http://lists.xiph.org/pipermail/flac-dev/attachments/20130318/c58ff9fc/attachment.pgp
Erik de Castro Lopo
2013-Mar-17 22:37 UTC
[flac-dev] Patch to add Unicode filename support for win32 flac
JonY wrote:> On 3/17/2013 23:01, LRN wrote: > >> All those ifdefs will at least be confined rather than spread out > >> through the code. > > I did it plibc-style: > > > > in compat.h: > > #if defined(_WIN32) > > #define FOPEN grabbag__fopen_utf8_wrapper > > #else > > #define FOPEN fopen > > #endif > > > > in grabbag: > > #if defined(_WIN32) > > <implement grabbag__fopen_utf8_wrapper, which has the same signature > > as fopen, but does utf8->utf16 conversion internally, then calls wfopen> > > #endif > > > > and replace "fopen" with "FOPEN" everywhere else. > > Don't do that, it leaks into the system headers and breaks mingw if > FLAC_USE_FOPEN_UTF8 is defined. > > Call the wrappers directly instead of using a macro.+1 Yep, I prefer not to have too much #ifdef hackery. In my recent replacement of all the sprintf/_snprintf stuff, I relaced all the calls with a call to flac_snprintf() and localised #ifdef hackery to the implementation of that function.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 18.03.2013 02:10, JonY wrote:> On 3/17/2013 23:01, LRN wrote: >>> All those ifdefs will at least be confined rather than spread >>> out through the code. >> I did it plibc-style: >> >> in compat.h: #if defined(_WIN32) #define FOPEN >> grabbag__fopen_utf8_wrapper #else #define FOPEN fopen #endif >> >> in grabbag: #if defined(_WIN32) <implement >> grabbag__fopen_utf8_wrapper, which has the same signature as >> fopen, but does utf8->utf16 conversion internally, then calls >> wfopen> #endif >> >> and replace "fopen" with "FOPEN" everywhere else. > > Don't do that, it leaks into the system headersHow? compat.h is not a public header, it is only used internally in FLAC. And i don't think that system headers have defines for "FOPEN" and such. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (MingW32) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJRRnP7AAoJEOs4Jb6SI2CwxWoH/13eGOZb62iAm4SzkDFQ6/Bh 2Goz3lz+9fK4Gq+tXyfPmXC1JabLdM1vnw43QgkAVWr3OrJ2+AN+LHocP9+YCYG4 ckd5Eisi32taDr3+CnaJzOrYQnaeD926iPC2vQoVOMIniGWTRVzIIYxood0gGXd3 oa5hPMvq1t/TXyKudSt8Jimeoe6vyoaLcBJCMykn9B5qh//ryiajGJlwQgicessb Rzw0/VgbLcck3XLyzm7gfsXxiYhRjeSalZyPxYw6DE8rsARxswk1TfWLB7faPAiI spaA2mEX7iQz9GPmKlhil/Q/rzsn3vt8lgHbC+WDD0843kkaC3MWPvPdqqsbFh4=3u0R -----END PGP SIGNATURE-----