From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1oRQen-0000NL-Tq for mharc-grub-devel@gnu.org; Fri, 26 Aug 2022 00:09:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44224) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oRQel-0000N9-Tz for grub-devel@gnu.org; Fri, 26 Aug 2022 00:09:19 -0400 Received: from mail-qt1-x82b.google.com ([2607:f8b0:4864:20::82b]:41482) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oRQej-0005wV-Dc for grub-devel@gnu.org; Fri, 26 Aug 2022 00:09:18 -0400 Received: by mail-qt1-x82b.google.com with SMTP id c20so448312qtw.8 for ; Thu, 25 Aug 2022 21:09:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficientek-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc; bh=NY+psM7zGHYRXDxWGf1DQEs6D+hxwzvYaWaCL53LaqY=; b=uSzUxM0+gKccobUgVlrWJbqZlG/0e2koQxUowpJ7fT4lnBSQXPu0Y1jq2VcQ43JUtw If1P/773rMBqKVEwdQuvapmNNN9bFOp9b1a7sBpVm00ciwrNi4j/+lb4dx9kSJEKcAGC d1htrJe0DEb9NMQktu9dcyb2sTD9KMacKPGAMPAjdgI0FK73V/V6ZBx1fQ7c/bbisncW WxcF3nW1rjYVMiT5vvo4Y7o/Iqv4ZZHuj5VI4seLr/cp0y7DHGMdjnJ9I+Yn2dv8PHuj pGH7EVB1cQf620Kdw2eWaM7aRz2rE0ehvhQ6spRy3a0S7wcG2xqtP/yBxHczfQcVQ0Gi GTxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc; bh=NY+psM7zGHYRXDxWGf1DQEs6D+hxwzvYaWaCL53LaqY=; b=VRDMa2/lz0lyfQd9C6qGbtXvL9zrxi7mVAVYcKW49TTa/kukeZ7oD83XUrS99zdVlC PC1+VXrjfbR7eNhgIizMFhj1o66J1EkIcKtUDNZwg+OidDSSjMCIbb/zUqM7Zqv5o/O2 8yNPRBV7p1fIr3ZcoDlSYUEVuiJw9D/O8TUuI9XXizfEWWFK2YtiXBWVKMxPv4lBp9GY BPOB34SI3P0oyN1C9bg5yVp7+r26HrYw/AldQ46qzEFGR/OI62lvEOXo9/+xV+gbhfDi OtGFXO0vJv+OYGVF2lhXtFF77Z3kXgKC07sqwOOqJXH5zcCf+/r+fBSqZWkOkx/ysTT7 1kZw== X-Gm-Message-State: ACgBeo1o/PqvjqSDIBN5YqcE91iB8ZEqlF4IJH5e94kIxqn0/8tkmRjA SoyAno26HQMsdVSPGyNwuHyNWvVh3NatsQ== X-Google-Smtp-Source: AA6agR4MVi+Zuksvif//88NH6IGleD6GMuyiX4T/QPhgr7AB2O0M3smz8jTojdBUCG3kdcj+gxVdnQ== X-Received: by 2002:ac8:5b0d:0:b0:344:8ba5:420b with SMTP id m13-20020ac85b0d000000b003448ba5420bmr6583205qtw.391.1661486955563; Thu, 25 Aug 2022 21:09:15 -0700 (PDT) Received: from localhost.localdomain ([37.218.244.249]) by smtp.gmail.com with ESMTPSA id c3-20020ac81e83000000b0031eb5648b86sm587300qtm.41.2022.08.25.21.09.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Aug 2022 21:09:15 -0700 (PDT) From: Glenn Washburn To: grub-devel@gnu.org, Daniel Kiper Cc: Glenn Washburn , Li Gen Subject: [PATCH] loopback: Support transparent decompression of backing file Date: Thu, 25 Aug 2022 23:08:57 -0500 Message-Id: <20220826040858.708967-1-development@efficientek.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2607:f8b0:4864:20::82b; envelope-from=development@efficientek.com; helo=mail-qt1-x82b.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Aug 2022 04:09:20 -0000 A new option is added to the loopback command, -D or --decompress, which when specified transparently decompresses the backing file. This allows compressed images to be used as if they were uncompressed. Add documentation to support this change. Suggested-by: Li Gen Signed-off-by: Glenn Washburn --- docs/grub.texi | 5 ++++- grub-core/disk/loopback.c | 10 +++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/grub.texi b/docs/grub.texi index 9ce3a1b488..a463f9e354 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -4938,7 +4938,7 @@ suffix @samp{.pf2} appended. @xref{Theme file format,,Fonts}. @node loopback @subsection loopback -@deffn Command loopback [@option{-d}] device file +@deffn Command loopback [@option{-d}] [@option{-D}] device file Make the device named @var{device} correspond to the contents of the filesystem image in @var{file}. For example: @@ -4947,6 +4947,9 @@ loopback loop0 /path/to/image ls (loop0)/ @end example +Specifying the @option{-D} option allows the loopback file to be tranparently +decompressed if there is an appropriate decompressor loaded. + With the @option{-d} option, delete a device previously created using this command. @end deffn diff --git a/grub-core/disk/loopback.c b/grub-core/disk/loopback.c index 41bebd14fe..2cfc53a916 100644 --- a/grub-core/disk/loopback.c +++ b/grub-core/disk/loopback.c @@ -43,6 +43,7 @@ static const struct grub_arg_option options[] = /* TRANSLATORS: The disk is simply removed from the list of available ones, not wiped, avoid to scare user. */ {"delete", 'd', 0, N_("Delete the specified loopback drive."), 0, 0}, + {"decompress", 'D', 0, N_("Transparently decompress backing file."), 0, 0}, {0, 0, 0, 0, 0, 0} }; @@ -79,6 +80,7 @@ grub_cmd_loopback (grub_extcmd_context_t ctxt, int argc, char **args) { struct grub_arg_list *state = ctxt->state; grub_file_t file; + enum grub_file_type type = GRUB_FILE_TYPE_LOOPBACK; struct grub_loopback *newdev; grub_err_t ret; @@ -89,6 +91,9 @@ grub_cmd_loopback (grub_extcmd_context_t ctxt, int argc, char **args) if (state[0].set) return delete_loopback (args[0]); + if (!state[1].set) + type |= GRUB_FILE_TYPE_NO_DECOMPRESS; + if (argc < 2) return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); @@ -97,8 +102,7 @@ grub_cmd_loopback (grub_extcmd_context_t ctxt, int argc, char **args) if (grub_strcmp (newdev->devname, args[0]) == 0) return grub_error (GRUB_ERR_BAD_ARGUMENT, "device name already exists"); - file = grub_file_open (args[1], GRUB_FILE_TYPE_LOOPBACK - | GRUB_FILE_TYPE_NO_DECOMPRESS); + file = grub_file_open (args[1], type); if (! file) return grub_errno; @@ -226,7 +230,7 @@ static grub_extcmd_t cmd; GRUB_MOD_INIT(loopback) { cmd = grub_register_extcmd ("loopback", grub_cmd_loopback, 0, - N_("[-d] DEVICENAME FILE."), + N_("[-d] [-D] DEVICENAME FILE."), /* TRANSLATORS: The file itself is not destroyed or transformed into drive. */ N_("Make a virtual drive from a file."), options); -- 2.34.1