X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess_output%2Ffile.c;h=272ceda84561617d14ef36cf014437e1a2c4bf90;hb=2d261c0702436f68753c5c5b6943f77e16d5e46c;hp=23e36fe6576eb003db613998b411583d72c75e62;hpb=3d23a7a3555d4fcd705629fcd4255f4a572416ce;p=vlc diff --git a/modules/access_output/file.c b/modules/access_output/file.c index 23e36fe657..272ceda845 100644 --- a/modules/access_output/file.c +++ b/modules/access_output/file.c @@ -25,17 +25,21 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include #include #include -#include #include #include #include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #include -#include -#include "charset.h" +#include +#include +#include +#include "vlc_strings.h" #ifdef HAVE_UNISTD_H # include @@ -64,7 +68,7 @@ static void Close( vlc_object_t * ); vlc_module_begin(); set_description( _("File stream output") ); - set_shortname( N_("File" )); + set_shortname( _("File" )); set_capability( "sout access", 50 ); set_category( CAT_SOUT ); set_subcategory( SUBCAT_SOUT_ACO ); @@ -83,9 +87,9 @@ static const char *ppsz_sout_options[] = { "append", NULL }; -static int Write( sout_access_out_t *, block_t * ); +static ssize_t Write( sout_access_out_t *, block_t * ); static int Seek ( sout_access_out_t *, off_t ); -static int Read ( sout_access_out_t *, block_t * ); +static ssize_t Read ( sout_access_out_t *, block_t * ); struct sout_access_out_sys_t { @@ -101,9 +105,9 @@ static int Open( vlc_object_t *p_this ) int i_flags; vlc_value_t val; - sout_CfgParse( p_access, SOUT_CFG_PREFIX, ppsz_sout_options, p_access->p_cfg ); + config_ChainParse( p_access, SOUT_CFG_PREFIX, ppsz_sout_options, p_access->p_cfg ); - if( !p_access->psz_name ) + if( !p_access->psz_path ) { msg_Err( p_access, "no file name specified" ); return VLC_EGENERIC; @@ -119,7 +123,7 @@ static int Open( vlc_object_t *p_this ) var_Get( p_access, SOUT_CFG_PREFIX "append", &val ); i_flags |= val.b_bool ? O_APPEND : O_TRUNC; - if( !strcmp( p_access->psz_name, "-" ) ) + if( !strcmp( p_access->psz_path, "-" ) ) { #if defined(WIN32) setmode (STDOUT_FILENO, O_BINARY); @@ -129,46 +133,16 @@ static int Open( vlc_object_t *p_this ) } else { - char *psz_localname = ToLocale( p_access->psz_name ); - char *psz_tmp, *psz_tmp2, *psz_rewriten; - int fd, i, i_length = strlen( psz_localname ); - for( i = 0, psz_tmp = psz_localname ; - ( psz_tmp = strstr( psz_tmp, "%T" ) ) ; psz_tmp++, i++ ) - ; - if( i ) - { - i_length += 32 * i; - psz_rewriten = (char *) malloc( i_length ); - if( ! psz_rewriten ) - return ( VLC_EGENERIC ); - psz_tmp = psz_localname; - psz_tmp2 = psz_rewriten; - while( *psz_tmp ) - { - if( ( *psz_tmp == '%' ) && ( *(psz_tmp+1) == 'T' ) ) - { - time_t t; - time( &t ); - psz_tmp2 += sprintf( psz_tmp2, "%d", (int) t ); - psz_tmp+=2; - } - else - *psz_tmp2++ = *psz_tmp++; - } - *psz_tmp2 = *psz_tmp; - fd = open( psz_rewriten, i_flags, 0666 ); - LocaleFree( psz_localname ); - free( psz_rewriten ); - } - else - { - fd = open( psz_localname, i_flags, 0666 ); - LocaleFree( psz_localname ); - } + int fd; + char *psz_tmp = str_format( p_access, p_access->psz_path ); + path_sanitize( psz_tmp ); + + fd = utf8_open( psz_tmp, i_flags, 0666 ); + free( psz_tmp ); + if( fd == -1 ) { - msg_Err( p_access, "cannot open `%s' (%s)", p_access->psz_name, - strerror( errno ) ); + msg_Err( p_access, "cannot open `%s' (%m)", p_access->psz_path ); free( p_access->p_sys ); return( VLC_EGENERIC ); } @@ -179,7 +153,7 @@ static int Open( vlc_object_t *p_this ) p_access->pf_read = Read; p_access->pf_seek = Seek; - msg_Dbg( p_access, "file access output opened (`%s')", p_access->psz_name ); + msg_Dbg( p_access, "file access output opened (`%s')", p_access->psz_path ); /* Update pace control flag */ if( p_access->psz_access && !strcmp( p_access->psz_access, "stream" ) ) @@ -195,7 +169,7 @@ static void Close( vlc_object_t * p_this ) { sout_access_out_t *p_access = (sout_access_out_t*)p_this; - if( strcmp( p_access->psz_name, "-" ) ) + if( strcmp( p_access->psz_path, "-" ) ) { if( p_access->p_sys->i_handle ) { @@ -214,9 +188,9 @@ static void Close( vlc_object_t * p_this ) /***************************************************************************** * Read: standard read on a file descriptor. *****************************************************************************/ -static int Read( sout_access_out_t *p_access, block_t *p_buffer ) +static ssize_t Read( sout_access_out_t *p_access, block_t *p_buffer ) { - if( strcmp( p_access->psz_name, "-" ) ) + if( strcmp( p_access->psz_path, "-" ) ) { return read( p_access->p_sys->i_handle, p_buffer->p_buffer, p_buffer->i_buffer ); @@ -229,7 +203,7 @@ static int Read( sout_access_out_t *p_access, block_t *p_buffer ) /***************************************************************************** * Write: standard write on a file descriptor. *****************************************************************************/ -static int Write( sout_access_out_t *p_access, block_t *p_buffer ) +static ssize_t Write( sout_access_out_t *p_access, block_t *p_buffer ) { size_t i_write = 0; @@ -252,7 +226,7 @@ static int Write( sout_access_out_t *p_access, block_t *p_buffer ) *****************************************************************************/ static int Seek( sout_access_out_t *p_access, off_t i_pos ) { - if( strcmp( p_access->psz_name, "-" ) ) + if( strcmp( p_access->psz_path, "-" ) ) { #if defined( WIN32 ) && !defined( UNDER_CE ) return( _lseeki64( p_access->p_sys->i_handle, i_pos, SEEK_SET ) );