From 407921072f6db318aea74115c2348aa00728d83a Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 27 Nov 2012 02:57:20 +0100 Subject: 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 --- libavformat/file.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'libavformat/file.c') diff --git a/libavformat/file.c b/libavformat/file.c index 209957b9d3..44a1558b16 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; } -- cgit v1.2.3