This started as a simple warning-elimination change. I'll get back to that series shortly ;-) It turned into a factorization and constification exercise during which I got a taste of ocaml. Thanks to Rich Jones for help with a few snippets in generator.ml. The overall result is that many previously-manually-maintained bits from daemon/*.c functions are now hoisted into the automatically- generated (by generator.ml) file, stubs.c. Now, many of the interfaces in daemon/*.c (with declarations in the autogenerated file, daemon/actions.h) that were not const-correct are. daemon/augeas.c | 25 +-- daemon/blockdev.c | 24 +-- daemon/checksum.c | 5 daemon/cmp.c | 8 - daemon/command.c | 6 daemon/cpmv.c | 12 - daemon/daemon.h | 22 +-- daemon/debug.c | 2 daemon/devsparts.c | 4 daemon/df.c | 4 daemon/dir.c | 50 +------ daemon/du.c | 5 daemon/ext2.c | 28 +--- daemon/fallocate.c | 5 daemon/file.c | 59 +------- daemon/find.c | 5 daemon/fsck.c | 4 daemon/glob.c | 5 daemon/grep.c | 29 +--- daemon/grub.c | 6 daemon/guestfsd.c | 2 daemon/headtail.c | 13 - daemon/hexdump.c | 5 daemon/initrd.c | 5 daemon/inotify.c | 6 daemon/link.c | 17 -- daemon/ls.c | 10 - daemon/lvm.c | 30 +--- daemon/mknod.c | 11 - daemon/mount.c | 54 +++---- daemon/ntfs.c | 4 daemon/readdir.c | 5 daemon/realpath.c | 5 daemon/scrub.c | 14 -- daemon/sfdisk.c | 24 +-- daemon/stat.c | 15 -- daemon/strings.c | 7 - daemon/swap.c | 45 +----- daemon/tar.c | 14 -- daemon/upload.c | 6 daemon/wc.c | 11 - daemon/xattr.c | 39 ++--- daemon/zero.c | 4 daemon/zerofree.c | 4 src/generator.ml | 362 ++++++++++++++++++++++++++++++----------------------- 45 files changed, 430 insertions(+), 590 deletions(-)
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 01/23] generator.ml: define new String-like type: "Device"
From: Jim Meyering <meyering at redhat.com> --- src/generator.ml | 67 +++++++++++++++++++++++++++++++++++------------------ 1 files changed, 44 insertions(+), 23 deletions(-) diff --git a/src/generator.ml b/src/generator.ml index 8d16945..8159027 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -134,6 +134,7 @@ and args = argt list (* Function parameters, guestfs handle is implicit. *) *) and argt | String of string (* const char *name, cannot be NULL *) + | Device of string (* /dev device name, cannot be NULL *) | OptString of string (* const char *name, may be NULL *) | StringList of string(* list of strings (each string cannot be NULL) *) | Bool of string (* boolean *) @@ -1634,7 +1635,7 @@ C<path> should be a file or directory in the mounted file system This is the same as the C<statvfs(2)> system call."); - ("tune2fs_l", (RHashtable "superblock", [String "device"]), 55, [], + ("tune2fs_l", (RHashtable "superblock", [Device "device"]), 55, [], [], (* XXX test *) "get ext2/ext3/ext4 superblock details", "\ @@ -3726,7 +3727,7 @@ let mapi f xs loop 0 xs let name_of_argt = function - | String n | OptString n | StringList n | Bool n | Int n + | Device n | String n | OptString n | StringList n | Bool n | Int n | FileIn n | FileOut n -> n let java_name_of_struct typ @@ -4113,7 +4114,7 @@ and generate_xdr () pr "struct %s_args {\n" name; List.iter ( function - | String n -> pr " string %s<>;\n" n + | Device n | String n -> pr " string %s<>;\n" n | OptString n -> pr " str *%s;\n" n | StringList n -> pr " str %s<>;\n" n | Bool n -> pr " bool %s;\n" n @@ -4474,7 +4475,8 @@ check_state (guestfs_h *g, const char *caller) | args -> List.iter ( function - | String n -> + (* FIXME *) + | Device n | String n -> pr " args.%s = (char *) %s;\n" n n | OptString n -> pr " args.%s = %s ? (char **) &%s : NULL;\n" n n n @@ -4683,7 +4685,8 @@ and generate_daemon_actions () * allow device name translation. This is safe because * we can modify the string (passed from RPC). *) - | String n + (* FIXME *) + | Device n | String n | OptString n -> pr " char *%s;\n" n | StringList n -> pr " char **%s;\n" n | Bool n -> pr " int %s;\n" n @@ -4704,7 +4707,7 @@ and generate_daemon_actions () pr " }\n"; List.iter ( function - | String n -> pr " %s = args.%s;\n" n n + | Device n | String n -> pr " %s = args.%s;\n" n n | OptString n -> pr " %s = args.%s ? *args.%s : NULL;\n" n n n | StringList n -> pr " %s = realloc (args.%s.%s_val,\n" n n n; @@ -5608,6 +5611,7 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd List.iter ( function | OptString n, "NULL" -> () + | Device n, arg | String n, arg | OptString n, arg -> pr " const char *%s = \"%s\";\n" n (c_quote arg); @@ -5655,6 +5659,7 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd List.iter ( function | OptString _, "NULL" -> pr ", NULL" + | Device n, _ | String n, _ | OptString n, _ -> pr ", %s" n @@ -5903,6 +5908,7 @@ and generate_fish_cmds () ); List.iter ( function + | Device n | String n | OptString n | FileIn n @@ -5923,7 +5929,7 @@ and generate_fish_cmds () iteri ( fun i -> function - | String name -> pr " %s = argv[%d];\n" name i + | Device name | String name -> pr " %s = argv[%d];\n" name i | OptString name -> pr " %s = strcmp (argv[%d], \"\") != 0 ? argv[%d] : NULL;\n" name i i @@ -6156,7 +6162,7 @@ and generate_fish_actions_pod () pr " %s" name; List.iter ( function - | String n -> pr " %s" n + | Device n | String n -> pr " %s" n | OptString n -> pr " %s" n | StringList n -> pr " '%s ...'" n | Bool _ -> pr " true|false" @@ -6222,9 +6228,11 @@ and generate_prototype ?(extern = true) ?(static = false) ?(semicolon = true) in List.iter ( function + | Device n | String n | OptString n -> next (); +(* FIXME *) if not in_daemon then pr "const char *%s" n else pr "char *%s" n | StringList n -> @@ -6484,6 +6492,7 @@ copy_table (char * const * argv) List.iter ( function + | Device n | String n | FileIn n | FileOut n -> @@ -6536,7 +6545,8 @@ copy_table (char * const * argv) function | StringList n -> pr " ocaml_guestfs_free_strings (%s);\n" n; - | String _ | OptString _ | Bool _ | Int _ | FileIn _ | FileOut _ -> () + | Device _ | String _ | OptString _ | Bool _ | Int _ + | FileIn _ | FileOut _ -> () ) (snd style); pr " if (r == %s)\n" error_code; @@ -6619,7 +6629,7 @@ and generate_ocaml_prototype ?(is_external = false) name style pr "%s : t -> " name; List.iter ( function - | String _ | FileIn _ | FileOut _ -> pr "string -> " + | Device _ | String _ | FileIn _ | FileOut _ -> pr "string -> " | OptString _ -> pr "string option -> " | StringList _ -> pr "string array -> " | Bool _ -> pr "bool -> " @@ -6764,7 +6774,7 @@ DESTROY (g) iteri ( fun i -> function - | String n | FileIn n | FileOut n -> pr " char *%s;\n" n + | Device n | String n | FileIn n | FileOut n -> pr " char *%s;\n" n | OptString n -> (* http://www.perlmonks.org/?node_id=554277 * Note that the implicit handle argument means we have @@ -6779,7 +6789,7 @@ DESTROY (g) let do_cleanups () List.iter ( function - | String _ | OptString _ | Bool _ | Int _ + | Device _ | String _ | OptString _ | Bool _ | Int _ | FileIn _ | FileOut _ -> () | StringList n -> pr " free (%s);\n" n ) (snd style) @@ -7151,7 +7161,8 @@ and generate_perl_prototype name style if !comma then pr ", "; comma := true; match arg with - | String n | OptString n | Bool n | Int n | FileIn n | FileOut n -> + | Device n | String n + | OptString n | Bool n | Int n | FileIn n | FileOut n -> pr "$%s" n | StringList n -> pr "\\@%s" n @@ -7398,7 +7409,7 @@ py_guestfs_close (PyObject *self, PyObject *args) List.iter ( function - | String n | FileIn n | FileOut n -> pr " const char *%s;\n" n + | Device n | String n | FileIn n | FileOut n -> pr " const char *%s;\n" n | OptString n -> pr " const char *%s;\n" n | StringList n -> pr " PyObject *py_%s;\n" n; @@ -7413,7 +7424,7 @@ py_guestfs_close (PyObject *self, PyObject *args) pr " if (!PyArg_ParseTuple (args, (char *) \"O"; List.iter ( function - | String _ | FileIn _ | FileOut _ -> pr "s" + | Device _ | String _ | FileIn _ | FileOut _ -> pr "s" | OptString _ -> pr "z" | StringList _ -> pr "O" | Bool _ -> pr "i" (* XXX Python has booleans? *) @@ -7423,7 +7434,7 @@ py_guestfs_close (PyObject *self, PyObject *args) pr " &py_g"; List.iter ( function - | String n | FileIn n | FileOut n -> pr ", &%s" n + | Device n | String n | FileIn n | FileOut n -> pr ", &%s" n | OptString n -> pr ", &%s" n | StringList n -> pr ", &py_%s" n | Bool n -> pr ", &%s" n @@ -7436,7 +7447,8 @@ py_guestfs_close (PyObject *self, PyObject *args) pr " g = get_handle (py_g);\n"; List.iter ( function - | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () + | Device _ | String _ + | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () | StringList n -> pr " %s = get_string_list (py_%s);\n" n n; pr " if (!%s) return NULL;\n" n @@ -7450,7 +7462,8 @@ py_guestfs_close (PyObject *self, PyObject *args) List.iter ( function - | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () + | Device _ | String _ + | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () | StringList n -> pr " free (%s);\n" n ) (snd style); @@ -7758,7 +7771,7 @@ static VALUE ruby_guestfs_close (VALUE gv) List.iter ( function - | String n | FileIn n | FileOut n -> + | Device n | String n | FileIn n | FileOut n -> pr " Check_Type (%sv, T_STRING);\n" n; pr " const char *%s = StringValueCStr (%sv);\n" n n; pr " if (!%s)\n" n; @@ -7810,7 +7823,8 @@ static VALUE ruby_guestfs_close (VALUE gv) List.iter ( function - | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () + | Device _ | String _ + | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () | StringList n -> pr " free (%s);\n" n ) (snd style); @@ -8120,6 +8134,7 @@ and generate_java_prototype ?(public=false) ?(privat=false) ?(native=false) needs_comma := true; match arg with + | Device n | String n | OptString n | FileIn n @@ -8237,6 +8252,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close pr " (JNIEnv *env, jobject obj, jlong jg"; List.iter ( function + | Device n | String n | OptString n | FileIn n @@ -8288,6 +8304,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close "NULL", "NULL" in List.iter ( function + | Device n | String n | OptString n | FileIn n @@ -8316,6 +8333,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close (* Get the parameters. *) List.iter ( function + | Device n | String n | FileIn n | FileOut n -> @@ -8347,6 +8365,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close (* Release the parameters. *) List.iter ( function + | Device n | String n | FileIn n | FileOut n -> @@ -8621,7 +8640,7 @@ last_error h = do function | FileIn n | FileOut n - | String n -> pr "withCString %s $ \\%s -> " n n + | Device n | String n -> pr "withCString %s $ \\%s -> " n n | OptString n -> pr "maybeWith withCString %s $ \\%s -> " n n | StringList n -> pr "withMany withCString %s $ \\%s -> withArray0 nullPtr %s $ \\%s -> " n n n n | Bool _ | Int _ -> () @@ -8632,7 +8651,8 @@ last_error h = do function | Bool n -> sprintf "(fromBool %s)" n | Int n -> sprintf "(fromIntegral %s)" n - | FileIn n | FileOut n | String n | OptString n | StringList n -> n + | FileIn n | FileOut n + | Device n | String n | OptString n | StringList n -> n ) (snd style) in pr "withForeignPtr h (\\p -> c_%s %s)\n" name (String.concat " " ("p" :: args)); @@ -8682,7 +8702,7 @@ and generate_haskell_prototype ~handle ?(hs = false) style List.iter ( fun arg -> (match arg with - | String _ -> pr "%s" string + | Device _ | String _ -> pr "%s" string | OptString _ -> if hs then pr "Maybe String" else pr "CString" | StringList _ -> if hs then pr "[String]" else pr "Ptr CString" | Bool _ -> pr "%s" bool @@ -8757,6 +8777,7 @@ print_strings (char * const* const argv) pr "{\n"; List.iter ( function + | Device n | String n | FileIn n | FileOut n -> pr " printf (\"%%s\\n\", %s);\n" n -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 02/23] * daemon/daemon.h (RESOLVE_DEVICE): Rename from IS_DEVICE.
From: Jim Meyering <meyering at redhat.com> Change parameter from "errcode" (which would be returned) to "fail_stmt" so that a caller can specify e.g., "goto done" upon failure. --- daemon/daemon.h | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/daemon/daemon.h b/daemon/daemon.h index a6bbb73..166f3bf 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -151,14 +151,14 @@ extern void reply (xdrproc_t xdrp, char *ret); * * NB. Cannot be used for FileIn functions. */ -#define IS_DEVICE(path,errcode) \ +#define RESOLVE_DEVICE(path,fail_stmt) \ do { \ if (strncmp ((path), "/dev/", 5) != 0) { \ reply_with_error ("%s: %s: expecting a device name", __func__, (path)); \ - return (errcode); \ + fail_stmt; \ } \ if (device_name_translation ((path), __func__) == -1) \ - return (errcode); \ + fail_stmt; \ } while (0) /* Helper for functions which need either an absolute path in the -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 03/23] change almost all uses: s/IS_DEVICE/RESOLVE_DEVICE/
From: Jim Meyering <meyering at redhat.com> Use this command: git grep -l -w IS_DEVICE|xargs perl -pi -e \ 's/\b(?:IS_DEVICE)\b( \(.*?,) (.*?)\)/RESOLVE_DEVICE$1 return $2)/' --- daemon/blockdev.c | 2 +- daemon/devsparts.c | 2 +- daemon/ext2.c | 14 +++++++------- daemon/file.c | 2 +- daemon/fsck.c | 2 +- daemon/grub.c | 2 +- daemon/lvm.c | 12 ++++++------ daemon/mount.c | 4 ++-- daemon/ntfs.c | 2 +- daemon/scrub.c | 2 +- daemon/sfdisk.c | 4 ++-- daemon/swap.c | 10 +++++----- daemon/upload.c | 2 +- daemon/zero.c | 2 +- daemon/zerofree.c | 2 +- 15 files changed, 32 insertions(+), 32 deletions(-) diff --git a/daemon/blockdev.c b/daemon/blockdev.c index 35d14bf..a5f7691 100644 --- a/daemon/blockdev.c +++ b/daemon/blockdev.c @@ -46,7 +46,7 @@ call_blockdev (char *device, char *switc, int extraarg, int prints) }; char buf[64]; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); if (extraarg > 0) { snprintf (buf, sizeof buf, "%d", extraarg); diff --git a/daemon/devsparts.c b/daemon/devsparts.c index e9c5e8f..c3b9756 100644 --- a/daemon/devsparts.c +++ b/daemon/devsparts.c @@ -193,7 +193,7 @@ do_mkfs (char *fstype, char *device) char *err; int r; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); r = command (NULL, &err, "/sbin/mkfs", "-t", fstype, device, NULL); if (r == -1) { diff --git a/daemon/ext2.c b/daemon/ext2.c index 0f7a66c..d2304bd 100644 --- a/daemon/ext2.c +++ b/daemon/ext2.c @@ -36,7 +36,7 @@ do_tune2fs_l (char *device) char **ret = NULL; int size = 0, alloc = 0; - IS_DEVICE (device, NULL); + RESOLVE_DEVICE (device, return NULL); r = command (&out, &err, "/sbin/tune2fs", "-l", device, NULL); if (r == -1) { @@ -122,7 +122,7 @@ do_set_e2label (char *device, char *label) int r; char *err; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); r = command (NULL, &err, "/sbin/e2label", device, label, NULL); if (r == -1) { @@ -141,7 +141,7 @@ do_get_e2label (char *device) int r, len; char *out, *err; - IS_DEVICE (device, NULL); + RESOLVE_DEVICE (device, return NULL); r = command (&out, &err, "/sbin/e2label", device, NULL); if (r == -1) { @@ -167,7 +167,7 @@ do_set_e2uuid (char *device, char *uuid) int r; char *err; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); r = command (NULL, &err, "/sbin/tune2fs", "-U", uuid, device, NULL); if (r == -1) { @@ -186,7 +186,7 @@ do_get_e2uuid (char *device) int r; char *out, *err, *p, *q; - IS_DEVICE (device, NULL); + RESOLVE_DEVICE (device, return NULL); /* It's not so straightforward to get the volume UUID. We have * to use tune2fs -l and then look for a particular string in @@ -249,7 +249,7 @@ do_resize2fs (char *device) char *err; int r; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); r = command (NULL, &err, "/sbin/resize2fs", device, NULL); if (r == -1) { @@ -268,7 +268,7 @@ do_e2fsck_f (char *device) char *err; int r; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); r = command (NULL, &err, "/sbin/e2fsck", "-p", "-f", device, NULL); if (r == -1) { diff --git a/daemon/file.c b/daemon/file.c index cd477e5..d2ada99 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -391,7 +391,7 @@ do_file (char *path) char *buf; int len; - NEED_ROOT_OR_IS_DEVICE (path, NULL); + NEED_ROOT_OR_IS_DEVICE (path, return NULL); if (strncmp (path, "/dev/", 5) == 0) buf = (char *) path; diff --git a/daemon/fsck.c b/daemon/fsck.c index f1a9dc5..907c117 100644 --- a/daemon/fsck.c +++ b/daemon/fsck.c @@ -32,7 +32,7 @@ do_fsck (char *fstype, char *device) char *err; int r; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); r = commandr (NULL, &err, "/sbin/fsck", "-a", "-t", fstype, device, NULL); if (r == -1) { diff --git a/daemon/grub.c b/daemon/grub.c index 86e812e..118771f 100644 --- a/daemon/grub.c +++ b/daemon/grub.c @@ -34,7 +34,7 @@ do_grub_install (char *root, char *device) NEED_ROOT (-1); ABS_PATH (root, -1); - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); if (asprintf_nowarn (&buf, "--root-directory=%R", root) == -1) { reply_with_perror ("asprintf"); diff --git a/daemon/lvm.c b/daemon/lvm.c index 624dcf3..8f575c4 100644 --- a/daemon/lvm.c +++ b/daemon/lvm.c @@ -176,7 +176,7 @@ do_pvcreate (char *device) char *err; int r; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); r = command (NULL, &err, "/sbin/lvm", "pvcreate", device, NULL); @@ -202,7 +202,7 @@ do_vgcreate (char *volgroup, char **physvols) /* Check they are devices and also do device name translation. */ for (i = 0; physvols[i] != NULL; ++i) - IS_DEVICE (physvols[i], -1); + RESOLVE_DEVICE (physvols[i], return -1); argc = count_strings (physvols) + 3; argv = malloc (sizeof (char *) * (argc + 1)); @@ -262,7 +262,7 @@ do_lvresize (char *logvol, int mbytes) int r; char size[64]; - IS_DEVICE (logvol, -1); + RESOLVE_DEVICE (logvol, return -1); snprintf (size, sizeof size, "%d", mbytes); @@ -352,7 +352,7 @@ do_lvremove (char *device) char *err; int r; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); r = command (NULL, &err, "/sbin/lvm", "lvremove", "-f", device, NULL); @@ -396,7 +396,7 @@ do_pvremove (char *device) char *err; int r; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); r = command (NULL, &err, "/sbin/lvm", "pvremove", "-ff", device, NULL); @@ -419,7 +419,7 @@ do_pvresize (char *device) char *err; int r; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); r = command (NULL, &err, "/sbin/lvm", "pvresize", device, NULL); diff --git a/daemon/mount.c b/daemon/mount.c index 9754ca9..6c30304 100644 --- a/daemon/mount.c +++ b/daemon/mount.c @@ -48,7 +48,7 @@ do_mount_vfs (char *options, char *vfstype, char *mp; char *error; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); is_root = strcmp (mountpoint, "/") == 0; @@ -113,7 +113,7 @@ do_umount (char *pathordevice) if (strncmp (pathordevice, "/dev/", 5) == 0) { buf = pathordevice; - IS_DEVICE (buf, -1); + RESOLVE_DEVICE (buf, return -1); } else { buf = sysroot_path (pathordevice); if (buf == NULL) { diff --git a/daemon/ntfs.c b/daemon/ntfs.c index 26c8d50..8cb4f6f 100644 --- a/daemon/ntfs.c +++ b/daemon/ntfs.c @@ -33,7 +33,7 @@ do_ntfs_3g_probe (int rw, char *device) int r; const char *rw_flag; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); rw_flag = rw ? "-w" : "-r"; diff --git a/daemon/scrub.c b/daemon/scrub.c index 6e205a0..3c22b66 100644 --- a/daemon/scrub.c +++ b/daemon/scrub.c @@ -33,7 +33,7 @@ do_scrub_device (char *device) char *err; int r; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); r = command (NULL, &err, "scrub", device, NULL); if (r == -1) { diff --git a/daemon/sfdisk.c b/daemon/sfdisk.c index e06d0bf..693e89a 100644 --- a/daemon/sfdisk.c +++ b/daemon/sfdisk.c @@ -38,7 +38,7 @@ sfdisk (char *device, int n, int cyls, int heads, int sectors, char buf[256]; int i; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); strcpy (buf, "/sbin/sfdisk"); @@ -111,7 +111,7 @@ sfdisk_flag (char *device, const char *flag) char *out, *err; int r; - IS_DEVICE (device, NULL); + RESOLVE_DEVICE (device, return NULL); r = command (&out, &err, "/sbin/sfdisk", flag, device, NULL); if (r == -1) { diff --git a/daemon/swap.c b/daemon/swap.c index 3ebdef6..c9104e1 100644 --- a/daemon/swap.c +++ b/daemon/swap.c @@ -52,7 +52,7 @@ mkswap (char *device, const char *flag, const char *value) int do_mkswap (char *device) { - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); return mkswap (device, NULL, NULL); } @@ -60,7 +60,7 @@ do_mkswap (char *device) int do_mkswap_L (char *label, char *device) { - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); return mkswap (device, "-L", label); } @@ -68,7 +68,7 @@ do_mkswap_L (char *label, char *device) int do_mkswap_U (char *uuid, char *device) { - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); return mkswap (device, "-U", uuid); } @@ -118,7 +118,7 @@ swaponoff (const char *cmd, const char *flag, const char *value) int do_swapon_device (char *device) { - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); return swaponoff ("/sbin/swapon", NULL, device); } @@ -126,7 +126,7 @@ do_swapon_device (char *device) int do_swapoff_device (char *device) { - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); return swaponoff ("/sbin/swapoff", NULL, device); } diff --git a/daemon/upload.c b/daemon/upload.c index 6c5f6dc..7815e23 100644 --- a/daemon/upload.c +++ b/daemon/upload.c @@ -93,7 +93,7 @@ do_download (char *filename) int fd, r, is_dev; char buf[GUESTFS_MAX_CHUNK_SIZE]; - NEED_ROOT_OR_IS_DEVICE (filename, -1); + NEED_ROOT_OR_IS_DEVICE (filename, return -1); is_dev = strncmp (filename, "/dev/", 5) == 0; diff --git a/daemon/zero.c b/daemon/zero.c index 9c803d8..ba87e68 100644 --- a/daemon/zero.c +++ b/daemon/zero.c @@ -33,7 +33,7 @@ do_zero (char *device) int fd, i; char buf[4096]; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); fd = open (device, O_WRONLY); if (fd == -1) { diff --git a/daemon/zerofree.c b/daemon/zerofree.c index 8000bb3..27ef692 100644 --- a/daemon/zerofree.c +++ b/daemon/zerofree.c @@ -33,7 +33,7 @@ do_zerofree (char *device) char *err; int r; - IS_DEVICE (device, -1); + RESOLVE_DEVICE (device, return -1); r = command (NULL, &err, "/usr/sbin/zerofree", device, NULL); if (r == -1) { -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 04/23] convert the last few, manually
From: Jim Meyering <meyering at redhat.com> --- daemon/daemon.h | 2 +- daemon/sfdisk.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/daemon/daemon.h b/daemon/daemon.h index 166f3bf..bebc86f 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -174,7 +174,7 @@ extern void reply (xdrproc_t xdrp, char *ret); #define NEED_ROOT_OR_IS_DEVICE(path,errcode) \ do { \ if (strncmp ((path), "/dev/", 5) == 0) \ - IS_DEVICE ((path),(errcode)); \ + RESOLVE_DEVICE ((path), return errcode); \ else { \ NEED_ROOT ((errcode)); \ ABS_PATH ((path),(errcode)); \ diff --git a/daemon/sfdisk.c b/daemon/sfdisk.c index 693e89a..cf62f51 100644 --- a/daemon/sfdisk.c +++ b/daemon/sfdisk.c @@ -53,7 +53,7 @@ sfdisk (char *device, int n, int cyls, int heads, int sectors, if (extra_flag) sprintf (buf + strlen (buf), " %s", extra_flag); - /* Safe because of IS_DEVICE above: */ + /* Safe because of RESOLVES_DEVICE above: */ sprintf (buf + strlen (buf), " %s", device); if (verbose) -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 05/23] propagate semantic changes to NEED_ROOT, NEED_ROOT_OR_IS_DEVICE
From: Jim Meyering <meyering at redhat.com> changing IS_DEVICE semantics leads to changing semantics of NEED_ROOT_OR_IS_DEVICE and NEED_ROOT, too. * daemon/daemon.h: Update definitions. --- daemon/daemon.h | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-) diff --git a/daemon/daemon.h b/daemon/daemon.h index bebc86f..8bc6344 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -124,11 +124,11 @@ extern void reply (xdrproc_t xdrp, char *ret); /* Helper for functions that need a root filesystem mounted. * NB. Cannot be used for FileIn functions. */ -#define NEED_ROOT(errcode) \ +#define NEED_ROOT(fail_stmt) \ do { \ if (!root_mounted) { \ reply_with_error ("%s: you must call 'mount' first to mount the root filesystem", __func__); \ - return (errcode); \ + fail_stmt; \ } \ } \ while (0) @@ -136,11 +136,11 @@ extern void reply (xdrproc_t xdrp, char *ret); /* Helper for functions that need an argument ("path") that is absolute. * NB. Cannot be used for FileIn functions. */ -#define ABS_PATH(path,errcode) \ +#define ABS_PATH(path,fail_stmt) \ do { \ if ((path)[0] != '/') { \ reply_with_error ("%s: path must start with a / character", __func__); \ - return (errcode); \ + fail_stmt; \ } \ } while (0) @@ -171,13 +171,13 @@ extern void reply (xdrproc_t xdrp, char *ret); * because we intend in future to make device parameters a distinct * type from filenames. */ -#define NEED_ROOT_OR_IS_DEVICE(path,errcode) \ +#define NEED_ROOT_OR_IS_DEVICE(path,fail_stmt) \ do { \ if (strncmp ((path), "/dev/", 5) == 0) \ - RESOLVE_DEVICE ((path), return errcode); \ + RESOLVE_DEVICE ((path), fail_stmt); \ else { \ - NEED_ROOT ((errcode)); \ - ABS_PATH ((path),(errcode)); \ + NEED_ROOT (fail_stmt); \ + ABS_PATH ((path),fail_stmt); \ } \ } while (0) -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 06/23] update all uses of ABS_PATH
From: Jim Meyering <meyering at redhat.com> run this command: git grep -l -w ABS_PATH|xargs perl -pi -e \ 's/(?:ABS_PATH)( \(.*?,) (.*?)\)/ABS_PATH$1 return $2)/' --- daemon/augeas.c | 4 ++-- daemon/checksum.c | 2 +- daemon/cmp.c | 4 ++-- daemon/cpmv.c | 4 ++-- daemon/dir.c | 12 ++++++------ daemon/du.c | 2 +- daemon/fallocate.c | 2 +- daemon/file.c | 20 ++++++++++---------- daemon/find.c | 2 +- daemon/glob.c | 2 +- daemon/grep.c | 2 +- daemon/grub.c | 2 +- daemon/headtail.c | 2 +- daemon/hexdump.c | 2 +- daemon/initrd.c | 2 +- daemon/inotify.c | 2 +- daemon/link.c | 4 ++-- daemon/ls.c | 2 +- daemon/mknod.c | 2 +- daemon/mount.c | 6 +++--- daemon/readdir.c | 2 +- daemon/realpath.c | 2 +- daemon/scrub.c | 4 ++-- daemon/stat.c | 6 +++--- daemon/strings.c | 2 +- daemon/swap.c | 6 +++--- daemon/tar.c | 4 ++-- daemon/wc.c | 2 +- daemon/xattr.c | 2 +- 29 files changed, 55 insertions(+), 55 deletions(-) diff --git a/daemon/augeas.c b/daemon/augeas.c index 79d41a4..45f86cf 100644 --- a/daemon/augeas.c +++ b/daemon/augeas.c @@ -55,7 +55,7 @@ do_aug_init (char *root, int flags) char *buf; NEED_ROOT (-1); - ABS_PATH (root, -1); + ABS_PATH (root, return -1); if (aug) { aug_close (aug); @@ -350,7 +350,7 @@ do_aug_ls (char *path) NEED_AUG (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); len = strlen (path); diff --git a/daemon/checksum.c b/daemon/checksum.c index bd71182..d12413f 100644 --- a/daemon/checksum.c +++ b/daemon/checksum.c @@ -37,7 +37,7 @@ do_checksum (char *csumtype, char *path) int len; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); if (strcasecmp (csumtype, "crc") == 0) program = "cksum"; diff --git a/daemon/cmp.c b/daemon/cmp.c index a2d92a3..30574e2 100644 --- a/daemon/cmp.c +++ b/daemon/cmp.c @@ -35,8 +35,8 @@ do_equal (char *file1, char *file2) int r; NEED_ROOT (-1); - ABS_PATH (file1, -1); - ABS_PATH (file2, -1); + ABS_PATH (file1, return -1); + ABS_PATH (file2, return -1); file1buf = sysroot_path (file1); if (file1buf == NULL) { diff --git a/daemon/cpmv.c b/daemon/cpmv.c index 289a2da..37f1219 100644 --- a/daemon/cpmv.c +++ b/daemon/cpmv.c @@ -53,8 +53,8 @@ cpmv_cmd (const char *cmd, const char *flags, const char *src, const char *dest) int r; NEED_ROOT (-1); - ABS_PATH (src, -1); - ABS_PATH (dest, -1); + ABS_PATH (src, return -1); + ABS_PATH (dest, return -1); srcbuf = sysroot_path (src); if (srcbuf == NULL) { diff --git a/daemon/dir.c b/daemon/dir.c index 5945862..20cbd24 100644 --- a/daemon/dir.c +++ b/daemon/dir.c @@ -35,7 +35,7 @@ do_rmdir (char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; r = rmdir (path); @@ -60,7 +60,7 @@ do_rm_rf (char *path) char *buf, *err; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); if (strcmp (path, "/") == 0) { reply_with_error ("rm -rf: cannot remove root directory"); @@ -94,7 +94,7 @@ do_mkdir (char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; r = mkdir (path, 0777); @@ -160,7 +160,7 @@ do_mkdir_p (char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; r = recursive_mkdir (path); @@ -181,7 +181,7 @@ do_is_dir (char *path) struct stat buf; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; r = lstat (path, &buf); @@ -205,7 +205,7 @@ do_mkdtemp (char *template) char *r; NEED_ROOT (NULL); - ABS_PATH (template, NULL); + ABS_PATH (template, return NULL); CHROOT_IN; r = mkdtemp (template); diff --git a/daemon/du.c b/daemon/du.c index 735132a..7d9c663 100644 --- a/daemon/du.c +++ b/daemon/du.c @@ -37,7 +37,7 @@ do_du (char *path) char *buf; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); /* Make the path relative to /sysroot. */ buf = sysroot_path (path); diff --git a/daemon/fallocate.c b/daemon/fallocate.c index 47e84c6..f61c496 100644 --- a/daemon/fallocate.c +++ b/daemon/fallocate.c @@ -33,7 +33,7 @@ do_fallocate (char *path, int len) int fd, r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; fd = open (path, O_WRONLY | O_CREAT | O_TRUNC | O_NOCTTY, 0666); diff --git a/daemon/file.c b/daemon/file.c index d2ada99..e185132 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -36,7 +36,7 @@ do_touch (char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; fd = open (path, O_WRONLY | O_CREAT | O_NOCTTY, 0666); @@ -148,7 +148,7 @@ do_read_lines (char *path) ssize_t n; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); CHROOT_IN; fp = fopen (path, "r"); @@ -195,7 +195,7 @@ do_rm (char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; r = unlink (path); @@ -215,7 +215,7 @@ do_chmod (int mode, char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; r = chmod (path, mode); @@ -235,7 +235,7 @@ do_chown (int owner, int group, char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; r = chown (path, owner, group); @@ -255,7 +255,7 @@ do_exists (char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; r = access (path, F_OK); @@ -271,7 +271,7 @@ do_is_file (char *path) struct stat buf; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; r = lstat (path, &buf); @@ -295,7 +295,7 @@ do_write_file (char *path, char *content, int size) int fd; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); if (size == 0) size = strlen (content); @@ -331,7 +331,7 @@ do_read_file (char *path, size_t *size_r) char *r; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); CHROOT_IN; fd = open (path, O_RDONLY); @@ -445,7 +445,7 @@ do_zfile (char *method, char *path) char line[256]; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); if (strcmp (method, "gzip") == 0 || strcmp (method, "compress") == 0) zcat = "zcat"; diff --git a/daemon/find.c b/daemon/find.c index 40f1b3b..c514177 100644 --- a/daemon/find.c +++ b/daemon/find.c @@ -60,7 +60,7 @@ do_find (char *dir) char str[PATH_MAX]; NEED_ROOT (NULL); - ABS_PATH (dir, NULL); + ABS_PATH (dir, return NULL); sysrootdir = sysroot_path (dir); if (!sysrootdir) { diff --git a/daemon/glob.c b/daemon/glob.c index f15d5e5..1c47ba5 100644 --- a/daemon/glob.c +++ b/daemon/glob.c @@ -32,7 +32,7 @@ do_glob_expand (char *pattern) glob_t buf; NEED_ROOT (NULL); - ABS_PATH (pattern, NULL); /* Required so chroot can be used. */ + ABS_PATH (pattern, return NULL); /* Required so chroot can be used. */ /* glob(3) in glibc never calls chdir, so this seems to be safe: */ CHROOT_IN; diff --git a/daemon/grep.c b/daemon/grep.c index c51dc0b..19e4683 100644 --- a/daemon/grep.c +++ b/daemon/grep.c @@ -36,7 +36,7 @@ grep (const char *prog, const char *flag, char *regex, char *path) char **lines; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); /* Make the path relative to /sysroot. */ buf = sysroot_path (path); diff --git a/daemon/grub.c b/daemon/grub.c index 118771f..8fcd911 100644 --- a/daemon/grub.c +++ b/daemon/grub.c @@ -33,7 +33,7 @@ do_grub_install (char *root, char *device) char *buf; NEED_ROOT (-1); - ABS_PATH (root, -1); + ABS_PATH (root, return -1); RESOLVE_DEVICE (device, return -1); if (asprintf_nowarn (&buf, "--root-directory=%R", root) == -1) { diff --git a/daemon/headtail.c b/daemon/headtail.c index af2648c..bdd0f49 100644 --- a/daemon/headtail.c +++ b/daemon/headtail.c @@ -36,7 +36,7 @@ headtail (const char *prog, const char *flag, const char *n, char *path) char **lines; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); /* Make the path relative to /sysroot. */ buf = sysroot_path (path); diff --git a/daemon/hexdump.c b/daemon/hexdump.c index e2d8300..27ea108 100644 --- a/daemon/hexdump.c +++ b/daemon/hexdump.c @@ -33,7 +33,7 @@ do_hexdump (char *path) char *out, *err; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); buf = sysroot_path (path); if (!buf) { diff --git a/daemon/initrd.c b/daemon/initrd.c index 59749bb..e703481 100644 --- a/daemon/initrd.c +++ b/daemon/initrd.c @@ -38,7 +38,7 @@ do_initrd_list (char *path) size_t len; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); /* "zcat /sysroot/<path> | cpio --quiet -it", but path must be quoted. */ if (asprintf_nowarn (&cmd, "zcat %R | cpio --quiet -it", path) == -1) { diff --git a/daemon/inotify.c b/daemon/inotify.c index 8bb8ed2..2f22f52 100644 --- a/daemon/inotify.c +++ b/daemon/inotify.c @@ -129,7 +129,7 @@ do_inotify_add_watch (char *path, int mask) char *buf; NEED_INOTIFY (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); buf = sysroot_path (path); if (!buf) { diff --git a/daemon/link.c b/daemon/link.c index 29ae679..bf616ed 100644 --- a/daemon/link.c +++ b/daemon/link.c @@ -35,7 +35,7 @@ do_readlink (char *path) char link[PATH_MAX]; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); CHROOT_IN; r = readlink (path, link, sizeof link); @@ -63,7 +63,7 @@ _link (const char *flag, int symbolic, const char *target, const char *linkname) char *buf_target; NEED_ROOT (-1); - ABS_PATH (linkname, -1); + ABS_PATH (linkname, return -1); /* but target does not need to be absolute */ /* Prefix linkname with sysroot. */ diff --git a/daemon/ls.c b/daemon/ls.c index e2ca55f..8ae150b 100644 --- a/daemon/ls.c +++ b/daemon/ls.c @@ -38,7 +38,7 @@ do_ls (char *path) struct dirent *d; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); CHROOT_IN; dir = opendir (path); diff --git a/daemon/mknod.c b/daemon/mknod.c index 315ea7d..ab799cd 100644 --- a/daemon/mknod.c +++ b/daemon/mknod.c @@ -36,7 +36,7 @@ do_mknod (int mode, int devmajor, int devminor, char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; r = mknod (path, mode, makedev (devmajor, devminor)); diff --git a/daemon/mount.c b/daemon/mount.c index 6c30304..8cf6874 100644 --- a/daemon/mount.c +++ b/daemon/mount.c @@ -320,7 +320,7 @@ do_mount_loop (char *file, char *mountpoint) char *error; NEED_ROOT (-1); - ABS_PATH (file, -1); + ABS_PATH (file, return -1); /* We have to prefix /sysroot on both the filename and the mountpoint. */ mp = sysroot_path (mountpoint); @@ -358,7 +358,7 @@ do_mkmountpoint (char *path) int r; /* NEED_ROOT (-1); - we don't want this test for this call. */ - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; r = mkdir (path, 0777); @@ -383,7 +383,7 @@ do_rmmountpoint (char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); CHROOT_IN; r = rmdir (path); diff --git a/daemon/readdir.c b/daemon/readdir.c index 17fc619..f8f95d2 100644 --- a/daemon/readdir.c +++ b/daemon/readdir.c @@ -37,7 +37,7 @@ do_readdir (char *path) int i; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); ret = malloc (sizeof *ret); if (ret == NULL) { diff --git a/daemon/realpath.c b/daemon/realpath.c index 9ab478d..18adc85 100644 --- a/daemon/realpath.c +++ b/daemon/realpath.c @@ -33,7 +33,7 @@ do_realpath (char *path) char *ret; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); CHROOT_IN; ret = realpath (path, NULL); diff --git a/daemon/scrub.c b/daemon/scrub.c index 3c22b66..f1601f9 100644 --- a/daemon/scrub.c +++ b/daemon/scrub.c @@ -55,7 +55,7 @@ do_scrub_file (char *file) int r; NEED_ROOT (-1); - ABS_PATH (file, -1); + ABS_PATH (file, return -1); /* Make the path relative to /sysroot. */ buf = sysroot_path (file); @@ -85,7 +85,7 @@ do_scrub_freespace (char *dir) int r; NEED_ROOT (-1); - ABS_PATH (dir, -1); + ABS_PATH (dir, return -1); /* Make the path relative to /sysroot. */ buf = sysroot_path (dir); diff --git a/daemon/stat.c b/daemon/stat.c index da360ce..da2d274 100644 --- a/daemon/stat.c +++ b/daemon/stat.c @@ -38,7 +38,7 @@ do_stat (char *path) struct stat statbuf; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); CHROOT_IN; r = stat (path, &statbuf); @@ -80,7 +80,7 @@ do_lstat (char *path) struct stat statbuf; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); CHROOT_IN; r = lstat (path, &statbuf); @@ -122,7 +122,7 @@ do_statvfs (char *path) struct statvfs statbuf; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); CHROOT_IN; r = statvfs (path, &statbuf); diff --git a/daemon/strings.c b/daemon/strings.c index c0e073f..89e04a8 100644 --- a/daemon/strings.c +++ b/daemon/strings.c @@ -34,7 +34,7 @@ do_strings_e (char *encoding, char *path) char **lines; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); buf = sysroot_path (path); if (!buf) { diff --git a/daemon/swap.c b/daemon/swap.c index c9104e1..bb1706f 100644 --- a/daemon/swap.c +++ b/daemon/swap.c @@ -80,7 +80,7 @@ do_mkswap_file (char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); buf = sysroot_path (path); if (!buf) { @@ -138,7 +138,7 @@ do_swapon_file (char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); buf = sysroot_path (path); if (!buf) { @@ -158,7 +158,7 @@ do_swapoff_file (char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); buf = sysroot_path (path); if (!buf) { diff --git a/daemon/tar.c b/daemon/tar.c index 39b983c..e1ff9b6 100644 --- a/daemon/tar.c +++ b/daemon/tar.c @@ -107,7 +107,7 @@ do_tar_out (char *dir) char buf[GUESTFS_MAX_CHUNK_SIZE]; NEED_ROOT (-1); - ABS_PATH (dir, -1); + ABS_PATH (dir, return -1); /* "tar -C /sysroot%s -cf - ." but we have to quote the dir. */ if (asprintf_nowarn (&cmd, "tar -C %R -cf - .", dir) == -1) { @@ -229,7 +229,7 @@ do_tgz_out (char *dir) char buf[GUESTFS_MAX_CHUNK_SIZE]; NEED_ROOT (-1); - ABS_PATH (dir, -1); + ABS_PATH (dir, return -1); /* "tar -C /sysroot%s -zcf - ." but we have to quote the dir. */ if (asprintf_nowarn (&cmd, "tar -C %R -zcf - .", dir) == -1) { diff --git a/daemon/wc.c b/daemon/wc.c index 4878b57..0917eb9 100644 --- a/daemon/wc.c +++ b/daemon/wc.c @@ -35,7 +35,7 @@ wc (char *flag, char *path) int r; NEED_ROOT (-1); - ABS_PATH (path, -1); + ABS_PATH (path, return -1); /* Make the path relative to /sysroot. */ buf = sysroot_path (path); diff --git a/daemon/xattr.c b/daemon/xattr.c index a908a44..88947b2 100644 --- a/daemon/xattr.c +++ b/daemon/xattr.c @@ -117,7 +117,7 @@ getxattrs (char *path, guestfs_int_xattr_list *r = NULL; NEED_ROOT (NULL); - ABS_PATH (path, NULL); + ABS_PATH (path, return NULL); CHROOT_IN; len = listxattr (path, NULL, 0); -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 07/23] manually adjust ABS_PATH uses for new semantics
From: Jim Meyering <meyering at redhat.com> * daemon/file.c (do_cat): fix an ABS_PATH use --- daemon/file.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/daemon/file.c b/daemon/file.c index e185132..9cc324f 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -74,7 +74,7 @@ do_cat (char *path) char *buf, *buf2; NEED_ROOT (NULL); - ABS_PATH (path,NULL); + ABS_PATH (path, return NULL); CHROOT_IN; fd = open (path, O_RDONLY); -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 08/23] guestfsd.c: correct s/IS_DEVICE/RESOLVE_DEVICE/ in another comment
From: Jim Meyering <meyering at redhat.com> --- daemon/guestfsd.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c index 07a952f..4a14c75 100644 --- a/daemon/guestfsd.c +++ b/daemon/guestfsd.c @@ -775,7 +775,7 @@ print_arginfo (const struct printf_info *info, size_t n, int *argtypes) #endif /* Perform device name translation. Don't call this directly - - * use the IS_DEVICE macro. + * use the RESOLVE_DEVICE macro. * * See guestfs(3) for the algorithm. * -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 09/23] s/NEED_ROOT_OR_IS_DEVICE/REQUIRE_ROOT_OR_RESOLVE_DEVICE/
From: Jim Meyering <meyering at redhat.com> --- daemon/daemon.h | 2 +- daemon/file.c | 2 +- daemon/upload.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/daemon/daemon.h b/daemon/daemon.h index 8bc6344..cbcab63 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -171,7 +171,7 @@ extern void reply (xdrproc_t xdrp, char *ret); * because we intend in future to make device parameters a distinct * type from filenames. */ -#define NEED_ROOT_OR_IS_DEVICE(path,fail_stmt) \ +#define REQUIRE_ROOT_OR_RESOLVE_DEVICE(path,fail_stmt) \ do { \ if (strncmp ((path), "/dev/", 5) == 0) \ RESOLVE_DEVICE ((path), fail_stmt); \ diff --git a/daemon/file.c b/daemon/file.c index 9cc324f..2ba2aab 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -391,7 +391,7 @@ do_file (char *path) char *buf; int len; - NEED_ROOT_OR_IS_DEVICE (path, return NULL); + REQUIRE_ROOT_OR_RESOLVE_DEVICE (path, return NULL); if (strncmp (path, "/dev/", 5) == 0) buf = (char *) path; diff --git a/daemon/upload.c b/daemon/upload.c index 7815e23..5c1adaf 100644 --- a/daemon/upload.c +++ b/daemon/upload.c @@ -93,7 +93,7 @@ do_download (char *filename) int fd, r, is_dev; char buf[GUESTFS_MAX_CHUNK_SIZE]; - NEED_ROOT_OR_IS_DEVICE (filename, return -1); + REQUIRE_ROOT_OR_RESOLVE_DEVICE (filename, return -1); is_dev = strncmp (filename, "/dev/", 5) == 0; -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 10/23] update generator to emit each RESOLVE_DEVICE call
From: Jim Meyering <meyering at redhat.com> * src/generator.ml: Emit RESOLVE_DEVICE (device, goto done); just before each Device-enabled do_$FUNCTION. --- src/generator.ml | 14 +++++++------- 1 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/generator.ml b/src/generator.ml index 8159027..20fe5c1 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -4475,7 +4475,6 @@ check_state (guestfs_h *g, const char *caller) | args -> List.iter ( function - (* FIXME *) | Device n | String n -> pr " args.%s = (char *) %s;\n" n n | OptString n -> @@ -4685,7 +4684,6 @@ and generate_daemon_actions () * allow device name translation. This is safe because * we can modify the string (passed from RPC). *) - (* FIXME *) | Device n | String n | OptString n -> pr " char *%s;\n" n | StringList n -> pr " char **%s;\n" n @@ -4707,7 +4705,10 @@ and generate_daemon_actions () pr " }\n"; List.iter ( function - | Device n | String n -> pr " %s = args.%s;\n" n n + | Device n -> + pr " %s = args.%s;\n" n n; + pr " RESOLVE_DEVICE (%s, goto done);" n; + | String n -> pr " %s = args.%s;\n" n n | OptString n -> pr " %s = args.%s ? *args.%s : NULL;\n" n n n | StringList n -> pr " %s = realloc (args.%s.%s_val,\n" n n n; @@ -6232,7 +6233,6 @@ and generate_prototype ?(extern = true) ?(static = false) ?(semicolon = true) | String n | OptString n -> next (); -(* FIXME *) if not in_daemon then pr "const char *%s" n else pr "char *%s" n | StringList n -> @@ -7448,7 +7448,7 @@ py_guestfs_close (PyObject *self, PyObject *args) List.iter ( function | Device _ | String _ - | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () + | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () | StringList n -> pr " %s = get_string_list (py_%s);\n" n n; pr " if (!%s) return NULL;\n" n @@ -7463,7 +7463,7 @@ py_guestfs_close (PyObject *self, PyObject *args) List.iter ( function | Device _ | String _ - | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () + | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () | StringList n -> pr " free (%s);\n" n ) (snd style); @@ -7824,7 +7824,7 @@ static VALUE ruby_guestfs_close (VALUE gv) List.iter ( function | Device _ | String _ - | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () + | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () | StringList n -> pr " free (%s);\n" n ) (snd style); -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 11/23] * src/generator.ml: Change all `String "device"' to `Device "device"'.
From: Jim Meyering <meyering at redhat.com> Then update each affected function, removing each uses of RESOLVE_DEVICE, now that it's generated in caller from stub.c. * daemon/blockdev.c (call_blockdev): Remove use of RESOLVE_DEVICE. * daemon/devsparts.c (do_mkfs): Likewise. * daemon/ext2.c (do_e2fsck_f, do_get_e2label, do_get_e2uuid): Likewise. (do_resize2fs, do_set_e2label, do_set_e2uuid, do_tune2fs_l): Likewise. * daemon/fsck.c (do_fsck): Likewise. * daemon/grub.c (do_grub_install): Likewise. * daemon/lvm.c (do_lvremove, do_pvcreate, do_pvremove): Likewise. (do_pvresize): Likewise. * daemon/mount.c (do_mount_vfs): Likewise. * daemon/ntfs.c (do_ntfs_3g_probe): Likewise. * daemon/scrub.c (do_scrub_device): Likewise. * daemon/sfdisk.c (sfdisk, sfdisk_flag): Likewise. * daemon/swap.c (do_mkswap, do_mkswap_L, do_mkswap_U): Likewise. (do_swapoff_device, do_swapon_device): Likewise. * daemon/zero.c (do_zero): Likewise. * daemon/zerofree.c (do_zerofree): Likewise. --- daemon/blockdev.c | 2 - daemon/devsparts.c | 2 - daemon/ext2.c | 14 -------- daemon/fsck.c | 2 - daemon/grub.c | 1 - daemon/lvm.c | 8 ----- daemon/mount.c | 2 - daemon/ntfs.c | 2 - daemon/scrub.c | 2 - daemon/sfdisk.c | 4 -- daemon/swap.c | 10 ------ daemon/zero.c | 2 - daemon/zerofree.c | 2 - src/generator.ml | 86 ++++++++++++++++++++++++++-------------------------- 14 files changed, 43 insertions(+), 96 deletions(-) diff --git a/daemon/blockdev.c b/daemon/blockdev.c index a5f7691..46ee994 100644 --- a/daemon/blockdev.c +++ b/daemon/blockdev.c @@ -46,8 +46,6 @@ call_blockdev (char *device, char *switc, int extraarg, int prints) }; char buf[64]; - RESOLVE_DEVICE (device, return -1); - if (extraarg > 0) { snprintf (buf, sizeof buf, "%d", extraarg); argv[2] = buf; diff --git a/daemon/devsparts.c b/daemon/devsparts.c index c3b9756..04585ed 100644 --- a/daemon/devsparts.c +++ b/daemon/devsparts.c @@ -193,8 +193,6 @@ do_mkfs (char *fstype, char *device) char *err; int r; - RESOLVE_DEVICE (device, return -1); - r = command (NULL, &err, "/sbin/mkfs", "-t", fstype, device, NULL); if (r == -1) { reply_with_error ("mkfs: %s", err); diff --git a/daemon/ext2.c b/daemon/ext2.c index d2304bd..04869da 100644 --- a/daemon/ext2.c +++ b/daemon/ext2.c @@ -36,8 +36,6 @@ do_tune2fs_l (char *device) char **ret = NULL; int size = 0, alloc = 0; - RESOLVE_DEVICE (device, return NULL); - r = command (&out, &err, "/sbin/tune2fs", "-l", device, NULL); if (r == -1) { reply_with_error ("tune2fs: %s", err); @@ -122,8 +120,6 @@ do_set_e2label (char *device, char *label) int r; char *err; - RESOLVE_DEVICE (device, return -1); - r = command (NULL, &err, "/sbin/e2label", device, label, NULL); if (r == -1) { reply_with_error ("e2label: %s", err); @@ -141,8 +137,6 @@ do_get_e2label (char *device) int r, len; char *out, *err; - RESOLVE_DEVICE (device, return NULL); - r = command (&out, &err, "/sbin/e2label", device, NULL); if (r == -1) { reply_with_error ("e2label: %s", err); @@ -167,8 +161,6 @@ do_set_e2uuid (char *device, char *uuid) int r; char *err; - RESOLVE_DEVICE (device, return -1); - r = command (NULL, &err, "/sbin/tune2fs", "-U", uuid, device, NULL); if (r == -1) { reply_with_error ("tune2fs -U: %s", err); @@ -186,8 +178,6 @@ do_get_e2uuid (char *device) int r; char *out, *err, *p, *q; - RESOLVE_DEVICE (device, return NULL); - /* It's not so straightforward to get the volume UUID. We have * to use tune2fs -l and then look for a particular string in * the output. @@ -249,8 +239,6 @@ do_resize2fs (char *device) char *err; int r; - RESOLVE_DEVICE (device, return -1); - r = command (NULL, &err, "/sbin/resize2fs", device, NULL); if (r == -1) { reply_with_error ("resize2fs: %s", err); @@ -268,8 +256,6 @@ do_e2fsck_f (char *device) char *err; int r; - RESOLVE_DEVICE (device, return -1); - r = command (NULL, &err, "/sbin/e2fsck", "-p", "-f", device, NULL); if (r == -1) { reply_with_error ("e2fsck: %s", err); diff --git a/daemon/fsck.c b/daemon/fsck.c index 907c117..825f97e 100644 --- a/daemon/fsck.c +++ b/daemon/fsck.c @@ -32,8 +32,6 @@ do_fsck (char *fstype, char *device) char *err; int r; - RESOLVE_DEVICE (device, return -1); - r = commandr (NULL, &err, "/sbin/fsck", "-a", "-t", fstype, device, NULL); if (r == -1) { reply_with_error ("fsck: %s: %s", device, err); diff --git a/daemon/grub.c b/daemon/grub.c index 8fcd911..0a49c45 100644 --- a/daemon/grub.c +++ b/daemon/grub.c @@ -34,7 +34,6 @@ do_grub_install (char *root, char *device) NEED_ROOT (-1); ABS_PATH (root, return -1); - RESOLVE_DEVICE (device, return -1); if (asprintf_nowarn (&buf, "--root-directory=%R", root) == -1) { reply_with_perror ("asprintf"); diff --git a/daemon/lvm.c b/daemon/lvm.c index 8f575c4..bee62d4 100644 --- a/daemon/lvm.c +++ b/daemon/lvm.c @@ -176,8 +176,6 @@ do_pvcreate (char *device) char *err; int r; - RESOLVE_DEVICE (device, return -1); - r = command (NULL, &err, "/sbin/lvm", "pvcreate", device, NULL); if (r == -1) { @@ -352,8 +350,6 @@ do_lvremove (char *device) char *err; int r; - RESOLVE_DEVICE (device, return -1); - r = command (NULL, &err, "/sbin/lvm", "lvremove", "-f", device, NULL); if (r == -1) { @@ -396,8 +392,6 @@ do_pvremove (char *device) char *err; int r; - RESOLVE_DEVICE (device, return -1); - r = command (NULL, &err, "/sbin/lvm", "pvremove", "-ff", device, NULL); if (r == -1) { @@ -419,8 +413,6 @@ do_pvresize (char *device) char *err; int r; - RESOLVE_DEVICE (device, return -1); - r = command (NULL, &err, "/sbin/lvm", "pvresize", device, NULL); if (r == -1) { diff --git a/daemon/mount.c b/daemon/mount.c index 8cf6874..14e683a 100644 --- a/daemon/mount.c +++ b/daemon/mount.c @@ -48,8 +48,6 @@ do_mount_vfs (char *options, char *vfstype, char *mp; char *error; - RESOLVE_DEVICE (device, return -1); - is_root = strcmp (mountpoint, "/") == 0; if (!root_mounted && !is_root) { diff --git a/daemon/ntfs.c b/daemon/ntfs.c index 8cb4f6f..1d73f2e 100644 --- a/daemon/ntfs.c +++ b/daemon/ntfs.c @@ -33,8 +33,6 @@ do_ntfs_3g_probe (int rw, char *device) int r; const char *rw_flag; - RESOLVE_DEVICE (device, return -1); - rw_flag = rw ? "-w" : "-r"; r = commandr (NULL, &err, "ntfs-3g.probe", rw_flag, device, NULL); diff --git a/daemon/scrub.c b/daemon/scrub.c index f1601f9..2beaea3 100644 --- a/daemon/scrub.c +++ b/daemon/scrub.c @@ -33,8 +33,6 @@ do_scrub_device (char *device) char *err; int r; - RESOLVE_DEVICE (device, return -1); - r = command (NULL, &err, "scrub", device, NULL); if (r == -1) { reply_with_error ("scrub_device: %s: %s", device, err); diff --git a/daemon/sfdisk.c b/daemon/sfdisk.c index cf62f51..fe58d96 100644 --- a/daemon/sfdisk.c +++ b/daemon/sfdisk.c @@ -38,8 +38,6 @@ sfdisk (char *device, int n, int cyls, int heads, int sectors, char buf[256]; int i; - RESOLVE_DEVICE (device, return -1); - strcpy (buf, "/sbin/sfdisk"); if (n > 0) @@ -111,8 +109,6 @@ sfdisk_flag (char *device, const char *flag) char *out, *err; int r; - RESOLVE_DEVICE (device, return NULL); - r = command (&out, &err, "/sbin/sfdisk", flag, device, NULL); if (r == -1) { reply_with_error ("sfdisk: %s: %s", device, err); diff --git a/daemon/swap.c b/daemon/swap.c index bb1706f..f7270f8 100644 --- a/daemon/swap.c +++ b/daemon/swap.c @@ -52,24 +52,18 @@ mkswap (char *device, const char *flag, const char *value) int do_mkswap (char *device) { - RESOLVE_DEVICE (device, return -1); - return mkswap (device, NULL, NULL); } int do_mkswap_L (char *label, char *device) { - RESOLVE_DEVICE (device, return -1); - return mkswap (device, "-L", label); } int do_mkswap_U (char *uuid, char *device) { - RESOLVE_DEVICE (device, return -1); - return mkswap (device, "-U", uuid); } @@ -118,16 +112,12 @@ swaponoff (const char *cmd, const char *flag, const char *value) int do_swapon_device (char *device) { - RESOLVE_DEVICE (device, return -1); - return swaponoff ("/sbin/swapon", NULL, device); } int do_swapoff_device (char *device) { - RESOLVE_DEVICE (device, return -1); - return swaponoff ("/sbin/swapoff", NULL, device); } diff --git a/daemon/zero.c b/daemon/zero.c index ba87e68..864e9a6 100644 --- a/daemon/zero.c +++ b/daemon/zero.c @@ -33,8 +33,6 @@ do_zero (char *device) int fd, i; char buf[4096]; - RESOLVE_DEVICE (device, return -1); - fd = open (device, O_WRONLY); if (fd == -1) { reply_with_perror ("%s", device); diff --git a/daemon/zerofree.c b/daemon/zerofree.c index 27ef692..457f8db 100644 --- a/daemon/zerofree.c +++ b/daemon/zerofree.c @@ -33,8 +33,6 @@ do_zerofree (char *device) char *err; int r; - RESOLVE_DEVICE (device, return -1); - r = command (NULL, &err, "/usr/sbin/zerofree", device, NULL); if (r == -1) { reply_with_error ("zerofree: %s: %s", device, err); diff --git a/src/generator.ml b/src/generator.ml index 20fe5c1..0c9cf36 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -769,7 +769,7 @@ of features. Distro backports makes this unreliable."); *) let daemon_functions = [ - ("mount", (RErr, [String "device"; String "mountpoint"]), 1, [], + ("mount", (RErr, [Device "device"; String "mountpoint"]), 1, [], [InitEmpty, Always, TestOutput ( [["sfdiskM"; "/dev/sda"; ","]; ["mkfs"; "ext2"; "/dev/sda1"]; @@ -1265,7 +1265,7 @@ other objects like files. See also C<guestfs_stat>."); - ("pvcreate", (RErr, [String "device"]), 39, [], + ("pvcreate", (RErr, [Device "device"]), 39, [], [InitEmpty, Always, TestOutputListOfDevices ( [["sfdiskM"; "/dev/sda"; ",100 ,200 ,"]; ["pvcreate"; "/dev/sda1"]; @@ -1313,7 +1313,7 @@ from the non-empty list of physical volumes C<physvols>."); This creates an LVM volume group called C<logvol> on the volume group C<volgroup>, with C<size> megabytes."); - ("mkfs", (RErr, [String "fstype"; String "device"]), 42, [], + ("mkfs", (RErr, [String "fstype"; Device "device"]), 42, [], [InitEmpty, Always, TestOutput ( [["sfdiskM"; "/dev/sda"; ","]; ["mkfs"; "ext2"; "/dev/sda1"]; @@ -1326,7 +1326,7 @@ This creates a filesystem on C<device> (usually a partition or LVM logical volume). The filesystem type is C<fstype>, for example C<ext3>."); - ("sfdisk", (RErr, [String "device"; + ("sfdisk", (RErr, [Device "device"; Int "cyls"; Int "heads"; Int "sectors"; StringList "lines"]), 43, [DangerWillRobinson], [], @@ -1647,7 +1647,7 @@ manpage for more details. The list of fields returned isn't clearly defined, and depends on both the version of C<tune2fs> that libguestfs was built against, and the filesystem itself."); - ("blockdev_setro", (RErr, [String "device"]), 56, [], + ("blockdev_setro", (RErr, [Device "device"]), 56, [], [InitEmpty, Always, TestOutputTrue ( [["blockdev_setro"; "/dev/sda"]; ["blockdev_getro"; "/dev/sda"]])], @@ -1657,7 +1657,7 @@ Sets the block device named C<device> to read-only. This uses the L<blockdev(8)> command."); - ("blockdev_setrw", (RErr, [String "device"]), 57, [], + ("blockdev_setrw", (RErr, [Device "device"]), 57, [], [InitEmpty, Always, TestOutputFalse ( [["blockdev_setrw"; "/dev/sda"]; ["blockdev_getro"; "/dev/sda"]])], @@ -1667,7 +1667,7 @@ Sets the block device named C<device> to read-write. This uses the L<blockdev(8)> command."); - ("blockdev_getro", (RBool "ro", [String "device"]), 58, [], + ("blockdev_getro", (RBool "ro", [Device "device"]), 58, [], [InitEmpty, Always, TestOutputTrue ( [["blockdev_setro"; "/dev/sda"]; ["blockdev_getro"; "/dev/sda"]])], @@ -1678,7 +1678,7 @@ Returns a boolean indicating if the block device is read-only This uses the L<blockdev(8)> command."); - ("blockdev_getss", (RInt "sectorsize", [String "device"]), 59, [], + ("blockdev_getss", (RInt "sectorsize", [Device "device"]), 59, [], [InitEmpty, Always, TestOutputInt ( [["blockdev_getss"; "/dev/sda"]], 512)], "get sectorsize of block device", @@ -1691,7 +1691,7 @@ for that). This uses the L<blockdev(8)> command."); - ("blockdev_getbsz", (RInt "blocksize", [String "device"]), 60, [], + ("blockdev_getbsz", (RInt "blocksize", [Device "device"]), 60, [], [InitEmpty, Always, TestOutputInt ( [["blockdev_getbsz"; "/dev/sda"]], 4096)], "get blocksize of block device", @@ -1703,7 +1703,7 @@ I<filesystem block size>). This uses the L<blockdev(8)> command."); - ("blockdev_setbsz", (RErr, [String "device"; Int "blocksize"]), 61, [], + ("blockdev_setbsz", (RErr, [Device "device"; Int "blocksize"]), 61, [], [], (* XXX test *) "set blocksize of block device", "\ @@ -1714,7 +1714,7 @@ I<filesystem block size>). This uses the L<blockdev(8)> command."); - ("blockdev_getsz", (RInt64 "sizeinsectors", [String "device"]), 62, [], + ("blockdev_getsz", (RInt64 "sizeinsectors", [Device "device"]), 62, [], [InitEmpty, Always, TestOutputInt ( [["blockdev_getsz"; "/dev/sda"]], 1024000)], "get total size of device in 512-byte sectors", @@ -1728,7 +1728,7 @@ useful I<size in bytes>. This uses the L<blockdev(8)> command."); - ("blockdev_getsize64", (RInt64 "sizeinbytes", [String "device"]), 63, [], + ("blockdev_getsize64", (RInt64 "sizeinbytes", [Device "device"]), 63, [], [InitEmpty, Always, TestOutputInt ( [["blockdev_getsize64"; "/dev/sda"]], 524288000)], "get total size of device in bytes", @@ -1739,7 +1739,7 @@ See also C<guestfs_blockdev_getsz>. This uses the L<blockdev(8)> command."); - ("blockdev_flushbufs", (RErr, [String "device"]), 64, [], + ("blockdev_flushbufs", (RErr, [Device "device"]), 64, [], [InitEmpty, Always, TestRun [["blockdev_flushbufs"; "/dev/sda"]]], "flush device buffers", @@ -1749,7 +1749,7 @@ with C<device>. This uses the L<blockdev(8)> command."); - ("blockdev_rereadpt", (RErr, [String "device"]), 65, [], + ("blockdev_rereadpt", (RErr, [Device "device"]), 65, [], [InitEmpty, Always, TestRun [["blockdev_rereadpt"; "/dev/sda"]]], "reread partition table", @@ -1890,7 +1890,7 @@ it to local file C<tarball>. To download an uncompressed tarball, use C<guestfs_tar_out>."); - ("mount_ro", (RErr, [String "device"; String "mountpoint"]), 73, [], + ("mount_ro", (RErr, [Device "device"; String "mountpoint"]), 73, [], [InitBasicFS, Always, TestLastFail ( [["umount"; "/"]; ["mount_ro"; "/dev/sda1"; "/"]; @@ -1905,7 +1905,7 @@ To download an uncompressed tarball, use C<guestfs_tar_out>."); This is the same as the C<guestfs_mount> command, but it mounts the filesystem with the read-only (I<-o ro>) flag."); - ("mount_options", (RErr, [String "options"; String "device"; String "mountpoint"]), 74, [], + ("mount_options", (RErr, [String "options"; Device "device"; String "mountpoint"]), 74, [], [], "mount a guest disk with mount options", "\ @@ -1913,7 +1913,7 @@ This is the same as the C<guestfs_mount> command, but it allows you to set the mount options as for the L<mount(8)> I<-o> flag."); - ("mount_vfs", (RErr, [String "options"; String "vfstype"; String "device"; String "mountpoint"]), 75, [], + ("mount_vfs", (RErr, [String "options"; String "vfstype"; Device "device"; String "mountpoint"]), 75, [], [], "mount a guest disk with mount options and vfstype", "\ @@ -1933,7 +1933,7 @@ There is no comprehensive help for this command. You have to look at the file C<daemon/debug.c> in the libguestfs source to find out what you can do."); - ("lvremove", (RErr, [String "device"]), 77, [], + ("lvremove", (RErr, [Device "device"]), 77, [], [InitEmpty, Always, TestOutputList ( [["sfdiskM"; "/dev/sda"; ","]; ["pvcreate"; "/dev/sda1"]; @@ -1990,7 +1990,7 @@ Remove an LVM volume group C<vgname>, (for example C<VG>). This also forcibly removes all logical volumes in the volume group (if any)."); - ("pvremove", (RErr, [String "device"]), 79, [], + ("pvremove", (RErr, [Device "device"]), 79, [], [InitEmpty, Always, TestOutputListOfDevices ( [["sfdiskM"; "/dev/sda"; ","]; ["pvcreate"; "/dev/sda1"]; @@ -2027,7 +2027,7 @@ The implementation uses the C<pvremove> command which refuses to wipe physical volumes that contain any volume groups, so you have to remove those first."); - ("set_e2label", (RErr, [String "device"; String "label"]), 80, [], + ("set_e2label", (RErr, [Device "device"; String "label"]), 80, [], [InitBasicFS, Always, TestOutput ( [["set_e2label"; "/dev/sda1"; "testlabel"]; ["get_e2label"; "/dev/sda1"]], "testlabel")], @@ -2040,14 +2040,14 @@ C<device> to C<label>. Filesystem labels are limited to You can use either C<guestfs_tune2fs_l> or C<guestfs_get_e2label> to return the existing label on a filesystem."); - ("get_e2label", (RString "label", [String "device"]), 81, [], + ("get_e2label", (RString "label", [Device "device"]), 81, [], [], "get the ext2/3/4 filesystem label", "\ This returns the ext2/3/4 filesystem label of the filesystem on C<device>."); - ("set_e2uuid", (RErr, [String "device"; String "uuid"]), 82, [], + ("set_e2uuid", (RErr, [Device "device"; String "uuid"]), 82, [], [InitBasicFS, Always, TestOutput ( [["set_e2uuid"; "/dev/sda1"; "a3a61220-882b-4f61-89f4-cf24dcc7297d"]; ["get_e2uuid"; "/dev/sda1"]], "a3a61220-882b-4f61-89f4-cf24dcc7297d"); @@ -2069,14 +2069,14 @@ L<tune2fs(8)> manpage. You can use either C<guestfs_tune2fs_l> or C<guestfs_get_e2uuid> to return the existing UUID of a filesystem."); - ("get_e2uuid", (RString "uuid", [String "device"]), 83, [], + ("get_e2uuid", (RString "uuid", [Device "device"]), 83, [], [], "get the ext2/3/4 filesystem UUID", "\ This returns the ext2/3/4 filesystem UUID of the filesystem on C<device>."); - ("fsck", (RInt "status", [String "fstype"; String "device"]), 84, [], + ("fsck", (RInt "status", [String "fstype"; Device "device"]), 84, [], [InitBasicFS, Always, TestOutputInt ( [["umount"; "/dev/sda1"]; ["fsck"; "ext2"; "/dev/sda1"]], 0); @@ -2114,7 +2114,7 @@ Checking or repairing NTFS volumes is not supported This command is entirely equivalent to running C<fsck -a -t fstype device>."); - ("zero", (RErr, [String "device"]), 85, [], + ("zero", (RErr, [Device "device"]), 85, [], [InitBasicFS, Always, TestOutput ( [["umount"; "/dev/sda1"]; ["zero"; "/dev/sda1"]; @@ -2129,7 +2129,7 @@ any partition tables, filesystem superblocks and so on. See also: C<guestfs_scrub_device>."); - ("grub_install", (RErr, [String "root"; String "device"]), 86, [], + ("grub_install", (RErr, [String "root"; Device "device"]), 86, [], (* Test disabled because grub-install incompatible with virtio-blk driver. * See also: https://bugzilla.redhat.com/show_bug.cgi?id=479760 *) @@ -2284,7 +2284,7 @@ The returned strings are transcoded to UTF-8."); This runs C<hexdump -C> on the given C<path>. The result is the human-readable, canonical hex dump of the file."); - ("zerofree", (RErr, [String "device"]), 97, [], + ("zerofree", (RErr, [Device "device"]), 97, [], [InitNone, Always, TestOutput ( [["sfdiskM"; "/dev/sda"; ","]; ["mkfs"; "ext3"; "/dev/sda1"]; @@ -2307,14 +2307,14 @@ mounted. It is possible that using this program can damage the filesystem or data on the filesystem."); - ("pvresize", (RErr, [String "device"]), 98, [], + ("pvresize", (RErr, [Device "device"]), 98, [], [], "resize an LVM physical volume", "\ This resizes (expands or shrinks) an existing LVM physical volume to match the new size of the underlying device."); - ("sfdisk_N", (RErr, [String "device"; Int "partnum"; + ("sfdisk_N", (RErr, [Device "device"; Int "partnum"; Int "cyls"; Int "heads"; Int "sectors"; String "line"]), 99, [DangerWillRobinson], [], @@ -2326,7 +2326,7 @@ partition C<n> (note: C<n> counts from 1). For other parameters, see C<guestfs_sfdisk>. You should usually pass C<0> for the cyls/heads/sectors parameters."); - ("sfdisk_l", (RString "partitions", [String "device"]), 100, [], + ("sfdisk_l", (RString "partitions", [Device "device"]), 100, [], [], "display the partition table", "\ @@ -2334,7 +2334,7 @@ This displays the partition table on C<device>, in the human-readable output of the L<sfdisk(8)> command. It is not intended to be parsed."); - ("sfdisk_kernel_geometry", (RString "partitions", [String "device"]), 101, [], + ("sfdisk_kernel_geometry", (RString "partitions", [Device "device"]), 101, [], [], "display the kernel geometry", "\ @@ -2343,7 +2343,7 @@ This displays the kernel's idea of the geometry of C<device>. The result is in human-readable format, and not designed to be parsed."); - ("sfdisk_disk_geometry", (RString "partitions", [String "device"]), 102, [], + ("sfdisk_disk_geometry", (RString "partitions", [Device "device"]), 102, [], [], "display the disk geometry from the partition table", "\ @@ -2382,7 +2382,7 @@ This command is the same as running C<vgchange -a y|n volgroups...> Note that if C<volgroups> is an empty list then B<all> volume groups are activated or deactivated."); - ("lvresize", (RErr, [String "device"; Int "mbytes"]), 105, [], + ("lvresize", (RErr, [Device "device"; Int "mbytes"]), 105, [], [InitNone, Always, TestOutput ( [["sfdiskM"; "/dev/sda"; ","]; ["pvcreate"; "/dev/sda1"]; @@ -2403,7 +2403,7 @@ This resizes (expands or shrinks) an existing LVM logical volume to C<mbytes>. When reducing, data in the reduced part is lost."); - ("resize2fs", (RErr, [String "device"]), 106, [], + ("resize2fs", (RErr, [Device "device"]), 106, [], [], (* lvresize tests this *) "resize an ext2/ext3 filesystem", "\ @@ -2455,7 +2455,7 @@ an error. The returned list is sorted."); - ("e2fsck_f", (RErr, [String "device"]), 108, [], + ("e2fsck_f", (RErr, [Device "device"]), 108, [], [], (* lvresize tests this *) "check an ext2/ext3 filesystem", "\ @@ -2473,7 +2473,7 @@ This command is only needed because of C<guestfs_resize2fs> "\ Sleep for C<secs> seconds."); - ("ntfs_3g_probe", (RInt "status", [Bool "rw"; String "device"]), 110, [], + ("ntfs_3g_probe", (RInt "status", [Bool "rw"; Device "device"]), 110, [], [InitNone, Always, TestOutputInt ( [["sfdiskM"; "/dev/sda"; ","]; ["mkfs"; "ntfs"; "/dev/sda1"]; @@ -2551,7 +2551,7 @@ It is just a wrapper around the C L<glob(3)> function with flags C<GLOB_MARK|GLOB_BRACE>. See that manual page for more details."); - ("scrub_device", (RErr, [String "device"]), 114, [DangerWillRobinson], + ("scrub_device", (RErr, [Device "device"]), 114, [DangerWillRobinson], [InitNone, Always, TestRun ( (* use /dev/sdc because it's smaller *) [["scrub_device"; "/dev/sdc"]])], "scrub (securely wipe) a device", @@ -2751,7 +2751,7 @@ This command lets you mount C<file> (a filesystem image in a file) on a mount point. It is entirely equivalent to the command C<mount -o loop file mountpoint>."); - ("mkswap", (RErr, [String "device"]), 130, [], + ("mkswap", (RErr, [Device "device"]), 130, [], [InitEmpty, Always, TestRun ( [["sfdiskM"; "/dev/sda"; ","]; ["mkswap"; "/dev/sda1"]])], @@ -2759,7 +2759,7 @@ the command C<mount -o loop file mountpoint>."); "\ Create a swap partition on C<device>."); - ("mkswap_L", (RErr, [String "label"; String "device"]), 131, [], + ("mkswap_L", (RErr, [String "label"; Device "device"]), 131, [], [InitEmpty, Always, TestRun ( [["sfdiskM"; "/dev/sda"; ","]; ["mkswap_L"; "hello"; "/dev/sda1"]])], @@ -2771,7 +2771,7 @@ Note that you cannot attach a swap label to a block device (eg. C</dev/sda>), just to a partition. This appears to be a limitation of the kernel or swap tools."); - ("mkswap_U", (RErr, [String "uuid"; String "device"]), 132, [], + ("mkswap_U", (RErr, [String "uuid"; Device "device"]), 132, [], [InitEmpty, Always, TestRun ( [["sfdiskM"; "/dev/sda"; ","]; ["mkswap_U"; "a3a61220-882b-4f61-89f4-cf24dcc7297d"; "/dev/sda1"]])], @@ -2907,7 +2907,7 @@ This function is primarily intended for use by programs. To get a simple list of names, use C<guestfs_ls>. To get a printable directory for human consumption, use C<guestfs_ll>."); - ("sfdiskM", (RErr, [String "device"; StringList "lines"]), 139, [DangerWillRobinson], + ("sfdiskM", (RErr, [Device "device"; StringList "lines"]), 139, [DangerWillRobinson], [], "create partitions on a block device", "\ @@ -3213,7 +3213,7 @@ Do not confuse this with the guestfish-specific C<alloc> command which allocates a file in the host and attaches it as a device."); - ("swapon_device", (RErr, [String "device"]), 170, [], + ("swapon_device", (RErr, [Device "device"]), 170, [], [InitPartition, Always, TestRun ( [["mkswap"; "/dev/sda1"]; ["swapon_device"; "/dev/sda1"]; @@ -3232,7 +3232,7 @@ the guest doesn't want you to trash. You also risk leaking information about the host to the guest this way. Instead, attach a new host device to the guest and swap on that."); - ("swapoff_device", (RErr, [String "device"]), 171, [], + ("swapoff_device", (RErr, [Device "device"]), 171, [], [], (* XXX tested by swapon_device *) "disable swap on device", "\ -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 12/23] update all NEED_ROOT uses
From: Jim Meyering <meyering at redhat.com> run this command: git grep -l -w NEED_ROOT|xargs perl -pi -e \ 's/(NEED_ROOT) \((.*?)\)/$1 (return $2)/' --- daemon/augeas.c | 2 +- daemon/checksum.c | 2 +- daemon/cmp.c | 2 +- daemon/command.c | 2 +- daemon/cpmv.c | 2 +- daemon/daemon.h | 2 +- daemon/df.c | 4 ++-- daemon/dir.c | 12 ++++++------ daemon/du.c | 2 +- daemon/fallocate.c | 2 +- daemon/file.c | 22 +++++++++++----------- daemon/find.c | 2 +- daemon/glob.c | 2 +- daemon/grep.c | 2 +- daemon/grub.c | 2 +- daemon/headtail.c | 2 +- daemon/hexdump.c | 2 +- daemon/initrd.c | 2 +- daemon/inotify.c | 2 +- daemon/link.c | 4 ++-- daemon/ls.c | 2 +- daemon/mknod.c | 2 +- daemon/mount.c | 6 +++--- daemon/readdir.c | 2 +- daemon/realpath.c | 2 +- daemon/scrub.c | 4 ++-- daemon/stat.c | 6 +++--- daemon/strings.c | 2 +- daemon/swap.c | 6 +++--- daemon/tar.c | 4 ++-- daemon/wc.c | 2 +- daemon/xattr.c | 2 +- 32 files changed, 57 insertions(+), 57 deletions(-) diff --git a/daemon/augeas.c b/daemon/augeas.c index 45f86cf..b6cc8f0 100644 --- a/daemon/augeas.c +++ b/daemon/augeas.c @@ -54,7 +54,7 @@ do_aug_init (char *root, int flags) #ifdef HAVE_AUGEAS char *buf; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (root, return -1); if (aug) { diff --git a/daemon/checksum.c b/daemon/checksum.c index d12413f..c06a697 100644 --- a/daemon/checksum.c +++ b/daemon/checksum.c @@ -36,7 +36,7 @@ do_checksum (char *csumtype, char *path) int r; int len; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); if (strcasecmp (csumtype, "crc") == 0) diff --git a/daemon/cmp.c b/daemon/cmp.c index 30574e2..a48e924 100644 --- a/daemon/cmp.c +++ b/daemon/cmp.c @@ -34,7 +34,7 @@ do_equal (char *file1, char *file2) char *err; int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (file1, return -1); ABS_PATH (file2, return -1); diff --git a/daemon/command.c b/daemon/command.c index 0399255..7f5fc95 100644 --- a/daemon/command.c +++ b/daemon/command.c @@ -35,7 +35,7 @@ do_command (char **argv) int proc_ok, dev_ok, dev_pts_ok, sys_ok; /* We need a root filesystem mounted to do this. */ - NEED_ROOT (NULL); + NEED_ROOT (return NULL); /* Conveniently, argv is already a NULL-terminated argv-style array * of parameters, so we can pass it straight in to our internal diff --git a/daemon/cpmv.c b/daemon/cpmv.c index 37f1219..4fdee6b 100644 --- a/daemon/cpmv.c +++ b/daemon/cpmv.c @@ -52,7 +52,7 @@ cpmv_cmd (const char *cmd, const char *flags, const char *src, const char *dest) char *err; int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (src, return -1); ABS_PATH (dest, return -1); diff --git a/daemon/daemon.h b/daemon/daemon.h index cbcab63..ee71fb6 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -176,7 +176,7 @@ extern void reply (xdrproc_t xdrp, char *ret); if (strncmp ((path), "/dev/", 5) == 0) \ RESOLVE_DEVICE ((path), fail_stmt); \ else { \ - NEED_ROOT (fail_stmt); \ + NEED_ROOT (return fail_stmt); \ ABS_PATH ((path),fail_stmt); \ } \ } while (0) diff --git a/daemon/df.c b/daemon/df.c index 73604b4..ad662fa 100644 --- a/daemon/df.c +++ b/daemon/df.c @@ -33,7 +33,7 @@ do_df () int r; char *out, *err; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); r = command (&out, &err, "df", NULL); if (r == -1) { @@ -54,7 +54,7 @@ do_df_h () int r; char *out, *err; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); r = command (&out, &err, "df", "-h", NULL); if (r == -1) { diff --git a/daemon/dir.c b/daemon/dir.c index 20cbd24..ec072dd 100644 --- a/daemon/dir.c +++ b/daemon/dir.c @@ -34,7 +34,7 @@ do_rmdir (char *path) { int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; @@ -59,7 +59,7 @@ do_rm_rf (char *path) int r; char *buf, *err; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); if (strcmp (path, "/") == 0) { @@ -93,7 +93,7 @@ do_mkdir (char *path) { int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; @@ -159,7 +159,7 @@ do_mkdir_p (char *path) { int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; @@ -180,7 +180,7 @@ do_is_dir (char *path) int r; struct stat buf; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; @@ -204,7 +204,7 @@ do_mkdtemp (char *template) { char *r; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (template, return NULL); CHROOT_IN; diff --git a/daemon/du.c b/daemon/du.c index 7d9c663..f5f083d 100644 --- a/daemon/du.c +++ b/daemon/du.c @@ -36,7 +36,7 @@ do_du (char *path) char *out, *err; char *buf; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); /* Make the path relative to /sysroot. */ diff --git a/daemon/fallocate.c b/daemon/fallocate.c index f61c496..9c5a3dd 100644 --- a/daemon/fallocate.c +++ b/daemon/fallocate.c @@ -32,7 +32,7 @@ do_fallocate (char *path, int len) { int fd, r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; diff --git a/daemon/file.c b/daemon/file.c index 2ba2aab..d8425e9 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -35,7 +35,7 @@ do_touch (char *path) int fd; int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; @@ -73,7 +73,7 @@ do_cat (char *path) int alloc, size, r, max; char *buf, *buf2; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); CHROOT_IN; @@ -147,7 +147,7 @@ do_read_lines (char *path) size_t len = 0; ssize_t n; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); CHROOT_IN; @@ -194,7 +194,7 @@ do_rm (char *path) { int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; @@ -214,7 +214,7 @@ do_chmod (int mode, char *path) { int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; @@ -234,7 +234,7 @@ do_chown (int owner, int group, char *path) { int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; @@ -254,7 +254,7 @@ do_exists (char *path) { int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; @@ -270,7 +270,7 @@ do_is_file (char *path) int r; struct stat buf; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; @@ -294,7 +294,7 @@ do_write_file (char *path, char *content, int size) { int fd; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); if (size == 0) @@ -330,7 +330,7 @@ do_read_file (char *path, size_t *size_r) struct stat statbuf; char *r; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); CHROOT_IN; @@ -444,7 +444,7 @@ do_zfile (char *method, char *path) FILE *fp; char line[256]; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); if (strcmp (method, "gzip") == 0 || strcmp (method, "compress") == 0) diff --git a/daemon/find.c b/daemon/find.c index c514177..950a0fc 100644 --- a/daemon/find.c +++ b/daemon/find.c @@ -59,7 +59,7 @@ do_find (char *dir) char *sysrootdir; char str[PATH_MAX]; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (dir, return NULL); sysrootdir = sysroot_path (dir); diff --git a/daemon/glob.c b/daemon/glob.c index 1c47ba5..40b7c50 100644 --- a/daemon/glob.c +++ b/daemon/glob.c @@ -31,7 +31,7 @@ do_glob_expand (char *pattern) int r; glob_t buf; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (pattern, return NULL); /* Required so chroot can be used. */ /* glob(3) in glibc never calls chdir, so this seems to be safe: */ diff --git a/daemon/grep.c b/daemon/grep.c index 19e4683..f0dbefd 100644 --- a/daemon/grep.c +++ b/daemon/grep.c @@ -35,7 +35,7 @@ grep (const char *prog, const char *flag, char *regex, char *path) int r; char **lines; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); /* Make the path relative to /sysroot. */ diff --git a/daemon/grub.c b/daemon/grub.c index 0a49c45..8476619 100644 --- a/daemon/grub.c +++ b/daemon/grub.c @@ -32,7 +32,7 @@ do_grub_install (char *root, char *device) char *err; char *buf; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (root, return -1); if (asprintf_nowarn (&buf, "--root-directory=%R", root) == -1) { diff --git a/daemon/headtail.c b/daemon/headtail.c index bdd0f49..79dcfbb 100644 --- a/daemon/headtail.c +++ b/daemon/headtail.c @@ -35,7 +35,7 @@ headtail (const char *prog, const char *flag, const char *n, char *path) int r; char **lines; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); /* Make the path relative to /sysroot. */ diff --git a/daemon/hexdump.c b/daemon/hexdump.c index 27ea108..faf3dc5 100644 --- a/daemon/hexdump.c +++ b/daemon/hexdump.c @@ -32,7 +32,7 @@ do_hexdump (char *path) int r; char *out, *err; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); buf = sysroot_path (path); diff --git a/daemon/initrd.c b/daemon/initrd.c index e703481..c1c7ce0 100644 --- a/daemon/initrd.c +++ b/daemon/initrd.c @@ -37,7 +37,7 @@ do_initrd_list (char *path) int size = 0, alloc = 0; size_t len; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); /* "zcat /sysroot/<path> | cpio --quiet -it", but path must be quoted. */ diff --git a/daemon/inotify.c b/daemon/inotify.c index 2f22f52..96b9681 100644 --- a/daemon/inotify.c +++ b/daemon/inotify.c @@ -51,7 +51,7 @@ do_inotify_init (int max_events) { FILE *fp; - NEED_ROOT (-1); + NEED_ROOT (return -1); if (max_events < 0) { reply_with_error ("inotify_init: max_events < 0"); diff --git a/daemon/link.c b/daemon/link.c index bf616ed..9129b5c 100644 --- a/daemon/link.c +++ b/daemon/link.c @@ -34,7 +34,7 @@ do_readlink (char *path) char *ret; char link[PATH_MAX]; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); CHROOT_IN; @@ -62,7 +62,7 @@ _link (const char *flag, int symbolic, const char *target, const char *linkname) char *buf_linkname; char *buf_target; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (linkname, return -1); /* but target does not need to be absolute */ diff --git a/daemon/ls.c b/daemon/ls.c index 8ae150b..8dba1bf 100644 --- a/daemon/ls.c +++ b/daemon/ls.c @@ -37,7 +37,7 @@ do_ls (char *path) DIR *dir; struct dirent *d; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); CHROOT_IN; diff --git a/daemon/mknod.c b/daemon/mknod.c index ab799cd..a6e6eca 100644 --- a/daemon/mknod.c +++ b/daemon/mknod.c @@ -35,7 +35,7 @@ do_mknod (int mode, int devmajor, int devminor, char *path) { int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; diff --git a/daemon/mount.c b/daemon/mount.c index 14e683a..4f60682 100644 --- a/daemon/mount.c +++ b/daemon/mount.c @@ -317,7 +317,7 @@ do_mount_loop (char *file, char *mountpoint) char *buf, *mp; char *error; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (file, return -1); /* We have to prefix /sysroot on both the filename and the mountpoint. */ @@ -355,7 +355,7 @@ do_mkmountpoint (char *path) { int r; - /* NEED_ROOT (-1); - we don't want this test for this call. */ + /* NEED_ROOT (return -1); - we don't want this test for this call. */ ABS_PATH (path, return -1); CHROOT_IN; @@ -380,7 +380,7 @@ do_rmmountpoint (char *path) { int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); CHROOT_IN; diff --git a/daemon/readdir.c b/daemon/readdir.c index f8f95d2..45256b2 100644 --- a/daemon/readdir.c +++ b/daemon/readdir.c @@ -36,7 +36,7 @@ do_readdir (char *path) struct dirent *d; int i; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); ret = malloc (sizeof *ret); diff --git a/daemon/realpath.c b/daemon/realpath.c index 18adc85..c081a45 100644 --- a/daemon/realpath.c +++ b/daemon/realpath.c @@ -32,7 +32,7 @@ do_realpath (char *path) { char *ret; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); CHROOT_IN; diff --git a/daemon/scrub.c b/daemon/scrub.c index 2beaea3..5530c69 100644 --- a/daemon/scrub.c +++ b/daemon/scrub.c @@ -52,7 +52,7 @@ do_scrub_file (char *file) char *err; int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (file, return -1); /* Make the path relative to /sysroot. */ @@ -82,7 +82,7 @@ do_scrub_freespace (char *dir) char *err; int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (dir, return -1); /* Make the path relative to /sysroot. */ diff --git a/daemon/stat.c b/daemon/stat.c index da2d274..4845851 100644 --- a/daemon/stat.c +++ b/daemon/stat.c @@ -37,7 +37,7 @@ do_stat (char *path) guestfs_int_stat *ret; struct stat statbuf; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); CHROOT_IN; @@ -79,7 +79,7 @@ do_lstat (char *path) guestfs_int_stat *ret; struct stat statbuf; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); CHROOT_IN; @@ -121,7 +121,7 @@ do_statvfs (char *path) guestfs_int_statvfs *ret; struct statvfs statbuf; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); CHROOT_IN; diff --git a/daemon/strings.c b/daemon/strings.c index 89e04a8..e5aefca 100644 --- a/daemon/strings.c +++ b/daemon/strings.c @@ -33,7 +33,7 @@ do_strings_e (char *encoding, char *path) char *out, *err; char **lines; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); buf = sysroot_path (path); diff --git a/daemon/swap.c b/daemon/swap.c index f7270f8..580482f 100644 --- a/daemon/swap.c +++ b/daemon/swap.c @@ -73,7 +73,7 @@ do_mkswap_file (char *path) char *buf; int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); buf = sysroot_path (path); @@ -127,7 +127,7 @@ do_swapon_file (char *path) char *buf; int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); buf = sysroot_path (path); @@ -147,7 +147,7 @@ do_swapoff_file (char *path) char *buf; int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); buf = sysroot_path (path); diff --git a/daemon/tar.c b/daemon/tar.c index e1ff9b6..9d21e79 100644 --- a/daemon/tar.c +++ b/daemon/tar.c @@ -106,7 +106,7 @@ do_tar_out (char *dir) char *cmd; char buf[GUESTFS_MAX_CHUNK_SIZE]; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (dir, return -1); /* "tar -C /sysroot%s -cf - ." but we have to quote the dir. */ @@ -228,7 +228,7 @@ do_tgz_out (char *dir) char *cmd; char buf[GUESTFS_MAX_CHUNK_SIZE]; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (dir, return -1); /* "tar -C /sysroot%s -zcf - ." but we have to quote the dir. */ diff --git a/daemon/wc.c b/daemon/wc.c index 0917eb9..9720443 100644 --- a/daemon/wc.c +++ b/daemon/wc.c @@ -34,7 +34,7 @@ wc (char *flag, char *path) char *out, *err; int r; - NEED_ROOT (-1); + NEED_ROOT (return -1); ABS_PATH (path, return -1); /* Make the path relative to /sysroot. */ diff --git a/daemon/xattr.c b/daemon/xattr.c index 88947b2..d521321 100644 --- a/daemon/xattr.c +++ b/daemon/xattr.c @@ -116,7 +116,7 @@ getxattrs (char *path, int i, j; guestfs_int_xattr_list *r = NULL; - NEED_ROOT (NULL); + NEED_ROOT (return NULL); ABS_PATH (path, return NULL); CHROOT_IN; -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 13/23] fix daemon.h's use of NEED_ROOT-in-#define
From: Jim Meyering <meyering at redhat.com> --- daemon/daemon.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/daemon/daemon.h b/daemon/daemon.h index ee71fb6..cbcab63 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -176,7 +176,7 @@ extern void reply (xdrproc_t xdrp, char *ret); if (strncmp ((path), "/dev/", 5) == 0) \ RESOLVE_DEVICE ((path), fail_stmt); \ else { \ - NEED_ROOT (return fail_stmt); \ + NEED_ROOT (fail_stmt); \ ABS_PATH ((path),fail_stmt); \ } \ } while (0) -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 14/23] generator.ml: emit "const char *" for Device and String params
From: Jim Meyering <meyering at redhat.com> * src/generator.ml: Emit "const char *", not "char *" for Device and String params, now that the non-const code is hoisted into the calling code in stubs.c. --- src/generator.ml | 12 +++++------- 1 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/generator.ml b/src/generator.ml index 0c9cf36..30fe41c 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -4680,11 +4680,9 @@ and generate_daemon_actions () pr " struct guestfs_%s_args args;\n" name; List.iter ( function - (* Note we allow the string to be writable, in order to - * allow device name translation. This is safe because - * we can modify the string (passed from RPC). - *) - | Device n | String n + (* FIXME: eventually, make String "const", too *) + | Device n -> pr " const char *%s;\n" n + | String n | OptString n -> pr " char *%s;\n" n | StringList n -> pr " char **%s;\n" n | Bool n -> pr " int %s;\n" n @@ -6233,8 +6231,7 @@ and generate_prototype ?(extern = true) ?(static = false) ?(semicolon = true) | String n | OptString n -> next (); - if not in_daemon then pr "const char *%s" n - else pr "char *%s" n + pr "const char *%s" n | StringList n -> next (); if not in_daemon then pr "char * const* const %s" n @@ -6774,6 +6771,7 @@ DESTROY (g) iteri ( fun i -> function + (* FIXME: ? *) | Device n | String n | FileIn n | FileOut n -> pr " char *%s;\n" n | OptString n -> (* http://www.perlmonks.org/?node_id=554277 -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 15/23] generator.ml: new type, "Pathname"
From: Jim Meyering <meyering at redhat.com> * src/generator.ml: Emit NEED_ROOT and ABS_PATH into generated stubs.c, rather than requiring they be added manually at the start of each and every do_* function that operates on a "path" parameter. Update grammar: Pathname is just a String, with the above exception. --- src/generator.ml | 200 +++++++++++++++++++++++++++++------------------------ 1 files changed, 109 insertions(+), 91 deletions(-) diff --git a/src/generator.ml b/src/generator.ml index 30fe41c..325d3cb 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -135,6 +135,7 @@ and args = argt list (* Function parameters, guestfs handle is implicit. *) and argt | String of string (* const char *name, cannot be NULL *) | Device of string (* /dev device name, cannot be NULL *) + | Pathname of string (* file name, cannot be NULL *) | OptString of string (* const char *name, may be NULL *) | StringList of string(* list of strings (each string cannot be NULL) *) | Bool of string (* boolean *) @@ -532,7 +533,7 @@ Return the current qemu binary. This is always non-NULL. If it wasn't set already, then this will return the default qemu binary name."); - ("set_path", (RErr, [String "path"]), -1, [FishAlias "path"], + ("set_path", (RErr, [Pathname "path"]), -1, [FishAlias "path"], [], "set the search path", "\ @@ -805,7 +806,7 @@ underlying disk image. You should always call this if you have modified a disk image, before closing the handle."); - ("touch", (RErr, [String "path"]), 3, [], + ("touch", (RErr, [Pathname "path"]), 3, [], [InitBasicFS, Always, TestOutputTrue ( [["touch"; "/new"]; ["exists"; "/new"]])], @@ -815,7 +816,7 @@ Touch acts like the L<touch(1)> command. It can be used to update the timestamps on a file, or, if the file does not exist, to create a new zero-length file."); - ("cat", (RString "content", [String "path"]), 4, [ProtocolLimitWarning], + ("cat", (RString "content", [Pathname "path"]), 4, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutput ( [["cat"; "/known-2"]], "abcdef\n")], "list the contents of a file", @@ -963,7 +964,7 @@ of the L<vgs(8)> command. The \"full\" version includes all fields."); List all the logical volumes detected. This is the equivalent of the L<lvs(8)> command. The \"full\" version includes all fields."); - ("read_lines", (RStringList "lines", [String "path"]), 15, [], + ("read_lines", (RStringList "lines", [Pathname "path"]), 15, [], [InitSquashFS, Always, TestOutputList ( [["read_lines"; "/known-4"]], ["abc"; "def"; "ghi"]); InitSquashFS, Always, TestOutputList ( @@ -1066,20 +1067,20 @@ On success this returns a pair containing the number of nodes in the nodeset, and a boolean flag if a node was created."); - ("aug_get", (RString "val", [String "path"]), 19, [], + ("aug_get", (RString "val", [Pathname "path"]), 19, [], [], (* XXX Augeas code needs tests. *) "look up the value of an Augeas path", "\ Look up the value associated with C<path>. If C<path> matches exactly one node, the C<value> is returned."); - ("aug_set", (RErr, [String "path"; String "val"]), 20, [], + ("aug_set", (RErr, [Pathname "path"; String "val"]), 20, [], [], (* XXX Augeas code needs tests. *) "set Augeas path to value", "\ Set the value associated with C<path> to C<value>."); - ("aug_insert", (RErr, [String "path"; String "label"; Bool "before"]), 21, [], + ("aug_insert", (RErr, [Pathname "path"; String "label"; Bool "before"]), 21, [], [], (* XXX Augeas code needs tests. *) "insert a sibling Augeas node", "\ @@ -1091,7 +1092,7 @@ C<path> must match exactly one existing node in the tree, and C<label> must be a label, ie. not contain C</>, C<*> or end with a bracketed index C<[N]>."); - ("aug_rm", (RInt "nrnodes", [String "path"]), 22, [], + ("aug_rm", (RInt "nrnodes", [Pathname "path"]), 22, [], [], (* XXX Augeas code needs tests. *) "remove an Augeas path", "\ @@ -1106,7 +1107,7 @@ On success this returns the number of entries which were removed."); Move the node C<src> to C<dest>. C<src> must match exactly one node. C<dest> is overwritten if it exists."); - ("aug_match", (RStringList "matches", [String "path"]), 24, [], + ("aug_match", (RStringList "matches", [Pathname "path"]), 24, [], [], (* XXX Augeas code needs tests. *) "return Augeas nodes which match path", "\ @@ -1132,14 +1133,14 @@ Load files into the tree. See C<aug_load> in the Augeas documentation for the full gory details."); - ("aug_ls", (RStringList "matches", [String "path"]), 28, [], + ("aug_ls", (RStringList "matches", [Pathname "path"]), 28, [], [], (* XXX Augeas code needs tests. *) "list Augeas nodes under a path", "\ This is just a shortcut for listing C<guestfs_aug_match> C<path/*> and sorting the resulting nodes into alphabetical order."); - ("rm", (RErr, [String "path"]), 29, [], + ("rm", (RErr, [Pathname "path"]), 29, [], [InitBasicFS, Always, TestRun [["touch"; "/new"]; ["rm"; "/new"]]; @@ -1152,7 +1153,7 @@ C<path/*> and sorting the resulting nodes into alphabetical order."); "\ Remove the single file C<path>."); - ("rmdir", (RErr, [String "path"]), 30, [], + ("rmdir", (RErr, [Pathname "path"]), 30, [], [InitBasicFS, Always, TestRun [["mkdir"; "/new"]; ["rmdir"; "/new"]]; @@ -1165,7 +1166,7 @@ Remove the single file C<path>."); "\ Remove the single directory C<path>."); - ("rm_rf", (RErr, [String "path"]), 31, [], + ("rm_rf", (RErr, [Pathname "path"]), 31, [], [InitBasicFS, Always, TestOutputFalse [["mkdir"; "/new"]; ["mkdir"; "/new/foo"]; @@ -1178,7 +1179,7 @@ Remove the file or directory C<path>, recursively removing the contents if its a directory. This is like the C<rm -rf> shell command."); - ("mkdir", (RErr, [String "path"]), 32, [], + ("mkdir", (RErr, [Pathname "path"]), 32, [], [InitBasicFS, Always, TestOutputTrue [["mkdir"; "/new"]; ["is_dir"; "/new"]]; @@ -1188,7 +1189,7 @@ command."); "\ Create a directory named C<path>."); - ("mkdir_p", (RErr, [String "path"]), 33, [], + ("mkdir_p", (RErr, [Pathname "path"]), 33, [], [InitBasicFS, Always, TestOutputTrue [["mkdir_p"; "/new/foo/bar"]; ["is_dir"; "/new/foo/bar"]]; @@ -1210,14 +1211,14 @@ Create a directory named C<path>."); Create a directory named C<path>, creating any parent directories as necessary. This is like the C<mkdir -p> shell command."); - ("chmod", (RErr, [Int "mode"; String "path"]), 34, [], + ("chmod", (RErr, [Int "mode"; Pathname "path"]), 34, [], [], (* XXX Need stat command to test *) "change file mode", "\ Change the mode (permissions) of C<path> to C<mode>. Only numeric modes are supported."); - ("chown", (RErr, [Int "owner"; Int "group"; String "path"]), 35, [], + ("chown", (RErr, [Int "owner"; Int "group"; Pathname "path"]), 35, [], [], (* XXX Need stat command to test *) "change file owner and group", "\ @@ -1227,7 +1228,7 @@ Only numeric uid and gid are supported. If you want to use names, you will need to locate and parse the password file yourself (Augeas support makes this relatively easy)."); - ("exists", (RBool "existsflag", [String "path"]), 36, [], + ("exists", (RBool "existsflag", [Pathname "path"]), 36, [], [InitSquashFS, Always, TestOutputTrue ( [["exists"; "/empty"]]); InitSquashFS, Always, TestOutputTrue ( @@ -1239,7 +1240,7 @@ This returns C<true> if and only if there is a file, directory See also C<guestfs_is_file>, C<guestfs_is_dir>, C<guestfs_stat>."); - ("is_file", (RBool "fileflag", [String "path"]), 37, [], + ("is_file", (RBool "fileflag", [Pathname "path"]), 37, [], [InitSquashFS, Always, TestOutputTrue ( [["is_file"; "/known-1"]]); InitSquashFS, Always, TestOutputFalse ( @@ -1252,7 +1253,7 @@ other objects like directories. See also C<guestfs_stat>."); - ("is_dir", (RBool "dirflag", [String "path"]), 38, [], + ("is_dir", (RBool "dirflag", [Pathname "path"]), 38, [], [InitSquashFS, Always, TestOutputFalse ( [["is_dir"; "/known-3"]]); InitSquashFS, Always, TestOutputTrue ( @@ -1354,7 +1355,7 @@ the string C<,> (comma). See also: C<guestfs_sfdisk_l>, C<guestfs_sfdisk_N>"); - ("write_file", (RErr, [String "path"; String "content"; Int "size"]), 44, [ProtocolLimitWarning], + ("write_file", (RErr, [Pathname "path"; String "content"; Int "size"]), 44, [ProtocolLimitWarning], [InitBasicFS, Always, TestOutput ( [["write_file"; "/new"; "new file contents"; "0"]; ["cat"; "/new"]], "new file contents"); @@ -1449,7 +1450,7 @@ Some internal mounts are not unmounted by this call."); This command removes all LVM logical volumes, volume groups and physical volumes."); - ("file", (RString "description", [String "path"]), 49, [], + ("file", (RString "description", [Pathname "path"]), 49, [], [InitSquashFS, Always, TestOutput ( [["file"; "/empty"]], "empty"); InitSquashFS, Always, TestOutput ( @@ -1602,7 +1603,7 @@ result into a list of lines. See also: C<guestfs_sh_lines>"); - ("stat", (RStruct ("statbuf", "stat"), [String "path"]), 52, [], + ("stat", (RStruct ("statbuf", "stat"), [Pathname "path"]), 52, [], [InitSquashFS, Always, TestOutputStruct ( [["stat"; "/empty"]], [CompareWithInt ("size", 0)])], "get file information", @@ -1611,7 +1612,7 @@ Returns file information for the given C<path>. This is the same as the C<stat(2)> system call."); - ("lstat", (RStruct ("statbuf", "stat"), [String "path"]), 53, [], + ("lstat", (RStruct ("statbuf", "stat"), [Pathname "path"]), 53, [], [InitSquashFS, Always, TestOutputStruct ( [["lstat"; "/empty"]], [CompareWithInt ("size", 0)])], "get file information for a symbolic link", @@ -1624,7 +1625,7 @@ refers to. This is the same as the C<lstat(2)> system call."); - ("statvfs", (RStruct ("statbuf", "statvfs"), [String "path"]), 54, [], + ("statvfs", (RStruct ("statbuf", "statvfs"), [Pathname "path"]), 54, [], [InitSquashFS, Always, TestOutputStruct ( [["statvfs"; "/"]], [CompareWithInt ("namemax", 256)])], "get file system statistics", @@ -1790,7 +1791,7 @@ C<filename> can also be a named pipe. See also C<guestfs_upload>, C<guestfs_cat>."); - ("checksum", (RString "checksum", [String "csumtype"; String "path"]), 68, [], + ("checksum", (RString "checksum", [String "csumtype"; Pathname "path"]), 68, [], [InitSquashFS, Always, TestOutput ( [["checksum"; "crc"; "/known-3"]], "2891671662"); InitSquashFS, Always, TestLastFail ( @@ -2243,7 +2244,7 @@ true if their content is exactly equal, or false otherwise. The external L<cmp(1)> program is used for the comparison."); - ("strings", (RStringList "stringsout", [String "path"]), 94, [ProtocolLimitWarning], + ("strings", (RStringList "stringsout", [Pathname "path"]), 94, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["strings"; "/known-5"]], ["abcdefghi"; "jklmnopqr"]); InitSquashFS, Always, TestOutputList ( @@ -2253,7 +2254,7 @@ The external L<cmp(1)> program is used for the comparison."); This runs the L<strings(1)> command on a file and returns the list of printable strings found."); - ("strings_e", (RStringList "stringsout", [String "encoding"; String "path"]), 95, [ProtocolLimitWarning], + ("strings_e", (RStringList "stringsout", [String "encoding"; Pathname "path"]), 95, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["strings_e"; "b"; "/known-5"]], []); InitBasicFS, Disabled, TestOutputList ( @@ -2271,7 +2272,7 @@ show strings inside Windows/x86 files. The returned strings are transcoded to UTF-8."); - ("hexdump", (RString "dump", [String "path"]), 96, [ProtocolLimitWarning], + ("hexdump", (RString "dump", [Pathname "path"]), 96, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutput ( [["hexdump"; "/known-4"]], "00000000 61 62 63 0a 64 65 66 0a 67 68 69 |abc.def.ghi|\n0000000b\n"); (* Test for RHBZ#501888c2 regression which caused large hexdump @@ -2589,7 +2590,7 @@ containing C<dir>. It is an interface to the L<scrub(1)> program. See that manual page for more details."); - ("mkdtemp", (RString "dir", [String "template"]), 117, [], + ("mkdtemp", (RString "dir", [Pathname "template"]), 117, [], [InitBasicFS, Always, TestRun ( [["mkdir"; "/tmp"]; ["mkdtemp"; "/tmp/tmpXXXXXX"]])], @@ -2614,7 +2615,7 @@ directory and its contents after use. See also: L<mkdtemp(3)>"); - ("wc_l", (RInt "lines", [String "path"]), 118, [], + ("wc_l", (RInt "lines", [Pathname "path"]), 118, [], [InitSquashFS, Always, TestOutputInt ( [["wc_l"; "/10klines"]], 10000)], "count lines in a file", @@ -2622,7 +2623,7 @@ See also: L<mkdtemp(3)>"); This command counts the lines in a file, using the C<wc -l> external command."); - ("wc_w", (RInt "words", [String "path"]), 119, [], + ("wc_w", (RInt "words", [Pathname "path"]), 119, [], [InitSquashFS, Always, TestOutputInt ( [["wc_w"; "/10klines"]], 10000)], "count words in a file", @@ -2630,7 +2631,7 @@ C<wc -l> external command."); This command counts the words in a file, using the C<wc -w> external command."); - ("wc_c", (RInt "chars", [String "path"]), 120, [], + ("wc_c", (RInt "chars", [Pathname "path"]), 120, [], [InitSquashFS, Always, TestOutputInt ( [["wc_c"; "/100kallspaces"]], 102400)], "count characters in a file", @@ -2638,7 +2639,7 @@ C<wc -w> external command."); This command counts the characters in a file, using the C<wc -c> external command."); - ("head", (RStringList "lines", [String "path"]), 121, [ProtocolLimitWarning], + ("head", (RStringList "lines", [Pathname "path"]), 121, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["head"; "/10klines"]], ["0abcdefghijklmnopqrstuvwxyz";"1abcdefghijklmnopqrstuvwxyz";"2abcdefghijklmnopqrstuvwxyz";"3abcdefghijklmnopqrstuvwxyz";"4abcdefghijklmnopqrstuvwxyz";"5abcdefghijklmnopqrstuvwxyz";"6abcdefghijklmnopqrstuvwxyz";"7abcdefghijklmnopqrstuvwxyz";"8abcdefghijklmnopqrstuvwxyz";"9abcdefghijklmnopqrstuvwxyz"])], "return first 10 lines of a file", @@ -2646,7 +2647,7 @@ C<wc -c> external command."); This command returns up to the first 10 lines of a file as a list of strings."); - ("head_n", (RStringList "lines", [Int "nrlines"; String "path"]), 122, [ProtocolLimitWarning], + ("head_n", (RStringList "lines", [Int "nrlines"; Pathname "path"]), 122, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["head_n"; "3"; "/10klines"]], ["0abcdefghijklmnopqrstuvwxyz";"1abcdefghijklmnopqrstuvwxyz";"2abcdefghijklmnopqrstuvwxyz"]); InitSquashFS, Always, TestOutputList ( @@ -2663,7 +2664,7 @@ from the file C<path>, excluding the last C<nrlines> lines. If the parameter C<nrlines> is zero, this returns an empty list."); - ("tail", (RStringList "lines", [String "path"]), 123, [ProtocolLimitWarning], + ("tail", (RStringList "lines", [Pathname "path"]), 123, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["tail"; "/10klines"]], ["9990abcdefghijklmnopqrstuvwxyz";"9991abcdefghijklmnopqrstuvwxyz";"9992abcdefghijklmnopqrstuvwxyz";"9993abcdefghijklmnopqrstuvwxyz";"9994abcdefghijklmnopqrstuvwxyz";"9995abcdefghijklmnopqrstuvwxyz";"9996abcdefghijklmnopqrstuvwxyz";"9997abcdefghijklmnopqrstuvwxyz";"9998abcdefghijklmnopqrstuvwxyz";"9999abcdefghijklmnopqrstuvwxyz"])], "return last 10 lines of a file", @@ -2671,7 +2672,7 @@ If the parameter C<nrlines> is zero, this returns an empty list."); This command returns up to the last 10 lines of a file as a list of strings."); - ("tail_n", (RStringList "lines", [Int "nrlines"; String "path"]), 124, [ProtocolLimitWarning], + ("tail_n", (RStringList "lines", [Int "nrlines"; Pathname "path"]), 124, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["tail_n"; "3"; "/10klines"]], ["9997abcdefghijklmnopqrstuvwxyz";"9998abcdefghijklmnopqrstuvwxyz";"9999abcdefghijklmnopqrstuvwxyz"]); InitSquashFS, Always, TestOutputList ( @@ -2713,7 +2714,7 @@ This command is mostly useful for interactive sessions. It is I<not> intended that you try to parse the output string. Use C<statvfs> from programs."); - ("du", (RInt64 "sizekb", [String "path"]), 127, [], + ("du", (RInt64 "sizekb", [Pathname "path"]), 127, [], [InitSquashFS, Always, TestOutputInt ( [["du"; "/directory"]], 0 (* squashfs doesn't have blocks *))], "estimate file space usage", @@ -2728,7 +2729,7 @@ subdirectories (recursively). The result is the estimated size in I<kilobytes> (ie. units of 1024 bytes)."); - ("initrd_list", (RStringList "filenames", [String "path"]), 128, [], + ("initrd_list", (RStringList "filenames", [Pathname "path"]), 128, [], [InitSquashFS, Always, TestOutputList ( [["initrd_list"; "/initrd"]], ["empty";"known-1";"known-2";"known-3";"known-4"; "known-5"])], "list files in an initrd", @@ -2779,7 +2780,7 @@ a limitation of the kernel or swap tools."); "\ Create a swap partition on C<device> with UUID C<uuid>."); - ("mknod", (RErr, [Int "mode"; Int "devmajor"; Int "devminor"; String "path"]), 133, [], + ("mknod", (RErr, [Int "mode"; Int "devmajor"; Int "devminor"; Pathname "path"]), 133, [], [InitBasicFS, Always, TestOutputStruct ( [["mknod"; "0o10777"; "0"; "0"; "/node"]; (* NB: default umask 022 means 0777 -> 0755 in these tests *) @@ -2797,7 +2798,7 @@ constants. C<devmajor> and C<devminor> are the device major and minor numbers, only used when creating block and character special devices."); - ("mkfifo", (RErr, [Int "mode"; String "path"]), 134, [], + ("mkfifo", (RErr, [Int "mode"; Pathname "path"]), 134, [], [InitBasicFS, Always, TestOutputStruct ( [["mkfifo"; "0o777"; "/node"]; ["stat"; "/node"]], [CompareWithInt ("mode", 0o10755)])], @@ -2807,7 +2808,7 @@ This call creates a FIFO (named pipe) called C<path> with mode C<mode>. It is just a convenient wrapper around C<guestfs_mknod>."); - ("mknod_b", (RErr, [Int "mode"; Int "devmajor"; Int "devminor"; String "path"]), 135, [], + ("mknod_b", (RErr, [Int "mode"; Int "devmajor"; Int "devminor"; Pathname "path"]), 135, [], [InitBasicFS, Always, TestOutputStruct ( [["mknod_b"; "0o777"; "99"; "66"; "/node"]; ["stat"; "/node"]], [CompareWithInt ("mode", 0o60755)])], @@ -2817,7 +2818,7 @@ This call creates a block device node called C<path> with mode C<mode> and device major/minor C<devmajor> and C<devminor>. It is just a convenient wrapper around C<guestfs_mknod>."); - ("mknod_c", (RErr, [Int "mode"; Int "devmajor"; Int "devminor"; String "path"]), 136, [], + ("mknod_c", (RErr, [Int "mode"; Int "devmajor"; Int "devminor"; Pathname "path"]), 136, [], [InitBasicFS, Always, TestOutputStruct ( [["mknod_c"; "0o777"; "99"; "66"; "/node"]; ["stat"; "/node"]], [CompareWithInt ("mode", 0o20755)])], @@ -2919,7 +2920,7 @@ were rarely if ever used anyway. See also C<guestfs_sfdisk> and the L<sfdisk(8)> manpage."); - ("zfile", (RString "description", [String "method"; String "path"]), 140, [DeprecatedBy "file"], + ("zfile", (RString "description", [String "method"; Pathname "path"]), 140, [DeprecatedBy "file"], [], "determine file type inside a compressed file", "\ @@ -2931,7 +2932,7 @@ C<method> must be one of C<gzip>, C<compress> or C<bzip2>. Since 1.0.63, use C<guestfs_file> instead which can now process compressed files."); - ("getxattrs", (RStructList ("xattrs", "xattr"), [String "path"]), 141, [], + ("getxattrs", (RStructList ("xattrs", "xattr"), [Pathname "path"]), 141, [], [], "list extended attributes of a file or directory", "\ @@ -2943,7 +2944,7 @@ L<listxattr(2)> and L<getxattr(2)> calls. See also: C<guestfs_lgetxattrs>, L<attr(5)>."); - ("lgetxattrs", (RStructList ("xattrs", "xattr"), [String "path"]), 142, [], + ("lgetxattrs", (RStructList ("xattrs", "xattr"), [Pathname "path"]), 142, [], [], "list extended attributes of a file or directory", "\ @@ -2953,7 +2954,7 @@ of the link itself."); ("setxattr", (RErr, [String "xattr"; String "val"; Int "vallen"; (* will be BufferIn *) - String "path"]), 143, [], + Pathname "path"]), 143, [], [], "set extended attribute of a file or directory", "\ @@ -2965,7 +2966,7 @@ See also: C<guestfs_lsetxattr>, L<attr(5)>."); ("lsetxattr", (RErr, [String "xattr"; String "val"; Int "vallen"; (* will be BufferIn *) - String "path"]), 144, [], + Pathname "path"]), 144, [], [], "set extended attribute of a file or directory", "\ @@ -2973,7 +2974,7 @@ This is the same as C<guestfs_setxattr>, but if C<path> is a symbolic link, then it sets an extended attribute of the link itself."); - ("removexattr", (RErr, [String "xattr"; String "path"]), 145, [], + ("removexattr", (RErr, [String "xattr"; Pathname "path"]), 145, [], [], "remove extended attribute of a file or directory", "\ @@ -2982,7 +2983,7 @@ of the file C<path>. See also: C<guestfs_lremovexattr>, L<attr(5)>."); - ("lremovexattr", (RErr, [String "xattr"; String "path"]), 146, [], + ("lremovexattr", (RErr, [String "xattr"; Pathname "path"]), 146, [], [], "remove extended attribute of a file or directory", "\ @@ -2998,7 +2999,7 @@ This call is similar to C<guestfs_mounts>. That call returns a list of devices. This one returns a hash table (map) of device name to directory where the device is mounted."); - ("mkmountpoint", (RErr, [String "path"]), 148, [], + ("mkmountpoint", (RErr, [Pathname "path"]), 148, [], [], "create a mountpoint", "\ @@ -3026,7 +3027,7 @@ in guestfish: The inner filesystem is now unpacked under the /ext3 mountpoint."); - ("rmmountpoint", (RErr, [String "path"]), 149, [], + ("rmmountpoint", (RErr, [Pathname "path"]), 149, [], [], "remove a mountpoint", "\ @@ -3034,7 +3035,7 @@ This calls removes a mountpoint that was previously created with C<guestfs_mkmountpoint>. See C<guestfs_mkmountpoint> for full details."); - ("read_file", (RBufferOut "content", [String "path"]), 150, [ProtocolLimitWarning], + ("read_file", (RBufferOut "content", [Pathname "path"]), 150, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputBuffer ( [["read_file"; "/known-4"]], "abc\ndef\nghi")], "read a file", @@ -3047,7 +3048,7 @@ handle files that contain embedded ASCII NUL characters. However unlike C<guestfs_download>, this function is limited in the total size of file that can be handled."); - ("grep", (RStringList "lines", [String "regex"; String "path"]), 151, [ProtocolLimitWarning], + ("grep", (RStringList "lines", [String "regex"; Pathname "path"]), 151, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["grep"; "abc"; "/test-grep.txt"]], ["abc"; "abc123"]); InitSquashFS, Always, TestOutputList ( @@ -3057,7 +3058,7 @@ in the total size of file that can be handled."); This calls the external C<grep> program and returns the matching lines."); - ("egrep", (RStringList "lines", [String "regex"; String "path"]), 152, [ProtocolLimitWarning], + ("egrep", (RStringList "lines", [String "regex"; Pathname "path"]), 152, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["egrep"; "abc"; "/test-grep.txt"]], ["abc"; "abc123"])], "return lines matching a pattern", @@ -3065,7 +3066,7 @@ matching lines."); This calls the external C<egrep> program and returns the matching lines."); - ("fgrep", (RStringList "lines", [String "pattern"; String "path"]), 153, [ProtocolLimitWarning], + ("fgrep", (RStringList "lines", [String "pattern"; Pathname "path"]), 153, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["fgrep"; "abc"; "/test-grep.txt"]], ["abc"; "abc123"])], "return lines matching a pattern", @@ -3073,7 +3074,7 @@ matching lines."); This calls the external C<fgrep> program and returns the matching lines."); - ("grepi", (RStringList "lines", [String "regex"; String "path"]), 154, [ProtocolLimitWarning], + ("grepi", (RStringList "lines", [String "regex"; Pathname "path"]), 154, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["grepi"; "abc"; "/test-grep.txt"]], ["abc"; "abc123"; "ABC"])], "return lines matching a pattern", @@ -3081,7 +3082,7 @@ matching lines."); This calls the external C<grep -i> program and returns the matching lines."); - ("egrepi", (RStringList "lines", [String "regex"; String "path"]), 155, [ProtocolLimitWarning], + ("egrepi", (RStringList "lines", [String "regex"; Pathname "path"]), 155, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["egrepi"; "abc"; "/test-grep.txt"]], ["abc"; "abc123"; "ABC"])], "return lines matching a pattern", @@ -3089,7 +3090,7 @@ matching lines."); This calls the external C<egrep -i> program and returns the matching lines."); - ("fgrepi", (RStringList "lines", [String "pattern"; String "path"]), 156, [ProtocolLimitWarning], + ("fgrepi", (RStringList "lines", [String "pattern"; Pathname "path"]), 156, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["fgrepi"; "abc"; "/test-grep.txt"]], ["abc"; "abc123"; "ABC"])], "return lines matching a pattern", @@ -3097,7 +3098,7 @@ matching lines."); This calls the external C<fgrep -i> program and returns the matching lines."); - ("zgrep", (RStringList "lines", [String "regex"; String "path"]), 157, [ProtocolLimitWarning], + ("zgrep", (RStringList "lines", [String "regex"; Pathname "path"]), 157, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["zgrep"; "abc"; "/test-grep.txt.gz"]], ["abc"; "abc123"])], "return lines matching a pattern", @@ -3105,7 +3106,7 @@ matching lines."); This calls the external C<zgrep> program and returns the matching lines."); - ("zegrep", (RStringList "lines", [String "regex"; String "path"]), 158, [ProtocolLimitWarning], + ("zegrep", (RStringList "lines", [String "regex"; Pathname "path"]), 158, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["zegrep"; "abc"; "/test-grep.txt.gz"]], ["abc"; "abc123"])], "return lines matching a pattern", @@ -3113,7 +3114,7 @@ matching lines."); This calls the external C<zegrep> program and returns the matching lines."); - ("zfgrep", (RStringList "lines", [String "pattern"; String "path"]), 159, [ProtocolLimitWarning], + ("zfgrep", (RStringList "lines", [String "pattern"; Pathname "path"]), 159, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["zfgrep"; "abc"; "/test-grep.txt.gz"]], ["abc"; "abc123"])], "return lines matching a pattern", @@ -3121,7 +3122,7 @@ matching lines."); This calls the external C<zfgrep> program and returns the matching lines."); - ("zgrepi", (RStringList "lines", [String "regex"; String "path"]), 160, [ProtocolLimitWarning], + ("zgrepi", (RStringList "lines", [String "regex"; Pathname "path"]), 160, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["zgrepi"; "abc"; "/test-grep.txt.gz"]], ["abc"; "abc123"; "ABC"])], "return lines matching a pattern", @@ -3129,7 +3130,7 @@ matching lines."); This calls the external C<zgrep -i> program and returns the matching lines."); - ("zegrepi", (RStringList "lines", [String "regex"; String "path"]), 161, [ProtocolLimitWarning], + ("zegrepi", (RStringList "lines", [String "regex"; Pathname "path"]), 161, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["zegrepi"; "abc"; "/test-grep.txt.gz"]], ["abc"; "abc123"; "ABC"])], "return lines matching a pattern", @@ -3137,7 +3138,7 @@ matching lines."); This calls the external C<zegrep -i> program and returns the matching lines."); - ("zfgrepi", (RStringList "lines", [String "pattern"; String "path"]), 162, [ProtocolLimitWarning], + ("zfgrepi", (RStringList "lines", [String "pattern"; Pathname "path"]), 162, [ProtocolLimitWarning], [InitSquashFS, Always, TestOutputList ( [["zfgrepi"; "abc"; "/test-grep.txt.gz"]], ["abc"; "abc123"; "ABC"])], "return lines matching a pattern", @@ -3145,7 +3146,7 @@ matching lines."); This calls the external C<zfgrep -i> program and returns the matching lines."); - ("realpath", (RString "rpath", [String "path"]), 163, [], + ("realpath", (RString "rpath", [Pathname "path"]), 163, [], [InitSquashFS, Always, TestOutput ( [["realpath"; "/../directory"]], "/directory")], "canonicalized absolute pathname", @@ -3193,13 +3194,13 @@ This command creates a symbolic link using the C<ln -s> command."); This command creates a symbolic link using the C<ln -sf> command, The C<-f> option removes the link (C<linkname>) if it exists already."); - ("readlink", (RString "link", [String "path"]), 168, [], + ("readlink", (RString "link", [Pathname "path"]), 168, [], [] (* XXX tested above *), "read the target of a symbolic link", "\ This command reads the target of a symbolic link."); - ("fallocate", (RErr, [String "path"; Int "len"]), 169, [], + ("fallocate", (RErr, [Pathname "path"; Int "len"]), 169, [], [InitBasicFS, Always, TestOutputStruct ( [["fallocate"; "/a"; "1000000"]; ["stat"; "/a"]], [CompareWithInt ("size", 1_000_000)])], @@ -3294,7 +3295,7 @@ See C<guestfs_swapon_device> for other notes."); This command disables the libguestfs appliance swap partition with the given UUID."); - ("mkswap_file", (RErr, [String "path"]), 178, [], + ("mkswap_file", (RErr, [Pathname "path"]), 178, [], [InitBasicFS, Always, TestRun ( [["fallocate"; "/swap"; "8388608"]; ["mkswap_file"; "/swap"]])], @@ -3346,7 +3347,7 @@ as exposed by the Linux kernel, which is roughly what we expose via libguestfs. Note that there is one global inotify handle per libguestfs instance."); - ("inotify_add_watch", (RInt64 "wd", [String "path"; Int "mask"]), 180, [], + ("inotify_add_watch", (RInt64 "wd", [Pathname "path"; Int "mask"]), 180, [], [InitBasicFS, Always, TestOutputList ( [["inotify_init"; "0"]; ["inotify_add_watch"; "/"; "1073741823"]; @@ -3727,7 +3728,7 @@ let mapi f xs loop 0 xs let name_of_argt = function - | Device n | String n | OptString n | StringList n | Bool n | Int n + | Pathname n | Device n | String n | OptString n | StringList n | Bool n | Int n | FileIn n | FileOut n -> n let java_name_of_struct typ @@ -4114,7 +4115,7 @@ and generate_xdr () pr "struct %s_args {\n" name; List.iter ( function - | Device n | String n -> pr " string %s<>;\n" n + | Pathname n | Device n | String n -> pr " string %s<>;\n" n | OptString n -> pr " str *%s;\n" n | StringList n -> pr " str %s<>;\n" n | Bool n -> pr " bool %s;\n" n @@ -4475,7 +4476,7 @@ check_state (guestfs_h *g, const char *caller) | args -> List.iter ( function - | Device n | String n -> + | Pathname n | Device n | String n -> pr " args.%s = (char *) %s;\n" n n | OptString n -> pr " args.%s = %s ? (char **) &%s : NULL;\n" n n n @@ -4681,7 +4682,7 @@ and generate_daemon_actions () List.iter ( function (* FIXME: eventually, make String "const", too *) - | Device n -> pr " const char *%s;\n" n + | Pathname n | Device n -> pr " const char *%s;\n" n | String n | OptString n -> pr " char *%s;\n" n | StringList n -> pr " char **%s;\n" n @@ -4703,7 +4704,10 @@ and generate_daemon_actions () pr " }\n"; List.iter ( function - | Device n -> + | Pathname n -> + pr " NEED_ROOT (goto done);\n"; + pr " ABS_PATH (%s, goto done);\n" n; + | Device n -> pr " %s = args.%s;\n" n n; pr " RESOLVE_DEVICE (%s, goto done);" n; | String n -> pr " %s = args.%s;\n" n n @@ -5610,6 +5614,7 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd List.iter ( function | OptString n, "NULL" -> () + | Pathname n, arg | Device n, arg | String n, arg | OptString n, arg -> @@ -5658,6 +5663,7 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd List.iter ( function | OptString _, "NULL" -> pr ", NULL" + | Pathname n, _ | Device n, _ | String n, _ | OptString n, _ -> @@ -5907,6 +5913,7 @@ and generate_fish_cmds () ); List.iter ( function + | Pathname n | Device n | String n | OptString n @@ -5928,6 +5935,7 @@ and generate_fish_cmds () iteri ( fun i -> function + | Pathname name | Device name | String name -> pr " %s = argv[%d];\n" name i | OptString name -> pr " %s = strcmp (argv[%d], \"\") != 0 ? argv[%d] : NULL;\n" @@ -6161,7 +6169,7 @@ and generate_fish_actions_pod () pr " %s" name; List.iter ( function - | Device n | String n -> pr " %s" n + | Pathname n | Device n | String n -> pr " %s" n | OptString n -> pr " %s" n | StringList n -> pr " '%s ...'" n | Bool _ -> pr " true|false" @@ -6227,6 +6235,7 @@ and generate_prototype ?(extern = true) ?(static = false) ?(semicolon = true) in List.iter ( function + | Pathname n | Device n | String n | OptString n -> @@ -6489,6 +6498,7 @@ copy_table (char * const * argv) List.iter ( function + | Pathname n | Device n | String n | FileIn n @@ -6542,7 +6552,7 @@ copy_table (char * const * argv) function | StringList n -> pr " ocaml_guestfs_free_strings (%s);\n" n; - | Device _ | String _ | OptString _ | Bool _ | Int _ + | Pathname _ | Device _ | String _ | OptString _ | Bool _ | Int _ | FileIn _ | FileOut _ -> () ) (snd style); @@ -6626,7 +6636,7 @@ and generate_ocaml_prototype ?(is_external = false) name style pr "%s : t -> " name; List.iter ( function - | Device _ | String _ | FileIn _ | FileOut _ -> pr "string -> " + | Pathname _ | Device _ | String _ | FileIn _ | FileOut _ -> pr "string -> " | OptString _ -> pr "string option -> " | StringList _ -> pr "string array -> " | Bool _ -> pr "bool -> " @@ -6772,7 +6782,8 @@ DESTROY (g) fun i -> function (* FIXME: ? *) - | Device n | String n | FileIn n | FileOut n -> pr " char *%s;\n" n + | Pathname n | Device n | String n | FileIn n | FileOut n -> + pr " char *%s;\n" n | OptString n -> (* http://www.perlmonks.org/?node_id=554277 * Note that the implicit handle argument means we have @@ -6787,7 +6798,7 @@ DESTROY (g) let do_cleanups () List.iter ( function - | Device _ | String _ | OptString _ | Bool _ | Int _ + | Pathname _ | Device _ | String _ | OptString _ | Bool _ | Int _ | FileIn _ | FileOut _ -> () | StringList n -> pr " free (%s);\n" n ) (snd style) @@ -7159,7 +7170,7 @@ and generate_perl_prototype name style if !comma then pr ", "; comma := true; match arg with - | Device n | String n + | Pathname n | Device n | String n | OptString n | Bool n | Int n | FileIn n | FileOut n -> pr "$%s" n | StringList n -> @@ -7407,7 +7418,8 @@ py_guestfs_close (PyObject *self, PyObject *args) List.iter ( function - | Device n | String n | FileIn n | FileOut n -> pr " const char *%s;\n" n + | Pathname n | Device n | String n | FileIn n | FileOut n -> + pr " const char *%s;\n" n | OptString n -> pr " const char *%s;\n" n | StringList n -> pr " PyObject *py_%s;\n" n; @@ -7422,7 +7434,7 @@ py_guestfs_close (PyObject *self, PyObject *args) pr " if (!PyArg_ParseTuple (args, (char *) \"O"; List.iter ( function - | Device _ | String _ | FileIn _ | FileOut _ -> pr "s" + | Pathname _ | Device _ | String _ | FileIn _ | FileOut _ -> pr "s" | OptString _ -> pr "z" | StringList _ -> pr "O" | Bool _ -> pr "i" (* XXX Python has booleans? *) @@ -7432,7 +7444,7 @@ py_guestfs_close (PyObject *self, PyObject *args) pr " &py_g"; List.iter ( function - | Device n | String n | FileIn n | FileOut n -> pr ", &%s" n + | Pathname n | Device n | String n | FileIn n | FileOut n -> pr ", &%s" n | OptString n -> pr ", &%s" n | StringList n -> pr ", &py_%s" n | Bool n -> pr ", &%s" n @@ -7445,7 +7457,7 @@ py_guestfs_close (PyObject *self, PyObject *args) pr " g = get_handle (py_g);\n"; List.iter ( function - | Device _ | String _ + | Pathname _ | Device _ | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () | StringList n -> pr " %s = get_string_list (py_%s);\n" n n; @@ -7460,7 +7472,7 @@ py_guestfs_close (PyObject *self, PyObject *args) List.iter ( function - | Device _ | String _ + | Pathname _ | Device _ | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () | StringList n -> pr " free (%s);\n" n @@ -7769,7 +7781,7 @@ static VALUE ruby_guestfs_close (VALUE gv) List.iter ( function - | Device n | String n | FileIn n | FileOut n -> + | Pathname n | Device n | String n | FileIn n | FileOut n -> pr " Check_Type (%sv, T_STRING);\n" n; pr " const char *%s = StringValueCStr (%sv);\n" n n; pr " if (!%s)\n" n; @@ -7821,7 +7833,7 @@ static VALUE ruby_guestfs_close (VALUE gv) List.iter ( function - | Device _ | String _ + | Pathname _ | Device _ | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () | StringList n -> pr " free (%s);\n" n @@ -8132,6 +8144,7 @@ and generate_java_prototype ?(public=false) ?(privat=false) ?(native=false) needs_comma := true; match arg with + | Pathname n | Device n | String n | OptString n @@ -8250,6 +8263,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close pr " (JNIEnv *env, jobject obj, jlong jg"; List.iter ( function + | Pathname n | Device n | String n | OptString n @@ -8302,6 +8316,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close "NULL", "NULL" in List.iter ( function + | Pathname n | Device n | String n | OptString n @@ -8331,6 +8346,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close (* Get the parameters. *) List.iter ( function + | Pathname n | Device n | String n | FileIn n @@ -8363,6 +8379,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close (* Release the parameters. *) List.iter ( function + | Pathname n | Device n | String n | FileIn n @@ -8638,7 +8655,7 @@ last_error h = do function | FileIn n | FileOut n - | Device n | String n -> pr "withCString %s $ \\%s -> " n n + | Pathname n | Device n | String n -> pr "withCString %s $ \\%s -> " n n | OptString n -> pr "maybeWith withCString %s $ \\%s -> " n n | StringList n -> pr "withMany withCString %s $ \\%s -> withArray0 nullPtr %s $ \\%s -> " n n n n | Bool _ | Int _ -> () @@ -8650,7 +8667,7 @@ last_error h = do | Bool n -> sprintf "(fromBool %s)" n | Int n -> sprintf "(fromIntegral %s)" n | FileIn n | FileOut n - | Device n | String n | OptString n | StringList n -> n + | Pathname n | Device n | String n | OptString n | StringList n -> n ) (snd style) in pr "withForeignPtr h (\\p -> c_%s %s)\n" name (String.concat " " ("p" :: args)); @@ -8700,7 +8717,7 @@ and generate_haskell_prototype ~handle ?(hs = false) style List.iter ( fun arg -> (match arg with - | Device _ | String _ -> pr "%s" string + | Pathname _ | Device _ | String _ -> pr "%s" string | OptString _ -> if hs then pr "Maybe String" else pr "CString" | StringList _ -> if hs then pr "[String]" else pr "Ptr CString" | Bool _ -> pr "%s" bool @@ -8775,6 +8792,7 @@ print_strings (char * const* const argv) pr "{\n"; List.iter ( function + | Pathname n | Device n | String n | FileIn n -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 16/23] generator.ml: use new "Pathname" designation
From: Jim Meyering <meyering at redhat.com> Nearly every file-related function in daemons/*.c is affected: Remove this pair of statements from each affected do_* function: - NEED_ROOT (return -1); - ABS_PATH (dir, return -1); and change the type of the corresponding parameter to "const char *". * src/generator.ml: Emit NEED_ROOT just once, even when there are two or more Pathname args. --- daemon/augeas.c | 23 +++++++++----------- daemon/blockdev.c | 22 ++++++++++---------- daemon/checksum.c | 5 +--- daemon/cmp.c | 2 +- daemon/command.c | 4 +- daemon/cpmv.c | 6 ++-- daemon/debug.c | 2 +- daemon/devsparts.c | 2 +- daemon/dir.c | 25 ++++------------------ daemon/du.c | 5 +--- daemon/ext2.c | 14 ++++++------ daemon/fallocate.c | 5 +--- daemon/file.c | 57 +++++++++++----------------------------------------- daemon/find.c | 5 +--- daemon/fsck.c | 2 +- daemon/glob.c | 5 +--- daemon/grep.c | 29 +++++++++++-------------- daemon/grub.c | 5 +--- daemon/headtail.c | 13 ++++------- daemon/hexdump.c | 5 +--- daemon/initrd.c | 5 +--- daemon/inotify.c | 2 +- daemon/link.c | 17 ++++----------- daemon/ls.c | 10 +------- daemon/lvm.c | 20 ++++++++---------- daemon/mknod.c | 11 +++------ daemon/mount.c | 26 +++++++++-------------- daemon/ntfs.c | 2 +- daemon/readdir.c | 5 +--- daemon/realpath.c | 5 +--- daemon/scrub.c | 12 ++-------- daemon/sfdisk.c | 18 ++++++++-------- daemon/stat.c | 15 ++----------- daemon/strings.c | 7 +---- daemon/swap.c | 35 +++++++++++-------------------- daemon/tar.c | 14 +++--------- daemon/upload.c | 4 +- daemon/wc.c | 11 +++------ daemon/xattr.c | 39 ++++++++++++++++------------------- daemon/zero.c | 2 +- daemon/zerofree.c | 2 +- src/generator.ml | 45 ++++++++++++++++++++++++++++------------ 42 files changed, 205 insertions(+), 338 deletions(-) diff --git a/daemon/augeas.c b/daemon/augeas.c index b6cc8f0..7de3624 100644 --- a/daemon/augeas.c +++ b/daemon/augeas.c @@ -49,14 +49,11 @@ static augeas *aug = NULL; /* We need to rewrite the root path so it is based at /sysroot. */ int -do_aug_init (char *root, int flags) +do_aug_init (const char *root, int flags) { #ifdef HAVE_AUGEAS char *buf; - NEED_ROOT (return -1); - ABS_PATH (root, return -1); - if (aug) { aug_close (aug); aug = NULL; @@ -100,7 +97,7 @@ do_aug_close (void) } int -do_aug_defvar (char *name, char *expr) +do_aug_defvar (const char *name, const char *expr) { #ifdef HAVE_AUG_DEFVAR int r; @@ -120,7 +117,7 @@ do_aug_defvar (char *name, char *expr) } guestfs_int_int_bool * -do_aug_defnode (char *name, char *expr, char *val) +do_aug_defnode (const char *name, const char *expr, const char *val) { #ifdef HAVE_AUG_DEFNODE static guestfs_int_int_bool r; @@ -142,7 +139,7 @@ do_aug_defnode (char *name, char *expr, char *val) } char * -do_aug_get (char *path) +do_aug_get (const char *path) { #ifdef HAVE_AUGEAS const char *value = NULL; @@ -185,7 +182,7 @@ do_aug_get (char *path) } int -do_aug_set (char *path, char *val) +do_aug_set (const char *path, const char *val) { #ifdef HAVE_AUGEAS int r; @@ -206,7 +203,7 @@ do_aug_set (char *path, char *val) } int -do_aug_insert (char *path, char *label, int before) +do_aug_insert (const char *path, const char *label, int before) { #ifdef HAVE_AUGEAS int r; @@ -227,7 +224,7 @@ do_aug_insert (char *path, char *label, int before) } int -do_aug_rm (char *path) +do_aug_rm (const char *path) { #ifdef HAVE_AUGEAS int r; @@ -248,7 +245,7 @@ do_aug_rm (char *path) } int -do_aug_mv (char *src, char *dest) +do_aug_mv (const char *src, const char *dest) { #ifdef HAVE_AUGEAS int r; @@ -269,7 +266,7 @@ do_aug_mv (char *src, char *dest) } char ** -do_aug_match (char *path) +do_aug_match (const char *path) { #ifdef HAVE_AUGEAS char **matches = NULL; @@ -341,7 +338,7 @@ do_aug_load (void) /* Simpler version of aug-match, which also sorts the output. */ char ** -do_aug_ls (char *path) +do_aug_ls (const char *path) { #ifdef HAVE_AUGEAS char **matches; diff --git a/daemon/blockdev.c b/daemon/blockdev.c index 46ee994..0745007 100644 --- a/daemon/blockdev.c +++ b/daemon/blockdev.c @@ -32,7 +32,7 @@ * we centralize it in one call. */ static int64_t -call_blockdev (char *device, char *switc, int extraarg, int prints) +call_blockdev (const char *device, char *switc, int extraarg, int prints) { int r; int64_t rv; @@ -78,37 +78,37 @@ call_blockdev (char *device, char *switc, int extraarg, int prints) } int -do_blockdev_setro (char *device) +do_blockdev_setro (const char *device) { return (int) call_blockdev (device, "--setro", 0, 0); } int -do_blockdev_setrw (char *device) +do_blockdev_setrw (const char *device) { return (int) call_blockdev (device, "--setrw", 0, 0); } int -do_blockdev_getro (char *device) +do_blockdev_getro (const char *device) { return (int) call_blockdev (device, "--getro", 0, 1); } int -do_blockdev_getss (char *device) +do_blockdev_getss (const char *device) { return (int) call_blockdev (device, "--getss", 0, 1); } int -do_blockdev_getbsz (char *device) +do_blockdev_getbsz (const char *device) { return (int) call_blockdev (device, "--getbsz", 0, 1); } int -do_blockdev_setbsz (char *device, int blocksize) +do_blockdev_setbsz (const char *device, int blocksize) { if (blocksize <= 0 /* || blocksize >= what? */) { reply_with_error ("blockdev_setbsz: blocksize must be > 0"); @@ -118,25 +118,25 @@ do_blockdev_setbsz (char *device, int blocksize) } int64_t -do_blockdev_getsz (char *device) +do_blockdev_getsz (const char *device) { return call_blockdev (device, "--getsz", 0, 1); } int64_t -do_blockdev_getsize64 (char *device) +do_blockdev_getsize64 (const char *device) { return call_blockdev (device, "--getsize64", 0, 1); } int -do_blockdev_flushbufs (char *device) +do_blockdev_flushbufs (const char *device) { return call_blockdev (device, "--flushbufs", 0, 0); } int -do_blockdev_rereadpt (char *device) +do_blockdev_rereadpt (const char *device) { return call_blockdev (device, "--rereadpt", 0, 0); } diff --git a/daemon/checksum.c b/daemon/checksum.c index c06a697..2423265 100644 --- a/daemon/checksum.c +++ b/daemon/checksum.c @@ -28,7 +28,7 @@ #include "actions.h" char * -do_checksum (char *csumtype, char *path) +do_checksum (const char *csumtype, const char *path) { const char *program; char *buf; @@ -36,9 +36,6 @@ do_checksum (char *csumtype, char *path) int r; int len; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - if (strcasecmp (csumtype, "crc") == 0) program = "cksum"; else if (strcasecmp (csumtype, "md5") == 0) diff --git a/daemon/cmp.c b/daemon/cmp.c index a48e924..56717c5 100644 --- a/daemon/cmp.c +++ b/daemon/cmp.c @@ -28,7 +28,7 @@ #include "actions.h" int -do_equal (char *file1, char *file2) +do_equal (const char *file1, const char *file2) { char *file1buf, *file2buf; char *err; diff --git a/daemon/command.c b/daemon/command.c index 7f5fc95..88c500a 100644 --- a/daemon/command.c +++ b/daemon/command.c @@ -114,7 +114,7 @@ do_command_lines (char **argv) } char * -do_sh (char *command) +do_sh (const char *command) { char *argv[] = { "/bin/sh", "-c", command, NULL }; @@ -122,7 +122,7 @@ do_sh (char *command) } char ** -do_sh_lines (char *command) +do_sh_lines (const char *command) { char *argv[] = { "/bin/sh", "-c", command, NULL }; diff --git a/daemon/cpmv.c b/daemon/cpmv.c index 4fdee6b..1007203 100644 --- a/daemon/cpmv.c +++ b/daemon/cpmv.c @@ -28,19 +28,19 @@ static int cpmv_cmd (const char *cmd, const char *flags, const char *src, const char *dest); int -do_cp (char *src, char *dest) +do_cp (const char *src, const char *dest) { return cpmv_cmd ("cp", NULL, src, dest); } int -do_cp_a (char *src, char *dest) +do_cp_a (const char *src, const char *dest) { return cpmv_cmd ("cp", "-a", src, dest); } int -do_mv (char *src, char *dest) +do_mv (const char *src, const char *dest) { return cpmv_cmd ("mv", NULL, src, dest); } diff --git a/daemon/debug.c b/daemon/debug.c index 5083398..58a5061 100644 --- a/daemon/debug.c +++ b/daemon/debug.c @@ -67,7 +67,7 @@ static struct cmd cmds[] = { #endif char * -do_debug (char *subcmd MAYBE_UNUSED, char **argv MAYBE_UNUSED) +do_debug (const char *subcmd MAYBE_UNUSED, char **argv MAYBE_UNUSED) { #if ENABLE_DEBUG_COMMAND int argc, i; diff --git a/daemon/devsparts.c b/daemon/devsparts.c index 04585ed..b4ea578 100644 --- a/daemon/devsparts.c +++ b/daemon/devsparts.c @@ -188,7 +188,7 @@ do_list_partitions (void) } int -do_mkfs (char *fstype, char *device) +do_mkfs (const char *fstype, const char *device) { char *err; int r; diff --git a/daemon/dir.c b/daemon/dir.c index ec072dd..ad1c7c9 100644 --- a/daemon/dir.c +++ b/daemon/dir.c @@ -30,13 +30,10 @@ #include "actions.h" int -do_rmdir (char *path) +do_rmdir (const char *path) { int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; r = rmdir (path); CHROOT_OUT; @@ -54,14 +51,11 @@ do_rmdir (char *path) * do stupid stuff, who are we to try to stop them? */ int -do_rm_rf (char *path) +do_rm_rf (const char *path) { int r; char *buf, *err; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - if (strcmp (path, "/") == 0) { reply_with_error ("rm -rf: cannot remove root directory"); return -1; @@ -89,13 +83,10 @@ do_rm_rf (char *path) } int -do_mkdir (char *path) +do_mkdir (const char *path) { int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; r = mkdir (path, 0777); CHROOT_OUT; @@ -155,13 +146,10 @@ recursive_mkdir (const char *path) } int -do_mkdir_p (char *path) +do_mkdir_p (const char *path) { int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; r = recursive_mkdir (path); CHROOT_OUT; @@ -175,14 +163,11 @@ do_mkdir_p (char *path) } int -do_is_dir (char *path) +do_is_dir (const char *path) { int r; struct stat buf; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; r = lstat (path, &buf); CHROOT_OUT; diff --git a/daemon/du.c b/daemon/du.c index f5f083d..e6df245 100644 --- a/daemon/du.c +++ b/daemon/du.c @@ -29,16 +29,13 @@ #include "actions.h" int64_t -do_du (char *path) +do_du (const char *path) { int r; int64_t rv; char *out, *err; char *buf; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - /* Make the path relative to /sysroot. */ buf = sysroot_path (path); if (!buf) { diff --git a/daemon/ext2.c b/daemon/ext2.c index 04869da..f181b8d 100644 --- a/daemon/ext2.c +++ b/daemon/ext2.c @@ -28,7 +28,7 @@ #include "actions.h" char ** -do_tune2fs_l (char *device) +do_tune2fs_l (const char *device) { int r; char *out, *err; @@ -115,7 +115,7 @@ do_tune2fs_l (char *device) } int -do_set_e2label (char *device, char *label) +do_set_e2label (const char *device, const char *label) { int r; char *err; @@ -132,7 +132,7 @@ do_set_e2label (char *device, char *label) } char * -do_get_e2label (char *device) +do_get_e2label (const char *device) { int r, len; char *out, *err; @@ -156,7 +156,7 @@ do_get_e2label (char *device) } int -do_set_e2uuid (char *device, char *uuid) +do_set_e2uuid (const char *device, const char *uuid) { int r; char *err; @@ -173,7 +173,7 @@ do_set_e2uuid (char *device, char *uuid) } char * -do_get_e2uuid (char *device) +do_get_e2uuid (const char *device) { int r; char *out, *err, *p, *q; @@ -234,7 +234,7 @@ do_get_e2uuid (char *device) } int -do_resize2fs (char *device) +do_resize2fs (const char *device) { char *err; int r; @@ -251,7 +251,7 @@ do_resize2fs (char *device) } int -do_e2fsck_f (char *device) +do_e2fsck_f (const char *device) { char *err; int r; diff --git a/daemon/fallocate.c b/daemon/fallocate.c index 9c5a3dd..eb84145 100644 --- a/daemon/fallocate.c +++ b/daemon/fallocate.c @@ -28,13 +28,10 @@ #include "actions.h" int -do_fallocate (char *path, int len) +do_fallocate (const char *path, int len) { int fd, r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; fd = open (path, O_WRONLY | O_CREAT | O_TRUNC | O_NOCTTY, 0666); CHROOT_OUT; diff --git a/daemon/file.c b/daemon/file.c index d8425e9..ed3221d 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -30,14 +30,11 @@ #include "actions.h" int -do_touch (char *path) +do_touch (const char *path) { int fd; int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; fd = open (path, O_WRONLY | O_CREAT | O_NOCTTY, 0666); CHROOT_OUT; @@ -67,15 +64,12 @@ do_touch (char *path) } char * -do_cat (char *path) +do_cat (const char *path) { int fd; int alloc, size, r, max; char *buf, *buf2; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - CHROOT_IN; fd = open (path, O_RDONLY); CHROOT_OUT; @@ -138,7 +132,7 @@ do_cat (char *path) } char ** -do_read_lines (char *path) +do_read_lines (const char *path) { char **r = NULL; int size = 0, alloc = 0; @@ -147,9 +141,6 @@ do_read_lines (char *path) size_t len = 0; ssize_t n; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - CHROOT_IN; fp = fopen (path, "r"); CHROOT_OUT; @@ -190,13 +181,10 @@ do_read_lines (char *path) } int -do_rm (char *path) +do_rm (const char *path) { int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; r = unlink (path); CHROOT_OUT; @@ -210,13 +198,10 @@ do_rm (char *path) } int -do_chmod (int mode, char *path) +do_chmod (int mode, const char *path) { int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; r = chmod (path, mode); CHROOT_OUT; @@ -230,13 +215,10 @@ do_chmod (int mode, char *path) } int -do_chown (int owner, int group, char *path) +do_chown (int owner, int group, const char *path) { int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; r = chown (path, owner, group); CHROOT_OUT; @@ -250,13 +232,10 @@ do_chown (int owner, int group, char *path) } int -do_exists (char *path) +do_exists (const char *path) { int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; r = access (path, F_OK); CHROOT_OUT; @@ -265,14 +244,11 @@ do_exists (char *path) } int -do_is_file (char *path) +do_is_file (const char *path) { int r; struct stat buf; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; r = lstat (path, &buf); CHROOT_OUT; @@ -290,13 +266,10 @@ do_is_file (char *path) } int -do_write_file (char *path, char *content, int size) +do_write_file (const char *path, const char *content, int size) { int fd; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - if (size == 0) size = strlen (content); @@ -324,15 +297,12 @@ do_write_file (char *path, char *content, int size) } char * -do_read_file (char *path, size_t *size_r) +do_read_file (const char *path, size_t *size_r) { int fd; struct stat statbuf; char *r; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - CHROOT_IN; fd = open (path, O_RDONLY); CHROOT_OUT; @@ -384,7 +354,7 @@ do_read_file (char *path, size_t *size_r) /* This runs the 'file' command. */ char * -do_file (char *path) +do_file (const char *path) { char *out, *err; int r, freeit = 0; @@ -436,7 +406,7 @@ do_file (char *path) /* zcat | file */ char * -do_zfile (char *method, char *path) +do_zfile (const char *method, const char *path) { int len; const char *zcat; @@ -444,9 +414,6 @@ do_zfile (char *method, char *path) FILE *fp; char line[256]; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - if (strcmp (method, "gzip") == 0 || strcmp (method, "compress") == 0) zcat = "zcat"; else if (strcmp (method, "bzip2") == 0) diff --git a/daemon/find.c b/daemon/find.c index 950a0fc..2147c57 100644 --- a/daemon/find.c +++ b/daemon/find.c @@ -48,7 +48,7 @@ input_to_nul (FILE *fp, char *buf, int maxlen) } char ** -do_find (char *dir) +do_find (const char *dir) { struct stat statbuf; int r, len, sysrootdirlen; @@ -59,9 +59,6 @@ do_find (char *dir) char *sysrootdir; char str[PATH_MAX]; - NEED_ROOT (return NULL); - ABS_PATH (dir, return NULL); - sysrootdir = sysroot_path (dir); if (!sysrootdir) { reply_with_perror ("malloc"); diff --git a/daemon/fsck.c b/daemon/fsck.c index 825f97e..7139094 100644 --- a/daemon/fsck.c +++ b/daemon/fsck.c @@ -27,7 +27,7 @@ #include "actions.h" int -do_fsck (char *fstype, char *device) +do_fsck (const char *fstype, const char *device) { char *err; int r; diff --git a/daemon/glob.c b/daemon/glob.c index 40b7c50..4fe76f3 100644 --- a/daemon/glob.c +++ b/daemon/glob.c @@ -26,14 +26,11 @@ #include "actions.h" char ** -do_glob_expand (char *pattern) +do_glob_expand (const char *pattern) { int r; glob_t buf; - NEED_ROOT (return NULL); - ABS_PATH (pattern, return NULL); /* Required so chroot can be used. */ - /* glob(3) in glibc never calls chdir, so this seems to be safe: */ CHROOT_IN; r = glob (pattern, GLOB_MARK|GLOB_BRACE, NULL, &buf); diff --git a/daemon/grep.c b/daemon/grep.c index f0dbefd..d1f5a3f 100644 --- a/daemon/grep.c +++ b/daemon/grep.c @@ -28,16 +28,13 @@ #include "actions.h" static char ** -grep (const char *prog, const char *flag, char *regex, char *path) +grep (const char *prog, const char *flag, const char *regex, const char *path) { char *buf; char *out, *err; int r; char **lines; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - /* Make the path relative to /sysroot. */ buf = sysroot_path (path); if (!buf) { @@ -67,74 +64,74 @@ grep (const char *prog, const char *flag, char *regex, char *path) } char ** -do_grep (char *regex, char *path) +do_grep (const char *regex, const char *path) { /* The "--" is not really needed, but it helps when we don't need a flag. */ return grep ("grep", "--", regex, path); } char ** -do_egrep (char *regex, char *path) +do_egrep (const char *regex, const char *path) { return grep ("egrep", "--", regex, path); } char ** -do_fgrep (char *regex, char *path) +do_fgrep (const char *regex, const char *path) { return grep ("fgrep", "--", regex, path); } char ** -do_grepi (char *regex, char *path) +do_grepi (const char *regex, const char *path) { return grep ("grep", "-i", regex, path); } char ** -do_egrepi (char *regex, char *path) +do_egrepi (const char *regex, const char *path) { return grep ("egrep", "-i", regex, path); } char ** -do_fgrepi (char *regex, char *path) +do_fgrepi (const char *regex, const char *path) { return grep ("fgrep", "-i", regex, path); } char ** -do_zgrep (char *regex, char *path) +do_zgrep (const char *regex, const char *path) { return grep ("zgrep", "--", regex, path); } char ** -do_zegrep (char *regex, char *path) +do_zegrep (const char *regex, const char *path) { return grep ("zegrep", "--", regex, path); } char ** -do_zfgrep (char *regex, char *path) +do_zfgrep (const char *regex, const char *path) { return grep ("zfgrep", "--", regex, path); } char ** -do_zgrepi (char *regex, char *path) +do_zgrepi (const char *regex, const char *path) { return grep ("zgrep", "-i", regex, path); } char ** -do_zegrepi (char *regex, char *path) +do_zegrepi (const char *regex, const char *path) { return grep ("zegrep", "-i", regex, path); } char ** -do_zfgrepi (char *regex, char *path) +do_zfgrepi (const char *regex, const char *path) { return grep ("zfgrep", "-i", regex, path); } diff --git a/daemon/grub.c b/daemon/grub.c index 8476619..657abbb 100644 --- a/daemon/grub.c +++ b/daemon/grub.c @@ -26,15 +26,12 @@ #include "actions.h" int -do_grub_install (char *root, char *device) +do_grub_install (const char *root, const char *device) { int r; char *err; char *buf; - NEED_ROOT (return -1); - ABS_PATH (root, return -1); - if (asprintf_nowarn (&buf, "--root-directory=%R", root) == -1) { reply_with_perror ("asprintf"); return -1; diff --git a/daemon/headtail.c b/daemon/headtail.c index 79dcfbb..9175cf0 100644 --- a/daemon/headtail.c +++ b/daemon/headtail.c @@ -28,16 +28,13 @@ #include "actions.h" static char ** -headtail (const char *prog, const char *flag, const char *n, char *path) +headtail (const char *prog, const char *flag, const char *n, const char *path) { char *buf; char *out, *err; int r; char **lines; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - /* Make the path relative to /sysroot. */ buf = sysroot_path (path); if (!buf) { @@ -70,19 +67,19 @@ headtail (const char *prog, const char *flag, const char *n, char *path) } char ** -do_head (char *path) +do_head (const char *path) { return headtail ("head", "-n", "10", path); } char ** -do_tail (char *path) +do_tail (const char *path) { return headtail ("tail", "-n", "10", path); } char ** -do_head_n (int n, char *path) +do_head_n (int n, const char *path) { char nbuf[16]; @@ -92,7 +89,7 @@ do_head_n (int n, char *path) } char ** -do_tail_n (int n, char *path) +do_tail_n (int n, const char *path) { char nbuf[16]; diff --git a/daemon/hexdump.c b/daemon/hexdump.c index faf3dc5..7016faf 100644 --- a/daemon/hexdump.c +++ b/daemon/hexdump.c @@ -26,15 +26,12 @@ #include "actions.h" char * -do_hexdump (char *path) +do_hexdump (const char *path) { char *buf; int r; char *out, *err; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - buf = sysroot_path (path); if (!buf) { reply_with_perror ("malloc"); diff --git a/daemon/initrd.c b/daemon/initrd.c index c1c7ce0..9431ef1 100644 --- a/daemon/initrd.c +++ b/daemon/initrd.c @@ -28,7 +28,7 @@ #include "actions.h" char ** -do_initrd_list (char *path) +do_initrd_list (const char *path) { FILE *fp; char *cmd; @@ -37,9 +37,6 @@ do_initrd_list (char *path) int size = 0, alloc = 0; size_t len; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - /* "zcat /sysroot/<path> | cpio --quiet -it", but path must be quoted. */ if (asprintf_nowarn (&cmd, "zcat %R | cpio --quiet -it", path) == -1) { reply_with_perror ("asprintf"); diff --git a/daemon/inotify.c b/daemon/inotify.c index 96b9681..7834dcb 100644 --- a/daemon/inotify.c +++ b/daemon/inotify.c @@ -123,7 +123,7 @@ do_inotify_close (void) } int64_t -do_inotify_add_watch (char *path, int mask) +do_inotify_add_watch (const char *path, int mask) { int64_t r; char *buf; diff --git a/daemon/link.c b/daemon/link.c index 9129b5c..a77c2e8 100644 --- a/daemon/link.c +++ b/daemon/link.c @@ -28,15 +28,12 @@ #include "actions.h" char * -do_readlink (char *path) +do_readlink (const char *path) { ssize_t r; char *ret; char link[PATH_MAX]; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - CHROOT_IN; r = readlink (path, link, sizeof link); CHROOT_OUT; @@ -62,10 +59,6 @@ _link (const char *flag, int symbolic, const char *target, const char *linkname) char *buf_linkname; char *buf_target; - NEED_ROOT (return -1); - ABS_PATH (linkname, return -1); - /* but target does not need to be absolute */ - /* Prefix linkname with sysroot. */ buf_linkname = sysroot_path (linkname); if (!buf_linkname) { @@ -113,25 +106,25 @@ _link (const char *flag, int symbolic, const char *target, const char *linkname) } int -do_ln (char *target, char *linkname) +do_ln (const char *target, const char *linkname) { return _link (NULL, 0, target, linkname); } int -do_ln_f (char *target, char *linkname) +do_ln_f (const char *target, const char *linkname) { return _link ("-f", 0, target, linkname); } int -do_ln_s (char *target, char *linkname) +do_ln_s (const char *target, const char *linkname) { return _link ("-s", 1, target, linkname); } int -do_ln_sf (char *target, char *linkname) +do_ln_sf (const char *target, const char *linkname) { return _link ("-sf", 1, target, linkname); } diff --git a/daemon/ls.c b/daemon/ls.c index 8dba1bf..9d2ca89 100644 --- a/daemon/ls.c +++ b/daemon/ls.c @@ -30,16 +30,13 @@ #include "actions.h" char ** -do_ls (char *path) +do_ls (const char *path) { char **r = NULL; int size = 0, alloc = 0; DIR *dir; struct dirent *d; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - CHROOT_IN; dir = opendir (path); CHROOT_OUT; @@ -84,15 +81,12 @@ do_ls (char *path) */ char * -do_ll (char *path) +do_ll (const char *path) { int r; char *out, *err; char *spath; - NEED_ROOT (NULL); - ABS_PATH (path, NULL); - spath = sysroot_path (path); if (!spath) { reply_with_perror ("malloc"); diff --git a/daemon/lvm.c b/daemon/lvm.c index bee62d4..ddc125c 100644 --- a/daemon/lvm.c +++ b/daemon/lvm.c @@ -32,7 +32,7 @@ */ static char ** -convert_lvm_output (char *out, char *prefix) +convert_lvm_output (char *out, const char *prefix) { char *p, *pend; char **r = NULL; @@ -171,7 +171,7 @@ do_lvs_full (void) } int -do_pvcreate (char *device) +do_pvcreate (const char *device) { char *err; int r; @@ -192,7 +192,7 @@ do_pvcreate (char *device) } int -do_vgcreate (char *volgroup, char **physvols) +do_vgcreate (const char *volgroup, char **physvols) { char *err; int r, argc, i; @@ -229,7 +229,7 @@ do_vgcreate (char *volgroup, char **physvols) } int -do_lvcreate (char *logvol, char *volgroup, int mbytes) +do_lvcreate (const char *logvol, const char *volgroup, int mbytes) { char *err; int r; @@ -254,14 +254,12 @@ do_lvcreate (char *logvol, char *volgroup, int mbytes) } int -do_lvresize (char *logvol, int mbytes) +do_lvresize (const char *logvol, int mbytes) { char *err; int r; char size[64]; - RESOLVE_DEVICE (logvol, return -1); - snprintf (size, sizeof size, "%d", mbytes); r = command (NULL, &err, @@ -345,7 +343,7 @@ do_lvm_remove_all (void) } int -do_lvremove (char *device) +do_lvremove (const char *device) { char *err; int r; @@ -366,7 +364,7 @@ do_lvremove (char *device) } int -do_vgremove (char *device) +do_vgremove (const char *device) { char *err; int r; @@ -387,7 +385,7 @@ do_vgremove (char *device) } int -do_pvremove (char *device) +do_pvremove (const char *device) { char *err; int r; @@ -408,7 +406,7 @@ do_pvremove (char *device) } int -do_pvresize (char *device) +do_pvresize (const char *device) { char *err; int r; diff --git a/daemon/mknod.c b/daemon/mknod.c index a6e6eca..adaeb80 100644 --- a/daemon/mknod.c +++ b/daemon/mknod.c @@ -31,13 +31,10 @@ #include "actions.h" int -do_mknod (int mode, int devmajor, int devminor, char *path) +do_mknod (int mode, int devmajor, int devminor, const char *path) { int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; r = mknod (path, mode, makedev (devmajor, devminor)); CHROOT_OUT; @@ -51,19 +48,19 @@ do_mknod (int mode, int devmajor, int devminor, char *path) } int -do_mkfifo (int mode, char *path) +do_mkfifo (int mode, const char *path) { return do_mknod (mode | S_IFIFO, 0, 0, path); } int -do_mknod_b (int mode, int devmajor, int devminor, char *path) +do_mknod_b (int mode, int devmajor, int devminor, const char *path) { return do_mknod (mode | S_IFBLK, devmajor, devminor, path); } int -do_mknod_c (int mode, int devmajor, int devminor, char *path) +do_mknod_c (int mode, int devmajor, int devminor, const char *path) { return do_mknod (mode | S_IFCHR, devmajor, devminor, path); } diff --git a/daemon/mount.c b/daemon/mount.c index 4f60682..89bef34 100644 --- a/daemon/mount.c +++ b/daemon/mount.c @@ -41,8 +41,8 @@ int root_mounted = 0; */ int -do_mount_vfs (char *options, char *vfstype, - char *device, char *mountpoint) +do_mount_vfs (const char *options, const char *vfstype, + const char *device, const char *mountpoint) { int r, is_root; char *mp; @@ -81,20 +81,20 @@ do_mount_vfs (char *options, char *vfstype, } int -do_mount (char *device, char *mountpoint) +do_mount (const char *device, const char *mountpoint) { return do_mount_vfs ("sync,noatime", NULL, device, mountpoint); } int -do_mount_ro (char *device, char *mountpoint) +do_mount_ro (const char *device, const char *mountpoint) { return do_mount_vfs ("ro", NULL, device, mountpoint); } int -do_mount_options (char *options, char *device, - char *mountpoint) +do_mount_options (const char *options, const char *device, + const char *mountpoint) { return do_mount_vfs (options, NULL, device, mountpoint); } @@ -103,7 +103,7 @@ do_mount_options (char *options, char *device, * is kept updated. */ int -do_umount (char *pathordevice) +do_umount (const char *pathordevice) { int freeit = 0, r; char *buf; @@ -311,15 +311,12 @@ do_umount_all (void) * device. */ int -do_mount_loop (char *file, char *mountpoint) +do_mount_loop (const char *file, const char *mountpoint) { int r; char *buf, *mp; char *error; - NEED_ROOT (return -1); - ABS_PATH (file, return -1); - /* We have to prefix /sysroot on both the filename and the mountpoint. */ mp = sysroot_path (mountpoint); if (!mp) { @@ -351,7 +348,7 @@ do_mount_loop (char *file, char *mountpoint) * mkmountpoint case) set the root_mounted flag. */ int -do_mkmountpoint (char *path) +do_mkmountpoint (const char *path) { int r; @@ -376,13 +373,10 @@ do_mkmountpoint (char *path) } int -do_rmmountpoint (char *path) +do_rmmountpoint (const char *path) { int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - CHROOT_IN; r = rmdir (path); CHROOT_OUT; diff --git a/daemon/ntfs.c b/daemon/ntfs.c index 1d73f2e..85deb65 100644 --- a/daemon/ntfs.c +++ b/daemon/ntfs.c @@ -27,7 +27,7 @@ #include "actions.h" int -do_ntfs_3g_probe (int rw, char *device) +do_ntfs_3g_probe (int rw, const char *device) { char *err; int r; diff --git a/daemon/readdir.c b/daemon/readdir.c index 45256b2..ab42dfd 100644 --- a/daemon/readdir.c +++ b/daemon/readdir.c @@ -28,7 +28,7 @@ #include "actions.h" guestfs_int_dirent_list * -do_readdir (char *path) +do_readdir (const char *path) { guestfs_int_dirent_list *ret; guestfs_int_dirent v; @@ -36,9 +36,6 @@ do_readdir (char *path) struct dirent *d; int i; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - ret = malloc (sizeof *ret); if (ret == NULL) { reply_with_perror ("malloc"); diff --git a/daemon/realpath.c b/daemon/realpath.c index c081a45..706af42 100644 --- a/daemon/realpath.c +++ b/daemon/realpath.c @@ -28,13 +28,10 @@ #include "actions.h" char * -do_realpath (char *path) +do_realpath (const char *path) { char *ret; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - CHROOT_IN; ret = realpath (path, NULL); CHROOT_OUT; diff --git a/daemon/scrub.c b/daemon/scrub.c index 5530c69..15c8b6c 100644 --- a/daemon/scrub.c +++ b/daemon/scrub.c @@ -28,7 +28,7 @@ #include "actions.h" int -do_scrub_device (char *device) +do_scrub_device (const char *device) { char *err; int r; @@ -46,15 +46,12 @@ do_scrub_device (char *device) } int -do_scrub_file (char *file) +do_scrub_file (const char *file) { char *buf; char *err; int r; - NEED_ROOT (return -1); - ABS_PATH (file, return -1); - /* Make the path relative to /sysroot. */ buf = sysroot_path (file); if (!buf) { @@ -76,15 +73,12 @@ do_scrub_file (char *file) } int -do_scrub_freespace (char *dir) +do_scrub_freespace (const char *dir) { char *buf; char *err; int r; - NEED_ROOT (return -1); - ABS_PATH (dir, return -1); - /* Make the path relative to /sysroot. */ buf = sysroot_path (dir); if (!buf) { diff --git a/daemon/sfdisk.c b/daemon/sfdisk.c index fe58d96..141ea5e 100644 --- a/daemon/sfdisk.c +++ b/daemon/sfdisk.c @@ -30,7 +30,7 @@ #include "actions.h" static int -sfdisk (char *device, int n, int cyls, int heads, int sectors, +sfdisk (const char *device, int n, int cyls, int heads, int sectors, const char *extra_flag, char * const* const lines) { @@ -82,15 +82,15 @@ sfdisk (char *device, int n, int cyls, int heads, int sectors, } int -do_sfdisk (char *device, int cyls, int heads, int sectors, +do_sfdisk (const char *device, int cyls, int heads, int sectors, char **lines) { return sfdisk (device, 0, cyls, heads, sectors, NULL, lines); } int -do_sfdisk_N (char *device, int n, int cyls, int heads, int sectors, - char *line) +do_sfdisk_N (const char *device, int n, int cyls, int heads, int sectors, + const char *line) { const char *lines[2] = { line, NULL }; @@ -98,13 +98,13 @@ do_sfdisk_N (char *device, int n, int cyls, int heads, int sectors, } int -do_sfdiskM (char *device, char **lines) +do_sfdiskM (const char *device, char **lines) { return sfdisk (device, 0, 0, 0, 0, "-uM", lines); } static char * -sfdisk_flag (char *device, const char *flag) +sfdisk_flag (const char *device, const char *flag) { char *out, *err; int r; @@ -125,19 +125,19 @@ sfdisk_flag (char *device, const char *flag) } char * -do_sfdisk_l (char *device) +do_sfdisk_l (const char *device) { return sfdisk_flag (device, "-l"); } char * -do_sfdisk_kernel_geometry (char *device) +do_sfdisk_kernel_geometry (const char *device) { return sfdisk_flag (device, "-g"); } char * -do_sfdisk_disk_geometry (char *device) +do_sfdisk_disk_geometry (const char *device) { return sfdisk_flag (device, "-G"); } diff --git a/daemon/stat.c b/daemon/stat.c index 4845851..4ff2711 100644 --- a/daemon/stat.c +++ b/daemon/stat.c @@ -31,15 +31,12 @@ #include "actions.h" guestfs_int_stat * -do_stat (char *path) +do_stat (const char *path) { int r; guestfs_int_stat *ret; struct stat statbuf; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - CHROOT_IN; r = stat (path, &statbuf); CHROOT_OUT; @@ -73,15 +70,12 @@ do_stat (char *path) } guestfs_int_stat * -do_lstat (char *path) +do_lstat (const char *path) { int r; guestfs_int_stat *ret; struct stat statbuf; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - CHROOT_IN; r = lstat (path, &statbuf); CHROOT_OUT; @@ -115,15 +109,12 @@ do_lstat (char *path) } guestfs_int_statvfs * -do_statvfs (char *path) +do_statvfs (const char *path) { int r; guestfs_int_statvfs *ret; struct statvfs statbuf; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - CHROOT_IN; r = statvfs (path, &statbuf); CHROOT_OUT; diff --git a/daemon/strings.c b/daemon/strings.c index e5aefca..d7dc392 100644 --- a/daemon/strings.c +++ b/daemon/strings.c @@ -26,16 +26,13 @@ #include "actions.h" char ** -do_strings_e (char *encoding, char *path) +do_strings_e (const char *encoding, const char *path) { char *buf; int r; char *out, *err; char **lines; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - buf = sysroot_path (path); if (!buf) { reply_with_perror ("malloc"); @@ -64,7 +61,7 @@ do_strings_e (char *encoding, char *path) } char ** -do_strings (char *path) +do_strings (const char *path) { return do_strings_e ("s", path); } diff --git a/daemon/swap.c b/daemon/swap.c index 580482f..bcc5f1b 100644 --- a/daemon/swap.c +++ b/daemon/swap.c @@ -28,7 +28,7 @@ #include "actions.h" static int -mkswap (char *device, const char *flag, const char *value) +mkswap (const char *device, const char *flag, const char *value) { char *err; int r; @@ -50,32 +50,29 @@ mkswap (char *device, const char *flag, const char *value) } int -do_mkswap (char *device) +do_mkswap (const char *device) { return mkswap (device, NULL, NULL); } int -do_mkswap_L (char *label, char *device) +do_mkswap_L (const char *label, const char *device) { return mkswap (device, "-L", label); } int -do_mkswap_U (char *uuid, char *device) +do_mkswap_U (const char *uuid, const char *device) { return mkswap (device, "-U", uuid); } int -do_mkswap_file (char *path) +do_mkswap_file (const char *path) { char *buf; int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - buf = sysroot_path (path); if (!buf) { reply_with_perror ("malloc"); @@ -110,26 +107,23 @@ swaponoff (const char *cmd, const char *flag, const char *value) } int -do_swapon_device (char *device) +do_swapon_device (const char *device) { return swaponoff ("/sbin/swapon", NULL, device); } int -do_swapoff_device (char *device) +do_swapoff_device (const char *device) { return swaponoff ("/sbin/swapoff", NULL, device); } int -do_swapon_file (char *path) +do_swapon_file (const char *path) { char *buf; int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - buf = sysroot_path (path); if (!buf) { reply_with_perror ("malloc"); @@ -142,14 +136,11 @@ do_swapon_file (char *path) } int -do_swapoff_file (char *path) +do_swapoff_file (const char *path) { char *buf; int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - buf = sysroot_path (path); if (!buf) { reply_with_perror ("malloc"); @@ -162,25 +153,25 @@ do_swapoff_file (char *path) } int -do_swapon_label (char *label) +do_swapon_label (const char *label) { return swaponoff ("/sbin/swapon", "-L", label); } int -do_swapoff_label (char *label) +do_swapoff_label (const char *label) { return swaponoff ("/sbin/swapoff", "-L", label); } int -do_swapon_uuid (char *uuid) +do_swapon_uuid (const char *uuid) { return swaponoff ("/sbin/swapon", "-U", uuid); } int -do_swapoff_uuid (char *uuid) +do_swapoff_uuid (const char *uuid) { return swaponoff ("/sbin/swapoff", "-U", uuid); } diff --git a/daemon/tar.c b/daemon/tar.c index 9d21e79..03dc512 100644 --- a/daemon/tar.c +++ b/daemon/tar.c @@ -36,7 +36,7 @@ fwrite_cb (void *fp_ptr, const void *buf, int len) /* Has one FileIn parameter. */ int -do_tar_in (char *dir) +do_tar_in (const char *dir) { int err, r; FILE *fp; @@ -99,16 +99,13 @@ do_tar_in (char *dir) /* Has one FileOut parameter. */ int -do_tar_out (char *dir) +do_tar_out (const char *dir) { int r; FILE *fp; char *cmd; char buf[GUESTFS_MAX_CHUNK_SIZE]; - NEED_ROOT (return -1); - ABS_PATH (dir, return -1); - /* "tar -C /sysroot%s -cf - ." but we have to quote the dir. */ if (asprintf_nowarn (&cmd, "tar -C %R -cf - .", dir) == -1) { reply_with_perror ("asprintf"); @@ -158,7 +155,7 @@ do_tar_out (char *dir) /* Has one FileIn parameter. */ int -do_tgz_in (char *dir) +do_tgz_in (const char *dir) { int err, r; FILE *fp; @@ -221,16 +218,13 @@ do_tgz_in (char *dir) /* Has one FileOut parameter. */ int -do_tgz_out (char *dir) +do_tgz_out (const char *dir) { int r; FILE *fp; char *cmd; char buf[GUESTFS_MAX_CHUNK_SIZE]; - NEED_ROOT (return -1); - ABS_PATH (dir, return -1); - /* "tar -C /sysroot%s -zcf - ." but we have to quote the dir. */ if (asprintf_nowarn (&cmd, "tar -C %R -zcf - .", dir) == -1) { reply_with_perror ("asprintf"); diff --git a/daemon/upload.c b/daemon/upload.c index 5c1adaf..aede24a 100644 --- a/daemon/upload.c +++ b/daemon/upload.c @@ -36,7 +36,7 @@ write_cb (void *fd_ptr, const void *buf, int len) /* Has one FileIn parameter. */ int -do_upload (char *filename) +do_upload (const char *filename) { int err, fd, r, is_dev; @@ -88,7 +88,7 @@ do_upload (char *filename) /* Has one FileOut parameter. */ int -do_download (char *filename) +do_download (const char *filename) { int fd, r, is_dev; char buf[GUESTFS_MAX_CHUNK_SIZE]; diff --git a/daemon/wc.c b/daemon/wc.c index 9720443..93d4ebb 100644 --- a/daemon/wc.c +++ b/daemon/wc.c @@ -28,15 +28,12 @@ #include "actions.h" static int -wc (char *flag, char *path) +wc (char *flag, const char *path) { char *buf; char *out, *err; int r; - NEED_ROOT (return -1); - ABS_PATH (path, return -1); - /* Make the path relative to /sysroot. */ buf = sysroot_path (path); if (!buf) { @@ -73,19 +70,19 @@ wc (char *flag, char *path) } int -do_wc_l (char *path) +do_wc_l (const char *path) { return wc ("-l", path); } int -do_wc_w (char *path) +do_wc_w (const char *path) { return wc ("-w", path); } int -do_wc_c (char *path) +do_wc_c (const char *path) { return wc ("-c", path); } diff --git a/daemon/xattr.c b/daemon/xattr.c index d521321..17d9382 100644 --- a/daemon/xattr.c +++ b/daemon/xattr.c @@ -35,12 +35,12 @@ #endif #endif -static guestfs_int_xattr_list *getxattrs (char *path, ssize_t (*listxattr) (const char *path, char *list, size_t size), ssize_t (*getxattr) (const char *path, const char *name, void *value, size_t size)); -static int _setxattr (char *xattr, char *val, int vallen, char *path, int (*setxattr) (const char *path, const char *name, const void *value, size_t size, int flags)); -static int _removexattr (char *xattr, char *path, int (*removexattr) (const char *path, const char *name)); +static guestfs_int_xattr_list *getxattrs (const char *path, ssize_t (*listxattr) (const char *path, char *list, size_t size), ssize_t (*getxattr) (const char *path, const char *name, void *value, size_t size)); +static int _setxattr (const char *xattr, const char *val, int vallen, const char *path, int (*setxattr) (const char *path, const char *name, const void *value, size_t size, int flags)); +static int _removexattr (const char *xattr, const char *path, int (*removexattr) (const char *path, const char *name)); guestfs_int_xattr_list * -do_getxattrs (char *path) +do_getxattrs (const char *path) { #if defined(HAVE_LISTXATTR) && defined(HAVE_GETXATTR) return getxattrs (path, listxattr, getxattr); @@ -51,7 +51,7 @@ do_getxattrs (char *path) } guestfs_int_xattr_list * -do_lgetxattrs (char *path) +do_lgetxattrs (const char *path) { #if defined(HAVE_LLISTXATTR) && defined(HAVE_LGETXATTR) return getxattrs (path, llistxattr, lgetxattr); @@ -62,7 +62,7 @@ do_lgetxattrs (char *path) } int -do_setxattr (char *xattr, char *val, int vallen, char *path) +do_setxattr (const char *xattr, const char *val, int vallen, const char *path) { #if defined(HAVE_SETXATTR) return _setxattr (xattr, val, vallen, path, setxattr); @@ -73,7 +73,7 @@ do_setxattr (char *xattr, char *val, int vallen, char *path) } int -do_lsetxattr (char *xattr, char *val, int vallen, char *path) +do_lsetxattr (const char *xattr, const char *val, int vallen, const char *path) { #if defined(HAVE_LSETXATTR) return _setxattr (xattr, val, vallen, path, lsetxattr); @@ -84,7 +84,7 @@ do_lsetxattr (char *xattr, char *val, int vallen, char *path) } int -do_removexattr (char *xattr, char *path) +do_removexattr (const char *xattr, const char *path) { #if defined(HAVE_REMOVEXATTR) return _removexattr (xattr, path, removexattr); @@ -95,7 +95,7 @@ do_removexattr (char *xattr, char *path) } int -do_lremovexattr (char *xattr, char *path) +do_lremovexattr (const char *xattr, const char *path) { #if defined(HAVE_LREMOVEXATTR) return _removexattr (xattr, path, lremovexattr); @@ -106,7 +106,7 @@ do_lremovexattr (char *xattr, char *path) } static guestfs_int_xattr_list * -getxattrs (char *path, +getxattrs (const char *path, ssize_t (*listxattr) (const char *path, char *list, size_t size), ssize_t (*getxattr) (const char *path, const char *name, void *value, size_t size)) @@ -116,9 +116,6 @@ getxattrs (char *path, int i, j; guestfs_int_xattr_list *r = NULL; - NEED_ROOT (return NULL); - ABS_PATH (path, return NULL); - CHROOT_IN; len = listxattr (path, NULL, 0); CHROOT_OUT; @@ -210,7 +207,7 @@ getxattrs (char *path, } static int -_setxattr (char *xattr, char *val, int vallen, char *path, +_setxattr (const char *xattr, const char *val, int vallen, const char *path, int (*setxattr) (const char *path, const char *name, const void *value, size_t size, int flags)) { @@ -228,7 +225,7 @@ _setxattr (char *xattr, char *val, int vallen, char *path, } static int -_removexattr (char *xattr, char *path, +_removexattr (const char *xattr, const char *path, int (*removexattr) (const char *path, const char *name)) { int r; @@ -247,42 +244,42 @@ _removexattr (char *xattr, char *path, #else /* no xattr.h */ guestfs_int_xattr_list * -do_getxattrs (char *path) +do_getxattrs (const char *path) { reply_with_error ("getxattrs: no support for xattrs"); return NULL; } guestfs_int_xattr_list * -do_lgetxattrs (char *path) +do_lgetxattrs (const char *path) { reply_with_error ("lgetxattrs: no support for xattrs"); return NULL; } int -do_setxattr (char *xattr, char *val, int vallen, char *path) +do_setxattr (const char *xattr, const char *val, int vallen, const char *path) { reply_with_error ("setxattr: no support for xattrs"); return -1; } int -do_lsetxattr (char *xattr, char *val, int vallen, char *path) +do_lsetxattr (const char *xattr, const char *val, int vallen, const char *path) { reply_with_error ("lsetxattr: no support for xattrs"); return -1; } int -do_removexattr (char *xattr, char *path) +do_removexattr (const char *xattr, const char *path) { reply_with_error ("removexattr: no support for xattrs"); return -1; } int -do_lremovexattr (char *xattr, char *path) +do_lremovexattr (const char *xattr, const char *path) { reply_with_error ("lremovexattr: no support for xattrs"); return -1; diff --git a/daemon/zero.c b/daemon/zero.c index 864e9a6..ce45ae2 100644 --- a/daemon/zero.c +++ b/daemon/zero.c @@ -28,7 +28,7 @@ #include "actions.h" int -do_zero (char *device) +do_zero (const char *device) { int fd, i; char buf[4096]; diff --git a/daemon/zerofree.c b/daemon/zerofree.c index 457f8db..ffb9b70 100644 --- a/daemon/zerofree.c +++ b/daemon/zerofree.c @@ -28,7 +28,7 @@ #include "actions.h" int -do_zerofree (char *device) +do_zerofree (const char *device) { char *err; int r; diff --git a/src/generator.ml b/src/generator.ml index 325d3cb..f9032fb 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -981,7 +981,7 @@ Note that this function cannot correctly handle binary files as end of line). For those you need to use the C<guestfs_read_file> function which has a more complex interface."); - ("aug_init", (RErr, [String "root"; Int "flags"]), 16, [], + ("aug_init", (RErr, [Pathname "root"; Int "flags"]), 16, [], [], (* XXX Augeas code needs tests. *) "create a new Augeas handle", "\ @@ -2130,7 +2130,7 @@ any partition tables, filesystem superblocks and so on. See also: C<guestfs_scrub_device>."); - ("grub_install", (RErr, [String "root"; Device "device"]), 86, [], + ("grub_install", (RErr, [Pathname "root"; Device "device"]), 86, [], (* Test disabled because grub-install incompatible with virtio-blk driver. * See also: https://bugzilla.redhat.com/show_bug.cgi?id=479760 *) @@ -2226,7 +2226,7 @@ the qemu subprocess. Calling this function checks that the daemon responds to the ping message, without affecting the daemon or attached block device(s) in any other way."); - ("equal", (RBool "equality", [String "file1"; String "file2"]), 93, [], + ("equal", (RBool "equality", [Pathname "file1"; Pathname "file2"]), 93, [], [InitBasicFS, Always, TestOutputTrue ( [["write_file"; "/file1"; "contents of a file"; "0"]; ["cp"; "/file1"; "/file2"]; @@ -2417,7 +2417,7 @@ C<resize2fs> sometimes gives an error about this and sometimes not. In any case, it is always safe to call C<guestfs_e2fsck_f> before calling this function."); - ("find", (RStringList "names", [String "directory"]), 107, [], + ("find", (RStringList "names", [Pathname "directory"]), 107, [], [InitBasicFS, Always, TestOutputList ( [["find"; "/"]], ["lost+found"]); InitBasicFS, Always, TestOutputList ( @@ -2523,7 +2523,11 @@ into a list of lines. See also: C<guestfs_command_lines>"); - ("glob_expand", (RStringList "paths", [String "pattern"]), 113, [], + ("glob_expand", (RStringList "paths", [Pathname "pattern"]), 113, [], + (* Use Pathname here, and hence ABS_PATH (pattern,... in generated + * code in stubs.c, since all valid glob patterns must start with "/". + * There is no concept of "cwd" in libguestfs, hence no "."-relative names. + *) [InitBasicFS, Always, TestOutputList ( [["mkdir_p"; "/a/b/c"]; ["touch"; "/a/b/c/d"]; @@ -2590,7 +2594,8 @@ containing C<dir>. It is an interface to the L<scrub(1)> program. See that manual page for more details."); - ("mkdtemp", (RString "dir", [Pathname "template"]), 117, [], +(* FIXME: make this a WritableString? *) + ("mkdtemp", (RString "dir", [String "template"]), 117, [], [InitBasicFS, Always, TestRun ( [["mkdir"; "/tmp"]; ["mkdtemp"; "/tmp/tmpXXXXXX"]])], @@ -2999,7 +3004,12 @@ This call is similar to C<guestfs_mounts>. That call returns a list of devices. This one returns a hash table (map) of device name to directory where the device is mounted."); - ("mkmountpoint", (RErr, [Pathname "path"]), 148, [], + ("mkmountpoint", (RErr, [String "exemptpath"]), 148, [], + (* This is a special case: while you would expect a parameter + * of type "Pathname", that doesn't work, because it implies + * NEED_ROOT in the generated calling code in stubs.c, and + * this function cannot use NEED_ROOT. + *) [], "create a mountpoint", "\ @@ -3154,7 +3164,7 @@ matching lines."); Return the canonicalized absolute pathname of C<path>. The returned path has no C<.>, C<..> or symbolic link path elements."); - ("ln", (RErr, [String "target"; String "linkname"]), 164, [], + ("ln", (RErr, [String "target"; Pathname "linkname"]), 164, [], [InitBasicFS, Always, TestOutputStruct ( [["touch"; "/a"]; ["ln"; "/a"; "/b"]; @@ -3163,7 +3173,7 @@ returned path has no C<.>, C<..> or symbolic link path elements."); "\ This command creates a hard link using the C<ln> command."); - ("ln_f", (RErr, [String "target"; String "linkname"]), 165, [], + ("ln_f", (RErr, [String "target"; Pathname "linkname"]), 165, [], [InitBasicFS, Always, TestOutputStruct ( [["touch"; "/a"]; ["touch"; "/b"]; @@ -3174,7 +3184,7 @@ This command creates a hard link using the C<ln> command."); This command creates a hard link using the C<ln -f> command. The C<-f> option removes the link (C<linkname>) if it exists already."); - ("ln_s", (RErr, [String "target"; String "linkname"]), 166, [], + ("ln_s", (RErr, [String "target"; Pathname "linkname"]), 166, [], [InitBasicFS, Always, TestOutputStruct ( [["touch"; "/a"]; ["ln_s"; "a"; "/b"]; @@ -3183,7 +3193,7 @@ The C<-f> option removes the link (C<linkname>) if it exists already."); "\ This command creates a symbolic link using the C<ln -s> command."); - ("ln_sf", (RErr, [String "target"; String "linkname"]), 167, [], + ("ln_sf", (RErr, [String "target"; Pathname "linkname"]), 167, [], [InitBasicFS, Always, TestOutput ( [["mkdir_p"; "/a/b"]; ["touch"; "/a/b/c"]; @@ -4681,8 +4691,8 @@ and generate_daemon_actions () pr " struct guestfs_%s_args args;\n" name; List.iter ( function - (* FIXME: eventually, make String "const", too *) - | Pathname n | Device n -> pr " const char *%s;\n" n + | Device n -> pr " const char *%s;\n" n + | Pathname n | String n | OptString n -> pr " char *%s;\n" n | StringList n -> pr " char **%s;\n" n @@ -4705,7 +4715,7 @@ and generate_daemon_actions () List.iter ( function | Pathname n -> - pr " NEED_ROOT (goto done);\n"; + pr " %s = args.%s;\n" n n; pr " ABS_PATH (%s, goto done);\n" n; | Device n -> pr " %s = args.%s;\n" n n; @@ -4728,6 +4738,13 @@ and generate_daemon_actions () pr "\n" ); + (* this is used at least for do_equal *) + if List.exists (function Pathname _ -> true | _ -> false) (snd style) then ( + (* Emit NEED_ROOT just once, even when there are two or + more Pathname args *) + pr " NEED_ROOT (goto done);\n"; + ); + (* Don't want to call the impl with any FileIn or FileOut * parameters, since these go "outside" the RPC protocol. *) -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 17/23] generator.ml: move String/Device decls "down" to definition
From: Jim Meyering <meyering at redhat.com> --- src/generator.ml | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/generator.ml b/src/generator.ml index f9032fb..8aa36bd 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -4691,9 +4691,9 @@ and generate_daemon_actions () pr " struct guestfs_%s_args args;\n" name; List.iter ( function - | Device n -> pr " const char *%s;\n" n + | Device n | Pathname n - | String n + | String n -> () | OptString n -> pr " char *%s;\n" n | StringList n -> pr " char **%s;\n" n | Bool n -> pr " int %s;\n" n @@ -4715,12 +4715,12 @@ and generate_daemon_actions () List.iter ( function | Pathname n -> - pr " %s = args.%s;\n" n n; + pr " char *%s = args.%s;\n" n n; pr " ABS_PATH (%s, goto done);\n" n; | Device n -> - pr " %s = args.%s;\n" n n; + pr " char *%s = args.%s;\n" n n; pr " RESOLVE_DEVICE (%s, goto done);" n; - | String n -> pr " %s = args.%s;\n" n n + | String n -> pr " char *%s = args.%s;\n" n n | OptString n -> pr " %s = args.%s ? *args.%s : NULL;\n" n n n | StringList n -> pr " %s = realloc (args.%s.%s_val,\n" n n n; -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 18/23] generator.ml: constify do_mkdtemp
From: Jim Meyering <meyering at redhat.com> * daemon/dir.c (do_mkdtemp): Rewrite for a "const" parameter. * src/generator.ml (mkdtemp): Declare parameter to be of type Pathname. --- daemon/dir.c | 25 ++++++++----------------- src/generator.ml | 6 ++---- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/daemon/dir.c b/daemon/dir.c index ad1c7c9..1ca6286 100644 --- a/daemon/dir.c +++ b/daemon/dir.c @@ -185,31 +185,22 @@ do_is_dir (const char *path) } char * -do_mkdtemp (char *template) +do_mkdtemp (const char *template) { - char *r; - - NEED_ROOT (return NULL); - ABS_PATH (template, return NULL); + char *writable = strdup (template); + if (writable == NULL) { + reply_with_perror ("strdup"); + return NULL; + } CHROOT_IN; - r = mkdtemp (template); + char *r = mkdtemp (writable); CHROOT_OUT; if (r == NULL) { reply_with_perror ("mkdtemp: %s", template); - return NULL; + free (writable); } - /* The caller will free template AND try to free the return value, - * so we must make a copy here. - */ - if (r == template) { - r = strdup (template); - if (r == NULL) { - reply_with_perror ("strdup"); - return NULL; - } - } return r; } diff --git a/src/generator.ml b/src/generator.ml index 8aa36bd..ddeeb25 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -2594,8 +2594,7 @@ containing C<dir>. It is an interface to the L<scrub(1)> program. See that manual page for more details."); -(* FIXME: make this a WritableString? *) - ("mkdtemp", (RString "dir", [String "template"]), 117, [], + ("mkdtemp", (RString "dir", [Pathname "template"]), 117, [], [InitBasicFS, Always, TestRun ( [["mkdir"; "/tmp"]; ["mkdtemp"; "/tmp/tmpXXXXXX"]])], @@ -4717,7 +4716,7 @@ and generate_daemon_actions () | Pathname n -> pr " char *%s = args.%s;\n" n n; pr " ABS_PATH (%s, goto done);\n" n; - | Device n -> + | Device n -> pr " char *%s = args.%s;\n" n n; pr " RESOLVE_DEVICE (%s, goto done);" n; | String n -> pr " char *%s = args.%s;\n" n n @@ -6798,7 +6797,6 @@ DESTROY (g) iteri ( fun i -> function - (* FIXME: ? *) | Pathname n | Device n | String n | FileIn n | FileOut n -> pr " char *%s;\n" n | OptString n -> -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 19/23] generator.ml: add type: Dev_or_Path
From: Jim Meyering <meyering at redhat.com> * src/generator.ml (file, download): Use it. --- src/generator.ml | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/generator.ml b/src/generator.ml index ddeeb25..072b9f4 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -136,6 +136,7 @@ and argt | String of string (* const char *name, cannot be NULL *) | Device of string (* /dev device name, cannot be NULL *) | Pathname of string (* file name, cannot be NULL *) + | Dev_or_Path of string (* /dev device name or Pathname, cannot be NULL *) | OptString of string (* const char *name, may be NULL *) | StringList of string(* list of strings (each string cannot be NULL) *) | Bool of string (* boolean *) @@ -1450,7 +1451,7 @@ Some internal mounts are not unmounted by this call."); This command removes all LVM logical volumes, volume groups and physical volumes."); - ("file", (RString "description", [Pathname "path"]), 49, [], + ("file", (RString "description", [Dev_or_Path "path"]), 49, [], [InitSquashFS, Always, TestOutput ( [["file"; "/empty"]], "empty"); InitSquashFS, Always, TestOutput ( @@ -1774,7 +1775,7 @@ C<filename> can also be a named pipe. See also C<guestfs_download>."); - ("download", (RErr, [String "remotefilename"; FileOut "filename"]), 67, [], + ("download", (RErr, [Dev_or_Path "remotefilename"; FileOut "filename"]), 67, [], [InitBasicFS, Always, TestOutput ( (* Pick a file from cwd which isn't likely to change. *) [["upload"; "../COPYING.LIB"; "/COPYING.LIB"]; -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 20/23] mount.c (do_mount): make a local "const" to match parameter's type
From: Jim Meyering <meyering at redhat.com> --- daemon/mount.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/daemon/mount.c b/daemon/mount.c index 89bef34..9ccb37b 100644 --- a/daemon/mount.c +++ b/daemon/mount.c @@ -106,7 +106,7 @@ int do_umount (const char *pathordevice) { int freeit = 0, r; - char *buf; + const char *buf; char *err; if (strncmp (pathordevice, "/dev/", 5) == 0) { -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 21/23] generator.ml: finish adding Dev_or_Path support
From: Jim Meyering <meyering at redhat.com> * src/generator.ml: Update all rules to handle Dev_or_Path. (the above changes to generator.ml are mostly mechanical) Emit a use of REQUIRE_ROOT_OR_RESOLVE_DEVICE. * daemon/upload.c (do_download): Remove use of REQUIRE_ROOT_OR_RESOLVE_DEVICE, now that it's automatically done in calling code. * daemon/file.c (do_file): Likewise. --- daemon/file.c | 2 - daemon/upload.c | 2 - src/generator.ml | 66 ++++++++++++++++++++++++++++------------------------- 3 files changed, 35 insertions(+), 35 deletions(-) diff --git a/daemon/file.c b/daemon/file.c index ed3221d..212aff2 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -361,8 +361,6 @@ do_file (const char *path) char *buf; int len; - REQUIRE_ROOT_OR_RESOLVE_DEVICE (path, return NULL); - if (strncmp (path, "/dev/", 5) == 0) buf = (char *) path; else { diff --git a/daemon/upload.c b/daemon/upload.c index aede24a..143fa82 100644 --- a/daemon/upload.c +++ b/daemon/upload.c @@ -93,8 +93,6 @@ do_download (const char *filename) int fd, r, is_dev; char buf[GUESTFS_MAX_CHUNK_SIZE]; - REQUIRE_ROOT_OR_RESOLVE_DEVICE (filename, return -1); - is_dev = strncmp (filename, "/dev/", 5) == 0; if (!is_dev) CHROOT_IN; diff --git a/src/generator.ml b/src/generator.ml index 072b9f4..70ccbef 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -3738,7 +3738,7 @@ let mapi f xs loop 0 xs let name_of_argt = function - | Pathname n | Device n | String n | OptString n | StringList n | Bool n | Int n + | Pathname n | Device n | Dev_or_Path n | String n | OptString n | StringList n | Bool n | Int n | FileIn n | FileOut n -> n let java_name_of_struct typ @@ -4125,7 +4125,7 @@ and generate_xdr () pr "struct %s_args {\n" name; List.iter ( function - | Pathname n | Device n | String n -> pr " string %s<>;\n" n + | Pathname n | Device n | Dev_or_Path n | String n -> pr " string %s<>;\n" n | OptString n -> pr " str *%s;\n" n | StringList n -> pr " str %s<>;\n" n | Bool n -> pr " bool %s;\n" n @@ -4486,7 +4486,7 @@ check_state (guestfs_h *g, const char *caller) | args -> List.iter ( function - | Pathname n | Device n | String n -> + | Pathname n | Device n | Dev_or_Path n | String n -> pr " args.%s = (char *) %s;\n" n n | OptString n -> pr " args.%s = %s ? (char **) &%s : NULL;\n" n n n @@ -4691,7 +4691,7 @@ and generate_daemon_actions () pr " struct guestfs_%s_args args;\n" name; List.iter ( function - | Device n + | Device n | Dev_or_Path n | Pathname n | String n -> () | OptString n -> pr " char *%s;\n" n @@ -4720,6 +4720,9 @@ and generate_daemon_actions () | Device n -> pr " char *%s = args.%s;\n" n n; pr " RESOLVE_DEVICE (%s, goto done);" n; + | Dev_or_Path n -> + pr " char *%s = args.%s;\n" n n; + pr " REQUIRE_ROOT_OR_RESOLVE_DEVICE (%s, goto done);" n; | String n -> pr " char *%s = args.%s;\n" n n | OptString n -> pr " %s = args.%s ? *args.%s : NULL;\n" n n n | StringList n -> @@ -5633,6 +5636,7 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd | OptString n, "NULL" -> () | Pathname n, arg | Device n, arg + | Dev_or_Path n, arg | String n, arg | OptString n, arg -> pr " const char *%s = \"%s\";\n" n (c_quote arg); @@ -5681,7 +5685,7 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd function | OptString _, "NULL" -> pr ", NULL" | Pathname n, _ - | Device n, _ + | Device n, _ | Dev_or_Path n, _ | String n, _ | OptString n, _ -> pr ", %s" n @@ -5931,7 +5935,7 @@ and generate_fish_cmds () List.iter ( function | Pathname n - | Device n + | Device n | Dev_or_Path n | String n | OptString n | FileIn n @@ -5953,7 +5957,7 @@ and generate_fish_cmds () fun i -> function | Pathname name - | Device name | String name -> pr " %s = argv[%d];\n" name i + | Device name | Dev_or_Path name | String name -> pr " %s = argv[%d];\n" name i | OptString name -> pr " %s = strcmp (argv[%d], \"\") != 0 ? argv[%d] : NULL;\n" name i i @@ -6186,7 +6190,7 @@ and generate_fish_actions_pod () pr " %s" name; List.iter ( function - | Pathname n | Device n | String n -> pr " %s" n + | Pathname n | Device n | Dev_or_Path n | String n -> pr " %s" n | OptString n -> pr " %s" n | StringList n -> pr " '%s ...'" n | Bool _ -> pr " true|false" @@ -6253,7 +6257,7 @@ and generate_prototype ?(extern = true) ?(static = false) ?(semicolon = true) List.iter ( function | Pathname n - | Device n + | Device n | Dev_or_Path n | String n | OptString n -> next (); @@ -6516,7 +6520,7 @@ copy_table (char * const * argv) List.iter ( function | Pathname n - | Device n + | Device n | Dev_or_Path n | String n | FileIn n | FileOut n -> @@ -6569,7 +6573,7 @@ copy_table (char * const * argv) function | StringList n -> pr " ocaml_guestfs_free_strings (%s);\n" n; - | Pathname _ | Device _ | String _ | OptString _ | Bool _ | Int _ + | Pathname _ | Device _ | Dev_or_Path _ | String _ | OptString _ | Bool _ | Int _ | FileIn _ | FileOut _ -> () ) (snd style); @@ -6653,7 +6657,7 @@ and generate_ocaml_prototype ?(is_external = false) name style pr "%s : t -> " name; List.iter ( function - | Pathname _ | Device _ | String _ | FileIn _ | FileOut _ -> pr "string -> " + | Pathname _ | Device _ | Dev_or_Path _ | String _ | FileIn _ | FileOut _ -> pr "string -> " | OptString _ -> pr "string option -> " | StringList _ -> pr "string array -> " | Bool _ -> pr "bool -> " @@ -6798,7 +6802,7 @@ DESTROY (g) iteri ( fun i -> function - | Pathname n | Device n | String n | FileIn n | FileOut n -> + | Pathname n | Device n | Dev_or_Path n | String n | FileIn n | FileOut n -> pr " char *%s;\n" n | OptString n -> (* http://www.perlmonks.org/?node_id=554277 @@ -6814,7 +6818,7 @@ DESTROY (g) let do_cleanups () List.iter ( function - | Pathname _ | Device _ | String _ | OptString _ | Bool _ | Int _ + | Pathname _ | Device _ | Dev_or_Path _ | String _ | OptString _ | Bool _ | Int _ | FileIn _ | FileOut _ -> () | StringList n -> pr " free (%s);\n" n ) (snd style) @@ -7186,7 +7190,7 @@ and generate_perl_prototype name style if !comma then pr ", "; comma := true; match arg with - | Pathname n | Device n | String n + | Pathname n | Device n | Dev_or_Path n | String n | OptString n | Bool n | Int n | FileIn n | FileOut n -> pr "$%s" n | StringList n -> @@ -7434,7 +7438,7 @@ py_guestfs_close (PyObject *self, PyObject *args) List.iter ( function - | Pathname n | Device n | String n | FileIn n | FileOut n -> + | Pathname n | Device n | Dev_or_Path n | String n | FileIn n | FileOut n -> pr " const char *%s;\n" n | OptString n -> pr " const char *%s;\n" n | StringList n -> @@ -7450,7 +7454,7 @@ py_guestfs_close (PyObject *self, PyObject *args) pr " if (!PyArg_ParseTuple (args, (char *) \"O"; List.iter ( function - | Pathname _ | Device _ | String _ | FileIn _ | FileOut _ -> pr "s" + | Pathname _ | Device _ | Dev_or_Path _ | String _ | FileIn _ | FileOut _ -> pr "s" | OptString _ -> pr "z" | StringList _ -> pr "O" | Bool _ -> pr "i" (* XXX Python has booleans? *) @@ -7460,7 +7464,7 @@ py_guestfs_close (PyObject *self, PyObject *args) pr " &py_g"; List.iter ( function - | Pathname n | Device n | String n | FileIn n | FileOut n -> pr ", &%s" n + | Pathname n | Device n | Dev_or_Path n | String n | FileIn n | FileOut n -> pr ", &%s" n | OptString n -> pr ", &%s" n | StringList n -> pr ", &py_%s" n | Bool n -> pr ", &%s" n @@ -7473,7 +7477,7 @@ py_guestfs_close (PyObject *self, PyObject *args) pr " g = get_handle (py_g);\n"; List.iter ( function - | Pathname _ | Device _ | String _ + | Pathname _ | Device _ | Dev_or_Path _ | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () | StringList n -> pr " %s = get_string_list (py_%s);\n" n n; @@ -7488,7 +7492,7 @@ py_guestfs_close (PyObject *self, PyObject *args) List.iter ( function - | Pathname _ | Device _ | String _ + | Pathname _ | Device _ | Dev_or_Path _ | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () | StringList n -> pr " free (%s);\n" n @@ -7797,7 +7801,7 @@ static VALUE ruby_guestfs_close (VALUE gv) List.iter ( function - | Pathname n | Device n | String n | FileIn n | FileOut n -> + | Pathname n | Device n | Dev_or_Path n | String n | FileIn n | FileOut n -> pr " Check_Type (%sv, T_STRING);\n" n; pr " const char *%s = StringValueCStr (%sv);\n" n n; pr " if (!%s)\n" n; @@ -7849,7 +7853,7 @@ static VALUE ruby_guestfs_close (VALUE gv) List.iter ( function - | Pathname _ | Device _ | String _ + | Pathname _ | Device _ | Dev_or_Path _ | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () | StringList n -> pr " free (%s);\n" n @@ -8161,7 +8165,7 @@ and generate_java_prototype ?(public=false) ?(privat=false) ?(native=false) match arg with | Pathname n - | Device n + | Device n | Dev_or_Path n | String n | OptString n | FileIn n @@ -8280,7 +8284,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close List.iter ( function | Pathname n - | Device n + | Device n | Dev_or_Path n | String n | OptString n | FileIn n @@ -8333,7 +8337,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close List.iter ( function | Pathname n - | Device n + | Device n | Dev_or_Path n | String n | OptString n | FileIn n @@ -8363,7 +8367,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close List.iter ( function | Pathname n - | Device n + | Device n | Dev_or_Path n | String n | FileIn n | FileOut n -> @@ -8396,7 +8400,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1close List.iter ( function | Pathname n - | Device n + | Device n | Dev_or_Path n | String n | FileIn n | FileOut n -> @@ -8671,7 +8675,7 @@ last_error h = do function | FileIn n | FileOut n - | Pathname n | Device n | String n -> pr "withCString %s $ \\%s -> " n n + | Pathname n | Device n | Dev_or_Path n | String n -> pr "withCString %s $ \\%s -> " n n | OptString n -> pr "maybeWith withCString %s $ \\%s -> " n n | StringList n -> pr "withMany withCString %s $ \\%s -> withArray0 nullPtr %s $ \\%s -> " n n n n | Bool _ | Int _ -> () @@ -8683,7 +8687,7 @@ last_error h = do | Bool n -> sprintf "(fromBool %s)" n | Int n -> sprintf "(fromIntegral %s)" n | FileIn n | FileOut n - | Pathname n | Device n | String n | OptString n | StringList n -> n + | Pathname n | Device n | Dev_or_Path n | String n | OptString n | StringList n -> n ) (snd style) in pr "withForeignPtr h (\\p -> c_%s %s)\n" name (String.concat " " ("p" :: args)); @@ -8733,7 +8737,7 @@ and generate_haskell_prototype ~handle ?(hs = false) style List.iter ( fun arg -> (match arg with - | Pathname _ | Device _ | String _ -> pr "%s" string + | Pathname _ | Device _ | Dev_or_Path _ | String _ -> pr "%s" string | OptString _ -> if hs then pr "Maybe String" else pr "CString" | StringList _ -> if hs then pr "[String]" else pr "Ptr CString" | Bool _ -> pr "%s" bool @@ -8809,7 +8813,7 @@ print_strings (char * const* const argv) List.iter ( function | Pathname n - | Device n + | Device n | Dev_or_Path n | String n | FileIn n | FileOut n -> pr " printf (\"%%s\\n\", %s);\n" n -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 22/23] generator.ml: factor out "pr_args n" function
From: Jim Meyering <meyering at redhat.com> --- src/generator.ml | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/generator.ml b/src/generator.ml index 70ccbef..256283f 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -4712,18 +4712,21 @@ and generate_daemon_actions () pr " reply_with_error (\"%%s: daemon failed to decode procedure arguments\", \"%s\");\n" name; pr " return;\n"; pr " }\n"; + let pr_args n + pr " char *%s = args.%s;\n" n n + in List.iter ( function | Pathname n -> - pr " char *%s = args.%s;\n" n n; + pr_args n; pr " ABS_PATH (%s, goto done);\n" n; | Device n -> - pr " char *%s = args.%s;\n" n n; + pr_args n; pr " RESOLVE_DEVICE (%s, goto done);" n; | Dev_or_Path n -> - pr " char *%s = args.%s;\n" n n; + pr_args n; pr " REQUIRE_ROOT_OR_RESOLVE_DEVICE (%s, goto done);" n; - | String n -> pr " char *%s = args.%s;\n" n n + | String n -> pr_args n | OptString n -> pr " %s = args.%s ? *args.%s : NULL;\n" n n n | StringList n -> pr " %s = realloc (args.%s.%s_val,\n" n n n; -- 1.6.4.337.g5420e
Jim Meyering
2009-Aug-12 16:52 UTC
[Libguestfs] [PATCH libguestfs 23/23] do_umount: don't use RESOLVE_DEVICE anymore
From: Jim Meyering <meyering at redhat.com> * daemon/mount.c (do_umount): Don't use RESOLVE_DEVICE here, now that the caller always invokes REQUIRE_ROOT_OR_RESOLVE_DEVICE. --- daemon/mount.c | 22 +++++++++------------- 1 files changed, 9 insertions(+), 13 deletions(-) diff --git a/daemon/mount.c b/daemon/mount.c index 9ccb37b..4f74c02 100644 --- a/daemon/mount.c +++ b/daemon/mount.c @@ -105,24 +105,20 @@ do_mount_options (const char *options, const char *device, int do_umount (const char *pathordevice) { - int freeit = 0, r; - const char *buf; + int r; char *err; - if (strncmp (pathordevice, "/dev/", 5) == 0) { - buf = pathordevice; - RESOLVE_DEVICE (buf, return -1); - } else { - buf = sysroot_path (pathordevice); - if (buf == NULL) { - reply_with_perror ("malloc"); - return -1; - } - freeit = 1; + char *buf = (strncmp (pathordevice, "/dev/", 5) == 0 + ? strdup (pathordevice) + : sysroot_path (pathordevice)); + if (buf == NULL) { + reply_with_perror ("malloc"); + return -1; } r = command (NULL, &err, "umount", buf, NULL); - if (freeit) free (buf); + free (buf); + if (r == -1) { reply_with_error ("umount: %s: %s", pathordevice, err); free (err); -- 1.6.4.337.g5420e