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
Libguestfs(a)redhat.com
https://www.redhat.com/mailman/listinfo/libguestfs