On Mon, Dec 03, 2018 at 04:32:19PM +0100, Pino Toscano wrote:
Do not error out on empty files, just ignore them.
---
src/mode_build.ml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/mode_build.ml b/src/mode_build.ml
index b5f5fa6..9cd0a21 100644
--- a/src/mode_build.ml
+++ b/src/mode_build.ml
@@ -46,6 +46,7 @@ and file_content =
| Packages
| Hostfiles
| Excludefiles
+| Empty

let rec string_of_file_type = function
  | GZip c -> sprintf "gzip %s" (string_of_file_content c)
@@ -56,6 +57,7 @@ and string_of_file_content = function
  | Packages -> "packages"
  | Hostfiles -> "hostfiles"
  | Excludefiles -> "excludefiles"
+  | Empty -> "(empty)"

let rec build debug
    (copy_kernel, format, host_cpu,
@@ -250,6 +252,8 @@ and read_appliance debug basedir appliance = function
    (* Depending on the file type, read or unpack the file. *)
    let appliance =
      match file_type with
+      | Uncompressed Empty | GZip Empty | XZ Empty ->
+        appliance
      | Uncompressed ((Packages|Hostfiles|Excludefiles) as t) ->
        let chan = open_in file in
        let lines = input_all_lines chan in
@@ -294,7 +298,7 @@ and update_appliance appliance lines = function
        String.sub path 1 (n-1)
    ) lines in
    { appliance with excludefiles = appliance.excludefiles @ lines }
-  | Base_image -> assert false
+  | Base_image | Empty -> assert false

(* Determine the [file_type] of [file], or exit with an error. *)
and get_file_type file =
@@ -331,6 +335,7 @@ and get_file_content file buf len =
  else if len >= 2 && buf.[0] = '/' then Hostfiles
  else if len >= 2 && buf.[0] = '-' then Excludefiles
  else if len >= 1 && isalnum buf.[0] then Packages
+  else if len = 0 then Empty

For me `zcat` outputs 10 KB of zeroes when ran with the empty base.tar.gz so
this is not enough.  The following works for me, but is probably not the right
way to approach it:

diff --git i/src/mode_build.ml w/src/mode_build.ml
index 9cd0a21d4c44..9fdfe7fb3729 100644
--- i/src/mode_build.ml
+++ w/src/mode_build.ml
@@ -336,6 +336,7 @@ and get_file_content file buf len =
  else if len >= 2 && buf.[0] = '-' then Excludefiles
  else if len >= 1 && isalnum buf.[0] then Packages
  else if len = 0 then Empty
+  else if buf = String.make len '\000' then Empty
  else error "%s: unknown file type in supermin directory" file

and get_compressed_file_content zcat file =
--

  else error "%s: unknown file type in supermin directory" file

and get_compressed_file_content zcat file =
--
2.17.2

_______________________________________________
Libguestfs mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libguestfs

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Libguestfs mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libguestfs

Reply via email to