diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-11-01 01:51:14 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-11-04 15:38:52 +0100 |
commit | 85cabf1ca98fcc502fcf5b8d6bfb6d8061c2caef (patch) | |
tree | 5cac6c8fcca90badb397dd816513491eebf5929c | |
parent | d0ac60730d26f1d59817c675806ed199abbef906 (diff) | |
download | ffmpeg-85cabf1ca98fcc502fcf5b8d6bfb6d8061c2caef.tar.gz |
avutil: add av_fopen_utf8()
fopen() on windows uses UTF-16, we use UTF-8 everywhere, this
function bridges the gap by using avpriv_open()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | doc/APIchanges | 3 | ||||
-rw-r--r-- | libavutil/avutil.h | 7 | ||||
-rw-r--r-- | libavutil/file_open.c | 34 | ||||
-rw-r--r-- | libavutil/version.h | 2 |
4 files changed, 45 insertions, 1 deletions
diff --git a/doc/APIchanges b/doc/APIchanges index c0a6a1d855..fdc09b2ec3 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,9 @@ libavutil: 2012-10-22 API changes, most recent first: +2013-11-04 - xxxxxxx - lavu 52.50.100 - avutil.h + Add av_fopen_utf8() + 2013-08-xx - xxxxxxx - lavu 52.17.0 - avframe.h Add AVFrame.flags and AV_FRAME_FLAG_CORRUPT. diff --git a/libavutil/avutil.h b/libavutil/avutil.h index 4692c005c7..4e680ed0e0 100644 --- a/libavutil/avutil.h +++ b/libavutil/avutil.h @@ -313,6 +313,13 @@ unsigned av_int_list_length_for_size(unsigned elsize, av_int_list_length_for_size(sizeof(*(list)), list, term) /** + * Open a file using a UTF-8 filename. + * The API of this function matches POSIX fopen(), errors are returned through + * errno. + */ +FILE *av_fopen_utf8(const char *path, const char *mode); + +/** * @} * @} */ diff --git a/libavutil/file_open.c b/libavutil/file_open.c index 389076fca1..bcdd26ae35 100644 --- a/libavutil/file_open.c +++ b/libavutil/file_open.c @@ -93,3 +93,37 @@ int avpriv_open(const char *filename, int flags, ...) return fd; } + +FILE *av_fopen_utf8(const char *path, const char *mode) +{ + int fd; + int access; + const char *m = mode; + + switch (*m++) { + case 'r': access = O_RDONLY; break; + case 'w': access = O_CREAT|O_WRONLY|O_TRUNC; break; + case 'a': access = O_CREAT|O_WRONLY|O_APPEND; break; + default : + errno = EINVAL; + return NULL; + } + while (*m) { + if (*m == '+') { + access &= ~(O_RDONLY | O_WRONLY); + access |= O_RDWR; + } else if (*m == 'b') { +#ifdef O_BINARY + access |= O_BINARY; +#endif + } else if (*m) { + errno = EINVAL; + return NULL; + } + m++; + } + fd = avpriv_open(path, access, 0666); + if (fd == -1) + return NULL; + return fdopen(fd, mode); +} diff --git a/libavutil/version.h b/libavutil/version.h index c3de379b57..abd5362244 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -75,7 +75,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 52 -#define LIBAVUTIL_VERSION_MINOR 49 +#define LIBAVUTIL_VERSION_MINOR 50 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ |