[Libguestfs] [PATCH 2/3] daemon: glob: add option for not returning dirs with trailing slash

Pino Toscano ptoscano at redhat.com
Wed Feb 3 18:28:17 UTC 2016


Add a new optional bool "nodirectoryslash", to indicate that the caller
does not want trailing slashes in names of directories; this helps with
interoperability with other tools (such as rm).

Related to RHBZ#1293271.
---
 daemon/glob.c        |  8 ++++++--
 generator/actions.ml | 17 ++++++++++++-----
 gobject/Makefile.inc |  2 ++
 po/POTFILES          |  1 +
 4 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/daemon/glob.c b/daemon/glob.c
index 45fb30f..de615ee 100644
--- a/daemon/glob.c
+++ b/daemon/glob.c
@@ -26,14 +26,18 @@
 #include "actions.h"
 
 char **
-do_glob_expand (const char *pattern)
+do_glob_expand (const char *pattern, int nodirectoryslash)
 {
   int r;
   glob_t buf = { .gl_pathc = 0, .gl_pathv = NULL, .gl_offs = 0 };
+  int flags = GLOB_BRACE;
+
+  if (!nodirectoryslash)
+    flags |= GLOB_MARK;
 
   /* glob(3) in glibc never calls chdir, so this seems to be safe: */
   CHROOT_IN;
-  r = glob (pattern, GLOB_MARK|GLOB_BRACE, NULL, &buf);
+  r = glob (pattern, flags, NULL, &buf);
   CHROOT_OUT;
 
   if (r == GLOB_NOMATCH) {	/* Return an empty list instead of an error. */
diff --git a/generator/actions.ml b/generator/actions.ml
index 4078082..9efa732 100644
--- a/generator/actions.ml
+++ b/generator/actions.ml
@@ -5967,27 +5967,34 @@ See also: C<guestfs_command_lines>" };
      * start with "/".  There is no concept of "cwd" in libguestfs,
      * hence no "."-relative names.
      *)
-    style = RStringList "paths", [Pathname "pattern"], [];
+    style = RStringList "paths", [Pathname "pattern"], [OBool "nodirectoryslash"];
     proc_nr = Some 113;
+    once_had_no_optargs = true;
     tests = [
       InitScratchFS, Always, TestResult (
         [["mkdir_p"; "/glob_expand/b/c"];
          ["touch"; "/glob_expand/b/c/d"];
          ["touch"; "/glob_expand/b/c/e"];
-         ["glob_expand"; "/glob_expand/b/c/*"]],
+         ["glob_expand"; "/glob_expand/b/c/*"; ""]],
         "is_string_list (ret, 2, \"/glob_expand/b/c/d\", \"/glob_expand/b/c/e\")"), [];
       InitScratchFS, Always, TestResult (
         [["mkdir_p"; "/glob_expand2/b/c"];
          ["touch"; "/glob_expand2/b/c/d"];
          ["touch"; "/glob_expand2/b/c/e"];
-         ["glob_expand"; "/glob_expand2/*/c/*"]],
+         ["glob_expand"; "/glob_expand2/*/c/*"; ""]],
         "is_string_list (ret, 2, \"/glob_expand2/b/c/d\", \"/glob_expand2/b/c/e\")"), [];
       InitScratchFS, Always, TestResult (
         [["mkdir_p"; "/glob_expand3/b/c"];
          ["touch"; "/glob_expand3/b/c/d"];
          ["touch"; "/glob_expand3/b/c/e"];
-         ["glob_expand"; "/glob_expand3/*/x/*"]],
-        "is_string_list (ret, 0)"), []
+         ["glob_expand"; "/glob_expand3/*/x/*"; ""]],
+        "is_string_list (ret, 0)"), [];
+      InitScratchFS, Always, TestResult (
+        [["mkdir_p"; "/glob_expand4/b/c"];
+         ["touch"; "/glob_expand4/b1"];
+         ["touch"; "/glob_expand4/c1"];
+         ["glob_expand"; "/glob_expand4/b*"; "true"]],
+        "is_string_list (ret, 2, \"/glob_expand4/b\", \"/glob_expand4/b1\")"), [];
     ];
     shortdesc = "expand a wildcard path";
     longdesc = "\
diff --git a/gobject/Makefile.inc b/gobject/Makefile.inc
index 3522eb2..5ba0fc9 100644
--- a/gobject/Makefile.inc
+++ b/gobject/Makefile.inc
@@ -68,6 +68,7 @@ guestfs_gobject_headers= \
   include/guestfs-gobject/optargs-disk_create.h \
   include/guestfs-gobject/optargs-e2fsck.h \
   include/guestfs-gobject/optargs-fstrim.h \
+  include/guestfs-gobject/optargs-glob_expand.h \
   include/guestfs-gobject/optargs-grep.h \
   include/guestfs-gobject/optargs-hivex_open.h \
   include/guestfs-gobject/optargs-inspect_get_icon.h \
@@ -154,6 +155,7 @@ guestfs_gobject_sources= \
   src/optargs-disk_create.c \
   src/optargs-e2fsck.c \
   src/optargs-fstrim.c \
+  src/optargs-glob_expand.c \
   src/optargs-grep.c \
   src/optargs-hivex_open.c \
   src/optargs-inspect_get_icon.c \
diff --git a/po/POTFILES b/po/POTFILES
index aca174d..2a1e313 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -195,6 +195,7 @@ gobject/src/optargs-cpio_out.c
 gobject/src/optargs-disk_create.c
 gobject/src/optargs-e2fsck.c
 gobject/src/optargs-fstrim.c
+gobject/src/optargs-glob_expand.c
 gobject/src/optargs-grep.c
 gobject/src/optargs-hivex_open.c
 gobject/src/optargs-inspect_get_icon.c
-- 
2.5.0




More information about the Libguestfs mailing list