Richard W.M. Jones
2017-Feb-22 15:29 UTC
[Libguestfs] [PATCH 0/3] v2v: vCenter: Remove proxy environment variables
Fix for: https://bugzilla.redhat.com/show_bug.cgi?id=1354507 Main explanation is in patch #3. Rich.
Richard W.M. Jones
2017-Feb-22 15:29 UTC
[Libguestfs] [PATCH 1/3] mllib: Combine small Unix library call bindings into Unix_utils module.
Concatenate six small modules containing Unix/POSIX library call
bindings into a single module called Unix_utils.
The previous modules and the library functions bound were:
- Dev_t: makedev(3), major(3), minor(3)
- Exit: _exit(2)
- Fnmatch: fnmatch(3)
- Fsync: sync(2)
- Mkdtemp: mkdtemp(3)
- StatVFS: statvfs(2)
---
builder/builder.ml | 1 +
builder/sigchecker.ml | 1 +
dib/dib.ml | 1 +
docs/C_SOURCE_FILES | 7 +-
mllib/Makefile.am | 21 +---
mllib/StatVFS.ml | 21 ----
mllib/StatVFS.mli | 23 ----
mllib/common_utils.ml | 4 +-
mllib/dev_t-c.c | 53 --------
mllib/dev_t.ml | 21 ----
mllib/dev_t.mli | 28 -----
mllib/exit-c.c | 33 -----
mllib/exit.ml | 19 ---
mllib/exit.mli | 20 ---
mllib/fnmatch-c.c | 66 ----------
mllib/fnmatch.ml | 29 -----
mllib/fnmatch.mli | 37 ------
mllib/fsync-c.c | 84 -------------
mllib/fsync.ml | 20 ---
mllib/fsync.mli | 25 ----
mllib/mkdtemp-c.c | 58 ---------
mllib/mkdtemp.ml | 24 ----
mllib/mkdtemp.mli | 29 -----
mllib/statvfs-c.c | 50 --------
mllib/unix_utils-c.c | 200 ++++++++++++++++++++++++++++++
mllib/unix_utils.ml | 58 +++++++++
mllib/unix_utils.mli | 90 ++++++++++++++
resize/resize.ml | 1 +
sparsify/copying.ml | 1 +
sysprep/sysprep_operation_backup_files.ml | 2 +-
sysprep/sysprep_operation_script.ml | 1 +
v2v/changeuid.ml | 1 +
v2v/input_ova.ml | 1 +
v2v/output_glance.ml | 1 +
v2v/output_null.ml | 1 +
v2v/output_rhv.ml | 1 +
v2v/v2v.ml | 7 +-
37 files changed, 370 insertions(+), 670 deletions(-)
delete mode 100644 mllib/StatVFS.ml
delete mode 100644 mllib/StatVFS.mli
delete mode 100644 mllib/dev_t-c.c
delete mode 100644 mllib/dev_t.ml
delete mode 100644 mllib/dev_t.mli
delete mode 100644 mllib/exit-c.c
delete mode 100644 mllib/exit.ml
delete mode 100644 mllib/exit.mli
delete mode 100644 mllib/fnmatch-c.c
delete mode 100644 mllib/fnmatch.ml
delete mode 100644 mllib/fnmatch.mli
delete mode 100644 mllib/fsync-c.c
delete mode 100644 mllib/fsync.ml
delete mode 100644 mllib/fsync.mli
delete mode 100644 mllib/mkdtemp-c.c
delete mode 100644 mllib/mkdtemp.ml
delete mode 100644 mllib/mkdtemp.mli
delete mode 100644 mllib/statvfs-c.c
create mode 100644 mllib/unix_utils-c.c
create mode 100644 mllib/unix_utils.ml
create mode 100644 mllib/unix_utils.mli
diff --git a/builder/builder.ml b/builder/builder.ml
index 14b42d7..e59c763 100644
--- a/builder/builder.ml
+++ b/builder/builder.ml
@@ -21,6 +21,7 @@ open Common_gettext.Gettext
module G = Guestfs
open Common_utils
+open Unix_utils
open Password
open Planner
open Utils
diff --git a/builder/sigchecker.ml b/builder/sigchecker.ml
index 4c0d78e..68f99e8 100644
--- a/builder/sigchecker.ml
+++ b/builder/sigchecker.ml
@@ -18,6 +18,7 @@
open Common_gettext.Gettext
open Common_utils
+open Unix_utils
open Utils
diff --git a/dib/dib.ml b/dib/dib.ml
index 5713bc6..d6fcb09 100644
--- a/dib/dib.ml
+++ b/dib/dib.ml
@@ -18,6 +18,7 @@
open Common_gettext.Gettext
open Common_utils
+open Unix_utils
open Cmdline
open Utils
diff --git a/docs/C_SOURCE_FILES b/docs/C_SOURCE_FILES
index 65ced48..33e1d77 100644
--- a/docs/C_SOURCE_FILES
+++ b/docs/C_SOURCE_FILES
@@ -325,15 +325,10 @@ lib/whole-file.c
lua/lua-guestfs.c
make-fs/make-fs.c
mllib/common_utils-c.c
-mllib/dev_t-c.c
mllib/dummy.c
-mllib/exit-c.c
-mllib/fnmatch-c.c
-mllib/fsync-c.c
mllib/getopt-c.c
-mllib/mkdtemp-c.c
mllib/progress-c.c
-mllib/statvfs-c.c
+mllib/unix_utils-c.c
mllib/uri-c.c
mllib/visit-c.c
mllib/xml-c.c
diff --git a/mllib/Makefile.am b/mllib/Makefile.am
index ff687b6..ee2f1a7 100644
--- a/mllib/Makefile.am
+++ b/mllib/Makefile.am
@@ -31,20 +31,15 @@ SOURCES_MLI = \
xml.mli \
xpath_helpers.mli \
checksums.mli \
+ unix_utils.mli \
common_utils.mli \
curl.mli \
- dev_t.mli \
- exit.mli \
- fnmatch.mli \
- fsync.mli \
getopt.mli \
JSON.mli \
- mkdtemp.mli \
planner.mli \
progress.mli \
regedit.mli \
registry.mli \
- StatVFS.mli \
stringMap.mli \
URI.mli \
visit.mli
@@ -56,21 +51,16 @@ SOURCES_ML = \
stringMap.ml \
common_gettext.ml \
getopt.ml \
- dev_t.ml \
+ unix_utils.ml \
common_utils.ml \
- fsync.ml \
progress.ml \
URI.ml \
- mkdtemp.ml \
visit.ml \
- fnmatch.ml \
planner.ml \
registry.ml \
regedit.ml \
- StatVFS.ml \
JSON.ml \
curl.ml \
- exit.ml \
checksums.ml \
xml.ml \
xpath_helpers.ml
@@ -82,14 +72,9 @@ SOURCES_C = \
../common/options/uri.c \
../common/progress/progress.c \
common_utils-c.c \
- dev_t-c.c \
- exit-c.c \
- fnmatch-c.c \
- fsync-c.c \
getopt-c.c \
- mkdtemp-c.c \
progress-c.c \
- statvfs-c.c \
+ unix_utils-c.c \
uri-c.c \
visit-c.c \
xml-c.c
diff --git a/mllib/StatVFS.ml b/mllib/StatVFS.ml
deleted file mode 100644
index 98e6d22..0000000
--- a/mllib/StatVFS.ml
+++ /dev/null
@@ -1,21 +0,0 @@
-(* virt tools interface to statvfs
- * Copyright (C) 2016 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *)
-
-(** Binding for [statvfs], but just for getting disk free space. *)
-
-external free_space : string -> int64 =
"guestfs_int_mllib_statvfs_free_space"
diff --git a/mllib/StatVFS.mli b/mllib/StatVFS.mli
deleted file mode 100644
index b1b8834..0000000
--- a/mllib/StatVFS.mli
+++ /dev/null
@@ -1,23 +0,0 @@
-(* virt tools interface to statvfs
- * Copyright (C) 2016 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *)
-
-(** Binding for [statvfs], but just for getting disk free space. *)
-
-val free_space : string -> int64
-(** [free_space path] returns the free space available on the
- filesystem that contains [path], in bytes. *)
diff --git a/mllib/common_utils.ml b/mllib/common_utils.ml
index 7c78121..9802a6b 100644
--- a/mllib/common_utils.ml
+++ b/mllib/common_utils.ml
@@ -1028,8 +1028,8 @@ let is_partition dev if not (is_block_device dev)
then false
else (
let rdev = (Unix.stat dev).Unix.st_rdev in
- let major = Dev_t.major rdev in
- let minor = Dev_t.minor rdev in
+ let major = Unix_utils.Dev_t.major rdev in
+ let minor = Unix_utils.Dev_t.minor rdev in
let path = sprintf "/sys/dev/block/%d:%d/partition" major minor
in
Unix.access path [Unix.F_OK];
true
diff --git a/mllib/dev_t-c.c b/mllib/dev_t-c.c
deleted file mode 100644
index be7260a..0000000
--- a/mllib/dev_t-c.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* libguestfs OCaml tools common code
- * Copyright (C) 2016 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/sysmacros.h>
-
-#include <caml/mlvalues.h>
-
-/* OCaml doesn't bind the dev_t calls makedev, major and minor. */
-
-extern value guestfs_int_mllib_dev_t_makedev (value majv, value minv);
-extern value guestfs_int_mllib_dev_t_major (value devv);
-extern value guestfs_int_mllib_dev_t_minor (value devv);
-
-/* NB: This is a "noalloc" call. */
-value
-guestfs_int_mllib_dev_t_makedev (value majv, value minv)
-{
- return Val_int (makedev (Int_val (majv), Int_val (minv)));
-}
-
-/* NB: This is a "noalloc" call. */
-value
-guestfs_int_mllib_dev_t_major (value devv)
-{
- return Val_int (major (Int_val (devv)));
-}
-
-/* NB: This is a "noalloc" call. */
-value
-guestfs_int_mllib_dev_t_minor (value devv)
-{
- return Val_int (minor (Int_val (devv)));
-}
diff --git a/mllib/dev_t.ml b/mllib/dev_t.ml
deleted file mode 100644
index 143954a..0000000
--- a/mllib/dev_t.ml
+++ /dev/null
@@ -1,21 +0,0 @@
-(* libguestfs OCaml tools common code
- * Copyright (C) 2016 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *)
-
-external makedev : int -> int -> int =
"guestfs_int_mllib_dev_t_makedev" "noalloc"
-external major : int -> int = "guestfs_int_mllib_dev_t_major"
"noalloc"
-external minor : int -> int = "guestfs_int_mllib_dev_t_minor"
"noalloc"
diff --git a/mllib/dev_t.mli b/mllib/dev_t.mli
deleted file mode 100644
index 340ead0..0000000
--- a/mllib/dev_t.mli
+++ /dev/null
@@ -1,28 +0,0 @@
-(* virt-resize
- * Copyright (C) 2016 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *)
-
-(** Bindings for [dev_t] related functions [makedev], [major] and [minor]. *)
-
-val makedev : int -> int -> int
-(** makedev(3) *)
-
-val major : int -> int
-(** major(3) *)
-
-val minor : int -> int
-(** minor(3) *)
diff --git a/mllib/exit-c.c b/mllib/exit-c.c
deleted file mode 100644
index 419d2e4..0000000
--- a/mllib/exit-c.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* libguestfs OCaml tools common code
- * Copyright (C) 2009-2017 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <caml/mlvalues.h>
-
-extern int guestfs_int_mllib_exit (value rv) __attribute__((noreturn));
-
-int
-guestfs_int_mllib_exit (value rv)
-{
- _exit (Int_val (rv));
-}
diff --git a/mllib/exit.ml b/mllib/exit.ml
deleted file mode 100644
index 4ca8a27..0000000
--- a/mllib/exit.ml
+++ /dev/null
@@ -1,19 +0,0 @@
-(* libguestfs OCaml tools common code
- * Copyright (C) 2016 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *)
-
-external _exit : int -> 'a = "guestfs_int_mllib_exit"
"noalloc"
diff --git a/mllib/exit.mli b/mllib/exit.mli
deleted file mode 100644
index ddf3072..0000000
--- a/mllib/exit.mli
+++ /dev/null
@@ -1,20 +0,0 @@
-(* libguestfs OCaml tools common code
- * Copyright (C) 2016 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *)
-
-val _exit : int -> 'a
-(** Call _exit directly, ie. do not run OCaml atexit handlers. *)
diff --git a/mllib/fnmatch-c.c b/mllib/fnmatch-c.c
deleted file mode 100644
index 61f302e..0000000
--- a/mllib/fnmatch-c.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Binding for fnmatch.
- * Copyright (C) 2009-2017 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <fnmatch.h>
-#include <errno.h>
-
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/mlvalues.h>
-#include <caml/unixsupport.h>
-
-#pragma GCC diagnostic ignored "-Wmissing-prototypes"
-
-/* NB: These flags must appear in the same order as fnmatch.ml */
-static int flags[] = {
- FNM_NOESCAPE,
- FNM_PATHNAME,
- FNM_PERIOD,
- FNM_FILE_NAME,
- FNM_LEADING_DIR,
- FNM_CASEFOLD,
-};
-
-value
-guestfs_int_mllib_fnmatch (value patternv, value strv, value flagsv)
-{
- CAMLparam3 (patternv, strv, flagsv);
- int f = 0, r;
-
- /* Convert flags to bitmask. */
- while (flagsv != Val_int (0)) {
- f |= flags[Int_val (Field (flagsv, 0))];
- flagsv = Field (flagsv, 1);
- }
-
- r = fnmatch (String_val (patternv), String_val (strv), f);
-
- if (r == 0)
- CAMLreturn (Val_true);
- else if (r == FNM_NOMATCH)
- CAMLreturn (Val_false);
- else {
- /* XXX The fnmatch specification doesn't mention what errors can
- * be returned by fnmatch. Assume they are errnos for now.
- */
- unix_error (errno, (char *) "fnmatch", patternv);
- }
-}
diff --git a/mllib/fnmatch.ml b/mllib/fnmatch.ml
deleted file mode 100644
index fa47a6a..0000000
--- a/mllib/fnmatch.ml
+++ /dev/null
@@ -1,29 +0,0 @@
-(* Binding for fnmatch.
- * Copyright (C) 2009-2017 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *)
-
-(* NB: These flags must appear in the same order as fnmatch-c.c *)
-type flag -| FNM_NOESCAPE
-| FNM_PATHNAME
-| FNM_PERIOD
-| FNM_FILE_NAME
-| FNM_LEADING_DIR
-| FNM_CASEFOLD
-
-external fnmatch : string -> string -> flag list -> bool -
"guestfs_int_mllib_fnmatch"
diff --git a/mllib/fnmatch.mli b/mllib/fnmatch.mli
deleted file mode 100644
index e8f3d8d..0000000
--- a/mllib/fnmatch.mli
+++ /dev/null
@@ -1,37 +0,0 @@
-(* Binding for fnmatch.
- * Copyright (C) 2009-2017 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *)
-
-(** Binding for the fnmatch(3) function in glibc or gnulib. *)
-
-type flag -| FNM_NOESCAPE
-| FNM_PATHNAME
-| FNM_PERIOD
-| FNM_FILE_NAME
-| FNM_LEADING_DIR
-| FNM_CASEFOLD
-(** Flags passed to the fnmatch function. *)
-
-val fnmatch : string -> string -> flag list -> bool
-(** The [fnmatch pattern filename flags] function checks whether
- the [filename] argument matches the wildcard in the [pattern]
- argument. The [flags] is a list of flags. Consult the
- fnmatch(3) man page for details of the flags.
-
- The [filename] might be a filename element or a full path
- (depending on the pattern and flags). *)
diff --git a/mllib/fsync-c.c b/mllib/fsync-c.c
deleted file mode 100644
index 8e2b995..0000000
--- a/mllib/fsync-c.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* libguestfs OCaml tools common code
- * Copyright (C) 2013-2017 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include <caml/alloc.h>
-#include <caml/fail.h>
-#include <caml/memory.h>
-#include <caml/mlvalues.h>
-
-#ifdef HAVE_CAML_UNIXSUPPORT_H
-#include <caml/unixsupport.h>
-#else
-#define Nothing ((value) 0)
-extern void unix_error (int errcode, char * cmdname, value arg) Noreturn;
-#endif
-
-/* OCaml doesn't bind any *sync* calls. */
-
-extern value guestfs_int_mllib_sync (value unitv);
-extern value guestfs_int_mllib_fsync_file (value filenamev);
-
-/* NB: This is a "noalloc" call. */
-value
-guestfs_int_mllib_sync (value unitv)
-{
- sync ();
- return Val_unit;
-}
-
-/* Flush all writes associated with the named file to the disk.
- *
- * Note the wording in the SUS definition:
- *
- * "The fsync() function forces all currently queued I/O operations
- * associated with the file indicated by file descriptor fildes to the
- * synchronised I/O completion state."
- *
- * http://pubs.opengroup.org/onlinepubs/007908775/xsh/fsync.html
- */
-value
-guestfs_int_mllib_fsync_file (value filenamev)
-{
- CAMLparam1 (filenamev);
- const char *filename = String_val (filenamev);
- int fd, err;
-
- /* Note to do fsync you have to open for write. */
- fd = open (filename, O_RDWR);
- if (fd == -1)
- unix_error (errno, (char *) "open", filenamev);
-
- if (fsync (fd) == -1) {
- err = errno;
- close (fd);
- unix_error (err, (char *) "fsync", filenamev);
- }
-
- if (close (fd) == -1)
- unix_error (errno, (char *) "close", filenamev);
-
- CAMLreturn (Val_unit);
-}
diff --git a/mllib/fsync.ml b/mllib/fsync.ml
deleted file mode 100644
index ade6b65..0000000
--- a/mllib/fsync.ml
+++ /dev/null
@@ -1,20 +0,0 @@
-(* libguestfs OCaml tools common code
- * Copyright (C) 2013-2017 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *)
-
-external sync : unit -> unit = "guestfs_int_mllib_sync"
"noalloc"
-external file : string -> unit = "guestfs_int_mllib_fsync_file"
diff --git a/mllib/fsync.mli b/mllib/fsync.mli
deleted file mode 100644
index fa45e5a..0000000
--- a/mllib/fsync.mli
+++ /dev/null
@@ -1,25 +0,0 @@
-(* virt-resize
- * Copyright (C) 2013 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *)
-
-(** Bindings for sync, fsync. *)
-
-val sync : unit -> unit
-(** sync(2) syscall. *)
-
-val file : string -> unit
-(** fsync a single file by name. *)
diff --git a/mllib/mkdtemp-c.c b/mllib/mkdtemp-c.c
deleted file mode 100644
index b245986..0000000
--- a/mllib/mkdtemp-c.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* libguestfs OCaml tools common code
- * Copyright (C) 2014-2017 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA.
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-
-#include <caml/alloc.h>
-#include <caml/fail.h>
-#include <caml/memory.h>
-#include <caml/mlvalues.h>
-
-#ifdef HAVE_CAML_UNIXSUPPORT_H
-#include <caml/unixsupport.h>
-#else
-#define Nothing ((value) 0)
-extern void unix_error (int errcode, char * cmdname, value arg) Noreturn;
-#endif
-
-#pragma GCC diagnostic ignored "-Wmissing-prototypes"
-
-value
-guestfs_int_mllib_mkdtemp (value val_pattern)
-{
- CAMLparam1 (val_pattern);
- CAMLlocal1 (rv);
- char *pattern, *ret;
-
- pattern = strdup (String_val (val_pattern));
- if (pattern == NULL)
- unix_error (errno, (char *) "strdup", val_pattern);
-
- ret = mkdtemp (pattern);
- if (ret == NULL)
- unix_error (errno, (char *) "mkdtemp", val_pattern);
-
- rv = caml_copy_string (ret);
- free (pattern);
-
- CAMLreturn (rv);
-}
diff --git a/mllib/mkdtemp.ml b/mllib/mkdtemp.ml
deleted file mode 100644
index 996bb60..0000000
--- a/mllib/mkdtemp.ml
+++ /dev/null
@@ -1,24 +0,0 @@
-(* libguestfs OCaml tools common code
- * Copyright (C) 2014-2017 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *)
-
-open Common_utils
-
-external mkdtemp : string -> string = "guestfs_int_mllib_mkdtemp"
-
-let temp_dir ?(base_dir = Filename.temp_dir_name) prefix suffix - mkdtemp
(base_dir // (prefix ^ "XXXXXX" ^ suffix))
diff --git a/mllib/mkdtemp.mli b/mllib/mkdtemp.mli
deleted file mode 100644
index f8e3300..0000000
--- a/mllib/mkdtemp.mli
+++ /dev/null
@@ -1,29 +0,0 @@
-(* virt-builder
- * Copyright (C) 2014 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *)
-
-(** Functions to create temporary directories. *)
-
-val mkdtemp : string -> string
-(** [mkdtemp pattern] Tiny wrapper to the C [mkdtemp]. *)
-
-val temp_dir : ?base_dir:string -> string -> string -> string
-(** [temp_dir prefix suffix] creates a new unique temporary directory.
-
- The optional [~base_dir:string] changes the base directory where
- to create the new temporary directory; if not specified, the default
- [Filename.temp_dir_name] is used. *)
diff --git a/mllib/statvfs-c.c b/mllib/statvfs-c.c
deleted file mode 100644
index c5d1751..0000000
--- a/mllib/statvfs-c.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* virt tools interface to statvfs
- * Copyright (C) 2013-2017 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/statvfs.h>
-#include <stdint.h>
-
-#include <caml/alloc.h>
-#include <caml/fail.h>
-#include <caml/memory.h>
-#include <caml/mlvalues.h>
-
-extern value guestfs_int_mllib_statvfs_free_space (value pathv);
-
-value
-guestfs_int_mllib_statvfs_free_space (value pathv)
-{
- CAMLparam1 (pathv);
- CAMLlocal1 (rv);
- struct statvfs buf;
- int64_t free_space;
-
- if (statvfs (String_val (pathv), &buf) == -1) {
- perror ("statvfs");
- caml_failwith ("statvfs");
- }
-
- free_space = (int64_t) buf.f_bsize * buf.f_bavail;
- rv = caml_copy_int64 (free_space);
-
- CAMLreturn (rv);
-}
diff --git a/mllib/unix_utils-c.c b/mllib/unix_utils-c.c
new file mode 100644
index 0000000..f9615ec
--- /dev/null
+++ b/mllib/unix_utils-c.c
@@ -0,0 +1,200 @@
+/* libguestfs OCaml tools common code
+ * Copyright (C) 2009-2017 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <fnmatch.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/sysmacros.h>
+#include <sys/statvfs.h>
+
+#include <caml/alloc.h>
+#include <caml/fail.h>
+#include <caml/memory.h>
+#include <caml/mlvalues.h>
+
+#ifdef HAVE_CAML_UNIXSUPPORT_H
+#include <caml/unixsupport.h>
+#else
+#define Nothing ((value) 0)
+extern void unix_error (int errcode, char * cmdname, value arg) Noreturn;
+#endif
+
+extern value guestfs_int_mllib_dev_t_makedev (value majv, value minv);
+extern value guestfs_int_mllib_dev_t_major (value devv);
+extern value guestfs_int_mllib_dev_t_minor (value devv);
+extern int guestfs_int_mllib_exit (value rv) __attribute__((noreturn));
+extern value guestfs_int_mllib_fnmatch (value patternv, value strv, value
flagsv);
+extern value guestfs_int_mllib_sync (value unitv);
+extern value guestfs_int_mllib_fsync_file (value filenamev);
+extern value guestfs_int_mllib_mkdtemp (value val_pattern);
+extern value guestfs_int_mllib_statvfs_free_space (value pathv);
+
+/* NB: This is a "noalloc" call. */
+value
+guestfs_int_mllib_dev_t_makedev (value majv, value minv)
+{
+ return Val_int (makedev (Int_val (majv), Int_val (minv)));
+}
+
+/* NB: This is a "noalloc" call. */
+value
+guestfs_int_mllib_dev_t_major (value devv)
+{
+ return Val_int (major (Int_val (devv)));
+}
+
+/* NB: This is a "noalloc" call. */
+value
+guestfs_int_mllib_dev_t_minor (value devv)
+{
+ return Val_int (minor (Int_val (devv)));
+}
+
+/* NB: This is a "noalloc" call. */
+int
+guestfs_int_mllib_exit (value rv)
+{
+ _exit (Int_val (rv));
+}
+
+/* NB: These flags must appear in the same order as unix_utils.ml */
+static int flags[] = {
+ FNM_NOESCAPE,
+ FNM_PATHNAME,
+ FNM_PERIOD,
+ FNM_FILE_NAME,
+ FNM_LEADING_DIR,
+ FNM_CASEFOLD,
+};
+
+value
+guestfs_int_mllib_fnmatch (value patternv, value strv, value flagsv)
+{
+ CAMLparam3 (patternv, strv, flagsv);
+ int f = 0, r;
+
+ /* Convert flags to bitmask. */
+ while (flagsv != Val_int (0)) {
+ f |= flags[Int_val (Field (flagsv, 0))];
+ flagsv = Field (flagsv, 1);
+ }
+
+ r = fnmatch (String_val (patternv), String_val (strv), f);
+
+ if (r == 0)
+ CAMLreturn (Val_true);
+ else if (r == FNM_NOMATCH)
+ CAMLreturn (Val_false);
+ else {
+ /* XXX The fnmatch specification doesn't mention what errors can
+ * be returned by fnmatch. Assume they are errnos for now.
+ */
+ unix_error (errno, (char *) "fnmatch", patternv);
+ }
+}
+
+
+/* NB: This is a "noalloc" call. */
+value
+guestfs_int_mllib_sync (value unitv)
+{
+ sync ();
+ return Val_unit;
+}
+
+/* Flush all writes associated with the named file to the disk.
+ *
+ * Note the wording in the SUS definition:
+ *
+ * "The fsync() function forces all currently queued I/O operations
+ * associated with the file indicated by file descriptor fildes to the
+ * synchronised I/O completion state."
+ *
+ * http://pubs.opengroup.org/onlinepubs/007908775/xsh/fsync.html
+ */
+value
+guestfs_int_mllib_fsync_file (value filenamev)
+{
+ CAMLparam1 (filenamev);
+ const char *filename = String_val (filenamev);
+ int fd, err;
+
+ /* Note to do fsync you have to open for write. */
+ fd = open (filename, O_RDWR);
+ if (fd == -1)
+ unix_error (errno, (char *) "open", filenamev);
+
+ if (fsync (fd) == -1) {
+ err = errno;
+ close (fd);
+ unix_error (err, (char *) "fsync", filenamev);
+ }
+
+ if (close (fd) == -1)
+ unix_error (errno, (char *) "close", filenamev);
+
+ CAMLreturn (Val_unit);
+}
+
+value
+guestfs_int_mllib_mkdtemp (value val_pattern)
+{
+ CAMLparam1 (val_pattern);
+ CAMLlocal1 (rv);
+ char *pattern, *ret;
+
+ pattern = strdup (String_val (val_pattern));
+ if (pattern == NULL)
+ unix_error (errno, (char *) "strdup", val_pattern);
+
+ ret = mkdtemp (pattern);
+ if (ret == NULL)
+ unix_error (errno, (char *) "mkdtemp", val_pattern);
+
+ rv = caml_copy_string (ret);
+ free (pattern);
+
+ CAMLreturn (rv);
+}
+
+value
+guestfs_int_mllib_statvfs_free_space (value pathv)
+{
+ CAMLparam1 (pathv);
+ CAMLlocal1 (rv);
+ struct statvfs buf;
+ int64_t free_space;
+
+ if (statvfs (String_val (pathv), &buf) == -1) {
+ perror ("statvfs");
+ caml_failwith ("statvfs");
+ }
+
+ free_space = (int64_t) buf.f_bsize * buf.f_bavail;
+ rv = caml_copy_int64 (free_space);
+
+ CAMLreturn (rv);
+}
diff --git a/mllib/unix_utils.ml b/mllib/unix_utils.ml
new file mode 100644
index 0000000..aeb24ed
--- /dev/null
+++ b/mllib/unix_utils.ml
@@ -0,0 +1,58 @@
+(* mllib
+ * Copyright (C) 2009-2017 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+module Dev_t = struct
+ external makedev : int -> int -> int =
"guestfs_int_mllib_dev_t_makedev" "noalloc"
+ external major : int -> int = "guestfs_int_mllib_dev_t_major"
"noalloc"
+ external minor : int -> int = "guestfs_int_mllib_dev_t_minor"
"noalloc"
+end
+
+module Exit = struct
+ external _exit : int -> 'a = "guestfs_int_mllib_exit"
"noalloc"
+end
+
+module Fnmatch = struct
+ (* NB: These flags must appear in the same order as unix_utils-c.c *)
+ type flag + | FNM_NOESCAPE
+ | FNM_PATHNAME
+ | FNM_PERIOD
+ | FNM_FILE_NAME
+ | FNM_LEADING_DIR
+ | FNM_CASEFOLD
+
+ external fnmatch : string -> string -> flag list -> bool +
"guestfs_int_mllib_fnmatch"
+end
+
+module Fsync = struct
+ external sync : unit -> unit = "guestfs_int_mllib_sync"
"noalloc"
+ external file : string -> unit = "guestfs_int_mllib_fsync_file"
+end
+
+module Mkdtemp = struct
+ external mkdtemp : string -> string =
"guestfs_int_mllib_mkdtemp"
+
+ let temp_dir ?(base_dir = Filename.temp_dir_name) prefix suffix + mkdtemp
(Filename.concat base_dir (prefix ^ "XXXXXX" ^ suffix))
+end
+
+module StatVFS = struct
+ external free_space : string -> int64 +
"guestfs_int_mllib_statvfs_free_space"
+end
diff --git a/mllib/unix_utils.mli b/mllib/unix_utils.mli
new file mode 100644
index 0000000..be3eab8
--- /dev/null
+++ b/mllib/unix_utils.mli
@@ -0,0 +1,90 @@
+(* mllib
+ * Copyright (C) 2009-2017 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(** Binding for various Unix/POSIX library functions which are not
+ provided by the OCaml stdlib. *)
+
+module Dev_t : sig
+ (** Bindings for [dev_t] related functions [makedev], [major] and [minor]. *)
+
+ val makedev : int -> int -> int
+ (** makedev(3) *)
+
+ val major : int -> int
+ (** major(3) *)
+
+ val minor : int -> int
+ (** minor(3) *)
+end
+
+module Exit : sig
+ val _exit : int -> 'a
+ (** Call _exit directly, ie. do not run OCaml atexit handlers. *)
+end
+
+module Fnmatch : sig
+ (** Binding for the fnmatch(3) function in glibc or gnulib. *)
+
+ type flag + | FNM_NOESCAPE
+ | FNM_PATHNAME
+ | FNM_PERIOD
+ | FNM_FILE_NAME
+ | FNM_LEADING_DIR
+ | FNM_CASEFOLD
+ (** Flags passed to the fnmatch function. *)
+
+ val fnmatch : string -> string -> flag list -> bool
+ (** The [fnmatch pattern filename flags] function checks whether
+ the [filename] argument matches the wildcard in the [pattern]
+ argument. The [flags] is a list of flags. Consult the
+ fnmatch(3) man page for details of the flags.
+
+ The [filename] might be a filename element or a full path
+ (depending on the pattern and flags). *)
+end
+
+module Fsync : sig
+ (** Bindings for sync, fsync. *)
+
+ val sync : unit -> unit
+ (** sync(2) syscall. *)
+
+ val file : string -> unit
+ (** fsync a single file by name. *)
+end
+
+module Mkdtemp : sig
+ (** Functions to create temporary directories. *)
+
+ val mkdtemp : string -> string
+ (** [mkdtemp pattern] Tiny wrapper to the C [mkdtemp]. *)
+
+ val temp_dir : ?base_dir:string -> string -> string -> string
+ (** [temp_dir prefix suffix] creates a new unique temporary directory.
+
+ The optional [~base_dir:string] changes the base directory where
+ to create the new temporary directory; if not specified, the default
+ [Filename.temp_dir_name] is used. *)
+end
+
+module StatVFS : sig
+ val free_space : string -> int64
+ (** [free_space path] returns the free space available on the
+ filesystem that contains [path], in bytes. *)
+end
diff --git a/resize/resize.ml b/resize/resize.ml
index 476ba8e..dc96b23 100644
--- a/resize/resize.ml
+++ b/resize/resize.ml
@@ -20,6 +20,7 @@ open Printf
open Common_utils
open Common_gettext.Gettext
+open Unix_utils
open Getopt.OptionName
module G = Guestfs
diff --git a/sparsify/copying.ml b/sparsify/copying.ml
index a05ed6c..9042bd5 100644
--- a/sparsify/copying.ml
+++ b/sparsify/copying.ml
@@ -25,6 +25,7 @@ open Printf
open Common_utils
open Common_gettext.Gettext
+open Unix_utils
open Utils
open Cmdline
diff --git a/sysprep/sysprep_operation_backup_files.ml
b/sysprep/sysprep_operation_backup_files.ml
index 5e89989..6b1a100 100644
--- a/sysprep/sysprep_operation_backup_files.ml
+++ b/sysprep/sysprep_operation_backup_files.ml
@@ -21,7 +21,7 @@ open Printf
open Common_gettext.Gettext
open Common_utils
open Visit
-open Fnmatch
+open Unix_utils.Fnmatch
open Sysprep_operation
open Utils
diff --git a/sysprep/sysprep_operation_script.ml
b/sysprep/sysprep_operation_script.ml
index ff4b073..e3663eb 100644
--- a/sysprep/sysprep_operation_script.ml
+++ b/sysprep/sysprep_operation_script.ml
@@ -21,6 +21,7 @@ open Unix
open Common_gettext.Gettext
open Common_utils
+open Unix_utils
open Getopt.OptionName
open Sysprep_operation
diff --git a/v2v/changeuid.ml b/v2v/changeuid.ml
index 367c212..dbb05bc 100644
--- a/v2v/changeuid.ml
+++ b/v2v/changeuid.ml
@@ -23,6 +23,7 @@ open Printf
open Common_utils
open Common_gettext.Gettext
+open Unix_utils
open Utils
diff --git a/v2v/input_ova.ml b/v2v/input_ova.ml
index 411e901..fff1c22 100644
--- a/v2v/input_ova.ml
+++ b/v2v/input_ova.ml
@@ -20,6 +20,7 @@ open Printf
open Common_gettext.Gettext
open Common_utils
+open Unix_utils
open Types
open Utils
diff --git a/v2v/output_glance.ml b/v2v/output_glance.ml
index 3b804e5..d6f5e0d 100644
--- a/v2v/output_glance.ml
+++ b/v2v/output_glance.ml
@@ -20,6 +20,7 @@ open Printf
open Common_gettext.Gettext
open Common_utils
+open Unix_utils
open Types
open Utils
diff --git a/v2v/output_null.ml b/v2v/output_null.ml
index a21a712..b0e99b4 100644
--- a/v2v/output_null.ml
+++ b/v2v/output_null.ml
@@ -20,6 +20,7 @@ open Printf
open Common_gettext.Gettext
open Common_utils
+open Unix_utils
open Types
open Utils
diff --git a/v2v/output_rhv.ml b/v2v/output_rhv.ml
index 6991b0a..e42429c 100644
--- a/v2v/output_rhv.ml
+++ b/v2v/output_rhv.ml
@@ -18,6 +18,7 @@
open Common_gettext.Gettext
open Common_utils
+open Unix_utils
open Unix
open Printf
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index a711121..ee00d2e 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -20,15 +20,16 @@ open Unix
open Printf
open Common_gettext.Gettext
-
-module G = Guestfs
-
open Common_utils
+open Unix_utils
+
open Types
open Utils
open Cmdline
+module G = Guestfs
+
type conversion_mode | Copying of overlay list * target list
| In_place
--
2.9.3
Richard W.M. Jones
2017-Feb-22 15:29 UTC
[Libguestfs] [PATCH 2/3] mllib: Add unsetenv(3) binding to Unix_utils.
Missing from the OCaml stdlib. This implementation is the same as the
one in Jane St's Core, except we don't bother to throw an exception on
error.
---
mllib/unix_utils-c.c | 9 +++++++++
mllib/unix_utils.ml | 4 ++++
mllib/unix_utils.mli | 5 +++++
3 files changed, 18 insertions(+)
diff --git a/mllib/unix_utils-c.c b/mllib/unix_utils-c.c
index f9615ec..1a4c3d7 100644
--- a/mllib/unix_utils-c.c
+++ b/mllib/unix_utils-c.c
@@ -45,6 +45,7 @@ extern void unix_error (int errcode, char * cmdname, value
arg) Noreturn;
extern value guestfs_int_mllib_dev_t_makedev (value majv, value minv);
extern value guestfs_int_mllib_dev_t_major (value devv);
extern value guestfs_int_mllib_dev_t_minor (value devv);
+extern value guestfs_int_mllib_unsetenv (value strv);
extern int guestfs_int_mllib_exit (value rv) __attribute__((noreturn));
extern value guestfs_int_mllib_fnmatch (value patternv, value strv, value
flagsv);
extern value guestfs_int_mllib_sync (value unitv);
@@ -74,6 +75,14 @@ guestfs_int_mllib_dev_t_minor (value devv)
}
/* NB: This is a "noalloc" call. */
+value
+guestfs_int_mllib_unsetenv (value strv)
+{
+ unsetenv (String_val (strv));
+ return Val_unit;
+}
+
+/* NB: This is a "noalloc" call. */
int
guestfs_int_mllib_exit (value rv)
{
diff --git a/mllib/unix_utils.ml b/mllib/unix_utils.ml
index aeb24ed..66b6e4f 100644
--- a/mllib/unix_utils.ml
+++ b/mllib/unix_utils.ml
@@ -22,6 +22,10 @@ module Dev_t = struct
external minor : int -> int = "guestfs_int_mllib_dev_t_minor"
"noalloc"
end
+module Env = struct
+ external unsetenv : string -> unit =
"guestfs_int_mllib_unsetenv" "noalloc"
+end
+
module Exit = struct
external _exit : int -> 'a = "guestfs_int_mllib_exit"
"noalloc"
end
diff --git a/mllib/unix_utils.mli b/mllib/unix_utils.mli
index be3eab8..0a4c1b3 100644
--- a/mllib/unix_utils.mli
+++ b/mllib/unix_utils.mli
@@ -32,6 +32,11 @@ module Dev_t : sig
(** minor(3) *)
end
+module Env : sig
+ val unsetenv : string -> unit
+ (** Unset named environment variable, see unsetenv(3). *)
+end
+
module Exit : sig
val _exit : int -> 'a
(** Call _exit directly, ie. do not run OCaml atexit handlers. *)
--
2.9.3
Richard W.M. Jones
2017-Feb-22 15:29 UTC
[Libguestfs] [PATCH 3/3] v2v: vCenter: Remove proxy environment variables (RHBZ#1354507).
Currently imports from vCenter sometimes obey proxy environment
variables (eg. $http_proxy) and sometimes don't. The initial libvirt
connection to fetch metadata never uses the proxy, but because the
subsequent conversion and copying uses libcurl, it will pick up on
proxy environment variables.
This makes no sense, and in any case vCenter is really slow as it is
without putting another device into the data path. Therefore ensure
that libcurl does not see any proxy environment variables by unsetting
them.
---
v2v/input_libvirt_vcenter_https.ml | 13 +++++++++++++
v2v/virt-v2v.pod | 16 +++-------------
2 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/v2v/input_libvirt_vcenter_https.ml
b/v2v/input_libvirt_vcenter_https.ml
index 7976821..79dff43 100644
--- a/v2v/input_libvirt_vcenter_https.ml
+++ b/v2v/input_libvirt_vcenter_https.ml
@@ -20,6 +20,7 @@
open Common_gettext.Gettext
open Common_utils
+open Unix_utils.Env
open Types
open Utils
@@ -48,6 +49,18 @@ object
error_if_libvirt_does_not_support_json_backingfile ();
+ (* Remove proxy environment variables so curl doesn't try to use
+ * them. Libvirt doesn't use the proxy anyway, and using a proxy
+ * is generally a bad idea because vCenter is slow enough as it is
+ * without putting another device in the way (RHBZ#1354507).
+ *)
+ unsetenv "https_proxy";
+ unsetenv "all_proxy";
+ unsetenv "no_proxy";
+ unsetenv "HTTPS_PROXY";
+ unsetenv "ALL_PROXY";
+ unsetenv "NO_PROXY";
+
(* Get the libvirt XML. This also checks (as a side-effect)
* that the domain is not running. (RHBZ#1138586)
*)
diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod
index 86e6e9c..4c7204b 100644
--- a/v2v/virt-v2v.pod
+++ b/v2v/virt-v2v.pod
@@ -1187,19 +1187,9 @@ forwards the information, so if you have a firewall
between vCenter
and its hypervisors you may need to open additional ports (consult
VMware documentation).
-=head3 vCenter: Proxy settings
-
-To copy the disks, virt-v2v uses L<libcurl(3)>. The Curl library
-obeys the proxy environment variables, in particular C<https_proxy>,
-C<all_proxy> and C<no_proxy> (C<HTTPS_PROXY>,
C<ALL_PROXY> and
-C<NO_PROXY> can also be used, but the lowercase named environment
-variables take precedence).
-
-If these environment variables are set then copying may happen via the
-proxy, and so a different set of ports may need to be opened in the
-firewall.
-
-The port 5480 connection never uses a proxy.
+The proxy environment variables (C<https_proxy>, C<all_proxy>,
+C<no_proxy>, C<HTTPS_PROXY>, C<ALL_PROXY> and
C<NO_PROXY>) are
+B<ignored> when doing vCenter conversions.
=head1 INPUT FROM VMWARE OVA
--
2.9.3
Pino Toscano
2017-Feb-22 15:59 UTC
Re: [Libguestfs] [PATCH 0/3] v2v: vCenter: Remove proxy environment variables
On Wednesday, 22 February 2017 15:29:21 CET Richard W.M. Jones wrote:> Fix for: > > https://bugzilla.redhat.com/show_bug.cgi?id=1354507 > > Main explanation is in patch #3.The series LGTM. Thanks, -- Pino Toscano
Reasonably Related Threads
- [PATCH] mllib: Add a binding for realpath(3).
- [PATCH 0/4] sysprep: Remove various backup files.
- [PATCH v3 0/5] sysprep: Remove various backup files.
- [PATCH v2 0/4] sysprep: Remove various backup files.
- [PATCH v2 0/2] builder: Choose better weights in the planner.