On Tue, Jan 26, 2010 at 03:59:08PM +0100, Jim Meyering wrote: > Eric Blake wrote: > > > According to Jim Meyering on 1/25/2010 8:55 AM: > >> Subject: [PATCH] hostusb: closedir only if non-NULL; rename labels: s/error/cleanup/ > >> > >> * src/util/hostusb.c (usbSysReadFile): Rename labels s/error/cleanup/ > >> (usbFindBusByVendor): Likewise. And closedir only if non-NULL. > >> @@ -150,8 +150,9 @@ static int usbFindBusByVendor(virConnectPtr conn, > >> else > >> ret = 0; > >> > >> -error: > >> - closedir (dir); > >> +cleanup: > >> + if (dir) > >> + closedir (dir); > > > > Should errno be saved and restored around this point, to avoid it being > > arbitrarily changed by closedir? > > Thanks for looking. > Technically you're right, and I'll merge this: > > diff --git a/src/util/hostusb.c b/src/util/hostusb.c > index 72d0833..71f6435 100644 > --- a/src/util/hostusb.c > +++ b/src/util/hostusb.c > @@ -151,8 +151,11 @@ static int usbFindBusByVendor(virConnectPtr conn, > ret = 0; > > cleanup: > - if (dir) > + if (dir) { > + int saved_errno = errno; > closedir (dir); > + errno = saved_errno; > + } > return ret; > } > > However, no caller that I have seen uses errno (I looked at all > direct callers and stopped after getting to 4th or 5th-level indirect > callers in one part of the call tree), so currently it makes no difference. Yep, generally speaking if a caller needs to be given back the actual errno value, then the function should be returing '-errno' instead of the fixed -1. 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