From 05105da1347d3d7e9fbc41e0a14b8cd18905b60b Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Wed, 17 Dec 2014 12:52:46 +0000 Subject: [PATCH] environment: Use guestfs___is_true when parsing various boolean environment variables (RHBZ#1175196). You can now use LIBGUESTFS_DEBUG=true (etc.) You can disable debugging/tracing by setting LIBGUESTFS_DEBUG=0 (etc.) (cherry picked from commit 5f6677ebd0fd6f6712de808ca27eab4468f966bc) --- fuse/test-guestmount-fd.c | 2 +- src/handle.c | 30 ++++++++++++++++++++------- tests/charsets/test-charset-fidelity.c | 4 ++-- tests/mount-local/test-parallel-mount-local.c | 2 +- tests/parallel/Makefile.am | 1 + tests/parallel/test-parallel.c | 2 +- tests/regressions/Makefile.am | 1 + tests/regressions/rhbz914931.c | 2 +- 8 files changed, 30 insertions(+), 14 deletions(-) diff --git a/fuse/test-guestmount-fd.c b/fuse/test-guestmount-fd.c index 00eab0c..2b3ce5b 100644 --- a/fuse/test-guestmount-fd.c +++ b/fuse/test-guestmount-fd.c @@ -50,7 +50,7 @@ main (int argc, char *argv[]) /* Allow the test to be skipped. */ skip = getenv ("SKIP_TEST_GUESTMOUNT_FD"); - if (skip && STREQ (skip, "1")) { + if (skip && guestfs___is_true (skip) > 0) { fprintf (stderr, "%s: test skipped because environment variable set.\n", program_name); exit (77); diff --git a/src/handle.c b/src/handle.c index 141ba7d..0990082 100644 --- a/src/handle.c +++ b/src/handle.c @@ -176,7 +176,7 @@ parse_environment (guestfs_h *g, char *(*do_getenv) (const void *data, const char *), const void *data) { - int memsize; + int memsize, b; char *str; /* Don't bother checking the return values of functions @@ -184,12 +184,24 @@ parse_environment (guestfs_h *g, */ str = do_getenv (data, "LIBGUESTFS_TRACE"); - if (str != NULL && STREQ (str, "1")) - guestfs_set_trace (g, 1); + if (str) { + b = guestfs___is_true (str); + if (b == -1) { + error (g, _("%s=%s: non-boolean value"), "LIBGUESTFS_TRACE", str); + return -1; + } + guestfs_set_trace (g, b); + } str = do_getenv (data, "LIBGUESTFS_DEBUG"); - if (str != NULL && STREQ (str, "1")) - guestfs_set_verbose (g, 1); + if (str) { + b = guestfs___is_true (str); + if (b == -1) { + error (g, _("%s=%s: non-boolean value"), "LIBGUESTFS_TRACE", str); + return -1; + } + guestfs_set_verbose (g, b); + } str = do_getenv (data, "LIBGUESTFS_TMPDIR"); if (str && STRNEQ (str, "")) { @@ -816,6 +828,7 @@ int guestfs___get_backend_setting_bool (guestfs_h *g, const char *name) { CLEANUP_FREE char *value = NULL; + int b; guestfs_push_error_handler (g, NULL, NULL); value = guestfs_get_backend_setting (g, name); @@ -827,10 +840,11 @@ guestfs___get_backend_setting_bool (guestfs_h *g, const char *name) if (value == NULL) return -1; - if (STREQ (value, "1")) - return 1; + b = guestfs___is_true (value); + if (b == -1) + return -1; - return 0; + return b; } int diff --git a/tests/charsets/test-charset-fidelity.c b/tests/charsets/test-charset-fidelity.c index 4b34b0e..7ce7d94 100644 --- a/tests/charsets/test-charset-fidelity.c +++ b/tests/charsets/test-charset-fidelity.c @@ -81,7 +81,7 @@ main (int argc, char *argv[]) /* Allow this test to be skipped. */ str = getenv (ourenvvar); - if (str && STREQ (str, "1")) { + if (str && guestfs___is_true (str) > 0) { printf ("%s: test skipped because environment variable is set.\n", program_name); exit (77); @@ -126,7 +126,7 @@ test_filesystem (guestfs_h *g, const struct filesystem *fs) snprintf (envvar, sizeof envvar, "%s_%s", ourenvvar, fs->fs_name); str = getenv (envvar); - if (str && STREQ (str, "1")) { + if (str && guestfs___is_true (str) > 0) { printf ("skipped test of %s because environment variable is set\n", fs->fs_name); return; diff --git a/tests/mount-local/test-parallel-mount-local.c b/tests/mount-local/test-parallel-mount-local.c index fa6cd79..88ca2d3 100644 --- a/tests/mount-local/test-parallel-mount-local.c +++ b/tests/mount-local/test-parallel-mount-local.c @@ -94,7 +94,7 @@ main (int argc, char *argv[]) /* Allow the test to be skipped by setting an environment variable. */ skip = getenv ("SKIP_TEST_PARALLEL_MOUNT_LOCAL"); - if (skip && STREQ (skip, "1")) { + if (skip && guestfs___is_true (skip) > 0) { fprintf (stderr, "%s: test skipped because environment variable set.\n", program_name); exit (77); diff --git a/tests/parallel/Makefile.am b/tests/parallel/Makefile.am index be63256..9421bfc 100644 --- a/tests/parallel/Makefile.am +++ b/tests/parallel/Makefile.am @@ -34,6 +34,7 @@ test_parallel_CFLAGS = \ -pthread \ $(WARN_CFLAGS) $(WERROR_CFLAGS) test_parallel_LDADD = \ + $(top_builddir)/src/libutils.la \ $(top_builddir)/src/libguestfs.la \ $(top_builddir)/gnulib/lib/libgnu.la diff --git a/tests/parallel/test-parallel.c b/tests/parallel/test-parallel.c index edd87d9..e412143 100644 --- a/tests/parallel/test-parallel.c +++ b/tests/parallel/test-parallel.c @@ -76,7 +76,7 @@ main (int argc, char *argv[]) /* Allow the test to be skipped by setting an environment variable. */ skip = getenv ("SKIP_TEST_PARALLEL"); - if (skip && STREQ (skip, "1")) { + if (skip && guestfs___is_true (skip) > 0) { fprintf (stderr, "%s: test skipped because environment variable set.\n", program_name); exit (77); diff --git a/tests/regressions/Makefile.am b/tests/regressions/Makefile.am index a5e7cfc..de97526 100644 --- a/tests/regressions/Makefile.am +++ b/tests/regressions/Makefile.am @@ -111,6 +111,7 @@ rhbz914931_CFLAGS = \ -pthread \ $(WARN_CFLAGS) $(WERROR_CFLAGS) rhbz914931_LDADD = \ + $(top_builddir)/src/libutils.la \ $(top_builddir)/src/libguestfs.la rhbz1055452_SOURCES = rhbz1055452.c diff --git a/tests/regressions/rhbz914931.c b/tests/regressions/rhbz914931.c index faa3dd2..569e261 100644 --- a/tests/regressions/rhbz914931.c +++ b/tests/regressions/rhbz914931.c @@ -41,7 +41,7 @@ main (int argc, char *argv[]) /* Allow this test to be skipped. */ str = getenv ("SKIP_TEST_RHBZ914931"); - if (str && STREQ (str, "1")) { + if (str && guestfs___is_true (str) > 0) { printf ("%s: test skipped because environment variable is set.\n", program_name); exit (77); -- 1.8.3.1