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

decode_URI: improve documentation, add a return value

parent 33e389f4
...@@ -48,7 +48,7 @@ struct vlc_url_t ...@@ -48,7 +48,7 @@ struct vlc_url_t
VLC_EXPORT( char *, unescape_URI_duplicate, ( const char *psz ) ); VLC_EXPORT( char *, unescape_URI_duplicate, ( const char *psz ) );
VLC_EXPORT( void, unescape_URI, ( char *psz ) ); VLC_EXPORT( void, unescape_URI, ( char *psz ) );
VLC_EXPORT( char *, decode_URI_duplicate, ( const char *psz ) ); VLC_EXPORT( char *, decode_URI_duplicate, ( const char *psz ) );
VLC_EXPORT( void, decode_URI, ( char *psz ) ); VLC_EXPORT( char *, decode_URI, ( char *psz ) );
VLC_EXPORT( char *, encode_URI_component, ( const char *psz ) ); VLC_EXPORT( char *, encode_URI_component, ( const char *psz ) );
/***************************************************************************** /*****************************************************************************
......
...@@ -130,7 +130,7 @@ void unescape_URI( char *psz ) ...@@ -130,7 +130,7 @@ void unescape_URI( char *psz )
} }
/** /**
* Decode encoded URI string * Decode encoded URI component. See also decode_URI().
* \return decoded duplicated string * \return decoded duplicated string
*/ */
char *decode_URI_duplicate( const char *psz ) char *decode_URI_duplicate( const char *psz )
...@@ -141,14 +141,23 @@ char *decode_URI_duplicate( const char *psz ) ...@@ -141,14 +141,23 @@ char *decode_URI_duplicate( const char *psz )
} }
/** /**
* Decode encoded URI string in place * Decode an encoded URI component in place.
* \return nothing * <b>This function does NOT decode entire URIs.</b>
* It decodes components (e.g. host name, directory, file name).
* Decoded URIs do not exist in the real world (see RFC3986 §2.4).
* Complete URIs are always "encoded" (or they are syntaxically invalid).
*
* Note that URI encoding is different from Javascript escaping. Especially,
* white spaces and Unicode non-ASCII code points are encoded differently.
*
* \return psz on success, NULL if it was not properly encoded
*/ */
void decode_URI( char *psz ) char *decode_URI( char *psz )
{ {
unsigned char *in = (unsigned char *)psz, *out = in, c; unsigned char *in = (unsigned char *)psz, *out = in, c;
if( psz == NULL ) if( psz == NULL )
return; return NULL;
while( ( c = *in++ ) != '\0' ) while( ( c = *in++ ) != '\0' )
{ {
...@@ -160,14 +169,14 @@ void decode_URI( char *psz ) ...@@ -160,14 +169,14 @@ void decode_URI( char *psz )
if( ( ( hex[0] = *in++ ) == 0 ) if( ( ( hex[0] = *in++ ) == 0 )
|| ( ( hex[1] = *in++ ) == 0 ) ) || ( ( hex[1] = *in++ ) == 0 ) )
return; return NULL;
hex[2] = '\0'; hex[2] = '\0';
*out++ = (unsigned char)strtoul( hex, NULL, 0x10 ); *out++ = (unsigned char)strtoul( hex, NULL, 0x10 );
break; break;
} }
case '+': case '+': /* This is HTTP forms, not URI decoding... */
*out++ = ' '; *out++ = ' ';
break; break;
...@@ -182,6 +191,7 @@ void decode_URI( char *psz ) ...@@ -182,6 +191,7 @@ void decode_URI( char *psz )
} }
*out = '\0'; *out = '\0';
EnsureUTF8( psz ); EnsureUTF8( psz );
return psz;
} }
static inline bool isurisafe( int c ) static inline bool isurisafe( int c )
......
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