diff options
Diffstat (limited to 'contrib/ffmpeg/libavformat/file.c')
-rw-r--r-- | contrib/ffmpeg/libavformat/file.c | 47 |
1 files changed, 18 insertions, 29 deletions
diff --git a/contrib/ffmpeg/libavformat/file.c b/contrib/ffmpeg/libavformat/file.c index 3caf80a61..6285c1bba 100644 --- a/contrib/ffmpeg/libavformat/file.c +++ b/contrib/ffmpeg/libavformat/file.c @@ -19,9 +19,12 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "avformat.h" +#include "avstring.h" #include <fcntl.h> #include <unistd.h> #include <sys/time.h> +#include <stdlib.h> +#include "os_support.h" /* standard file protocol */ @@ -31,7 +34,7 @@ static int file_open(URLContext *h, const char *filename, int flags) int access; int fd; - strstart(filename, "file:", &filename); + av_strstart(filename, "file:", &filename); if (flags & URL_RDWR) { access = O_CREAT | O_TRUNC | O_RDWR; @@ -40,7 +43,7 @@ static int file_open(URLContext *h, const char *filename, int flags) } else { access = O_RDONLY; } -#if defined(__MINGW32__) || defined(CONFIG_OS2) || defined(__CYGWIN__) +#ifdef O_BINARY access |= O_BINARY; #endif fd = open(filename, access, 0666); @@ -89,13 +92,18 @@ URLProtocol file_protocol = { static int pipe_open(URLContext *h, const char *filename, int flags) { int fd; - - if (flags & URL_WRONLY) { - fd = 1; - } else { - fd = 0; + const char * final; + av_strstart(filename, "pipe:", &filename); + + fd = strtol(filename, &final, 10); + if((filename == final) || *final ) {/* No digits found, or something like 10ab */ + if (flags & URL_WRONLY) { + fd = 1; + } else { + fd = 0; + } } -#if defined(__MINGW32__) || defined(CONFIG_OS2) || defined(__CYGWIN__) +#ifdef O_BINARY setmode(fd, O_BINARY); #endif h->priv_data = (void *)(size_t)fd; @@ -103,28 +111,9 @@ static int pipe_open(URLContext *h, const char *filename, int flags) return 0; } -static int pipe_read(URLContext *h, unsigned char *buf, int size) -{ - int fd = (size_t)h->priv_data; - return read(fd, buf, size); -} - -static int pipe_write(URLContext *h, unsigned char *buf, int size) -{ - int fd = (size_t)h->priv_data; - return write(fd, buf, size); -} - -static int pipe_close(URLContext *h) -{ - return 0; -} - URLProtocol pipe_protocol = { "pipe", pipe_open, - pipe_read, - pipe_write, - NULL, - pipe_close, + file_read, + file_write, }; |