changeset 1121:977f0a4dc562 draft

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.)
author Isaac Dunham <ibid.ag@gmail.com>
date Sat, 16 Nov 2013 10:37:49 -0600
parents 55a533fa5039
children 663242f2962c
files toys/pending/cpio.c
diffstat 1 files changed, 21 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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);