aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsaac Dunham <ibid.ag@gmail.com>2013-11-16 10:37:49 -0600
committerIsaac Dunham <ibid.ag@gmail.com>2013-11-16 10:37:49 -0600
commit59272f2019b6f1a5b984fa2bbf36f9c0174b4dcb (patch)
treee8d5a9f00376d44382161ff3b9de526763835721
parentdcf52cbf25572b001e1b8d5f0091e5559b662b07 (diff)
downloadtoybox-59272f2019b6f1a5b984fa2bbf36f9c0174b4dcb.tar.gz
Support -F, and ignore -u since that's what we do anyway.
(Really, checking the original file date is the Right Thing, but I haven't written it yet.)
-rw-r--r--toys/pending/cpio.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/toys/pending/cpio.c b/toys/pending/cpio.c
index 5608e97c..802dc33a 100644
--- a/toys/pending/cpio.c
+++ b/toys/pending/cpio.c
@@ -2,25 +2,33 @@
*
* Written 2013 AD by Isaac Dunham; this code is placed under the
* same license as toybox or as CC0, at your option.
-USE_CPIO(NEWTOY(cpio, "H:iot", TOYFLAG_BIN))
+ *
+ * http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/cpio.html
+ *
+ * http://pubs.opengroup.org/onlinepubs/7908799/xcu/cpio.html
+
+USE_CPIO(NEWTOY(cpio, "H:iotuF:", TOYFLAG_BIN))
config CPIO
bool "cpio"
default n
help
- usage: cpio { -i | -o | -t } [-H fmt]
+ usage: cpio { -iu | -o | -t } [-H FMT] [-F ARCHIVE]
copy files into and out of an archive
-i extract from archive into file system (stdin is an archive)
-o create archive (stdin is a list of files, stdout is an archive)
-t list files (stdin is an archive, stdout is a list of files)
- -H fmt Write archive in specified format:
+ -u always overwrite files (current default)
+ -H FMT write archive in specified format:
newc SVR4 new character format (default)
+ -F ARCHIVE read from or write to ARCHIVE
*/
#define FOR_cpio
#include "toys.h"
GLOBALS(
+char * archive;
char * fmt;
)
@@ -217,6 +225,16 @@ void read_cpio_archive(int fd, int how)
void cpio_main(void)
{
+ if (TT.archive) {
+ if (toys.optflags & (FLAG_i|FLAG_t)) {
+ xclose(0);
+ xopen(TT.archive, O_RDONLY);
+ } else if (toys.optflags & FLAG_o) {
+ xclose(1);
+ xcreate(TT.archive, O_CREAT|O_WRONLY|O_TRUNC, 0755);
+ }
+ }
+
switch (toys.optflags & (FLAG_i | FLAG_o | FLAG_t)) {
case FLAG_o:
loopfiles_stdin(write_cpio_member);