At Wed, 13 Aug 2008 12:41:12 +0200,
zhengda wrote:
> >> + if (__asprintf (&name, "SOCK_SERV_%d", domain) > 0)
> >> + {
> >> + np = getenv (name);
> >> + __free (name);
> >> + }
> >>
> >
> > You need to check whether asprintf() returns an error code (-1), meaning
> > memory allocation failed, and handle it accordingly -- just like you
> > handled failure with the explicit malloc() in your original code.
> >
> as I understand from the manual of asprintf, asprintf always returns -1
> if there is some error.
>
> RETURN VALUE
> When successful, these functions return the number of bytes
> printed,
> just like sprintf(3). If memory allocation wasn't possible,
> or some
> other error occurs, these functions will return -1, and the
> contents of
> strp is undefined.
Check if the result is != -1, not > 0, which has a different meaning.
> > If asprintf() doesn't fail, the getenv() should be done unconditionally.
> >
> >
> >> + if (__asprintf (&name, "%s/%d", sock_servs, domain) > 0)
> >> + np = name;
Here too.