diff options
author | Ariadne Conill <ariadne@dereferenced.org> | 2021-06-28 08:25:59 -0600 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-10-13 17:53:15 +0200 |
commit | 8aa5585ff4974b8f7ed71d684af48432b2bc6929 (patch) | |
tree | 967046068d11755130ab73eb99ff4bc644fed202 | |
parent | aaf3d5ba74c5da97ff80b61f30cb8dd225d39096 (diff) | |
download | busybox-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.c | 20 |
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 | ||