On Thu, Jan 22, 2009 at 10:48:59AM +0000, Daniel P. Berrange wrote: > 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. > > Here's an update with that usage in it That's better. There's still the question about whether the particular sysconf() sub-call we are using exists on all platforms, and we might need to replace it with the glibc-style incremental buffer. I say we should commit this and test it for a while. Rich. -- Richard Jones, Emerging Technologies, Red Hat http://et.redhat.com/~rjones virt-p2v converts physical machines to virtual machines. Boot with a live CD or over the network (PXE) and turn machines into Xen guests. http://et.redhat.com/~rjones/virt-p2v -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list