]> git.sesse.net Git - vlc/blobdiff - src/extras/libc.c
Start moving replacement functions to a static import library
[vlc] / src / extras / libc.c
index a887c2d2cca85d8050ee4f359ce28757711d694b..6dc1dd137e9576097bbe41616d39f64000686e39 100644 (file)
@@ -29,7 +29,7 @@
 # include "config.h"
 #endif
 
-#include <vlc/vlc.h>
+#include <vlc_common.h>
 
 #include <ctype.h>
 
@@ -47,9 +47,7 @@
 #   include <dirent.h>
 #endif
 
-#ifdef HAVE_SIGNAL_H
-#   include <signal.h>
-#endif
+#include <signal.h>
 
 #ifdef HAVE_FORK
 #   include <sys/time.h>
@@ -103,116 +101,11 @@ char * vlc_strcasestr( const char *psz_big, const char *psz_little )
 #endif
 }
 
-/*****************************************************************************
- * strtoll: convert a string to a 64 bits int.
- *****************************************************************************/
-long long vlc_strtoll( const char *nptr, char **endptr, int base )
-{
-#if defined( HAVE_STRTOLL )
-    return strtoll( nptr, endptr, base );
-#else
-    long long i_value = 0;
-    int sign = 1, newbase = base ? base : 10;
-
-    while( isspace(*nptr) ) nptr++;
-
-    if( *nptr == '-' )
-    {
-        sign = -1;
-        nptr++;
-    }
-
-    /* Try to detect base */
-    if( *nptr == '0' )
-    {
-        newbase = 8;
-        nptr++;
-
-        if( *nptr == 'x' )
-        {
-            newbase = 16;
-            nptr++;
-        }
-    }
-
-    if( base && newbase != base )
-    {
-        if( endptr ) *endptr = (char *)nptr;
-        return i_value;
-    }
-
-    switch( newbase )
-    {
-        case 10:
-            while( *nptr >= '0' && *nptr <= '9' )
-            {
-                i_value *= 10;
-                i_value += ( *nptr++ - '0' );
-            }
-            if( endptr ) *endptr = (char *)nptr;
-            break;
-
-        case 16:
-            while( (*nptr >= '0' && *nptr <= '9') ||
-                   (*nptr >= 'a' && *nptr <= 'f') ||
-                   (*nptr >= 'A' && *nptr <= 'F') )
-            {
-                int i_valc = 0;
-                if(*nptr >= '0' && *nptr <= '9') i_valc = *nptr - '0';
-                else if(*nptr >= 'a' && *nptr <= 'f') i_valc = *nptr - 'a' +10;
-                else if(*nptr >= 'A' && *nptr <= 'F') i_valc = *nptr - 'A' +10;
-                i_value *= 16;
-                i_value += i_valc;
-                nptr++;
-            }
-            if( endptr ) *endptr = (char *)nptr;
-            break;
-
-        default:
-            i_value = strtol( nptr, endptr, newbase );
-            break;
-    }
-
-    return i_value * sign;
-#endif
-}
-
-/**
- * Copy a string to a sized buffer. The result is always nul-terminated
- * (contrary to strncpy()).
- *
- * @param dest destination buffer
- * @param src string to be copied
- * @param len maximum number of characters to be copied plus one for the
- * terminating nul.
- *
- * @return strlen(src)
- */
-extern size_t vlc_strlcpy (char *tgt, const char *src, size_t bufsize)
-{
-#ifdef HAVE_STRLCPY
-    return strlcpy (tgt, src, bufsize);
-#else
-    size_t length;
-
-    for (length = 1; (length < bufsize) && *src; length++)
-        *tgt++ = *src++;
-
-    if (bufsize)
-        *tgt = '\0';
-
-    while (*src++)
-        length++;
-
-    return length - 1;
-#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
@@ -236,7 +129,11 @@ void *vlc_wopendir( const wchar_t *wpath )
         if( !p_dir )
             return NULL;
         p_dir->p_real_dir = NULL;
+#if defined(UNDER_CE)
+        p_dir->i_drives = NULL;
+#else
         p_dir->i_drives = GetLogicalDrives();
+#endif
         return (void *)p_dir;
     }
 
