On Tue, Apr 12, 2016 at 10:00:48AM -0400, Cole Robinson wrote: > Take setlocale/gettext error handling pattern from tools/virsh-* > and use it in all the other standalone binaries. The changes are > > * Ignore setlocale errors. virsh has done this forever, presumably for > good reason. This has been partially responsible for some bug reports: > > https://bugzilla.redhat.com/show_bug.cgi?id=1312688 > https://bugzilla.redhat.com/show_bug.cgi?id=1026514 > https://bugzilla.redhat.com/show_bug.cgi?id=1016158 > > * Report the failed function name > * Report strerror > --- > daemon/libvirtd.c | 20 ++++++++++++++++---- > src/locking/lock_daemon.c | 20 ++++++++++++++++---- > src/locking/sanlock_helper.c | 16 ++++++++++++---- > src/logging/log_daemon.c | 20 ++++++++++++++++---- > src/lxc/lxc_controller.c | 20 ++++++++++++++++---- > src/network/leaseshelper.c | 16 ++++++++++++---- > src/security/virt-aa-helper.c | 16 ++++++++++++---- > src/storage/parthelper.c | 16 ++++++++++++---- > src/util/iohelper.c | 16 ++++++++++++---- > 9 files changed, 124 insertions(+), 36 deletions(-) > > diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c > index 3d38a46..9488950 100644 > --- a/daemon/libvirtd.c > +++ b/daemon/libvirtd.c > @@ -1172,10 +1172,22 @@ int main(int argc, char **argv) { > {0, 0, 0, 0} > }; > > - if (setlocale(LC_ALL, "") == NULL || > - bindtextdomain(PACKAGE, LOCALEDIR) == NULL || > - textdomain(PACKAGE) == NULL || > - virInitialize() < 0) { > + if (!setlocale(LC_ALL, "")) { > + perror("setlocale"); > + /* failure to setup locale is not fatal */ > + } > + > + if (!bindtextdomain(PACKAGE, LOCALEDIR)) { > + perror("bindtextdomain"); > + exit(EXIT_FAILURE); > + } > + > + if (!textdomain(PACKAGE)) { > + perror("textdomain"); > + exit(EXIT_FAILURE); > + } > + > + if (virInitialize() < 0) { > fprintf(stderr, _("%s: initialization failed\n"), argv[0]); > exit(EXIT_FAILURE); > }
Instead of repeating this, how about we add src/util/virgettext.h and then have int virGettextInit(const char *package, const char *localedir) { if (!setlocale(LC_ALL, "")) { perror("setlocale"); /* failure to setup locale is not fatal */ } if (!bindtextdomain(PACKAGE, LOCALEDIR)) { perror("bindtextdomain"); return -1; } if (!textdomain(PACKAGE)) { perror("textdomain"); return -1; } return 0; } And in each app we can just do if (virGettextInit(PACKAGE, LOCALEDIR) < 0) exit(EXIT_FAILURE); Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list