*****************************************************************************/
#include <vlc/vlc.h>
#include <vlc_charset.h>
+#include "libvlc.h" /* utf8_mkdir */
#include <assert.h>
char *psz_charset;
if (vlc_current_charset (&psz_charset)
|| (psz_charset == NULL)
+ || (strcmp (psz_charset, "ASCII") == 0)
|| ((size_t)snprintf (charset, sizeof (charset), "%s//translit",
psz_charset) >= sizeof (charset)))
strcpy (charset, "UTF-8");
* @return A 0 return value indicates success. A -1 return value indicates an
* error, and an error code is stored in errno
*/
-int utf8_mkdir( const char *dirname )
+int utf8_mkdir( const char *dirname, mode_t mode )
{
#if defined (UNDER_CE) || defined (WIN32)
wchar_t wname[MAX_PATH + 1];
errno = ENOENT;
return -1;
}
- res = mkdir( locname, 0755 );
+ res = mkdir( locname, mode );
LocaleFree( locname );
return res;
*
* @param dir The directory that is being read
*
- * @return a UTF-8 string of the directory entry. Use LocaleFree() to free this memory
+ * @return a UTF-8 string of the directory entry. Use free() to free this memory.
*/
char *utf8_readdir( DIR *dir )
{
return utf8_statEx( filename, buf, VLC_FALSE );
}
+/**
+ * utf8_unlink: Calls unlink() after conversion of file name to OS locale
+ *
+ * @param filename a UTF-8 string with the name of the file you want to delete.
+ * @return A 0 return value indicates success. A -1 return value indicates an
+ * error, and an error code is stored in errno
+ */
+int utf8_unlink( const char *filename )
+{
+#if defined (WIN32) || defined (UNDER_CE)
+ if( GetVersion() < 0x80000000 )
+ {
+ /* for Windows NT and above */
+ wchar_t wpath[MAX_PATH + 1];
+
+ if( !MultiByteToWideChar( CP_UTF8, 0, filename, -1, wpath, MAX_PATH ) )
+ {
+ errno = ENOENT;
+ return -1;
+ }
+ wpath[MAX_PATH] = L'\0';
+
+ /*
+ * unlink() cannot open files with non-“ANSI” characters on Windows.
+ * We use _wunlink() instead.
+ */
+ return _wunlink( wpath );
+ }
+#endif
+ const char *local_name = ToLocale( filename );
+
+ if( local_name == NULL )
+ {
+ errno = ENOENT;
+ return -1;
+ }
+
+ int ret = unlink( local_name );
+ LocaleFree( local_name );
+ return ret;
+}
+
+
+
/**
* utf8_*printf: *printf with conversion from UTF-8 to local encoding
*/