@ -2878,68 +2878,49 @@ void url_split(char *proto, int proto_size,
char * path , int path_size ,
const char * url )
{
const char * p ;
char * q ;
int port ;
port = - 1 ;
p = url ;
q = proto ;
while ( * p ! = ' : ' & & * p ! = ' \0 ' ) {
if ( ( q - proto ) < proto_size - 1 )
* q + + = * p ;
p + + ;
}
if ( proto_size > 0 )
* q = ' \0 ' ;
if ( authorization_size > 0 )
authorization [ 0 ] = ' \0 ' ;
if ( * p = = ' \0 ' ) {
if ( proto_size > 0 )
proto [ 0 ] = ' \0 ' ;
if ( hostname_size > 0 )
hostname [ 0 ] = ' \0 ' ;
p = url ;
const char * p , * ls , * at , * col ;
if ( port_ptr ) * port_ptr = - 1 ;
if ( proto_size > 0 ) proto [ 0 ] = 0 ;
if ( authorization_size > 0 ) authorization [ 0 ] = 0 ;
if ( hostname_size > 0 ) hostname [ 0 ] = 0 ;
if ( path_size > 0 ) path [ 0 ] = 0 ;
/* parse protocol */
if ( ( p = strchr ( url , ' : ' ) ) ) {
av_strlcpy ( proto , url , FFMIN ( proto_size , p + 1 - url ) ) ;
p + + ; /* skip ':' */
if ( * p = = ' / ' ) p + + ;
if ( * p = = ' / ' ) p + + ;
} else {
char * at , * slash ; // PETR: position of '@' character and '/' character
/* no protocol means plain filename */
av_strlcpy ( path , url , path_size ) ;
return ;
}
p + + ;
if ( * p = = ' / ' )
p + + ;
if ( * p = = ' / ' )
p + + ;
at = strchr ( p , ' @ ' ) ; // PETR: get the position of '@'
slash = strchr ( p , ' / ' ) ; // PETR: get position of '/' - end of hostname
if ( at & & slash & & at > slash ) at = NULL ; // PETR: not interested in '@' behind '/'
q = at ? authorization : hostname ; // PETR: if '@' exists starting with auth.
while ( ( at | | * p ! = ' : ' ) & & * p ! = ' / ' & & * p ! = ' ? ' & & * p ! = ' \0 ' ) { // PETR:
if ( * p = = ' @ ' ) { // PETR: passed '@'
if ( authorization_size > 0 )
* q = ' \0 ' ;
q = hostname ;
at = NULL ;
} else if ( ! at ) { // PETR: hostname
if ( ( q - hostname ) < hostname_size - 1 )
* q + + = * p ;
} else {
if ( ( q - authorization ) < authorization_size - 1 )
* q + + = * p ;
}
p + + ;
/* separate path from hostname */
if ( ( ls = strchr ( p , ' / ' ) ) )
av_strlcpy ( path , ls , path_size ) ;
else
ls = & p [ strlen ( p ) ] ; // XXX
/* the rest is hostname, use that to parse auth/port */
if ( ls ! = p ) {
/* authorization (user[:pass]@hostname) */
if ( ( at = strchr ( p , ' @ ' ) ) & & at < ls ) {
av_strlcpy ( authorization , p ,
FFMIN ( authorization_size , at + 1 - p ) ) ;
p = at + 1 ; /* skip '@' */
}
if ( hostname_size > 0 )
* q = ' \0 ' ;
if ( * p = = ' : ' ) {
p + + ;
port = strtoul ( p , ( char * * ) & p , 10 ) ;
/* port */
if ( ( col = strchr ( p , ' : ' ) ) & & col < ls ) {
ls = col ;
if ( port_ptr ) * port_ptr = atoi ( col + 1 ) ; /* skip ':' */
}
av_strlcpy ( hostname , p , FFMIN ( 1 + ls - p , hostname_size ) ) ;
}
if ( port_ptr )
* port_ptr = port ;
av_strlcpy ( path , p , path_size ) ;
}
void av_set_pts_info ( AVStream * s , int pts_wrap_bits ,