[FFmpeg-cvslog] file: fix file_check()

Michael Niedermayer git at videolan.org
Tue Nov 27 03:59:26 CET 2012


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Tue Nov 27 02:57:20 2012 +0100| [407921072f6db318aea74115c2348aa00728d83a] | committer: Michael Niedermayer

file: fix file_check()

Fixes Ticket1904

This should work on windows, but if not please contact me ASAP
i have another idea on how to solve this without access() if that
really doesnt work on windows.

Strongly based on patch by divVerent
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=407921072f6db318aea74115c2348aa00728d83a
---

 libavformat/file.c |   15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/libavformat/file.c b/libavformat/file.c
index 209957b..44a1558 100644
--- a/libavformat/file.c
+++ b/libavformat/file.c
@@ -85,14 +85,15 @@ static int file_get_handle(URLContext *h)
 
 static int file_check(URLContext *h, int mask)
 {
-    struct stat st;
-    int ret = stat(h->filename, &st);
-    if (ret < 0)
+    int ret = 0;
+    if (access(h->filename, F_OK) < 0)
         return AVERROR(errno);
-
-    ret |= st.st_mode&S_IRUSR ? mask&AVIO_FLAG_READ  : 0;
-    ret |= st.st_mode&S_IWUSR ? mask&AVIO_FLAG_WRITE : 0;
-
+    if (mask&AVIO_FLAG_READ)
+        if (access(h->filename, R_OK) >= 0)
+            ret |= AVIO_FLAG_READ;
+    if (mask&AVIO_FLAG_WRITE)
+        if (access(h->filename, W_OK) >= 0)
+            ret |= AVIO_FLAG_WRITE;
     return ret;
 }
 



More information about the ffmpeg-cvslog mailing list