Signed-off-by: Nicolas George <geo...@nsup.org> --- libavformat/file.c | 47 ++++++++++++++++++++++++++++++++++++----- libavformat/protocols.c | 1 + 2 files changed, 43 insertions(+), 5 deletions(-)
diff --git a/libavformat/file.c b/libavformat/file.c index 8303436be0..2fb93c23fd 100644 --- a/libavformat/file.c +++ b/libavformat/file.c @@ -203,17 +203,15 @@ static int file_move(URLContext *h_src, URLContext *h_dst) return 0; } -#if CONFIG_FILE_PROTOCOL +#if CONFIG_FILE_PROTOCOL || CONFIG_FS_PROTOCOL -static int file_open(URLContext *h, const char *filename, int flags) +static int file_open_common(URLContext *h, const char *filename, int flags) { FileContext *c = h->priv_data; int access; int fd; struct stat st; - av_strstart(filename, "file:", &filename); - if (flags & AVIO_FLAG_WRITE && flags & AVIO_FLAG_READ) { access = O_CREAT | O_RDWR; if (c->trunc) @@ -353,6 +351,16 @@ static int file_close_dir(URLContext *h) #endif /* HAVE_LSTAT */ } +#endif /* CONFIG_FILE_PROTOCOL || CONFIG_FS_PROTOCOL */ + +#if CONFIG_FILE_PROTOCOL + +static int file_open(URLContext *h, const char *filename, int flags) +{ + av_strstart(filename, "file:", &filename); + return file_open_common(h, filename, flags); +} + const URLProtocol ff_file_protocol = { .name = "file", .url_open = file_open, @@ -369,11 +377,40 @@ const URLProtocol ff_file_protocol = { .url_open_dir = file_open_dir, .url_read_dir = file_read_dir, .url_close_dir = file_close_dir, - .default_whitelist = "file,crypto,data" + .default_whitelist = "file,fs,crypto,data" }; #endif /* CONFIG_FILE_PROTOCOL */ +#if CONFIG_FS_PROTOCOL + +static int fs_open(URLContext *h, const char *filename, int flags) +{ + av_strstart(filename, "fs:", &filename); + return file_open_common(h, filename, flags); +} + +const URLProtocol ff_fs_protocol = { + .name = "fs", + .url_open = fs_open, + .url_read = file_read, + .url_write = file_write, + .url_seek = file_seek, + .url_close = file_close, + .url_get_file_handle = file_get_handle, + .url_check = file_check, + .url_delete = file_delete, + .url_move = file_move, + .priv_data_size = sizeof(FileContext), + .priv_data_class = &file_class, + .url_open_dir = file_open_dir, + .url_read_dir = file_read_dir, + .url_close_dir = file_close_dir, + .default_whitelist = "file,fs,crypto,data" +}; + +#endif /* CONFIG_FS_PROTOCOL */ + #if CONFIG_PIPE_PROTOCOL static int pipe_open(URLContext *h, const char *filename, int flags) diff --git a/libavformat/protocols.c b/libavformat/protocols.c index 7f08f151b6..a0035da590 100644 --- a/libavformat/protocols.c +++ b/libavformat/protocols.c @@ -33,6 +33,7 @@ extern const URLProtocol ff_data_protocol; extern const URLProtocol ff_ffrtmpcrypt_protocol; extern const URLProtocol ff_ffrtmphttp_protocol; extern const URLProtocol ff_file_protocol; +extern const URLProtocol ff_fs_protocol; extern const URLProtocol ff_ftp_protocol; extern const URLProtocol ff_gopher_protocol; extern const URLProtocol ff_gophers_protocol; -- 2.30.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".