document conditions wherein ruserok will fail
[unix-history] / usr / src / local / local.cmd / 20b.c
index 04adcc2..e0b0532 100644 (file)
@@ -3,11 +3,16 @@
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms are permitted
  * 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.
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, 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'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
 #ifndef lint
  */
 
 #ifndef lint
@@ -17,25 +22,37 @@ char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)20b.c      5.2 (Berkeley) %G%";
+static char sccsid[] = "@(#)20b.c      5.5 (Berkeley) %G%";
 #endif /* not lint */
 
 #endif /* not lint */
 
-#define BSIZE  (20 * 512)
-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;
        char *alloca();
 
        char *alloca();
 
-       base = alloca(BSIZE);
-       for (cc = BSIZE; cc > 0;) {
+       if (argc > 1) {
+               bsize = atoi(argv[1]);
+               if (bsize <= 0) {
+                       fputs("20b: bad block size.\n", stderr);
+                       exit(-1);
+               }
+       }
+       else
+               bsize = 20 * 512;
+       base = alloca(bsize);
+       for (cc = bsize; cc > 0;) {
                current = base;
                current = base;
-               for (want = BSIZE; want > 0 && cc > 0; want -= cc) {
+               for (want = bsize; want > 0 && cc > 0; want -= cc) {
                        if ((cc = read(0, current, want)) < 0)
                                return(-1);
                        current += cc;
                }
                        if ((cc = read(0, current, want)) < 0)
                                return(-1);
                        current += cc;
                }
-               want = BSIZE - want;
+               want = bsize - want;
                if (want && write(1, base, want) != want)
                        return(-1);
        }
                if (want && write(1, base, want) != want)
                        return(-1);
        }