[Toybox] [New Toy] cpio, cleaned up a little

Rob Landley rob at landley.net
Sat Oct 26 13:16:25 PDT 2013


On 10/13/2013 12:20:35 AM, ibid.ag at gmail.com wrote:
> Here's a revised cpio.
> I've reduced the use of malloc(), dropped an extra function call, and
> -at least in theory- allowed proper handling of non-regular files.
> (If we have a file we can't read, we still should record it when it's
> of a type where file content is ignored).

I missed a curve, the diff between this and the previuos version was  
the following, and I don't see how that matches up with the above  
description? (Reduce use of malloc?)

Rob

diff -r 960462460639 toys/pending/cpio.c
--- a/toys/pending/cpio.c	Sat Oct 26 12:59:28 2013 -0500
+++ b/toys/pending/cpio.c	Sat Oct 26 15:14:22 2013 -0500
@@ -27,9 +27,10 @@
  /* Iterate through a list of files, read from stdin.
   * No users need rw.
   */
-void loopfiles_stdin(void (*function)(int fd, char *name))
+void loopfiles_stdin(void (*function)(int fd, char *name, struct stat  
st))
  {
    int fd;
+  struct stat st;
    char *name = toybuf;

    while (name != NULL){
@@ -39,9 +40,10 @@
      if (name != NULL) {
        if (toybuf[strlen(name) - 1] == '\n' ) {
          toybuf[strlen(name) - 1 ] = '\0';
+        if (lstat(name, &st) == -1) continue;
  	fd = open(name, O_RDONLY);
-	if (fd > 0) {
-          function(fd, name);
+	if (fd > 0 || !S_ISREG(st.st_mode)) {
+          function(fd, name, st);
  	  close(fd);
  	}
  	errno = 0;
@@ -105,13 +107,6 @@
    if (buf.st_size % 4) write(1, &n, 4 - (buf.st_size % 4));
  }

-void write_cpio_call(int fd, char *name)
-{
-  struct stat buf;
-  if (lstat(name, &buf) == -1) return;
-  write_cpio_member(fd, name, buf);
-}
-
  //convert hex to uint; mostly to allow using bits of non-terminated  
strings
  unsigned int htou(char * hex)
  {
@@ -224,7 +219,7 @@
  {
    switch (toys.optflags & (FLAG_i | FLAG_o | FLAG_t)) {
      case FLAG_o:
-      loopfiles_stdin(write_cpio_call);
+      loopfiles_stdin(write_cpio_member);
        write(1,  
"07070100000000000000000000000000000000000000010000000000000000"
         
"000000000000000000000000000000000000000B00000000TRAILER!!!\0\0\0",  
124);
        break;

Rob
 1382818585.0


More information about the Toybox mailing list