@@ -260,7 +157,6 @@ void *vlc_wopendir( const wchar_t *wpath )
 struct _wdirent *vlc_wreaddir( void *_p_dir )
 {
     vlc_DIR *p_dir = (vlc_DIR *)_p_dir;
-    unsigned int i;
     DWORD i_drives;
 
     if ( p_dir->p_real_dir != NULL )
@@ -281,6 +177,11 @@ struct _wdirent *vlc_wreaddir( void *_p_dir )
 
     /* Drive letters mode */
     i_drives = p_dir->i_drives;
+#ifdef UNDER_CE
+    swprintf( p_dir->dd_dir.d_name, L"\\");
+    p_dir->dd_dir.d_namlen = wcslen(p_dir->dd_dir.d_name);
+#else
+    unsigned int i;
     if ( !i_drives )
         return NULL; /* end */
 
@@ -293,47 +194,46 @@ struct _wdirent *vlc_wreaddir( void *_p_dir )
     swprintf( p_dir->dd_dir.d_name, L"%c:\\", 'A' + i );
     p_dir->dd_dir.d_namlen = wcslen(p_dir->dd_dir.d_name);
     p_dir->i_drives &= ~(1UL << i);
+#endif
     return &p_dir->dd_dir;
 }
 
-int vlc_wclosedir( void *_p_dir )
+void vlc_rewinddir( void *_p_dir )
 {
     vlc_DIR *p_dir = (vlc_DIR *)_p_dir;
-    int i_ret = 0;
 
     if ( p_dir->p_real_dir != NULL )
-        i_ret = _wclosedir( p_dir->p_real_dir );
-
-    free( p_dir );
-    return i_ret;
+        _wrewinddir( p_dir->p_real_dir );
 }
+#endif
 
-void vlc_rewinddir( void *_p_dir )
+/* This one is in the libvlccore exported symbol list */
+int vlc_wclosedir( void *_p_dir )
 {
+#if defined(WIN32)
     vlc_DIR *p_dir = (vlc_DIR *)_p_dir;
+    int i_ret = 0;
 
     if ( p_dir->p_real_dir != NULL )
-        _wrewinddir( p_dir->p_real_dir );
-}
-#endif
+        i_ret = _wclosedir( p_dir->p_real_dir );
 
-#if defined (WIN32)
-/**
- * gettext callbacks for plugins.
- * LibVLC links libintl statically on Windows.
- */
-char *vlc_dgettext( const char *package, const char *msgid )
-{
-    return dgettext( package, msgid );
-}
+    free( p_dir );
+    return i_ret;
+#else
+    return closedir( _p_dir );
 #endif
+}
 
 /**
  * In-tree plugins share their gettext domain with LibVLC.
  */
 char *vlc_gettext( const char *msgid )
 {
+#ifdef ENABLE_NLS
     return dgettext( PACKAGE_NAME, msgid );
+#else
+    return (char *)msgid;
+#endif
 }
 
 /*****************************************************************************
@@ -419,7 +319,7 @@ vlc_iconv_t vlc_iconv_open( const char *tocode, const char *fromcode )
 #if defined(HAVE_ICONV)
     return iconv_open( tocode, fromcode );
 #else
-    return NULL;
+    return (vlc_iconv_t)(-1);
 #endif
 }
 
@@ -430,21 +330,7 @@ size_t vlc_iconv( vlc_iconv_t cd, const char **inbuf, size_t *inbytesleft,
     return iconv( cd, (ICONV_CONST char **)inbuf, inbytesleft,
                   outbuf, outbytesleft );
 #else
-    int i_bytes;
-
-    if (inbytesleft == NULL || outbytesleft == NULL)
-    {
-        return 0;
-    }
-
-    i_bytes = __MIN(*inbytesleft, *outbytesleft);
-    if( !inbuf || !outbuf || !i_bytes ) return (size_t)(-1);
-    memcpy( *outbuf, *inbuf, i_bytes );
-    inbuf += i_bytes;
-    outbuf += i_bytes;
-    inbytesleft -= i_bytes;
-    outbytesleft -= i_bytes;
-    return i_bytes;
+    abort ();
 #endif
 }
 
@@ -453,7 +339,7 @@ int vlc_iconv_close( vlc_iconv_t cd )
 #if defined(HAVE_ICONV)
     return iconv_close( cd );
 #else
-    return 0;
+    abort ();
 #endif
 }