BSD 4_3_Reno release
[unix-history] / usr / src / usr.bin / split / split.c
index 0073331..318db8b 100644 (file)
@@ -3,11 +3,18 @@
  * 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 written prior permission. This software
- * is provided ``as is'' without express or implied warranty.
+ * provided that: (1) source distributions retain this entire copyright
+ * notice and comment, and (2) distributions including binaries display
+ * the following acknowledgement:  ``This product includes software
+ * developed by the University of California, Berkeley and its contributors''
+ * in the documentation or other materials provided with the distribution
+ * and in all advertising materials mentioning features or use of this
+ * software. Neither the name of the University nor the names of its
+ * contributors may 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 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
 #ifndef lint
  */
 
 #ifndef lint
@@ -17,7 +24,7 @@ char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)split.c    4.5 (Berkeley) %G%";
+static char sccsid[] = "@(#)split.c    4.8 (Berkeley) 6/1/90";
 #endif /* not lint */
 
 #include <sys/param.h>
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -27,7 +34,6 @@ static char sccsid[] = "@(#)split.c   4.5 (Berkeley) %G%";
 
 #define DEFLINE        1000                    /* default num lines per file */
 #define ERR    -1                      /* general error */
 
 #define DEFLINE        1000                    /* default num lines per file */
 #define ERR    -1                      /* general error */
-#define ERREXIT        0                       /* error exit */
 #define NO     0                       /* no/false */
 #define OK     0                       /* okay exit */
 #define YES    1                       /* yes/true */
 #define NO     0                       /* no/false */
 #define OK     0                       /* okay exit */
 #define YES    1                       /* yes/true */
@@ -41,12 +47,12 @@ static char bfr[MAXBSIZE],          /* I/O buffer */
                fname[MAXPATHLEN];      /* file name */
 
 main(argc, argv)
                fname[MAXPATHLEN];      /* file name */
 
 main(argc, argv)
