[MPlayer-dev-eng] [PATCH 3/7] Use authorization field to pass server authentication through proxy

Clément Bœsch ubitux at gmail.com
Sun Nov 21 15:13:32 CET 2010


On Sun, Nov 21, 2010 at 02:35:03PM +0100, Reimar Döffinger wrote:
> On Sun, Nov 21, 2010 at 02:24:26PM +0100, Clément Bœsch wrote:
> > diff --git a/stream/url.c b/stream/url.c
> > index 0469de9..90f41f7 100644
> > --- a/stream/url.c
> > +++ b/stream/url.c
> > @@ -58,6 +58,33 @@ URL_t *url_redirect(URL_t **url, const char *redir) {
> >    return res;
> >  }
> >  
> > +#ifdef __GNUC__
> > +static void make_noauth_url(URL_t *url, const char *fmt, ...) __attribute__ ((format(printf, 2, 3)));
> > +#endif
> > +
> > +static void make_noauth_url(URL_t *url, const char *fmt, ...)
> > +{
> > +    va_list va1, va2;
> > +    int len;
> > +
> > +    va_start(va1, fmt);
> > +    va_copy(va2, va1);
> > +    len = vsnprintf(NULL, 0, fmt, va1);
> > +    if (len < 0) {
> > +        url->noauth_url = NULL;
> > +        goto end;
> > +    }
> > +    len++;
> > +    url->noauth_url = malloc(len);
> > +    if (!url->noauth_url)
> > +        goto end;
> > +    vsnprintf(url->noauth_url, len, fmt, va2);
> > +
> > +end:
> > +    va_end(va1);
> > +    va_end(va2);
> > +}
> > +
> >  URL_t*
> >  url_new(const char* url) {
> >  	int pos1, pos2,v6addr = 0;
> > @@ -232,6 +259,17 @@ url_new(const char* url) {
> >  		strcpy(Curl->file, "/");
> >  	}
> >  
> > +	if (Curl->port)
> > +		make_noauth_url(Curl, "%s://%s:%d%s", Curl->protocol,
> > +				Curl->hostname, Curl->port, Curl->file);
> > +	else
> > +		make_noauth_url(Curl, "%s://%s%s", Curl->protocol,
> > +				Curl->hostname, Curl->file);
> > +	if (Curl->noauth_url == NULL) {
> > +		mp_msg(MSGT_NETWORK, MSGL_FATAL, MSGTR_MemAllocFailed);
> > +		goto err_out;
> > +	}
> 
> This seems like a really bad way to split it.
> 
> static int make_noauth_url(URL_t *url, char *dst, int dst_size)
> {
>     if (url->port)
>         return snprintf(dst, dst_size, "%s://%s:%d%s", url->protocol,
>                         url->hostname, url->port, url->file);
>     else
>         return snprintf(dst, dst_size, "%s://%s%s", url->protocol,
>                         url->hostname, url->file);
> }
> 
> 
> len = make_noauth_url(Curl, NULL, 0);
> if (len > 0) {
>     Curl->noauth_url = malloc(len);
>     if (!Curl->noauth_url) {
>     ...
>     }
>     make_noauth_url(Curl, Curl->noauth_url, len);
> }
> 
> Is far simpler.
> Or if you want to go with your approach it should be made generic
> in the form of a kind of "sprintf_alloc", without the URL_t argument
> but instead e.g. a char * return value - but I think that is overkill,
> and difficult to review (and I am still not a fan of the va_* stuff even
> though I guess that nowadays you can expect it to work correctly).

OK I see, then I'll commit this. Do you mind a reindent of
stream/{url,network,http}.c after this commit?

-- 
Clément B.
Not sent from a jesusPhone.


More information about the MPlayer-dev-eng mailing list