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.