# include <stdarg.h>
static inline int vasprintf (char **strp, const char *fmt, va_list ap)
{
+#ifndef UNDER_CE
int len = vsnprintf (NULL, 0, fmt, ap) + 1;
char *res = (char *)malloc (len);
if (res == NULL)
return -1;
*strp = res;
return vsprintf (res, fmt, ap);
+#else
+ /* HACK: vsnprintf in the WinCE API behaves like
+ * the one in glibc 2.0 and doesn't return the number of characters
+ * it needed to copy the string.
+ * cf http://msdn.microsoft.com/en-us/library/1kt27hek.aspx
+ * and cf the man page of vsnprintf
+ *
+ Guess we need no more than 50 bytes. */
+ int n, size = 50;
+ char *res, *np;
+
+ if ((res = (char *) malloc (size)) == NULL)
+ return -1;
+
+ while (1)
+ {
+ n = vsnprintf (res, size, fmt, ap);
+
+ /* If that worked, return the string. */
+ if (n > -1 && n < size)
+ {
+ *strp = res;
+ return n;
+ }
+
+ /* Else try again with more space. */
+ if (n == -1)
+ size *= 2; /* twice the old size */
+
+ if ((np = (char *) realloc (res, size)) == NULL)
+ {
+ free(res);
+ return -1;
+ }
+ else
+ {
+ res = np;
+ }
+
+ }
+#endif /* UNDER_CE */
}
#endif
* vlc_*dir_wrapper: wrapper under Windows to return the list of drive letters
* when called with an empty argument or just '\'
*****************************************************************************/
-#if defined(WIN32) && !defined(UNDER_CE)
+#if defined(WIN32)
# include <assert.h>
typedef struct vlc_DIR
/* This one is in the libvlccore exported symbol list */
int vlc_wclosedir( void *_p_dir )
{
-#if defined(WIN32) && !defined(UNDER_CE)
+#if defined(WIN32)
vlc_DIR *p_dir = (vlc_DIR *)_p_dir;
int i_ret = 0;
wchar_t psz_wfile[MAX_PATH];
MultiByteToWideChar( CP_ACP, 0, psz_file, -1, psz_wfile, MAX_PATH );
+#ifndef UNDER_CE
/* FIXME: this is not thread-safe -- Courmisch */
UINT mode = SetErrorMode (SEM_FAILCRITICALERRORS);
SetErrorMode (mode|SEM_FAILCRITICALERRORS);
+#endif
-#ifdef UNDER_CE
- handle = LoadLibrary( psz_wfile );
-#else
handle = LoadLibraryW( psz_wfile );
-#endif
+
+#ifndef UNDER_CE
SetErrorMode (mode);
+#endif
if( handle == NULL )
{
*/
int utf8_open (const char *filename, int flags, mode_t mode)
{
-#ifdef WIN32
+#ifdef UNDER_CE
+ /*_open translates to wchar internally on WinCE*/
+ return _open (filename, flags, mode);
+#elif defined (WIN32)
/* for Windows NT and above */
wchar_t wpath[MAX_PATH + 1];
static int utf8_statEx( const char *filename, struct stat *buf,
bool deref )
{
-#if defined (WIN32)
+#ifdef UNDER_CE
+ /*_stat translates to wchar internally on WinCE*/
+ return _stat( filename, buf );
+#elif defined (WIN32)
/* for Windows NT and above */
wchar_t wpath[MAX_PATH + 1];
*/
int utf8_unlink( const char *filename )
{
-#if defined (WIN32)
+#ifdef UNDER_CE
+ /*_open translates to wchar internally on WinCE*/
+ return _unlink( filename );
+#elif defined (WIN32)
/* for Windows NT and above */
wchar_t wpath[MAX_PATH + 1];