]> git.sesse.net Git - ffmpeg/commitdiff
avutil: add av_fopen_utf8()
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 1 Nov 2013 00:51:14 +0000 (01:51 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 4 Nov 2013 14:38:52 +0000 (15:38 +0100)
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>
doc/APIchanges
libavutil/avutil.h
libavutil/file_open.c
libavutil/version.h

index c0a6a1d85522a93271ce3fb85a3af3f89ae6f74c..fdc09b2ec3afe2b110a7b238363bf10caa1c7710 100644 (file)
@@ -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.
 
index 4692c005c76d35e260480f0333f6951abeb1d524..4e680ed0e01d2474f3a2a932450391ce82c3050f 100644 (file)
@@ -312,6 +312,13 @@ unsigned av_int_list_length_for_size(unsigned elsize,
 #define av_int_list_length(list, term) \
     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);
+
 /**
  * @}
  * @}
index 389076fca164d590975bf91253e901c8f2f8b7d2..bcdd26ae355410fdc5d9a6f7cedf45b9b178127d 100644 (file)
@@ -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);
+}
index c3de379b5763ecb82935a4794abcaf1e100789a1..abd5362244948616066683d284dcfca519cbfb34 100644 (file)
@@ -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, \