[vlc-devel] [vlc-commits] url: add vlc_uri_compose()
Rémi Denis-Courmont
remi at remlab.net
Thu Jul 21 10:06:11 CEST 2016
Le 2016-07-21 10:04, Hugo Beauzée-Luyssen a écrit :
> On 07/17/2016 04:13 PM, Rémi Denis-Courmont wrote:
>> vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun
>> Jul 17 16:00:11 2016 +0300| [ed7d9c7e72bd841eb7048a44207abbd8d96db245]
>> | committer: Rémi Denis-Courmont
>>
>> url: add vlc_uri_compose()
>>
>> This builds a string from a vlc_url_t structure.
>>
>>>
>>> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ed7d9c7e72bd841eb7048a44207abbd8d96db245
>> ---
>>
>> include/vlc_url.h | 14 ++++++++++++
>> src/libvlccore.sym | 1 +
>> src/text/url.c | 61
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++
>> 3 files changed, 76 insertions(+)
>>
>> diff --git a/include/vlc_url.h b/include/vlc_url.h
>> index 8fdd959..a013e2c 100644
>> --- a/include/vlc_url.h
>> +++ b/include/vlc_url.h
>> @@ -101,6 +101,20 @@ VLC_API char *vlc_uri_decode_duplicate(const
>> char *str) VLC_MALLOC;
>> VLC_API char *vlc_uri_encode(const char *str) VLC_MALLOC;
>>
>> /**
>> + * Composes an URI.
>> + *
>> + * Converts a decomposed/parsed URI structure (\ref vlc_url_t) into
>> a
>> + * nul-terminated URI literal string.
>> + *
>> + * See also IETF RFC3986 section 5.3 for details.
>> + *
>> + * \bug URI fragments (i.e. HTML anchors) are not handled
>> + *
>> + * \return a heap-allocated nul-terminated string or NULL if out of
>> memory
>> + */
>> +VLC_API char *vlc_uri_compose(const vlc_url_t *) VLC_MALLOC;
>> +
>> +/**
>> * Fixes up a URI string.
>> *
>> * Attempts to convert a nul-terminated string into a syntactically
>> valid URI.
>> diff --git a/src/libvlccore.sym b/src/libvlccore.sym
>> index 249bb50..5511e51 100644
>> --- a/src/libvlccore.sym
>> +++ b/src/libvlccore.sym
>> @@ -252,6 +252,7 @@ vlc_uri2path
>> vlc_uri_decode
>> vlc_uri_decode_duplicate
>> vlc_uri_encode
>> +vlc_uri_compose
>> vlc_uri_fixup
>> mdate
>> module_config_free
>> diff --git a/src/text/url.c b/src/text/url.c
>> index f5f7ba6..643bfd3 100644
>> --- a/src/text/url.c
>> +++ b/src/text/url.c
>> @@ -492,6 +492,67 @@ void vlc_UrlClean (vlc_url_t *restrict url)
>> free (url->psz_buffer);
>> }
>>
>> +char *vlc_uri_compose(const vlc_url_t *uri)
>> +{
>> + char *buf, *enc;
>> + size_t len;
>> + FILE *stream = open_memstream(&buf, &len);
>> +
>> + if (stream == NULL)
>> + return NULL;
>> +
>> + if (uri->psz_protocol != NULL)
>> + fprintf(stream, "%s:", uri->psz_protocol);
>> +
>> + if (uri->psz_host != NULL)
>> + {
>> + fwrite("//", 1, 2, stream);
>> +
>> + if (uri->psz_username != NULL)
>> + {
>> + enc = vlc_uri_encode(uri->psz_username);
>> + if (enc == NULL)
>> + goto error;
>> +
>> + fputs(enc, stream);
>> + free(enc);
>> +
>> + if (uri->psz_password != NULL)
>> + {
>> + enc = vlc_uri_encode(uri->psz_password);
>> + if (unlikely(enc == NULL))
>> + goto error;
>> +
>> + fprintf(stream, ":%s", enc);
>> + }
>> + fputc('@', stream);
>
> This seems to be leaking enc.
I think that bug was already fixed.
--
Rémi Denis-Courmont
http://www.remlab.net/
More information about the vlc-devel
mailing list