[FFmpeg-devel] Win UTF8 patch vs WinCE (Was Re: [PATCH] Check for the isatty function)

Martin Storsjö martin
Fri Jul 24 14:08:12 CEST 2009

On Thu, 23 Jul 2009, Ramiro Polla wrote:

> Oh well, applied then...

Great, thanks!

> Thanks. And could you please test the Windows UTF-8 patch for WinCE? I
> think there might be some issues with #ifdefs and IIRC there's
> something different about the WinCE command line regarding Unicode
> (although I haven't rechecked what that is).

I tested this and found out that it's actually way more complicated than 
than I thought. I'll try to list all the major issues I ran in to:

- The non-unicode version of GetVersionEx is broken on WinCE (both 
  mingw32ce and MSVC). As for all functions handling strings, they're 
  mapped to symbol names with *A or *W depending on the UNICODE macro. 
  Even though both mingw32ce's and MSVC's headers map this to 
  GetVersionExA, there's no symbol with that name in the libs, they're 
  named GetVersionExW and GetVersionEx without any suffix. Anyway, either 
  this can be changed to use GetVersionExW and OSVERSIONINFOW explicitly, 
  or it could be skipped completely for __MINGW32CE__, since the check 
  isn't relevant for CE anyway.

- CommandLineToArgvW doesn't exist on WinCE (neither on mingw32ce nor on 
  MSVC). I tried to hack together a seemingly compatible replacement, but 
  that's 90 lines extra cruft. (Attached for reference.) I also noticed 
  that this function isn't available on win9x, FYI.

- If using the entry point WinMain, __argc/__argv aren't initialized and 
  can't be used. Additionally, since they're referenced, they pull in 
  winmain_ce.o from libmingw32.a, so we get a double definition of 
  WinMain. (This same issue is discussed at 
  http://www.mail-archive.com/cegcc-devel at lists.sourceforge.net/msg00744.html, 

- mingw32ce doesn't contain any implementation of _wopen. This should be 
  simple enough to add there, though. (For testing, so I wouldn't have to 
  rebuild the compiler toolchain, I added a local implementation inside of 
  os_support.c (based on the implementation of _open from mingw32ce), 
  attached for reference.)

- The real killer issue: WinCE has no concept of environment variables 
  whatsoever. To fix builds, I've used dummy defines of getenv returning 
  NULL and setenv doing nothing, but this makes things go wrong in this 
  case. WinMain sets the FF_WINUTF8 variable to notify ff_winutf8_open 
  that file names are in utf8, but ff_winutf8_open won't know about it.  
  One potential solution would be to either hardwire it to always be in 
  use on WinCE, another is to add a local implementation of getenv/setenv 
  that stores the variables locally within the process (even though one 
  couldn't affect them with the environment where the process is started).  
  For example SDL uses some environment variables in this way, and has an 
  implementation of their own for this kind of platforms. But that API 
  would have to be exposed in order for a user of libavformat to be able 
  to change this, which was the whole point afaik.

// Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: commandlinetoargvw.patch
Type: text/x-diff
Size: 2856 bytes
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090724/809ea957/attachment.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: wopen-mingw32ce.patch
Type: text/x-diff
Size: 2433 bytes
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090724/809ea957/attachment-0001.patch>

More information about the ffmpeg-devel mailing list