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. Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list