Factorize the localtime_r replacement
authorRémi Denis-Courmont <rem@videolan.org>
Wed, 19 Mar 2008 16:37:26 +0000 (18:37 +0200)
committerRémi Denis-Courmont <rem@videolan.org>
Wed, 19 Mar 2008 16:37:26 +0000 (18:37 +0200)
include/vlc_fixups.h
modules/access_filter/dump.c
modules/access_filter/record.c
src/input/vlm.c
src/text/strings.c

index 4008ce8..ca9c667 100644 (file)
 # endif
 #endif
 
+#ifndef HAVE_LOCALTIME_R
+/* If localtime_r() is not provided, we assume localtime() uses
+ * thread-specific storage. */
+# include <time.h>
+static struct tm *localtime_r (const time_t *timep, struct tm *result)
+{
+    struct tm *s = localtime (timep);
+    if (s == NULL)
+        return NULL;
+
+    *result = *s;
+    return result;
+}
+#endif
+
index c288149..b0626c5 100644 (file)
@@ -244,26 +244,6 @@ static int Seek (access_t *access, int64_t offset)
     return ret;
 }
 
-
-#ifndef HAVE_LOCALTIME_R
-static inline struct tm *localtime_r (const time_t *now, struct tm *res)
-{
-    struct tm *unsafe = localtime (now);
-    /*
-     * This is not thread-safe. Blame your C library.
-     * On Win32 there SHOULD be _localtime_s instead, but of course
-     * Cygwin and Mingw32 don't know about it. You're on your own if you
-     * use this platform.
-     */
-    if (unsafe == NULL)
-        return NULL;
-
-    memcpy (res, unsafe, sizeof (*res));
-    return res;
-}
-#endif
-
-
 static void Trigger (access_t *access)
 {
     access_sys_t *p_sys = access->p_sys;
index a4c8459..7b9cec1 100644 (file)
@@ -367,16 +367,7 @@ static void Dump( access_t *p_access, uint8_t *p_buffer, int i_buffer )
         time_t t = time(NULL);
         struct tm l;
 
-#ifdef HAVE_LOCALTIME_R
         if( !localtime_r( &t, &l ) ) memset( &l, 0, sizeof(l) );
-#else
-        /* Grrr */
-        {
-            struct tm *p_l = localtime( &t );
-            if( p_l ) l = *p_l;
-            else memset( &l, 0, sizeof(l) );
-        }
-#endif
 
         p_input = vlc_object_find( p_access, VLC_OBJECT_INPUT, FIND_PARENT );
         if( p_input )
index fbc7d33..5f68f39 100644 (file)
@@ -1536,13 +1536,7 @@ static vlm_message_t *vlm_Show( vlm_t *vlm, vlm_media_sys_t *media,
             time_t i_time = (time_t)( schedule->i_date / 1000000 );
             char *psz_date;
 
-#ifdef HAVE_LOCALTIME_R
             localtime_r( &i_time, &date);
-#else
-            struct tm *p_date = localtime( &i_time );
-            date = *p_date;
-#endif
-
             asprintf( &psz_date, "%d/%d/%d-%d:%d:%d",
                       date.tm_year + 1900, date.tm_mon + 1, date.tm_mday,
                       date.tm_hour, date.tm_min, date.tm_sec );
@@ -1891,13 +1885,7 @@ static char *Save( vlm_t *vlm )
         struct tm date;
         time_t i_time = (time_t) ( schedule->i_date / 1000000 );
 
-#ifdef HAVE_LOCALTIME_R
         localtime_r( &i_time, &date);
-#else
-        struct tm *p_date = localtime( &i_time );
-        date = *p_date;
-#endif
-
         p += sprintf( p, "new %s schedule ", schedule->psz_name);
 
         if( schedule->b_enabled == VLC_TRUE )
index a9a8d79..896b225 100644 (file)
@@ -618,23 +618,14 @@ char *str_format_time( const char *tformat )
 {
     char buffer[255];
     time_t curtime;
-#if defined(HAVE_LOCALTIME_R)
     struct tm loctime;
-#else
-    struct tm *loctime;
-#endif
 
     /* Get the current time.  */
     curtime = time( NULL );
 
     /* Convert it to local time representation.  */
-#if defined(HAVE_LOCALTIME_R)
     localtime_r( &curtime, &loctime );
     strftime( buffer, 255, tformat, &loctime );
-#else
-    loctime = localtime( &curtime );
-    strftime( buffer, 255, tformat, loctime );
-#endif
     return strdup( buffer );
 }