[Toybox] How is paste.c broken, let me count the ways...
    Rob Landley 
    rob at landley.net
       
    Mon Mar 20 09:13:13 PDT 2017
    
    
  
I've never really used "paste" (I keep thinking it lets the command line
interact with the x11 clipboard; instead it collates lines) but it's in
posix and one was contributed to toybox slightly before I started the
"pending" directory, and a few days ago a version got posted to
busybox's mailing list which had tests in it so I thought I'd try them
against toybox's version, and... It doesn't seem to work at _all_?
  paste <(echo -e 'o1\no2\no3') <(echo -e 't1\nt2\nt3')
Should produce
  o1\tt1
  o2\tt2
  o3\tt3
But instead has each \t and \n swapped. And the -s version should do:
  o1\to2\to3
  t1\tt2\tt3
But each line has an extra trailing tab.
So I start looking at the code, which is copying the -d stuff into
toybuf WITH NO BOUNDS CHECKING. There's no way I actually reviewed this,
he says while replacing ten lines of code with one line. No really:
-  for (i = 0, c = 0; c != EOF;) {
-    switch(c = getc(f)) {
-    case '\n':
-      putchar(toybuf[i++ % ndelim]);
-    case EOF:
-      break;
-    default:
-      putchar(c);
-    }
-  }
+
+  for (i=0; 0<=(c=getc(f));) putchar((c=='\n')?toybuf[i++%ndelim]:c);
(That last line has more spaces in the actual .c file, but the
wordwrapper in thunderbird's a bit aggressive. And totally broken when
it comes to quoted material...)
Sigh, this file was on my "list of commands to review" back when that
was a file instead of a directory. I thought I got all those but
apparently not, I should go back and dig that list up and see what else
I missed.
Rob
P.S. I have a todo item to do a full review of everything before 1.0,
but given how much $DAYJOB's distracted me from just general development
the past few months, dunno when that's likely to happen...
    
    
More information about the Toybox
mailing list