On Tue, Jun 23, 2015 at 8:34 PM, Michael Niedermayer <michae...@gmx.at>
wrote:

> On Mon, Jun 22, 2015 at 12:01:33AM +0200, Mariusz Szczepańczyk wrote:
> > ---
> >  configure          |  2 ++
> >  libavformat/file.c | 34 ++++++++++++++++++++++++++++++++++
> >  2 files changed, 36 insertions(+)
>
> this and the previous patch fails to build
>
> make distclean ; ./configure --disable-sdl && make -j12
>
> libavformat/file.c: In function ‘file_read_dir’:
> libavformat/file.c:302:10: error: ‘DT_FIFO’ undeclared (first use in this
> function)
> libavformat/file.c:302:10: note: each undeclared identifier is reported
> only once for each function it appears in
> libavformat/file.c:305:10: error: ‘DT_CHR’ undeclared (first use in this
> function)
> libavformat/file.c:308:10: error: ‘DT_DIR’ undeclared (first use in this
> function)
> libavformat/file.c:311:10: error: ‘DT_BLK’ undeclared (first use in this
> function)
> libavformat/file.c:314:10: error: ‘DT_REG’ undeclared (first use in this
> function)
> libavformat/file.c:317:10: error: ‘DT_LNK’ undeclared (first use in this
> function)
> libavformat/file.c:320:10: error: ‘DT_SOCK’ undeclared (first use in this
> function)
> libavformat/file.c:323:10: error: ‘DT_UNKNOWN’ undeclared (first use in
> this function)
> make: *** [libavformat/file.o] Error 1
> make: *** Waiting for unfinished jobs....
>
> sdl disable is needed to reproduce  as sdls pkgcnonfig adds
> GNU_SOURCE i suspect
>

Added contraint on _GNU_SOURCE and now it compiles fine on my linux in both
cases (with or without sdl).

I've sent two patches to keep my and Lukasz's work separated. Of course I
can squash them if you like.

Mariusz
From aa9ee21be55e565362740791a949b97e88631168 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mariusz=20Szczepa=C5=84czyk?= <mszczepanc...@gmail.com>
Date: Wed, 10 Jun 2015 03:30:29 +0200
Subject: [PATCH 2/2] lavf/file: check for dirent.h support

---
 configure          |  2 ++
 libavformat/file.c | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/configure b/configure
index 0620936..069e997 100755
--- a/configure
+++ b/configure
@@ -1681,6 +1681,7 @@ HEADERS_LIST="
     dev_video_bktr_ioctl_bt848_h
     dev_video_meteor_ioctl_meteor_h
     direct_h
+    dirent_h
     dlfcn_h
     d3d11_h
     dxva_h
@@ -4995,6 +4996,7 @@ enabled xlib &&
     check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
 
 check_header direct.h
+check_header dirent.h
 check_header dlfcn.h
 check_header d3d11.h
 check_header dxva.h
diff --git a/libavformat/file.c b/libavformat/file.c
index 407540c..37da985 100644
--- a/libavformat/file.c
+++ b/libavformat/file.c
@@ -23,7 +23,9 @@
 #include "libavutil/internal.h"
 #include "libavutil/opt.h"
 #include "avformat.h"
+#if HAVE_DIRENT_H
 #include <dirent.h>
+#endif
 #include <fcntl.h>
 #if HAVE_IO_H
 #include <io.h>
@@ -52,7 +54,9 @@ typedef struct FileContext {
     int fd;
     int trunc;
     int blocksize;
+#if HAVE_DIRENT_H
     DIR *dir;
+#endif
 } FileContext;
 
 static const AVOption file_options[] = {
@@ -229,6 +233,7 @@ static int file_close(URLContext *h)
 
 static int file_open_dir(URLContext *h)
 {
+#if HAVE_DIRENT_H
     FileContext *c = h->priv_data;
 
     c->dir = opendir(h->filename);
@@ -236,10 +241,14 @@ static int file_open_dir(URLContext *h)
         return AVERROR(errno);
 
     return 0;
+#else
+    return AVERROR(ENOSYS);
+#endif /* HAVE_DIRENT_H */
 }
 
 static int file_read_dir(URLContext *h, AVIODirEntry **next)
 {
+#if HAVE_DIRENT_H
     FileContext *c = h->priv_data;
     struct dirent *dir;
     char *fullpath = NULL;
@@ -267,11 +276,28 @@ static int file_read_dir(URLContext *h, AVIODirEntry **next)
             (*next)->modification_timestamp = INT64_C(1000000) * st.st_mtime;
             (*next)->access_timestamp =  INT64_C(1000000) * st.st_atime;
             (*next)->status_change_timestamp = INT64_C(1000000) * st.st_ctime;
+
+#if !defined(_DIRENT_HAVE_D_TYPE) || !defined(_GNU_SOURCE)
+            if (S_ISDIR(st.st_mode))
+                (*next)->type = AVIO_ENTRY_DIRECTORY;
+            else if (S_ISFIFO(st.st_mode))
+                (*next)->type = AVIO_ENTRY_NAMED_PIPE;
+            else if (S_ISCHR(st.st_mode))
+                (*next)->type = AVIO_ENTRY_CHARACTER_DEVICE;
+            else if (S_ISBLK(st.st_mode))
+                (*next)->type = AVIO_ENTRY_BLOCK_DEVICE;
+            else if (S_ISREG(st.st_mode))
+                (*next)->type = AVIO_ENTRY_FILE;
+            else
+                (*next)->type = AVIO_ENTRY_UNKNOWN;
+#endif /* !defined(_DIRENT_HAVE_D_TYPE) || !defined(_GNU_SOURCE) */
         }
         av_free(fullpath);
     }
 
     (*next)->name = av_strdup(dir->d_name);
+
+#if defined(_DIRENT_HAVE_D_TYPE) && defined(_GNU_SOURCE)
     switch (dir->d_type) {
     case DT_FIFO:
         (*next)->type = AVIO_ENTRY_NAMED_PIPE;
@@ -299,14 +325,22 @@ static int file_read_dir(URLContext *h, AVIODirEntry **next)
         (*next)->type = AVIO_ENTRY_UNKNOWN;
         break;
     }
+#endif /* defined(_DIRENT_HAVE_D_TYPE) && defined(_GNU_SOURCE) */
     return 0;
+#else
+    return AVERROR(ENOSYS);
+#endif /* HAVE_DIRENT_H */
 }
 
 static int file_close_dir(URLContext *h)
 {
+#if HAVE_DIRENT_H
     FileContext *c = h->priv_data;
     closedir(c->dir);
     return 0;
+#else
+    return AVERROR(ENOSYS);
+#endif /* HAVE_DIRENT_H */
 }
 
 URLProtocol ff_file_protocol = {
-- 
2.3.6

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to