Opened 2 months ago

Closed 2 months ago

#7486 closed defect (needs_more_info)

definition conflict of gmtime in time_internal.h

Reported by: cortexembed Owned by:
Priority: normal Component: avutil
Version: git-master Keywords: gmtime
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

When compiling ffmpeg on an embedded platform without gmtime support, compiling ffmpeg fails at:

./libavutil/time_internal.h:26:26: Fehler: Statische Deklaration von »gmtime_r« folgt nicht-statischer Deklaration

static inline struct tm *gmtime_r(const time_t* clock, struct tm *result)

Removing the "static" on line 26 (and 48 also) to only "inline struct tm *gmtime_rgmtime_r(const time_t* clock, struct tm *result) solves the issue.

Change History (3)

comment:1 Changed 2 months ago by cortexembed

I also stronly recommend to move function bodies from libavutil/time._internal.h into libavutil/time.c

Here is a possbile patch:

diff --git a/libavutil/time.c b/libavutil/time.c
index afa6658aa6..cd3a0fe1f0 100644
--- a/libavutil/time.c
+++ b/libavutil/time.c
@@ -96,3 +96,28 @@ int av_usleep(unsigned usec)
     return AVERROR(ENOSYS);
 #endif
 }
+
+#if !HAVE_GMTIME_R && !defined(gmtime_r)
+inline struct tm *gmtime_r(const time_t* clock, struct tm *result)
+{
+    struct tm *ptr = gmtime(clock);
+    if (!ptr)
+        return NULL;
+    *result = *ptr;
+    return result;
+}
+#endif
+
+
+#if !HAVE_LOCALTIME_R && !defined(localtime_r)
+inline struct tm *localtime_r(const time_t* clock, struct tm *result)
+{
+    struct tm *ptr = localtime(clock);
+    if (!ptr)
+        return NULL;
+    *result = *ptr;
+    return result;
+}
+#endif

diff --git a/libavutil/time_internal.h b/libavutil/time_internal.h
index 612a75a041..2dfc9c08dc 100644
--- a/libavutil/time_internal.h
+++ b/libavutil/time_internal.h
@@ -23,25 +23,11 @@
 #include "config.h"

 #if !HAVE_GMTIME_R && !defined(gmtime_r)
-static inline struct tm *gmtime_r(const time_t* clock, struct tm *result)
-{
-    struct tm *ptr = gmtime(clock);
-    if (!ptr)
-        return NULL;
-    *result = *ptr;
-    return result;
-}
+struct tm *gmtime_r(const time_t* clock, struct tm *result);
 #endif

 #if !HAVE_LOCALTIME_R && !defined(localtime_r)
-static inline struct tm *localtime_r(const time_t* clock, struct tm *result)
-{
-    struct tm *ptr = localtime(clock);
-    if (!ptr)
-        return NULL;
-    *result = *ptr;
-    return result;
-}
+struct tm *localtime_r(const time_t* clock, struct tm *result);
 #endif

 #endif /* AVUTIL_TIME_INTERNAL_H */

Last edited 2 months ago by cehoyos (previous) (diff)

comment:2 Changed 2 months ago by cehoyos

  • Keywords time_internal.h removed
  • Priority changed from minor to normal

Please either explain how I can reproduce the issue you see (this includes at least the configure line you used and information about your toolchain) or send a patch - made with git format-patch - to the FFmpeg development mailing list, both patches and patch suggestions are ignored here.

comment:3 Changed 2 months ago by cehoyos

  • Resolution set to needs_more_info
  • Status changed from new to closed
Note: See TracTickets for help on using tickets.