# HG changeset patch # User Isaac Dunham # Date 1384619869 21600 # Node ID 977f0a4dc562b301cb923851438ab2d0bef5e926 # Parent 55a533fa5039c6b56eb9e1efe5178e2caa1f1f2b 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.) diff -r 55a533fa5039 -r 977f0a4dc562 toys/pending/cpio.c --- a/toys/pending/cpio.c Thu Nov 14 00:18:13 2013 -0600 +++ b/toys/pending/cpio.c Sat Nov 16 10:37:49 2013 -0600 @@ -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 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);