* charset.h: Unicode UTF-8 wrappers function
*****************************************************************************
* Copyright (C) 2003-2005 the VideoLAN team
- * Copyright © 2005-2006 Rémi Denis-Courmont
+ * Copyright © 2005-2010 Rémi Denis-Courmont
* $Id$
*
* Author: Rémi Denis-Courmont <rem # videolan,org>
*/
#include <stdarg.h>
-#include <sys/types.h>
-#include <dirent.h>
VLC_EXPORT( void, LocaleFree, ( const char * ) );
VLC_EXPORT( char *, FromLocale, ( const char * ) LIBVLC_USED );
VLC_EXPORT( char *, ToLocale, ( const char * ) LIBVLC_USED );
VLC_EXPORT( char *, ToLocaleDup, ( const char * ) LIBVLC_USED );
-/* TODO: move all of this to "vlc_fs.h" or something like that */
-VLC_EXPORT( int, utf8_open, ( const char *filename, int flags, ... ) LIBVLC_USED );
-VLC_EXPORT( FILE *, utf8_fopen, ( const char *filename, const char *mode ) LIBVLC_USED );
-VLC_EXPORT( DIR *, utf8_opendir, ( const char *dirname ) LIBVLC_USED );
-VLC_EXPORT( char *, utf8_readdir, ( DIR *dir ) LIBVLC_USED );
-VLC_EXPORT( int, utf8_loaddir, ( DIR *dir, char ***namelist, int (*select)( const char * ), int (*compar)( const char **, const char ** ) ) );
-VLC_EXPORT( int, utf8_scandir, ( const char *dirname, char ***namelist, int (*select)( const char * ), int (*compar)( const char **, const char ** ) ) );
-VLC_EXPORT( int, utf8_mkdir, ( const char *filename, mode_t mode ) );
-VLC_EXPORT( int, utf8_unlink, ( const char *filename ) );
-int utf8_rename( const char *, const char * );
-
-#if defined( WIN32 ) && !defined( UNDER_CE )
-# define stat _stati64
-#endif
-
-VLC_EXPORT( int, utf8_stat, ( const char *filename, struct stat *buf ) );
-VLC_EXPORT( int, utf8_lstat, ( const char *filename, struct stat *buf ) );
-
VLC_EXPORT( int, utf8_vfprintf, ( FILE *stream, const char *fmt, va_list ap ) );
VLC_EXPORT( int, utf8_fprintf, ( FILE *, const char *, ... ) LIBVLC_FORMAT( 2, 3 ) );
-VLC_EXPORT( int, utf8_mkstemp, ( char * ) );
-
VLC_EXPORT( char *, EnsureUTF8, ( char * ) );
VLC_EXPORT( const char *, IsUTF8, ( const char * ) LIBVLC_USED );
--- /dev/null
+/*****************************************************************************
+ * vlc_fs.h: File system helpers
+ *****************************************************************************
+ * Copyright © 2006-2010 Rémi Denis-Courmont
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifndef VLC_FS_H
+#define VLC_FS_H 1
+
+/**
+ * \file
+ * Those functions convert file paths from UTF-8 to the system-specific
+ * encoding (especially UTF-16 on Windows). Also, they always mark file
+ * descriptor with the close-on-exec flag.
+ */
+
+#include <sys/types.h>
+#include <dirent.h>
+
+VLC_EXPORT( int, utf8_open, ( const char *filename, int flags, ... ) LIBVLC_USED );
+VLC_EXPORT( FILE *, utf8_fopen, ( const char *filename, const char *mode ) LIBVLC_USED );
+
+VLC_EXPORT( DIR *, utf8_opendir, ( const char *dirname ) LIBVLC_USED );
+VLC_EXPORT( char *, utf8_readdir, ( DIR *dir ) LIBVLC_USED );
+VLC_EXPORT( int, utf8_loaddir, ( DIR *dir, char ***namelist, int (*select)( const char * ), int (*compar)( const char **, const char ** ) ) );
+VLC_EXPORT( int, utf8_scandir, ( const char *dirname, char ***namelist, int (*select)( const char * ), int (*compar)( const char **, const char ** ) ) );
+VLC_EXPORT( int, utf8_mkdir, ( const char *filename, mode_t mode ) );
+
+VLC_EXPORT( int, utf8_unlink, ( const char *filename ) );
+/* Not exported */
+int utf8_rename( const char *, const char * );
+
+#if defined( WIN32 ) && !defined( UNDER_CE )
+# define stat _stati64
+#endif
+
+VLC_EXPORT( int, utf8_stat, ( const char *filename, struct stat *buf ) );
+VLC_EXPORT( int, utf8_lstat, ( const char *filename, struct stat *buf ) );
+
+VLC_EXPORT( int, utf8_mkstemp, ( char * ) );
+
+#endif
#include <vlc_input.h>
#include <vlc_access.h>
#include <vlc_demux.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_bits.h>
#include <assert.h>
#include <vlc_plugin.h>
#include <vlc_input.h>
#include <vlc_demux.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_picture.h>
#ifdef HAVE_FCNTL_H
}
#endif
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_url.h>
#include <vlc_strings.h>
#include <time.h>
#include <unistd.h>
#include <poll.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
/* DVB Card Drivers */
#include <linux/dvb/version.h>
#include <vlc_access.h>
#include <vlc_demux.h>
#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_dialog.h>
# define PathIsNetworkPathW(wpath) (! wcsncmp(wpath, L"\\\\", 2))
#endif
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_url.h>
struct access_sys_t
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-#include <vlc_charset.h>
+#include <dirent.h>
int Open (vlc_object_t *);
void Close (vlc_object_t *);
#include <vlc_plugin.h>
#include <vlc_access.h>
#include <vlc_input.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_dialog.h>
#include <assert.h>
#include <unistd.h>
#include <poll.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include "libmtp.h"
#include <vlc_plugin.h>
#include <vlc_access.h>
#include <vlc_demux.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <fcntl.h>
#include <unistd.h>
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_access.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <sys/types.h>
#include <fcntl.h>
#endif
#include <vlc_common.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_plugin.h>
#include <vlc_access.h>
#include <vlc_demux.h>
#include <vlc_access.h>
#include <vlc_picture.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <vlc_plugin.h>
#include <vlc_access.h>
#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_demux.h>
#include <vlc_input.h>
#include <vlc_common.h>
#include <vlc_access.h>
#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <limits.h>
#ifdef HAVE_UNISTD_H
#include "cdrom_internals.h"
#include "cdrom.h"
-#include <vlc_charset.h>
#include <vlc_meta.h>
/*****************************************************************************
#include <vlc_common.h>
#include <vlc_plugin.h>
-#include <vlc_charset.h>
#include "vcd.h"
#include "access.h"
#include <vlc_plugin.h>
#include <vlc_sout.h>
#include <vlc_block.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_strings.h>
#if defined( WIN32 ) && !defined( UNDER_CE )
#include <vlc_plugin.h>
#include <vlc_aout.h>
#include <vlc_codecs.h> /* WAVEHEADER */
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#define FRAME_SIZE 2048
#define A52_FRAME_NB 1536
#include <vlc_common.h>
#include <vlc_plugin.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_aout.h>
#include <vlc_image.h>
#include <vlc_filter.h>
-#include <vlc_charset.h>
/*****************************************************************************
* Local prototypes
#include "http.h"
#include <vlc_plugin.h>
#include <vlc_url.h>
+#include <vlc_fs.h>
#include <assert.h>
#include <vlc_vlm.h>
#include <vlc_network.h>
#include <vlc_acl.h>
-#include <vlc_charset.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
+#include <vlc_fs.h>
/* Utility function for scandir */
static int Filter( const char *foo )
#include <errno.h>
#include <fcntl.h>
#include <sys/stat.h>
+#include <vlc_fs.h>
/****************************************************************************
* File and directory functions
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_demux.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
/*****************************************************************************
* Module descriptor
#include <vlc_common.h>
#include <vlc_md5.h>
#include "libmp4.h"
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#ifdef WIN32
# include <io.h>
#include <vlc_codecs.h>
#include <vlc_bits.h>
-#include <vlc_charset.h>
#include "vorbis.h"
#include "kate_categories.h"
#include <vlc_common.h>
#include <vlc_demux.h>
-#include <vlc_charset.h>
#include "playlist.h"
#include <vlc_common.h>
#include <vlc_demux.h>
-#include <vlc_charset.h>
#include "playlist.h"
#include <vlc_memory.h>
#include <vlc_demux.h>
-#include <vlc_charset.h>
#include "asademux.h"
#include <vlc_iso_lang.h>
#include <vlc_network.h>
#include <vlc_charset.h>
+#include <vlc_fs.h>
#include "../mux/mpeg/csa.h"
#include <limits.h>
#include <vlc_demux.h>
-#include <vlc_charset.h>
#include "ps.h"
#include "vobsub.h"
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+#include <vlc_charset.h>
+
static inline void vorbis_ParseComment( vlc_meta_t **pp_meta, const uint8_t *p_data, int i_data )
{
int n;
#include <vlc_common.h>
#include <vlc_plugin.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <stdlib.h> /* free() */
#include <string.h> /* strerror() */
#include <vlc_playlist.h>
#include "../utils/ustring.hpp"
-#include <vlc_charset.h>
-
-
Playtree::Playtree( intf_thread_t *pIntf ): VarTree( pIntf )
{
// Get the VLC playlist object
#include <vlc_plugin.h>
#include <vlc_playlist.h>
#include <vlc_art_finder.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_url.h>
#ifdef HAVE_SYS_STAT_H
#include <vlc_common.h>
#include <vlc_codec.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <sys/types.h>
#ifdef HAVE_UNISTD_H
#include <vlc_tls.h>
#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_block.h>
#include <gcrypt.h>
#include <vlc_plugin.h>
#include <vlc_interface.h>
#include <vlc_playlist.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <assert.h>
#include <vlc_demux.h>
#include <vlc_url.h>
#include <vlc_strings.h>
-#include <vlc_charset.h>
#include "vlc.h"
#include "libs.h"
#include <vlc_common.h>
#include <vlc_meta.h>
-#include <vlc_charset.h>
#include <vlc_interface.h>
#include <vlc_playlist.h>
#include <vlc_common.h>
#include <vlc_meta.h>
-#include <vlc_charset.h>
#include <vlc_playlist.h>
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_meta.h>
-#include <vlc_charset.h>
#include <vlc_aout.h>
#include <lua.h> /* Low level lua C API */
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_meta.h>
-#include <vlc_charset.h>
#include <vlc_aout.h>
#include <vlc_interface.h>
#include <vlc_keys.h>
#include <vlc_common.h>
#include <vlc_network.h>
#include <vlc_url.h>
+#include <vlc_fs.h>
#include <lua.h> /* Low level lua C API */
#include <lauxlib.h> /* Higher level C API */
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_meta.h>
-#include <vlc_charset.h>
#include <vlc_aout.h>
#include <lua.h> /* Low level lua C API */
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_meta.h>
-#include <vlc_charset.h>
#include <vlc_aout.h>
#include <lua.h> /* Low level lua C API */
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_meta.h>
-#include <vlc_charset.h>
#include <vlc_aout.h>
#include <lua.h> /* Low level lua C API */
#include <vlc_url.h>
#include <vlc_strings.h>
#include <vlc_stream.h>
-#include <vlc_charset.h>
#include "vlc.h"
#include "libs.h"
#include <vlc_plugin.h>
#include <vlc_meta.h>
#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_aout.h>
#include <vlc_services_discovery.h>
#include <sys/stat.h>
#include <vlc_url.h>
#include <vlc_strings.h>
#include <vlc_stream.h>
-#include <vlc_charset.h>
#include <lua.h> /* Low level lua C API */
#include <lauxlib.h> /* Higher level C API */
#include <vlc_common.h>
#include <vlc_osd.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <limits.h>
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_inhibit.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <vlc_common.h>
#include <vlc_plugin.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_vout.h>
#include <vlc_osd.h>
#include <vlc_block.h>
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_url.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_services_discovery.h>
#include <sys/stat.h>
#include <vlc_common.h>
#include <vlc_playlist.h>
#include <vlc_plugin.h>
-#include <vlc_charset.h>
#include <vlc_interface.h>
#include <vlc_services_discovery.h>
#include <assert.h>
#include <vlc_stream.h>
#include <vlc_input.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
/*****************************************************************************
#include <vlc_network.h>
#include <vlc_strings.h>
#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_gcrypt.h>
#include <vlc_es.h>
#include <vlc_http.h>
#include <vlc_plugin.h>
#include <vlc_block.h>
#include <vlc_sout.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <assert.h>
/*****************************************************************************
#include <vlc_httpd.h>
#include <vlc_url.h>
#include <vlc_network.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_strings.h>
#include <vlc_rand.h>
#ifdef HAVE_SRTP
#include <vlc_block.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_network.h>
#define HAVE_MMX
#include <vlc_vout.h>
#include <vlc_filter.h>
#include <vlc_osd.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <ctype.h>
#include <fcntl.h>
#include <vlc_filter.h>
#include "filter_common.h"
-#include <vlc_charset.h>
#include <vlc_image.h>
#include <vlc_input.h>
#include <vlc_playlist.h>
#include <vlc_plugin.h>
#include <vlc_vout_display.h>
#include <vlc_picture_pool.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
/*****************************************************************************
* Module descriptor
#include <vlc_vout.h>
#include <vlc_vout_window.h>
#include <vlc_playlist.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
/*****************************************************************************
* Local prototypes
#include <vlc_plugin.h>
#include <vlc_vout_display.h>
#include <vlc_picture_pool.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
/*****************************************************************************
* Module descriptor
../include/vlc_events.h \
../include/vlc_filter.h \
../include/vlc_fourcc.h \
+ ../include/vlc_fs.h \
../include/vlc_gcrypt.h \
../include/vlc_http.h \
../include/vlc_httpd.h \
#include <vlc_common.h>
#include "vlc_keys.h"
-#include "vlc_charset.h"
#include "vlc_configuration.h"
#include <assert.h>
#include <vlc_common.h>
#include "../libvlc.h"
-#include "vlc_charset.h"
+#include <vlc_charset.h>
+#include <vlc_fs.h>
#include "vlc_keys.h"
#include "configuration.h"
#endif
#include <vlc_common.h>
-#include <vlc_charset.h>
-
+#include <vlc_fs.h>
+#ifdef WIN32
+# include <vlc_charset.h>
+#endif
#include <vlc_input.h>
#include <vlc_es_out.h>
#include <vlc_block.h>
#include <vlc_dialog.h>
#include <vlc_url.h>
#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_strings.h>
#ifdef HAVE_SYS_STAT_H
#include <vlc_common.h>
#include <vlc_strings.h>
#include <vlc_osd.h>
-#include <vlc_charset.h>
#include <vlc_memory.h>
#include <libvlc.h>
#endif
#include <vlc_common.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_url.h>
#ifdef HAVE_DIRENT_H
#include "vlm_internal.h"
#include "vlm_event.h"
#include <vlc_vod.h>
-#include <vlc_charset.h>
#include <vlc_sout.h>
#include "../stream_output/stream_output.h"
#include "../libvlc.h"
#include <vlc_stream.h>
#include "vlm_internal.h"
#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_sout.h>
#include "../stream_output/stream_output.h"
#include "../libvlc.h"
#include "audio_output/aout_internal.h"
#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_cpu.h>
#include <vlc_url.h>
#include <vlc_es.h>
#include <vlc_image.h>
#include <vlc_stream.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_sout.h>
#include <libvlc.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_md5.h>
#include <vlc_pgpkey.h>
#include <vlc_stream.h>
#include <vlc_strings.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_dialog.h>
#include <gcrypt.h>
#include "vlc_common.h"
#include <vlc_stream.h>
#include <vlc_strings.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include "update.h"
#include "config/configuration.h"
-#include "vlc_charset.h"
+#include <vlc_fs.h>
#include "modules/modules.h"
#include "config/configuration.h"
-#include "vlc_charset.h"
+#include <vlc_fs.h>
#include "vlc_arrays.h"
#include "modules/modules.h"
#include <vlc_acl.h>
#include <vlc_network.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
/* FIXME: rwlock on acl, but libvlc doesn't implement rwlock */
typedef struct vlc_acl_entry_t
#include <assert.h>
#include <vlc_common.h>
#include <vlc_playlist.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_strings.h>
#include <vlc_stream.h>
#include <vlc_url.h>
#include <vlc_events.h>
#include "playlist_internal.h"
#include "config/configuration.h"
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_url.h>
#include <sys/types.h>
#include <vlc_common.h>
#include <vlc_charset.h>
+#include <vlc_fs.h>
#include "libvlc.h" /* utf8_mkdir */
#include <vlc_rand.h>
#endif
#include <vlc_common.h>
-#include <vlc_charset.h>
+#include <vlc_fs.h>
#include <vlc_strings.h>
#include <vlc_block.h>
#include <vlc_vout.h>
#include <vlc_image.h>
#include <vlc_osd.h>
-#include <vlc_charset.h>
-
#include <vlc_strings.h>
#include <vlc_charset.h>
#include "../libvlc.h"
#include <vlc_common.h>
#include "../libvlc.h"
#include <vlc_playlist.h>
-#include <vlc_charset.h>
#include "../extras/getopt.h"