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 :|