pintos: Make sure to print buffered data at end of input.
authorBen Pfaff <blp@cs.stanford.edu>
Thu, 7 Jan 2010 17:26:11 +0000 (09:26 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Tue, 26 Jan 2010 17:13:02 +0000 (09:13 -0800)
Here, $buf might have some data in it that has not yet been printed, but
we were discarding it (and trying to read more) without printing it.

(In Perl, "do" ensures that the inner block runs at least once; without
"do" the condition is evaluated first.)

src/utils/pintos

index 1abd2edc6a9055ae37788867dc022110d8310ea2..909df8391c57251f290142d134f59787590c253a 100755 (executable)
@@ -819,7 +819,7 @@ sub xsystem {
            for (;;) {
                if (waitpid ($pid, WNOHANG) != 0) {
                    # Subprocess died.  Pass through any remaining data.
-                   print $buf while sysread ($in, $buf, 4096) > 0;
+                   do { print $buf } while sysread ($in, $buf, 4096) > 0;
                    last;
                }