|
From: | zhengda |
Subject: | Re: The patch of glibc which allows the user to override the pfinet server |
Date: | Wed, 13 Aug 2008 12:41:12 +0200 |
User-agent: | Thunderbird 2.0.0.16 (X11/20080707) |
olafBuddenhagen@gmx.net wrote:
But isn't it always right to initialize a local variable to reduce the possibility of getting bugs?Hi, On Tue, Aug 12, 2008 at 08:05:49PM +0200, zhengda wrote:+ char *name = NULL;No need to initialize this -- the asprintf() will overwrite it anyways.
as I understand from the manual of asprintf, asprintf always returns -1 if there is some error.+ 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.
RETURN VALUEWhen 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.
If asprintf() doesn't fail, the getenv() should be done unconditionally.+ if (__asprintf (&name, "%s/%d", sock_servs, domain) > 0) + np = name;I think you can print to np directly here...
I need to free the space afterwards.If I use np directly, I'll not be able to figure out whether I should free the memory because np might point to the environment variable.
Zheng Da
[Prev in Thread] | Current Thread | [Next in Thread] |