-       int     argc;
-       char    **argv;
+       int argc;
+       char **argv;
 {
 {
-       register int    cnt;            /* general counter */
-       long    atol();
-       char    *strcpy();
+       register int cnt;
+       long atol();
+       char *strcpy();
 
        for (cnt = 1; cnt < argc; ++cnt) {
                if (argv[cnt][0] == '-')
 
        for (cnt = 1; cnt < argc; ++cnt) {
                if (argv[cnt][0] == '-')
@@ -80,7 +86,7 @@ main(argc, argv)
                else if (ifd == ERR) {          /* input file */
                        if ((ifd = open(argv[cnt], O_RDONLY, 0)) < 0) {
                                perror(argv[cnt]);
                else if (ifd == ERR) {          /* input file */
                        if ((ifd = open(argv[cnt], O_RDONLY, 0)) < 0) {
                                perror(argv[cnt]);
-                               exit(ERREXIT);
+                               exit(1);
                        }
                }
                else if (!*fname)               /* output file prefix */
                        }
                }
                else if (!*fname)               /* output file prefix */
@@ -95,19 +101,18 @@ main(argc, argv)
        if (!numlines)
                numlines = DEFLINE;
        split2();
        if (!numlines)
                numlines = DEFLINE;
        split2();
+       exit(0);
 }
 
 /*
  * split1 --
  *     split by bytes
  */
 }
 
 /*
  * split1 --
  *     split by bytes
  */
-static
 split1()
 {
 split1()
 {
-       register long   bcnt;           /* byte counter */
-       register int    dist,           /* buffer offset */
-                       len;            /* read length */
-       register char   *C;             /* tmp pointer into buffer */
+       register long bcnt;
+       register int dist, len;
+       register char *C;
 
        for (bcnt = 0;;)
                switch(len = read(ifd, bfr, MAXBSIZE)) {
 
        for (bcnt = 0;;)
                switch(len = read(ifd, bfr, MAXBSIZE)) {
@@ -115,7 +120,7 @@ split1()
                        exit(OK);
                case ERR:
                        perror("read");
                        exit(OK);
                case ERR:
                        perror("read");
-                       exit(ERREXIT);
+                       exit(1);
                default:
                        if (!file_open) {
                                newfile();
                default:
                        if (!file_open) {
                                newfile();
@@ -123,15 +128,18 @@ split1()
                        }
                        if (bcnt + len >= bytecnt) {
                                dist = bytecnt - bcnt;
                        }
                        if (bcnt + len >= bytecnt) {
                                dist = bytecnt - bcnt;
-                               write(ofd, bfr, dist);
+                               if (write(ofd, bfr, dist) != dist)
+                                       wrerror();
                                len -= dist;
                                for (C = bfr + dist; len >= bytecnt; len -= bytecnt, C += bytecnt) {
                                        newfile();
                                len -= dist;
                                for (C = bfr + dist; len >= bytecnt; len -= bytecnt, C += bytecnt) {
                                        newfile();
-                                       write(ofd, C, (int)bytecnt);
+                                       if (write(ofd, C, (int)bytecnt) != bytecnt)
+                                               wrerror();
                                }
                                if (len) {
                                        newfile();
                                }
                                if (len) {
                                        newfile();
-                                       write(ofd, C, len);
+                                       if (write(ofd, C, len) != len)
+                                               wrerror();
                                }
                                else
                                        file_open = NO;
                                }
                                else
                                        file_open = NO;
@@ -139,7 +147,8 @@ split1()
                        }
                        else {
                                bcnt += len;
                        }
                        else {
                                bcnt += len;
-                               write(ofd, bfr, len);
+                               if (write(ofd, bfr, len) != len)
+                                       wrerror();
                        }
                }
 }
                        }
                }
 }
@@ -148,13 +157,11 @@ split1()
  * split2 --
  *     split by lines
  */
  * split2 --
  *     split by lines
  */
-static
 split2()
 {
 split2()
 {
-       register char   *Ce,                    /* start/end pointers */
-                       *Cs;
-       register long   lcnt;                   /* line counter */
-       register int    len;                    /* read length */
+       register char *Ce, *Cs;
+       register long lcnt;
+       register int len, bcnt;
 
        for (lcnt = 0;;)
                switch(len = read(ifd, bfr, MAXBSIZE)) {
 
        for (lcnt = 0;;)
                switch(len = read(ifd, bfr, MAXBSIZE)) {
@@ -162,7 +169,7 @@ split2()
                        exit(0);
                case ERR:
                        perror("read");
                        exit(0);
                case ERR:
                        perror("read");
-                       break;
+                       exit(1);
                default:
                        if (!file_open) {
                                newfile();
                default:
                        if (!file_open) {
                                newfile();
@@ -170,7 +177,9 @@ split2()
                        }
                        for (Cs = Ce = bfr; len--; Ce++)
                                if (*Ce == '\n' && ++lcnt == numlines) {
                        }
                        for (Cs = Ce = bfr; len--; Ce++)
                                if (*Ce == '\n' && ++lcnt == numlines) {
-                                       write(ofd, Cs, (int)(Ce - Cs) + 1);
+                                       bcnt = Ce - Cs + 1;
+                                       if (write(ofd, Cs, bcnt) != bcnt)
+                                               wrerror();
                                        lcnt = 0;
                                        Cs = Ce + 1;
                                        if (len)
                                        lcnt = 0;
                                        Cs = Ce + 1;
                                        if (len)
@@ -178,8 +187,11 @@ split2()
                                        else
                                                file_open = NO;
                                }
                                        else
                                                file_open = NO;
                                }
-                       if (Cs < Ce)
-                               write(ofd, Cs, (int)(Ce - Cs));
+                       if (Cs < Ce) {
+                               bcnt = Ce - Cs;
+                               if (write(ofd, Cs, bcnt) != bcnt)
+                                       wrerror();
+                       }
                }
 }
 
                }
 }
 
@@ -187,12 +199,11 @@ split2()
  * newfile --
  *     open a new file
  */
  * newfile --
  *     open a new file
  */
-static
 newfile()
 {
 newfile()
 {
-       static long     fnum;           /* file name counter */
-       static short    defname;        /* using default name, "x" */
-       static char     *fpnt;          /* output file name pointer */
+       static long fnum;
+       static short defname;
+       static char *fpnt;
 
        if (ofd == ERR) {
                if (fname[0]) {
 
        if (ofd == ERR) {
                if (fname[0]) {
@@ -214,7 +225,7 @@ newfile()
        if (fnum == MAXFILES) {
                if (!defname || fname[0] == 'z') {
                        fputs("split: too many files.\n", stderr);
        if (fnum == MAXFILES) {
                if (!defname || fname[0] == 'z') {
                        fputs("split: too many files.\n", stderr);
-                       exit(ERREXIT);
+                       exit(1);
                }
                ++fname[0];
                fnum = 0;
                }
                ++fname[0];
                fnum = 0;
@@ -232,9 +243,18 @@ newfile()
  * usage --
  *     print usage message and die
  */
  * usage --
  *     print usage message and die
  */
-static
 usage()
 {
        fputs("usage: split [-] [-#] [-b byte_count] [file [prefix]]\n", stderr);
 usage()
 {
        fputs("usage: split [-] [-#] [-b byte_count] [file [prefix]]\n", stderr);
-       exit(ERREXIT);
+       exit(1);
+}
+
+/*
+ * wrerror --
+ *     write error
+ */
+wrerror()
+{
+       perror("split: write");
+       exit(1);
 }
 }