1
mirror of https://code.videolan.org/videolan/vlc synced 2024-09-16 16:02:54 +02:00

* added vlc_url_t structure, vlc_UrlParse and vlc_UrlClean.

(It could avoid a lot of duplicated code...)
This commit is contained in:
Laurent Aimar 2003-11-07 17:44:43 +00:00
parent 7a9053f225
commit 8b67f70abe

View File

@ -2,9 +2,10 @@
* network.h: interface to communicate with network plug-ins * network.h: interface to communicate with network plug-ins
***************************************************************************** *****************************************************************************
* Copyright (C) 2002 VideoLAN * Copyright (C) 2002 VideoLAN
* $Id: network.h,v 1.4 2003/07/31 23:44:49 fenrir Exp $ * $Id: network.h,v 1.5 2003/11/07 17:44:43 fenrir Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* Laurent Aimar <fenrir@via.ecp.fr>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -46,3 +47,109 @@ struct network_socket_t
#define NETWORK_UDP 1 #define NETWORK_UDP 1
#define NETWORK_TCP 2 #define NETWORK_TCP 2
typedef struct
{
char *psz_protocol;
char *psz_host;
int i_port;
char *psz_path;
char *psz_option;
} vlc_url_t;
/*****************************************************************************
* vlc_UrlParse:
*****************************************************************************
* option : if != 0 then path is split at this char
*
* format protocol://host[:port]/path[OPTIONoption]
*****************************************************************************/
static inline void vlc_UrlParse( vlc_url_t *url, char *psz_url, char option )
{
char *psz_dup = strdup( psz_url );
char *psz_parse = psz_dup;
char *p;
url->psz_protocol = NULL;
url->psz_host = NULL;
url->i_port = 0;
url->psz_path = NULL;
url->psz_option = NULL;
p = strchr( psz_dup, ':' );
if( p )
{
/* we have a protocol */
/* skip :// */
*p++ = '\0';
if( p[0] == '/' && p[1] == '/' )
{
p += 2;
}
url->psz_protocol = strdup( psz_dup );
psz_parse = p;
p = strchr( psz_parse, '/' );
if( !p || psz_parse < p )
{
char *p2;
/* We have a host[:port] */
url->psz_host = strdup( psz_parse );
if( p )
{
url->psz_host[p - psz_parse] = '\0';
}
p2 = strchr( url->psz_host, ':' );
if( p2 )
{
*p2++ = '\0';
url->i_port = atoi( p2 );
}
}
psz_parse = p;
}
/* Now parse psz_path and psz_option */
if( psz_parse )
{
url->psz_path = strdup( psz_parse );
if( option != '\0' )
{
p = strchr( url->psz_path, option );
if( p )
{
*p++ = '\0';
url->psz_option = strdup( p );
}
}
}
free( psz_dup );
}
/*****************************************************************************
* vlc_UrlClean:
*****************************************************************************
*
*****************************************************************************/
static inline void vlc_UrlClean( vlc_url_t *url )
{
if( url->psz_protocol ) free( url->psz_protocol );
if( url->psz_host ) free( url->psz_host );
if( url->psz_path ) free( url->psz_path );
if( url->psz_option ) free( url->psz_option );
url->psz_protocol = NULL;
url->psz_host = NULL;
url->i_port = 0;
url->psz_path = NULL;
url->psz_option = NULL;
}