Commit 33dfab3c authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

vlc_path2uri(): rename from make_URI() and always convert path

When there is an ambiguity, the caller is responsible for determining
whether a string is an URL or a path. In most cases, the string is
known as a file path.
parent 595db21a
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
* This file defines functions for manipulating URL in vlc * This file defines functions for manipulating URL in vlc
*/ */
VLC_API char *vlc_path2uri (const char *path, const char *scheme) VLC_MALLOC;
struct vlc_url_t struct vlc_url_t
{ {
char *psz_protocol; char *psz_protocol;
...@@ -48,7 +50,6 @@ struct vlc_url_t ...@@ -48,7 +50,6 @@ struct vlc_url_t
VLC_API char * decode_URI_duplicate( const char *psz ) VLC_MALLOC; VLC_API char * decode_URI_duplicate( const char *psz ) VLC_MALLOC;
VLC_API char * decode_URI( char *psz ); VLC_API char * decode_URI( char *psz );
VLC_API char * encode_URI_component( const char *psz ) VLC_MALLOC; VLC_API char * encode_URI_component( const char *psz ) VLC_MALLOC;
VLC_API char * make_URI( const char *path, const char *scheme ) VLC_MALLOC;
VLC_API char * make_path( const char *url ) VLC_MALLOC; VLC_API char * make_path( const char *url ) VLC_MALLOC;
/***************************************************************************** /*****************************************************************************
......
...@@ -313,7 +313,7 @@ libvlc_media_t *libvlc_media_new_location( libvlc_instance_t *p_instance, ...@@ -313,7 +313,7 @@ libvlc_media_t *libvlc_media_new_location( libvlc_instance_t *p_instance,
libvlc_media_t *libvlc_media_new_path( libvlc_instance_t *p_instance, libvlc_media_t *libvlc_media_new_path( libvlc_instance_t *p_instance,
const char *path ) const char *path )
{ {
char *mrl = make_URI( path, "file" ); char *mrl = vlc_path2uri( path, "file" );
if( unlikely(mrl == NULL) ) if( unlikely(mrl == NULL) )
{ {
libvlc_printerr( "Not enough memory" ); libvlc_printerr( "Not enough memory" );
......
...@@ -133,7 +133,7 @@ int DirInit (access_t *p_access, DIR *handle) ...@@ -133,7 +133,7 @@ int DirInit (access_t *p_access, DIR *handle)
uri = NULL; uri = NULL;
} }
else else
uri = make_URI (p_access->psz_filepath, "file"); uri = vlc_path2uri (p_access->psz_filepath, "file");
if (unlikely(uri == NULL)) if (unlikely(uri == NULL))
goto error; goto error;
......
...@@ -2080,8 +2080,11 @@ static input_item_t *parse_MRL( const char *mrl ) ...@@ -2080,8 +2080,11 @@ static input_item_t *parse_MRL( const char *mrl )
if( !psz_item_mrl ) if( !psz_item_mrl )
{ {
psz_item_mrl = make_URI( psz_item, NULL ); if( strstr( psz_item_mrl, "://" ) != NULL )
if( !psz_item_mrl ) psz_item_mrl = strdup( psz_item );
else
psz_item_mrl = vlc_path2uri( psz_item, NULL );
if( psz_item_mrl == NULL )
{ {
free( psz_orig ); free( psz_orig );
return NULL; return NULL;
......
...@@ -189,7 +189,8 @@ static int Open( vlc_object_t * p_this ) ...@@ -189,7 +189,8 @@ static int Open( vlc_object_t * p_this )
// test whether this file belongs to our family // test whether this file belongs to our family
const uint8_t *p_peek; const uint8_t *p_peek;
bool file_ok = false; bool file_ok = false;
std::string s_url = make_URI( s_filename.c_str(), "file" ); #warning Memory leak!
std::string s_url = vlc_path2uri( s_filename.c_str(), "file" );
stream_t *p_file_stream = stream_UrlNew( stream_t *p_file_stream = stream_UrlNew(
p_demux, p_demux,
s_url.c_str() ); s_url.c_str() );
......
...@@ -221,5 +221,5 @@ char *ProcessMRL( const char *psz_mrl, const char *psz_prefix ) ...@@ -221,5 +221,5 @@ char *ProcessMRL( const char *psz_mrl, const char *psz_prefix )
return ret; return ret;
uri: uri:
return make_URI( psz_mrl, NULL ); return vlc_path2uri( psz_mrl, NULL );
} }
...@@ -1409,8 +1409,7 @@ static bool HandleBrowseKey(intf_thread_t *intf, int key) ...@@ -1409,8 +1409,7 @@ static bool HandleBrowseKey(intf_thread_t *intf, int key)
return true; return true;
} }
char *uri = make_URI(path, dir_entry->file ? "file" char *uri = vlc_path2uri(path, "file");
: "directory");
free(path); free(path);
if (uri == NULL) if (uri == NULL)
return true; return true;
...@@ -1447,7 +1446,7 @@ static bool HandleBrowseKey(intf_thread_t *intf, int key) ...@@ -1447,7 +1446,7 @@ static bool HandleBrowseKey(intf_thread_t *intf, int key)
static void OpenSelection(intf_thread_t *intf) static void OpenSelection(intf_thread_t *intf)
{ {
intf_sys_t *sys = intf->p_sys; intf_sys_t *sys = intf->p_sys;
char *uri = make_URI(sys->open_chain, NULL); char *uri = vlc_path2uri(sys->open_chain, NULL);
if (uri == NULL) if (uri == NULL)
return; return;
......
...@@ -563,7 +563,7 @@ void DiscOpenPanel::updateMRL() ...@@ -563,7 +563,7 @@ void DiscOpenPanel::updateMRL()
else else
scheme = "cdda"; scheme = "cdda";
char *mrl = make_URI( qtu(discPath), scheme ); char *mrl = vlc_path2uri( qtu(discPath), scheme );
if( unlikely(mrl == NULL) ) if( unlikely(mrl == NULL) )
return; return;
......
...@@ -475,26 +475,27 @@ void DialogsProvider::simpleMLAppendDialog() ...@@ -475,26 +475,27 @@ void DialogsProvider::simpleMLAppendDialog()
**/ **/
void DialogsProvider::openUrlDialog() void DialogsProvider::openUrlDialog()
{ {
OpenUrlDialog *oud = new OpenUrlDialog( p_intf ); OpenUrlDialog oud( p_intf );
if( oud->exec() == QDialog::Accepted ) if( oud.exec() != QDialog::Accepted )
{ return;
QString url = oud->url();
if( !url.isEmpty() ) QString url = oud.url();
{ if( url.isEmpty() )
char *uri = make_URI( qtu( url ), NULL ); return;
if( likely( uri != NULL ) )
if( !url.contains( qfu( "://" ) ) )
{ {
playlist_Add( THEPL, uri, char *uri = vlc_path2uri( qtu( url ), NULL );
NULL, !oud->shouldEnqueue() ? if( uri == NULL )
( PLAYLIST_APPEND | PLAYLIST_GO ) return;
url = qfu(uri);
free( uri );
}
playlist_Add( THEPL, qtu(url), NULL,
!oud.shouldEnqueue() ? ( PLAYLIST_APPEND | PLAYLIST_GO )
: ( PLAYLIST_APPEND | PLAYLIST_PREPARSE ), : ( PLAYLIST_APPEND | PLAYLIST_PREPARSE ),
PLAYLIST_END, true, false ); PLAYLIST_END, true, false );
RecentsMRL::getInstance( p_intf )->addRecent( url ); RecentsMRL::getInstance( p_intf )->addRecent( url );
free( uri );
}
}
}
delete oud;
} }
/* Directory */ /* Directory */
...@@ -521,7 +522,7 @@ static void openDirectory( intf_thread_t *p_intf, bool pl, bool go ) ...@@ -521,7 +522,7 @@ static void openDirectory( intf_thread_t *p_intf, bool pl, bool go )
dir.remove( "BDMV" ); dir.remove( "BDMV" );
} }
char *uri = make_URI( qtu( toNativeSeparators( dir ) ), scheme ); char *uri = vlc_path2uri( qtu( toNativeSeparators( dir ) ), scheme );
if( unlikely(uri == NULL) ) if( unlikely(uri == NULL) )
return; return;
......
...@@ -28,7 +28,10 @@ ...@@ -28,7 +28,10 @@
QString toURI( const QString& s ) QString toURI( const QString& s )
{ {
char *psz = make_URI( qtu(s), NULL ); if( s.contains( qfu("://") ) )
return s;
char *psz = vlc_path2uri( qtu(s), NULL );
if( psz == NULL ) if( psz == NULL )
return qfu(""); return qfu("");
......
...@@ -37,13 +37,15 @@ void CmdAddItem::execute() ...@@ -37,13 +37,15 @@ void CmdAddItem::execute()
if( !pPlaylist ) if( !pPlaylist )
return; return;
char* psz_uri = make_URI( m_name.c_str(), NULL ); if( strstr( m_name.c_str(), "://" ) == NULL )
{
char *psz_uri = vlc_path2uri( m_name.c_str(), NULL );
if( !psz_uri ) if( !psz_uri )
return; return;
m_name = psz_uri;
playlist_Add( pPlaylist, psz_uri, NULL, free( psz_uri );
}
playlist_Add( pPlaylist, m_name.c_str(), NULL,
m_playNow ? PLAYLIST_APPEND | PLAYLIST_GO : PLAYLIST_APPEND, m_playNow ? PLAYLIST_APPEND | PLAYLIST_GO : PLAYLIST_APPEND,
PLAYLIST_END, true, false ); PLAYLIST_END, true, false );
free( psz_uri );
} }
...@@ -39,7 +39,7 @@ XMLParser::XMLParser( intf_thread_t *pIntf, const string &rFileName ) ...@@ -39,7 +39,7 @@ XMLParser::XMLParser( intf_thread_t *pIntf, const string &rFileName )
LoadCatalog(); LoadCatalog();
char* psz_uri = make_URI( rFileName.c_str(), NULL ); char *psz_uri = vlc_path2uri( rFileName.c_str(), NULL );
m_pStream = stream_UrlNew( pIntf, psz_uri ); m_pStream = stream_UrlNew( pIntf, psz_uri );
free( psz_uri ); free( psz_uri );
if( !m_pStream ) if( !m_pStream )
......
...@@ -43,7 +43,7 @@ FileBitmap::FileBitmap( intf_thread_t *pIntf, image_handler_t *pImageHandler, ...@@ -43,7 +43,7 @@ FileBitmap::FileBitmap( intf_thread_t *pIntf, image_handler_t *pImageHandler,
video_format_Init( &fmt_in, 0 ); video_format_Init( &fmt_in, 0 );
video_format_Init( &fmt_out, VLC_CODEC_RGBA ); video_format_Init( &fmt_out, VLC_CODEC_RGBA );
char* psz_uri = make_URI( fileName.c_str(), NULL ); char* psz_uri = vlc_path2uri( fileName.c_str(), NULL );
pPic = image_ReadUrl( pImageHandler, psz_uri, &fmt_in, &fmt_out ); pPic = image_ReadUrl( pImageHandler, psz_uri, &fmt_in, &fmt_out );
free( psz_uri ); free( psz_uri );
......
...@@ -326,13 +326,22 @@ void Playtree::insertItems( VarTree& elem, const list<string>& files, bool start ...@@ -326,13 +326,22 @@ void Playtree::insertItems( VarTree& elem, const list<string>& files, bool start
for( list<string>::const_iterator it = files.begin(); for( list<string>::const_iterator it = files.begin();
it != files.end(); ++it, i_pos++, first = false ) it != files.end(); ++it, i_pos++, first = false )
{ {
char* psz_uri = make_URI( it->c_str(), NULL ); input_item_t *pItem;
if( !psz_uri )
continue;
input_item_t* pItem = input_item_New( psz_uri, NULL ); if( strstr( it->c_str(), "://" ) )
if( pItem ) pItem = input_item_New( it->c_str(), NULL );
else
{ {
char *psz_uri = vlc_path2uri( it->c_str(), NULL );
if( psz_uri == NULL )
continue;
pItem = input_item_New( psz_uri, NULL );
free( psz_uri );
}
if( pItem == NULL)
continue;
int i_mode = PLAYLIST_APPEND; int i_mode = PLAYLIST_APPEND;
if( first && start ) if( first && start )
i_mode |= PLAYLIST_GO; i_mode |= PLAYLIST_GO;
...@@ -340,8 +349,6 @@ void Playtree::insertItems( VarTree& elem, const list<string>& files, bool start ...@@ -340,8 +349,6 @@ void Playtree::insertItems( VarTree& elem, const list<string>& files, bool start
playlist_NodeAddInput( m_pPlaylist, pItem, p_node, playlist_NodeAddInput( m_pPlaylist, pItem, p_node,
i_mode, i_pos, pl_Locked ); i_mode, i_pos, pl_Locked );
} }
free( psz_uri );
}
fin: fin:
playlist_Unlock( m_pPlaylist ); playlist_Unlock( m_pPlaylist );
......
...@@ -81,9 +81,14 @@ static int vlclua_make_uri( lua_State *L ) ...@@ -81,9 +81,14 @@ static int vlclua_make_uri( lua_State *L )
{ {
const char *psz_input = luaL_checkstring( L, 1 ); const char *psz_input = luaL_checkstring( L, 1 );
const char *psz_scheme = luaL_optstring( L, 2, NULL ); const char *psz_scheme = luaL_optstring( L, 2, NULL );
char *psz_uri = make_URI( psz_input, psz_scheme ); if( strstr( psz_input, "://" ) == NULL )
{
char *psz_uri = vlc_path2uri( psz_input, psz_scheme );
lua_pushstring( L, psz_uri ); lua_pushstring( L, psz_uri );
free( psz_uri ); free( psz_uri );
}
else
lua_pushstring( L, psz_input );
return 1; return 1;
} }
......
...@@ -118,7 +118,7 @@ static int FindMeta( vlc_object_t *p_this ) ...@@ -118,7 +118,7 @@ static int FindMeta( vlc_object_t *p_this )
struct stat dummy; struct stat dummy;
if( vlc_stat( filepath, &dummy ) == 0 ) if( vlc_stat( filepath, &dummy ) == 0 )
{ {
char *psz_uri = make_URI( filepath, "file" ); char *psz_uri = vlc_path2uri( filepath, "file" );
if( psz_uri ) if( psz_uri )
{ {
input_item_SetArtURL( p_item, psz_uri ); input_item_SetArtURL( p_item, psz_uri );
......
...@@ -189,7 +189,7 @@ static void *Run( void *data ) ...@@ -189,7 +189,7 @@ static void *Run( void *data )
!S_ISDIR( st.st_mode ) ) !S_ISDIR( st.st_mode ) )
continue; continue;
char* psz_uri = make_URI( psz_dir, "file" ); char* psz_uri = vlc_path2uri( psz_dir, "file" );
input_item_t* p_root = input_item_New( psz_uri, NULL ); input_item_t* p_root = input_item_New( psz_uri, NULL );
if( p_sys->i_type == Picture ) if( p_sys->i_type == Picture )
...@@ -267,7 +267,7 @@ static int onNewFileAdded( vlc_object_t *p_this, char const *psz_var, ...@@ -267,7 +267,7 @@ static int onNewFileAdded( vlc_object_t *p_this, char const *psz_var,
if( !psz_file || !*psz_file ) if( !psz_file || !*psz_file )
return VLC_EGENERIC; return VLC_EGENERIC;
char* psz_uri = make_URI( psz_file, "file" ); char* psz_uri = vlc_path2uri( psz_file, "file" );
input_item_t* p_item = input_item_New( psz_uri, NULL ); input_item_t* p_item = input_item_New( psz_uri, NULL );
if( p_sys->i_type == Picture ) if( p_sys->i_type == Picture )
......
...@@ -557,7 +557,7 @@ static char *disc_get_mrl (struct udev_device *dev) ...@@ -557,7 +557,7 @@ static char *disc_get_mrl (struct udev_device *dev)
return NULL; return NULL;
val = udev_device_get_devnode (dev); val = udev_device_get_devnode (dev);
return make_URI (val, scheme); return vlc_path2uri (val, scheme);
} }
static char *disc_get_name (struct udev_device *dev) static char *disc_get_name (struct udev_device *dev)
......
...@@ -182,7 +182,7 @@ static void LoadMask( filter_t *p_filter, const char *psz_filename ) ...@@ -182,7 +182,7 @@ static void LoadMask( filter_t *p_filter, const char *psz_filename )
if( p_filter->p_sys->p_mask ) if( p_filter->p_sys->p_mask )
picture_Release( p_filter->p_sys->p_mask ); picture_Release( p_filter->p_sys->p_mask );
p_image = image_HandlerCreate( p_filter ); p_image = image_HandlerCreate( p_filter );
char *psz_url = make_URI( psz_filename, NULL ); char *psz_url = vlc_path2uri( psz_filename, NULL );
p_filter->p_sys->p_mask = p_filter->p_sys->p_mask =
image_ReadUrl( p_image, psz_url, &fmt_in, &fmt_out ); image_ReadUrl( p_image, psz_url, &fmt_in, &fmt_out );
free( psz_url ); free( psz_url );
......
...@@ -105,7 +105,7 @@ static void LoadMask( filter_t *p_filter, const char *psz_filename ) ...@@ -105,7 +105,7 @@ static void LoadMask( filter_t *p_filter, const char *psz_filename )
memset( &fmt_out, 0, sizeof( video_format_t ) ); memset( &fmt_out, 0, sizeof( video_format_t ) );
fmt_out.i_chroma = VLC_CODEC_YUVA; fmt_out.i_chroma = VLC_CODEC_YUVA;
p_image = image_HandlerCreate( p_filter ); p_image = image_HandlerCreate( p_filter );
char *psz_url = make_URI( psz_filename, NULL ); char *psz_url = vlc_path2uri( psz_filename, NULL );
p_filter->p_sys->p_mask = p_filter->p_sys->p_mask =
image_ReadUrl( p_image, psz_url, &fmt_in, &fmt_out ); image_ReadUrl( p_image, psz_url, &fmt_in, &fmt_out );
free( psz_url ); free( psz_url );
......
...@@ -625,7 +625,7 @@ static picture_t *LoadImage( vlc_object_t *p_this, const char *psz_filename ) ...@@ -625,7 +625,7 @@ static picture_t *LoadImage( vlc_object_t *p_this, const char *psz_filename )
if( !p_image ) if( !p_image )
return NULL; return NULL;
char *psz_url = make_URI( psz_filename, NULL ); char *psz_url = vlc_path2uri( psz_filename, NULL );
picture_t *p_pic = image_ReadUrl( p_image, psz_url, &fmt_in, &fmt_out ); picture_t *p_pic = image_ReadUrl( p_image, psz_url, &fmt_in, &fmt_out );
free( psz_url ); free( psz_url );
image_HandlerDelete( p_image ); image_HandlerDelete( p_image );
......
...@@ -1098,7 +1098,7 @@ static void LoadSlaves( input_thread_t *p_input ) ...@@ -1098,7 +1098,7 @@ static void LoadSlaves( input_thread_t *p_input )
if( *psz == 0 ) if( *psz == 0 )
break; break;
char *uri = make_URI( psz, NULL ); char *uri = vlc_path2uri( psz, NULL );
psz = psz_delim; psz = psz_delim;
if( uri == NULL ) if( uri == NULL )
continue; continue;
...@@ -2041,10 +2041,7 @@ static bool Control( input_thread_t *p_input, ...@@ -2041,10 +2041,7 @@ static bool Control( input_thread_t *p_input,
case INPUT_CONTROL_ADD_SLAVE: case INPUT_CONTROL_ADD_SLAVE:
if( val.psz_string ) if( val.psz_string )
{ {
char *uri = make_URI( val.psz_string, NULL ); const char *uri = val.psz_string;
if( uri == NULL )
break;
input_source_t *slave = InputSourceNew( p_input ); input_source_t *slave = InputSourceNew( p_input );
if( slave && !InputSourceInit( p_input, slave, uri, NULL, false ) ) if( slave && !InputSourceInit( p_input, slave, uri, NULL, false ) )
...@@ -2089,7 +2086,6 @@ static bool Control( input_thread_t *p_input, ...@@ -2089,7 +2086,6 @@ static bool Control( input_thread_t *p_input,
free( slave ); free( slave );
msg_Warn( p_input, "failed to add %s as slave", uri ); msg_Warn( p_input, "failed to add %s as slave", uri );
} }
free( uri );
} }
break; break;
...@@ -3156,7 +3152,7 @@ static void SubtitleAdd( input_thread_t *p_input, char *psz_subtitle, unsigned i ...@@ -3156,7 +3152,7 @@ static void SubtitleAdd( input_thread_t *p_input, char *psz_subtitle, unsigned i
free( psz_path ); free( psz_path );
} }
char *url = make_URI( psz_subtitle, "file" ); char *url = vlc_path2uri( psz_subtitle, NULL );
var_Change( p_input, "spu-es", VLC_VAR_CHOICESCOUNT, &count, NULL ); var_Change( p_input, "spu-es", VLC_VAR_CHOICESCOUNT, &count, NULL );
......
...@@ -628,9 +628,16 @@ static int vlm_OnMediaUpdate( vlm_t *p_vlm, vlm_media_sys_t *p_media ) ...@@ -628,9 +628,16 @@ static int vlm_OnMediaUpdate( vlm_t *p_vlm, vlm_media_sys_t *p_media )
vlc_gc_decref( p_media->vod.p_item ); vlc_gc_decref( p_media->vod.p_item );
char *psz_uri = make_URI( p_cfg->ppsz_input[0], NULL ); if( strstr( p_cfg->ppsz_input[0], "://" ) == NULL )
p_media->vod.p_item = input_item_New( psz_uri, p_cfg->psz_name ); {
char *psz_uri = vlc_path2uri( p_cfg->ppsz_input[0], NULL );
p_media->vod.p_item = input_item_New( psz_uri,
p_cfg->psz_name );
free( psz_uri ); free( psz_uri );
}
else
p_media->vod.p_item = input_item_New( p_cfg->ppsz_input[0],
p_cfg->psz_name );
if( p_cfg->psz_output ) if( p_cfg->psz_output )
{ {
...@@ -1029,10 +1036,15 @@ static int vlm_ControlMediaInstanceStart( vlm_t *p_vlm, int64_t id, const char * ...@@ -1029,10 +1036,15 @@ static int vlm_ControlMediaInstanceStart( vlm_t *p_vlm, int64_t id, const char *
/* Start new one */ /* Start new one */
p_instance->i_index = i_input_index; p_instance->i_index = i_input_index;
char *psz_uri = make_URI( p_media->cfg.ppsz_input[p_instance->i_index], if( strstr( p_media->cfg.ppsz_input[p_instance->i_index], "://" ) == NULL )
NULL ); {
char *psz_uri = vlc_path2uri(
p_media->cfg.ppsz_input[p_instance->i_index], NULL );
input_item_SetURI( p_instance->p_item, psz_uri ) ; input_item_SetURI( p_instance->p_item, psz_uri ) ;
free( psz_uri ); free( psz_uri );
}
else
input_item_SetURI( p_instance->p_item, p_media->cfg.ppsz_input[p_instance->i_index] ) ;
if( asprintf( &psz_log, _("Media: %s"), p_media->cfg.psz_name ) != -1 ) if( asprintf( &psz_log, _("Media: %s"), p_media->cfg.psz_name ) != -1 )
{ {
......
...@@ -525,7 +525,7 @@ error: ...@@ -525,7 +525,7 @@ error:
static int ExecuteLoad( vlm_t *p_vlm, const char *psz_path, vlm_message_t **pp_status ) static int ExecuteLoad( vlm_t *p_vlm, const char *psz_path, vlm_message_t **pp_status )
{ {
char *psz_url = make_URI( psz_path, NULL ); char *psz_url = vlc_path2uri( psz_path, NULL );
stream_t *p_stream = stream_UrlNew( p_vlm, psz_url ); stream_t *p_stream = stream_UrlNew( p_vlm, psz_url );
free( psz_url ); free( psz_url );
uint64_t i_size; uint64_t i_size;
......
...@@ -337,7 +337,11 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, ...@@ -337,7 +337,11 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
} }
/* We need to resolve relative paths in this instance */ /* We need to resolve relative paths in this instance */
char *psz_mrl = make_URI( ppsz_argv[i_input], NULL ); char *psz_mrl;
if( strstr( psz_mrl, "://" ) )
psz_mrl = strdup( ppsz_argv[i_input] );
else
psz_mrl = vlc_path2uri( ppsz_argv[i_input], NULL );
const char *psz_after_track = MPRIS_APPEND; const char *psz_after_track = MPRIS_APPEND;
if( psz_mrl == NULL ) if( psz_mrl == NULL )
...@@ -815,12 +819,17 @@ static void GetFilenames( libvlc_int_t *p_vlc, unsigned n, ...@@ -815,12 +819,17 @@ static void GetFilenames( libvlc_int_t *p_vlc, unsigned n,
} }
} }
char *mrl = make_URI( args[n], NULL ); char *mrl = NULL;
if( strstr( args[n], "://" ) == NULL )
{
mrl = vlc_path2uri( args[n], NULL );
if( !mrl ) if( !mrl )
continue; continue;
}
playlist_AddExt( pl_Get( p_vlc ), mrl, NULL, PLAYLIST_INSERT, playlist_AddExt( pl_Get( p_vlc ), (mrl != NULL) ? mrl : args[n], NULL,
0, -1, i_options, ( i_options ? &args[n + 1] : NULL ), PLAYLIST_INSERT, 0, -1, i_options,
( i_options ? &args[n + 1] : NULL ),
VLC_INPUT_OPTION_TRUSTED, true, pl_Unlocked ); VLC_INPUT_OPTION_TRUSTED, true, pl_Unlocked );
free( mrl ); free( mrl );
} }
......
...@@ -221,7 +221,7 @@ libvlc_InternalDestroy ...@@ -221,7 +221,7 @@ libvlc_InternalDestroy
libvlc_InternalInit libvlc_InternalInit
libvlc_Quit libvlc_Quit
libvlc_SetExitHandler libvlc_SetExitHandler
make_URI vlc_path2uri
make_path make_path
mdate mdate
ml_Create ml_Create
......
...@@ -184,7 +184,7 @@ int playlist_FindArtInCache( input_item_t *p_item ) ...@@ -184,7 +184,7 @@ int playlist_FindArtInCache( input_item_t *p_item )
if( asprintf( &psz_file, "%s" DIR_SEP "%s", if( asprintf( &psz_file, "%s" DIR_SEP "%s",
psz_path, psz_filename ) != -1 ) psz_path, psz_filename ) != -1 )
{ {
char *psz_uri = make_URI( psz_file, "file" ); char *psz_uri = vlc_path2uri( psz_file, "file" );
if( psz_uri ) if( psz_uri )
{ {
input_item_SetArtURL( p_item, psz_uri ); input_item_SetArtURL( p_item, psz_uri );
...@@ -274,7 +274,7 @@ int playlist_SaveArt( playlist_t *p_playlist, input_item_t *p_item, ...@@ -274,7 +274,7 @@ int playlist_SaveArt( playlist_t *p_playlist, input_item_t *p_item,
if( !psz_filename ) if( !psz_filename )
return VLC_EGENERIC; return VLC_EGENERIC;
char *psz_uri = make_URI( psz_filename, "file" ); char *psz_uri = vlc_path2uri( psz_filename, "file" );
if( !psz_uri ) if( !psz_uri )
{ {
free( psz_filename ); free( psz_filename );
......
...@@ -85,7 +85,7 @@ int playlist_Import( playlist_t *p_playlist, const char *psz_file ) ...@@ -85,7 +85,7 @@ int playlist_Import( playlist_t *p_playlist, const char *psz_file )
{ {
input_item_t *p_input; input_item_t *p_input;
const char *const psz_option = "meta-file"; const char *const psz_option = "meta-file";
char *psz_uri = make_URI( psz_file, NULL ); char *psz_uri = vlc_path2uri( psz_file, NULL );
if( psz_uri == NULL ) if( psz_uri == NULL )
return VLC_EGENERIC; return VLC_EGENERIC;
...@@ -141,7 +141,7 @@ int playlist_MLLoad( playlist_t *p_playlist ) ...@@ -141,7 +141,7 @@ int playlist_MLLoad( playlist_t *p_playlist )
return VLC_EGENERIC; return VLC_EGENERIC;
} }
char *psz_uri = make_URI( psz_file, "file/xspf-open" ); char *psz_uri = vlc_path2uri( psz_file, "file/xspf-open" );
free( psz_file ); free( psz_file );
if( psz_uri == NULL ) if( psz_uri == NULL )
return VLC_ENOMEM; return VLC_ENOMEM;
......
...@@ -70,7 +70,7 @@ static inline void test_b64 (const char *in, const char *out) ...@@ -70,7 +70,7 @@ static inline void test_b64 (const char *in, const char *out)
static char *make_URI_def (const char *in) static char *make_URI_def (const char *in)
{ {
return make_URI (in, NULL); return vlc_path2uri (in, NULL);
} }
static inline void test_path (const char *in, const char *out) static inline void test_path (const char *in, const char *out)
...@@ -119,9 +119,6 @@ int main (void) ...@@ -119,9 +119,6 @@ int main (void)
test_b64 ("foobar", "Zm9vYmFy"); test_b64 ("foobar", "Zm9vYmFy");
/* Path test */ /* Path test */
test_path ("file:///", "file:///");
test_path ("http://www.example.com/%7Ejohn/",
"http://www.example.com/%7Ejohn/");
test_path ("/", "file:///"); test_path ("/", "file:///");
test_path ("/home/john/", "file:///home/john/"); test_path ("/home/john/", "file:///home/john/");
test_path ("/home/john//too///many//slashes", test_path ("/home/john//too///many//slashes",
......
...@@ -148,20 +148,17 @@ char *encode_URI_component (const char *str) ...@@ -148,20 +148,17 @@ char *encode_URI_component (const char *str)
/** /**
* Builds a URL representation from a local file path. * Builds a URL representation from a local file path.
* If already a URI, return a copy of the string.
* @param path path to convert (or URI to copy) * @param path path to convert (or URI to copy)
* @param scheme URI scheme to use (default is auto: "file", "fd" or "smb") * @param scheme URI scheme to use (default is auto: "file", "fd" or "smb")
* @return a nul-terminated URI string (use free() to release it), * @return a nul-terminated URI string (use free() to release it),
* or NULL in case of error * or NULL in case of error
*/ */
char *make_URI (const char *path, const char *scheme) char *vlc_path2uri (const char *path, const char *scheme)
{ {
if (path == NULL) if (path == NULL)
return NULL; return NULL;
if (scheme == NULL && !strcmp (path, "-")) if (scheme == NULL && !strcmp (path, "-"))
return strdup ("fd://0"); // standard input return strdup ("fd://0"); // standard input
if (strstr (path, "://") != NULL)
return strdup (path); /* Already a URI */
/* Note: VLC cannot handle URI schemes without double slash after the /* Note: VLC cannot handle URI schemes without double slash after the
* scheme name (such as mailto: or news:). */ * scheme name (such as mailto: or news:). */
...@@ -207,7 +204,7 @@ char *make_URI (const char *path, const char *scheme) ...@@ -207,7 +204,7 @@ char *make_URI (const char *path, const char *scheme)
if (dup[i] == '\\') if (dup[i] == '\\')
dup[i] = DIR_SEP_CHAR; dup[i] = DIR_SEP_CHAR;
char *ret = make_URI (dup, scheme); char *ret = vlc_path2uri (dup, scheme);
free (dup); free (dup);
return ret; return ret;
} }
...@@ -238,7 +235,7 @@ char *make_URI (const char *path, const char *scheme) ...@@ -238,7 +235,7 @@ char *make_URI (const char *path, const char *scheme)
buf = NULL; buf = NULL;
free (cwd); free (cwd);
ret = (buf != NULL) ? make_URI (buf, scheme) : NULL; ret = (buf != NULL) ? vlc_path2uri (buf, scheme) : NULL;
free (buf); free (buf);
return ret; return ret;
} }
......
...@@ -295,8 +295,14 @@ LRESULT CALLBACK WMCOPYWNDPROC( HWND hwnd, UINT uMsg, WPARAM wParam, ...@@ -295,8 +295,14 @@ LRESULT CALLBACK WMCOPYWNDPROC( HWND hwnd, UINT uMsg, WPARAM wParam,
i_options++; i_options++;
} }
char *psz_URI = make_URI( ppsz_argv[i_opt], NULL ); #warning URI conversion must be done in calling process instead!
playlist_AddExt( p_playlist, psz_URI, /* FIXME: This breaks relative paths if calling vlc.exe is
* started from a different working directory. */
char *psz_URI = NULL;
if( strstr( psz_URI, "://" ) == NULL )
psz_URI = vlc_path2uri( ppsz_argv[i_opt], NULL );
playlist_AddExt( p_playlist,
(psz_URI != NULL) ? psz_URI : ppsz_argv[i_opt],
NULL, PLAYLIST_APPEND | NULL, PLAYLIST_APPEND |
( ( i_opt || p_data->enqueue ) ? 0 : PLAYLIST_GO ), ( ( i_opt || p_data->enqueue ) ? 0 : PLAYLIST_GO ),
PLAYLIST_END, -1, PLAYLIST_END, -1,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment