date and time created 88/03/23 09:52:47 by karels
[unix-history] / usr / src / local / local.cmd / 20b.c
index 13d3fd5..cbb84e0 100644 (file)
@@ -1,35 +1,53 @@
 /*
  * Copyright (c) 1986 Regents of the University of California.
 /*
  * Copyright (c) 1986 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of California at Berkeley. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
  */
 
 #ifndef lint
 char copyright[] =
 "@(#) Copyright (c) 1986 Regents of the University of California.\n\
  All rights reserved.\n";
  */
 
 #ifndef lint
 char copyright[] =
 "@(#) Copyright (c) 1986 Regents of the University of California.\n\
  All rights reserved.\n";
-#endif not lint
+#endif /* not lint */
 
 #ifndef lint
 
 #ifndef lint
-static char sccsid[] = "@(#)20b.c      5.1 (Berkeley) %G%";
-#endif not lint
+static char sccsid[] = "@(#)20b.c      5.3 (Berkeley) %G%";
+#endif /* not lint */
 
 
-main()
+#include <stdio.h>
+
+main(argc, argv)
+       int argc;
+       char **argv;
 {
 {
+       register int bsize, cc, want;
        register char *base, *current;
        register char *base, *current;
-       register int cc, want;
-       int bsize = 20 * 512;
        char *alloca();
 
        char *alloca();
 
+       if (argc > 1) {
+               bsize = atoi(argv[1]);
+               if (bsize <= 0) {
+                       fputs("20b: bad block size.\n", stderr);
+                       exit(-1);
+               }
+       }
        base = alloca(bsize);
        base = alloca(bsize);
-       for(cc = bsize; cc > 0;) {
+       for (cc = bsize; cc > 0;) {
                current = base;
                current = base;
-               for(want = bsize; want > 0 && cc > 0; want -= cc) {
-                       cc = read(0,current,want);
+               for (want = bsize; want > 0 && cc > 0; want -= cc) {
+                       if ((cc = read(0, current, want)) < 0)
+                               return(-1);
                        current += cc;
                }
                        current += cc;
                }
-               if((want = bsize - want) > 0)
-                   write(1,base,want);
+               want = bsize - want;
+               if (want && write(1, base, want) != want)
+                       return(-1);
        }
        return(0);
 }
        }
        return(0);
 }