[FFmpeg-devel] [PATCH] Fix ffserver.c putenv gcc warning

Stefano Sabatini stefano.sabatini-lala
Tue Jun 3 09:03:29 CEST 2008


On date Tuesday 2008-06-03 00:11:13 +0100, M?ns Rullg?rd encoded:
> Stefano Sabatini <stefano.sabatini-lala at poste.it> writes:
> 
> > On date Friday 2008-05-30 17:21:34 +0100, M?ns Rullg?rd encoded:
> >> Stefano Sabatini <stefano.sabatini-lala at poste.it> writes:
> >> 
> >> > Hi all,
> >> >
> >> > putenv expects a char* when we feed it with a const char*, this fixes
> >> > the resulting warning:
> >> > ffserver.c: In function ?main?:
> >> > ffserver.c:4388: warning: passing argument 1 of ?putenv? discards qualifiers from pointer target type
> > [...]
> >
> >> > Index: ffserver.c
> >> > ===================================================================
> >> > --- ffserver.c	(revision 13552)
> >> > +++ ffserver.c	(working copy)
> >> > @@ -4385,7 +4385,7 @@
> >> >  
> >> >      parse_options(argc, argv, options, NULL);
> >> >  
> >> > -    putenv("http_proxy");               /* Kill the http_proxy */
> >> > +    putenv(av_strdup("http_proxy"));    /* Kill the http_proxy */
> >> 
> >> Beautiful memory leak.
> >
> > Hi.
> >
> > Is a string left on the heap really a problem?
> 
> Yes.
> 
> > also the alternative solution (attached) looks quite ugly, also
> > keeping the warning doesn't look like a nice solution.
> >
> > Index: ffserver.c
> > ===================================================================
> > --- ffserver.c	(revision 13630)
> > +++ ffserver.c	(working copy)
> > @@ -4372,6 +4372,7 @@
> >  int main(int argc, char **argv)
> >  {
> >      struct sigaction sigact;
> > +    char *var = NULL;
> >  
> >      av_register_all();
> >  
> > @@ -4385,7 +4386,9 @@
> >  
> >      parse_options(argc, argv, options, NULL);
> >  
> > -    putenv("http_proxy");               /* Kill the http_proxy */
> > +    var = av_strdup("http_proxy");
> > +    putenv(var);                        /* Kill the http_proxy */
> > +    av_freep(&var);
> 
> This is wrong.  According to specs, putenv() is allowed to keep a
> pointer to the string you passed until you pass it a new one for the
> same variable name.

Right, thanks for the explanation, unsetenv looks like the way to go.

Regards.
-- 
FFmpeg = Furious & Furious MultiPurpose EnGine




More information about the ffmpeg-devel mailing list