[FFmpeg-cvslog] avutil: add av_fopen_utf8()
Michael Niedermayer
git at videolan.org
Mon Nov 4 15:47:56 CET 2013
ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Fri Nov 1 01:51:14 2013 +0100| [85cabf1ca98fcc502fcf5b8d6bfb6d8061c2caef] | committer: Michael Niedermayer
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 at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=85cabf1ca98fcc502fcf5b8d6bfb6d8061c2caef
---
doc/APIchanges | 3 +++
libavutil/avutil.h | 7 +++++++
libavutil/file_open.c | 34 ++++++++++++++++++++++++++++++++++
libavutil/version.h | 2 +-
4 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/doc/APIchanges b/doc/APIchanges
index c0a6a1d..fdc09b2 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 4692c00..4e680ed 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 389076f..bcdd26a 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 c3de379..abd5362 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, \
More information about the ffmpeg-cvslog
mailing list