[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: Re: [PATCH v2 2/2] cpio: add support for --renumber-inodes like GNU cpio
From: Denys Vlasenko <vda.linux () googlemail ! com>
Date: 2021-10-13 15:59:34
Message-ID: CAK1hOcO6x5ydb0fibodNDvrRh1fi2Lg9sbkUcDrH46RYRC6=-w () mail ! gmail ! com
[Download RAW message or body]
Applied, thank you.
On Mon, Jun 28, 2021 at 4:32 PM Ariadne Conill <ariadne@dereferenced.org> wrote:
>
> The --renumber-inodes option renumbers the inodes starting from 1,
> so that the sequence of inodes is always stable. This helps with
> reproducibility.
>
> function old new delta
> cpio_o 961 1045 +84
> .rodata 78422 78440 +18
> bbconfig_config_bz2 6168 6164 -4
> packed_usage 25764 25756 -8
> ------------------------------------------------------------------------------
> (add/remove: 0/0 grow/shrink: 2/2 up/down: 102/-12) Total: 90 bytes
>
> Signed-off-by: Ariadne Conill <ariadne@dereferenced.org>
> ---
> archival/cpio.c | 32 ++++++++++++++++++++++++++++++++
> 1 file changed, 32 insertions(+)
>
> diff --git a/archival/cpio.c b/archival/cpio.c
> index 4d386d38d..14f0b5b84 100644
> --- a/archival/cpio.c
> +++ b/archival/cpio.c
> @@ -45,6 +45,13 @@
> //config: depends on FEATURE_CPIO_O && LONG_OPTS
> //config: help
> //config: Optionally ignore device numbers when creating archives.
> +//config:
> +//config:config FEATURE_CPIO_RENUMBER_INODES
> +//config: bool "Support --renumber-inodes like GNU cpio"
> +//config: default y
> +//config: depends on FEATURE_CPIO_O && LONG_OPTS
> +//config: help
> +//config: Optionally renumber inodes when creating archives.
>
> //applet:IF_CPIO(APPLET(cpio, BB_DIR_BIN, BB_SUID_DROP))
>
> @@ -85,6 +92,9 @@
> //usage: IF_FEATURE_CPIO_IGNORE_DEVNO(
> //usage: "\n --ignore-devno"
> //usage: )
> +//usage: IF_FEATURE_CPIO_RENUMBER_INODES(
> +//usage: "\n --renumber-inodes"
> +//usage: )
>
> /* GNU cpio 2.9 --help (abridged):
>
> @@ -173,18 +183,21 @@ enum {
> IF_LONG_OPTS( OPTBIT_QUIET ,)
> IF_LONG_OPTS( OPTBIT_2STDOUT ,)
> IF_FEATURE_CPIO_IGNORE_DEVNO(OPTBIT_IGNORE_DEVNO,)
> + IF_FEATURE_CPIO_RENUMBER_INODES(OPTBIT_RENUMBER_INODES,)
> OPT_CREATE = IF_FEATURE_CPIO_O((1 << OPTBIT_CREATE )) + 0,
> OPT_FORMAT = IF_FEATURE_CPIO_O((1 << OPTBIT_FORMAT )) + 0,
> OPT_PASSTHROUGH = IF_FEATURE_CPIO_P((1 << OPTBIT_PASSTHROUGH)) + 0,
> OPT_QUIET = IF_LONG_OPTS( (1 << OPTBIT_QUIET )) + 0,
> OPT_2STDOUT = IF_LONG_OPTS( (1 << OPTBIT_2STDOUT )) + 0,
> OPT_IGNORE_DEVNO = IF_FEATURE_CPIO_IGNORE_DEVNO((1 << OPTBIT_IGNORE_DEVNO)) + 0,
> + OPT_RENUMBER_INODES = IF_FEATURE_CPIO_RENUMBER_INODES((1 << OPTBIT_RENUMBER_INODES)) + 0,
> };
>
> #define OPTION_STR "it0uvdmLF:R:"
>
> struct globals {
> struct bb_uidgid_t owner_ugid;
> + ino_t next_inode;
> } FIX_ALIASING;
> #define G (*(struct globals*)bb_common_bufsiz1)
> void BUG_cpio_globals_too_big(void);
> @@ -218,6 +231,9 @@ static NOINLINE int cpio_o(void)
> struct inodes_s *next;
> struct name_s *names;
> struct stat st;
> +#if ENABLE_FEATURE_CPIO_RENUMBER_INODES
> + ino_t mapped_inode;
> +#endif
> };
>
> struct inodes_s *links = NULL;
> @@ -272,6 +288,10 @@ static NOINLINE int cpio_o(void)
> l = xzalloc(sizeof(*l));
> l->st = st;
> l->next = links;
> +#if ENABLE_FEATURE_CPIO_RENUMBER_INODES
> + if (option_mask32 & OPT_RENUMBER_INODES)
> + l->mapped_inode = ++G.next_inode;
> +#endif
> links = l;
> break;
> }
> @@ -290,6 +310,11 @@ static NOINLINE int cpio_o(void)
> free(line);
> continue;
> }
> +#if ENABLE_FEATURE_CPIO_RENUMBER_INODES
> + else if (option_mask32 & OPT_RENUMBER_INODES) {
> + st.st_ino = ++G.next_inode;
> + }
> +#endif
> } else { /* line == NULL: EOF */
> next_link:
> if (links) {
> @@ -297,6 +322,10 @@ static NOINLINE int cpio_o(void)
> st = links->st;
> name = links->names->name;
> links->names = links->names->next;
> +#if ENABLE_FEATURE_CPIO_RENUMBER_INODES
> + if (links->mapped_inode)
> + st.st_ino = links->mapped_inode;
> +#endif
> /* GNU cpio is reported to emit file data
> * only for the last instance. Mimic that. */
> if (links->names == NULL)
> @@ -398,6 +427,9 @@ int cpio_main(int argc UNUSED_PARAM, char **argv)
> "to-stdout\0" No_argument "\xfe"
> #if ENABLE_FEATURE_CPIO_IGNORE_DEVNO
> "ignore-devno\0" No_argument "\xfd"
> +#endif
> +#if ENABLE_FEATURE_CPIO_RENUMBER_INODES
> + "renumber-inodes\0" No_argument "\xfc"
> #endif
> ;
> #endif
> --
> 2.32.0
>
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic