On Fri, Jan 16, 2009 at 12:25:02PM +0000, Daniel P. Berrange wrote:
On Fri, Jan 16, 2009 at 12:21:59PM +0000, Richard W.M. Jones wrote:
> On Tue, Jan 13, 2009 at 05:46:37PM +0000, Daniel P. Berrange wrote:
> > + char buf[1024];
>
> sysconf (_SC_GETPW_R_SIZE_MAX)?
>
> Looking at glibc's implementation of getpwuid (which uses getpwuid_r),
> I see that glibc dynamically reallocates the buffer as necessary to
> the correct size for the return value. The logic of this is fairly
> simple so maybe we should do the same?
>
> From glibc:
>
> buffer = malloc (/*some_initial_size*/);
>
> while (buffer != NULL
> && (getpwuid_r (const char *name, &resbuf, buffer,
> buffer_size, &result)
> == ERANGE))
> {
> char *new_buf;
> buffer_size *= 2;
> new_buf = (char *) realloc (buffer, buffer_size);
> if (new_buf == NULL)
> {
> free (buffer);
> errno = ENOMEM;
> }
> buffer = new_buf;
> }
>
>
> Anyhow, +1 but I'd be happier if these functions were centralized in
> somewhere like src/utils.c.
That's a good idea - in all the cases where we currently use getpwuid
all we actually want is the home directory path. So we could add a
simple func:
char *virUserHomeDirectory(uid_t uid);
and hide all the horrific code in there.
yes +1, patch looks sane to me but that would be an improvement !
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/