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>tags/n2.2-rc1
@@ -15,6 +15,9 @@ libavutil: 2012-10-22 | |||||
API changes, most recent first: | 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 | 2013-08-xx - xxxxxxx - lavu 52.17.0 - avframe.h | ||||
Add AVFrame.flags and AV_FRAME_FLAG_CORRUPT. | Add AVFrame.flags and AV_FRAME_FLAG_CORRUPT. | ||||
@@ -312,6 +312,13 @@ unsigned av_int_list_length_for_size(unsigned elsize, | |||||
#define av_int_list_length(list, term) \ | #define av_int_list_length(list, term) \ | ||||
av_int_list_length_for_size(sizeof(*(list)), 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); | |||||
/** | /** | ||||
* @} | * @} | ||||
* @} | * @} | ||||
@@ -93,3 +93,37 @@ int avpriv_open(const char *filename, int flags, ...) | |||||
return fd; | 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); | |||||
} |
@@ -75,7 +75,7 @@ | |||||
*/ | */ | ||||
#define LIBAVUTIL_VERSION_MAJOR 52 | #define LIBAVUTIL_VERSION_MAJOR 52 | ||||
#define LIBAVUTIL_VERSION_MINOR 49 | |||||
#define LIBAVUTIL_VERSION_MINOR 50 | |||||
#define LIBAVUTIL_VERSION_MICRO 100 | #define LIBAVUTIL_VERSION_MICRO 100 | ||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||