On Friday, 14 July 2017 15:39:20 CEST Richard W.M. Jones wrote: > +(* Convert output from 'file' command on ELF files to the canonical > + * architecture string. Caller must free the result.
No more need to free anything, I guess? > +and cpio_arch magic orig_path path = > + let sysroot = Sysroot.sysroot () in > + > + let zcat = > + if String.find magic "gzip" >= 0 then "zcat" > + else if String.find magic "bzip2" >= 0 then "bzcat" > + else if String.find magic "XZ compressed" >= 0 then "xzcat" > + else "cat" in > + > + let tmpdir = sprintf "/tmp/%s" (String.random8 ()) in > + mkdir tmpdir 0o700; This could use Mkdtemp.temp_dir (from mlutils, Unix_utils). Even if there is not much advantage, at least it makes slightly easier to read the code, and to discover where temporary directories are created. > + (* Construct a command to extract named binaries from the initrd file. *) > + let cmd = > + sprintf "cd %s && %s %s | cpio --quiet -id %s" > + tmpdir zcat (quote (sysroot // path)) > + (String.concat " " (List.map quote initrd_binaries)) in > + if verbose () then eprintf "%s\n%!" cmd; > + if Sys.command cmd <> 0 then > + failwith "cpio command failed"; > + > + (* See if any of the binaries were present in the output. *) > + let rec loop = function > + | bin :: bins -> > + let bin_path = tmpdir // bin in > + if is_regular_file bin_path then ( > + let out = command "file" ["-zb"; bin_path] in > + file_architecture_of_magic out orig_path bin_path > + ) > + else > + loop bins > + | [] -> > + failwithf "could not determine architecture of cpio archive: %s" path > + in > + loop initrd_binaries This must cleanup tmpdir, otherwise things will pile up and fill the appliance. > diff --git a/docs/C_SOURCE_FILES b/docs/C_SOURCE_FILES > index 6149bba43..2dbd5a14b 100644 > --- a/docs/C_SOURCE_FILES > +++ b/docs/C_SOURCE_FILES > @@ -72,6 +72,7 @@ daemon/blkdiscard.c > daemon/blkid.c > daemon/blockdev.c > daemon/btrfs.c > +daemon/caml-stubs.c > daemon/cap.c > daemon/checksum.c > daemon/cleanups.c > @@ -82,6 +83,7 @@ daemon/compress.c > daemon/copy.c > daemon/cpio.c > daemon/cpmv.c > +daemon/daemon-c.c > daemon/daemon.h > daemon/dd.c > daemon/debug-bmap.c > @@ -173,6 +175,7 @@ daemon/stubs.h > daemon/swap.c > daemon/sync.c > daemon/syslinux.c > +daemon/sysroot-c.c > daemon/tar.c > daemon/truncate.c > daemon/tsk.c > @@ -296,7 +299,6 @@ lib/errors.c The three hunks above should be part of patch #2. -- Pino Toscano
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Libguestfs mailing list [email protected] https://www.redhat.com/mailman/listinfo/libguestfs
