X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcontrol%2Fhttp%2Futil.c;h=564ab4a35806c741cd56a04189f516520ea40dd0;hb=a8b6113072c236b8b5b45c92cad6a57d6176b8cc;hp=a32a7f90f674593733492750c97968b2620e9f25;hpb=6e9aebe30504304bf27f9896036ded79291a3253;p=vlc diff --git a/modules/control/http/util.c b/modules/control/http/util.c index a32a7f90f6..564ab4a358 100644 --- a/modules/control/http/util.c +++ b/modules/control/http/util.c @@ -23,8 +23,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #include -#include #include "http.h" #include "vlc_strings.h" @@ -150,7 +153,7 @@ int E_(ParseDirectory)( intf_thread_t *p_intf, char *psz_root, msg_Dbg( p_intf, "dir=%s", psz_dir ); - sprintf( dir, "%s%c.access", psz_dir, sep ); + snprintf( dir, sizeof( dir ), "%s%c.access", psz_dir, sep ); if( ( file = utf8_fopen( dir, "r" ) ) != NULL ) { char line[1024]; @@ -184,7 +187,7 @@ int E_(ParseDirectory)( intf_thread_t *p_intf, char *psz_root, fclose( file ); } - sprintf( dir, "%s%c.hosts", psz_dir, sep ); + snprintf( dir, sizeof( dir ), "%s%c.hosts", psz_dir, sep ); p_acl = ACL_Create( p_intf, VLC_FALSE ); if( ACL_LoadFile( p_acl, dir ) ) { @@ -194,7 +197,7 @@ int E_(ParseDirectory)( intf_thread_t *p_intf, char *psz_root, for( ;; ) { - const char *psz_filename; + char *psz_filename; /* parse psz_src dir */ if( ( psz_filename = utf8_readdir( p_dir ) ) == NULL ) { @@ -203,10 +206,13 @@ int E_(ParseDirectory)( intf_thread_t *p_intf, char *psz_root, if( ( psz_filename[0] == '.' ) || ( i_dirlen + strlen( psz_filename ) > MAX_DIR_SIZE ) ) + { + free( psz_filename ); continue; + } - sprintf( dir, "%s%c%s", psz_dir, sep, psz_filename ); - free( (char*) psz_filename ); + snprintf( dir, sizeof( dir ), "%s%c%s", psz_dir, sep, psz_filename ); + free( psz_filename ); if( E_(ParseDirectory)( p_intf, psz_root, dir ) ) { @@ -258,7 +264,7 @@ int E_(ParseDirectory)( intf_thread_t *p_intf, char *psz_root, if( !f->b_handler ) { - char *psz_type = strdup( p_sys->psz_html_type ); + char *psz_type = strdup( "text/html; charset=UTF-8" ); if( strstr( &dir[strlen( psz_root )], ".xml" ) ) { char *psz = strstr( psz_type, "html;" ); @@ -322,14 +328,8 @@ int E_(ParseDirectory)( intf_thread_t *p_intf, char *psz_root, } } - if( user ) - { - free( user ); - } - if( password ) - { - free( password ); - } + free( user ); + free( password ); ACL_Destroy( p_acl ); closedir( p_dir ); @@ -338,74 +338,6 @@ int E_(ParseDirectory)( intf_thread_t *p_intf, char *psz_root, } -/************************************************************************** - * Locale functions - **************************************************************************/ -char *E_(FromUTF8)( intf_thread_t *p_intf, char *psz_utf8 ) -{ - intf_sys_t *p_sys = p_intf->p_sys; - - if ( p_sys->iconv_from_utf8 != (vlc_iconv_t)-1 ) - { - size_t i_in = strlen(psz_utf8); - size_t i_out = i_in * 2; - char *psz_local = malloc(i_out + 1); - char *psz_out = psz_local; - size_t i_ret; - char psz_tmp[i_in + 1]; - const char *psz_in = psz_tmp; - strcpy( psz_tmp, psz_utf8 ); - - i_in = strlen( psz_tmp ); - - i_ret = vlc_iconv( p_sys->iconv_from_utf8, &psz_in, &i_in, - &psz_out, &i_out ); - if( i_ret == (size_t)-1 || i_in ) - { - msg_Warn( p_intf, - "failed to convert \"%s\" to desired charset (%s)", - psz_utf8, strerror(errno) ); - free( psz_local ); - return strdup( psz_utf8 ); - } - - *psz_out = '\0'; - return psz_local; - } - else - return strdup( psz_utf8 ); -} - -char *E_(ToUTF8)( intf_thread_t *p_intf, char *psz_local ) -{ - intf_sys_t *p_sys = p_intf->p_sys; - - if ( p_sys->iconv_to_utf8 != (vlc_iconv_t)-1 ) - { - const char *psz_in = psz_local; - size_t i_in = strlen(psz_in); - size_t i_out = i_in * 6; - char *psz_utf8 = malloc(i_out + 1); - char *psz_out = psz_utf8; - - size_t i_ret = vlc_iconv( p_sys->iconv_to_utf8, &psz_in, &i_in, - &psz_out, &i_out ); - if( i_ret == (size_t)-1 || i_in ) - { - msg_Warn( p_intf, - "failed to convert \"%s\" to desired charset (%s)", - psz_local, strerror(errno) ); - free( psz_utf8 ); - return strdup( psz_local ); - } - - *psz_out = '\0'; - return psz_utf8; - } - else - return strdup( psz_local ); -} - /************************************************************************* * Playlist stuff *************************************************************************/ @@ -432,14 +364,14 @@ void E_(PlaylistListNode)( intf_thread_t *p_intf, playlist_t *p_pl, E_(mvar_AppendNewVar)( itm, "current", "0" ); } - sprintf( value, "%d", p_node->p_input->i_id ); + sprintf( value, "%d", p_node->i_id ); E_(mvar_AppendNewVar)( itm, "index", value ); - psz = E_(FromUTF8)( p_intf, p_node->p_input->psz_name ); + psz = input_item_GetName( p_node->p_input ); E_(mvar_AppendNewVar)( itm, "name", psz ); free( psz ); - psz = E_(FromUTF8)( p_intf, p_node->p_input->psz_uri ); + psz = input_item_GetURI( p_node->p_input ); E_(mvar_AppendNewVar)( itm, "uri", psz ); free( psz ); @@ -458,7 +390,8 @@ void E_(PlaylistListNode)( intf_thread_t *p_intf, playlist_t *p_pl, E_(mvar_AppendNewVar)( itm, "ro", "rw" ); } - sprintf( value, "%ld", (long)p_node->p_input->i_duration ); + sprintf( value, "%ld", + (long) input_item_GetDuration( p_node->p_input ) ); E_(mvar_AppendNewVar)( itm, "duration", value ); E_(mvar_AppendVar)( s, itm ); @@ -466,19 +399,16 @@ void E_(PlaylistListNode)( intf_thread_t *p_intf, playlist_t *p_pl, else { char value[512]; - char *psz; int i_child; mvar_t *itm = E_(mvar_New)( name, "set" ); - psz = E_(FromUTF8)( p_intf, p_node->p_input->psz_name ); - E_(mvar_AppendNewVar)( itm, "name", psz ); - E_(mvar_AppendNewVar)( itm, "uri", psz ); - free( psz ); + E_(mvar_AppendNewVar)( itm, "name", p_node->p_input->psz_name ); + E_(mvar_AppendNewVar)( itm, "uri", p_node->p_input->psz_name ); sprintf( value, "Node" ); E_(mvar_AppendNewVar)( itm, "type", value ); - sprintf( value, "%d", p_node->p_input->i_id ); + sprintf( value, "%d", p_node->i_id ); E_(mvar_AppendNewVar)( itm, "index", value ); sprintf( value, "%d", p_node->i_children); @@ -980,8 +910,9 @@ char *E_(RealPath)( intf_thread_t *p_intf, const char *psz_src ) if( psz_dir[0] == '~' ) { + char *dir; /* This is incomplete : we should also support the ~cmassiot/ syntax. */ - asprintf( &dir, "%s%s", p_intf->p_libvlc->psz_userdir, psz_dir + 1 ); + asprintf( &dir, "%s%s", p_intf->p_libvlc->psz_homedir, psz_dir + 1 ); free( psz_dir ); psz_dir = dir; }