aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAriadne Conill <ariadne@dereferenced.org>2021-06-28 08:25:59 -0600
committerDenys Vlasenko <vda.linux@googlemail.com>2021-10-13 17:53:15 +0200
commit8aa5585ff4974b8f7ed71d684af48432b2bc6929 (patch)
tree967046068d11755130ab73eb99ff4bc644fed202
parentaaf3d5ba74c5da97ff80b61f30cb8dd225d39096 (diff)
downloadbusybox-w32-8aa5585ff4974b8f7ed71d684af48432b2bc6929.tar.gz
busybox-w32-8aa5585ff4974b8f7ed71d684af48432b2bc6929.tar.bz2
busybox-w32-8aa5585ff4974b8f7ed71d684af48432b2bc6929.zip
cpio: add support for --ignore-devno like GNU cpio
The --ignore-devno option is used to set device numbers to (0, 0). This can be useful in verifying whether a CPIO archive is reproducible. function old new delta cpio_o 922 961 +39 .rodata 78407 78422 +15 bbconfig_config_bz2 6161 6167 +6 packed_usage 25770 25764 -6 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/1 up/down: 60/-6) Total: 54 bytes Signed-off-by: Ariadne Conill <ariadne@dereferenced.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--archival/cpio.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/archival/cpio.c b/archival/cpio.c
index f525419b8..daf6cffc9 100644
--- a/archival/cpio.c
+++ b/archival/cpio.c
@@ -38,6 +38,13 @@
38//config: depends on FEATURE_CPIO_O 38//config: depends on FEATURE_CPIO_O
39//config: help 39//config: help
40//config: Passthrough mode. Rarely used. 40//config: Passthrough mode. Rarely used.
41//config:
42//config:config FEATURE_CPIO_IGNORE_DEVNO
43//config: bool "Support --ignore-devno like GNU cpio"
44//config: default y
45//config: depends on FEATURE_CPIO_O && LONG_OPTS
46//config: help
47//config: Optionally ignore device numbers when creating archives.
41 48
42//applet:IF_CPIO(APPLET(cpio, BB_DIR_BIN, BB_SUID_DROP)) 49//applet:IF_CPIO(APPLET(cpio, BB_DIR_BIN, BB_SUID_DROP))
43 50
@@ -75,6 +82,9 @@
75//usage: "\n -R USER[:GRP] Set owner of created files" 82//usage: "\n -R USER[:GRP] Set owner of created files"
76//usage: "\n -L Dereference symlinks" 83//usage: "\n -L Dereference symlinks"
77//usage: "\n -0 NUL terminated input" 84//usage: "\n -0 NUL terminated input"
85//usage: IF_FEATURE_CPIO_IGNORE_DEVNO(
86//usage: "\n --ignore-devno"
87//usage: )
78 88
79/* GNU cpio 2.9 --help (abridged): 89/* GNU cpio 2.9 --help (abridged):
80 90
@@ -162,11 +172,13 @@ enum {
162 IF_FEATURE_CPIO_P(OPTBIT_PASSTHROUGH,) 172 IF_FEATURE_CPIO_P(OPTBIT_PASSTHROUGH,)
163 IF_LONG_OPTS( OPTBIT_QUIET ,) 173 IF_LONG_OPTS( OPTBIT_QUIET ,)
164 IF_LONG_OPTS( OPTBIT_2STDOUT ,) 174 IF_LONG_OPTS( OPTBIT_2STDOUT ,)
175 IF_FEATURE_CPIO_IGNORE_DEVNO(OPTBIT_IGNORE_DEVNO,)
165 OPT_CREATE = IF_FEATURE_CPIO_O((1 << OPTBIT_CREATE )) + 0, 176 OPT_CREATE = IF_FEATURE_CPIO_O((1 << OPTBIT_CREATE )) + 0,
166 OPT_FORMAT = IF_FEATURE_CPIO_O((1 << OPTBIT_FORMAT )) + 0, 177 OPT_FORMAT = IF_FEATURE_CPIO_O((1 << OPTBIT_FORMAT )) + 0,
167 OPT_PASSTHROUGH = IF_FEATURE_CPIO_P((1 << OPTBIT_PASSTHROUGH)) + 0, 178 OPT_PASSTHROUGH = IF_FEATURE_CPIO_P((1 << OPTBIT_PASSTHROUGH)) + 0,
168 OPT_QUIET = IF_LONG_OPTS( (1 << OPTBIT_QUIET )) + 0, 179 OPT_QUIET = IF_LONG_OPTS( (1 << OPTBIT_QUIET )) + 0,
169 OPT_2STDOUT = IF_LONG_OPTS( (1 << OPTBIT_2STDOUT )) + 0, 180 OPT_2STDOUT = IF_LONG_OPTS( (1 << OPTBIT_2STDOUT )) + 0,
181 OPT_IGNORE_DEVNO = IF_FEATURE_CPIO_IGNORE_DEVNO((1 << OPTBIT_IGNORE_DEVNO)) + 0,
170}; 182};
171 183
172#define OPTION_STR "it0uvdmLF:R:" 184#define OPTION_STR "it0uvdmLF:R:"
@@ -304,6 +316,11 @@ static NOINLINE int cpio_o(void)
304 } 316 }
305 } 317 }
306 318
319#if ENABLE_FEATURE_CPIO_IGNORE_DEVNO
320 if (option_mask32 & OPT_IGNORE_DEVNO)
321 st.st_dev = st.st_rdev = 0;
322#endif
323
307 bytes += printf("070701" 324 bytes += printf("070701"
308 "%08X%08X%08X%08X%08X%08X%08X" 325 "%08X%08X%08X%08X%08X%08X%08X"
309 "%08X%08X%08X%08X" /* GNU cpio uses uppercase hex */ 326 "%08X%08X%08X%08X" /* GNU cpio uses uppercase hex */
@@ -379,6 +396,9 @@ int cpio_main(int argc UNUSED_PARAM, char **argv)
379 "null\0" No_argument "0" 396 "null\0" No_argument "0"
380 "quiet\0" No_argument "\xff" 397 "quiet\0" No_argument "\xff"
381 "to-stdout\0" No_argument "\xfe" 398 "to-stdout\0" No_argument "\xfe"
399#if ENABLE_FEATURE_CPIO_IGNORE_DEVNO
400 "ignore-devno\0" No_argument "\xfd"
401#endif
382 ; 402 ;
383#endif 403#endif
384 404