commit 3725d501b39f7c3e8e5cbb681bf74df3ad47fd56
Author: FRIGN <[email protected]>
Date:   Tue Mar 17 22:59:48 2015 +0100

    Audit split(1)
    
    1) Refactor manpage, add STANDARDS section.
    2) Boolean-style-changes.
    3) Update usage, reflecting num-idiom also changed in the manpage.
    4) Refactor error messages.
    5) Also fclose stdin.
    6) Empty line before return.

diff --git a/README b/README
index 0ba3392..9ca1c74 100644
--- a/README
+++ b/README
@@ -56,7 +56,7 @@ The following tools are implemented ('*' == finished, '#' == 
UTF-8 support,
 #*| printf          yes                          none
 =*| pwd             yes                          none
 =   readlink        non-posix                    none
-=*  renice          yes                          none
+=*| renice          yes                          none
 =*| rm              yes                          none (-i)
 =*| rmdir           yes                          none
 #   sed
@@ -67,7 +67,7 @@ The following tools are implemented ('*' == finished, '#' == 
UTF-8 support,
 =*| sha512sum       non-posix                    none
 =*| sleep           yes                          none
     sort            no                           -m, -o, -d, -f, -i
-=*  split           yes                          none
+=*| split           yes                          none
 =*| sponge          non-posix                    none
 #*  strings         yes                          none
 =*  sync            non-posix                    none
diff --git a/split.1 b/split.1
index 83c39cb..1aa1a90 100644
--- a/split.1
+++ b/split.1
@@ -1,4 +1,4 @@
-.Dd January 30, 2015
+.Dd March 17, 2015
 .Dt SPLIT 1
 .Os sbase
 .Sh NAME
@@ -6,43 +6,45 @@
 .Nd split up a file
 .Sh SYNOPSIS
 .Nm
-.Op Fl a Ar len
-.Op Fl b Ar bytes[k|m|g]
+.Op Fl a Ar num
+.Op Fl b Ar num[k|m|g] | Fl l Ar num
 .Op Fl d
-.Op Fl l Ar lines
-.Op Ar input Op Ar prefix
+.Op Ar file Op Ar prefix
 .Sh DESCRIPTION
 .Nm
-reads a file, splitting it into smaller files, every
-.Ar bytes
-bytes
-or
-.Ar lines
-lines. If
+splits
+.Ar file
+into files with 1000 lines each, named with
+.Ar prefix
+"x" followed by 2-digit alphabetical count suffixes.
+If
 .Nm
-runs out of filenames before all the data can be written, it stops at the
-last valid filename, leaving all the written data on the disk.
-The
-.Fl b
-and
-.Fl l
-flags are mutually exclusive. Only the last one specified will be obeyed.
+runs out of suffixes, it stops after the last valid filename.
 .Sh OPTIONS
 .Bl -tag -width Ds
-.It Fl a Ar len
-Set the suffix length to
-.Ar len
-characters long.
-.It Fl b Ar bytes[k|m|g]
+.It Fl a Ar num
+Set suffix length to
+.Ar num
+characters.
+The default is 2.
+.It Fl b Ar num[k|m|g] | Fl l Ar num
 Start a new file every
-.Ar bytes
-bytes. The units k, m, and g are case insensitive, and powers of 2, not 10.
+.Ar num
+bytes | lines.
+The units k, m, and g are case insensitive and powers of 2, not 10.
+The default is 1000 lines.
 .It Fl d
-Use decimal suffixes rather than alphabetical.
-.It Fl l Ar lines
-Start a new file every
-.Ar lines
-lines.
+Use decimal rather than alphabetical suffixes.
 .El
 .Sh SEE ALSO
 .Xr cat 1
+.Sh STANDARDS
+The
+.Nm
+utility is compliant with the
+.St -p1003.1-2008
+specification.
+.Pp
+The
+.Op Fl d
+flag and g unit are an extension to that specification.
diff --git a/split.c b/split.c
index b68635f..c0aa87e 100644
--- a/split.c
+++ b/split.c
@@ -17,9 +17,8 @@ itostr(char *str, int x, int n)
                str[n] = start + (x % base);
                x /= base;
        }
-       if (x)
-               return -1;
-       return 0;
+
+       return x ? -1 : 0;
 }
 
 static FILE *
@@ -34,27 +33,25 @@ nextfile(FILE *f, char *buf, int plen, int slen)
 
        if (!(f = fopen(buf, "w")))
                eprintf("'%s':", buf);
+
        return f;
 }
 
 static void
 usage(void)
 {
-       eprintf("usage: %s [-a len] [-b bytes[k|m|g]] [-d] [-l lines] "
-               "[input [prefix]]\n", argv0);
+       eprintf("usage: %s [-a num] [-b num[k|m|g] | -l num] [-d] "
+               "[file [prefix]]\n", argv0);
 }
 
 int
 main(int argc, char *argv[])
 {
        FILE *in = stdin, *out = NULL;
-       char name[NAME_MAX + 1];
-       char *prefix = "x";
-       char *file = NULL;
-       char *tmp, *end;
        size_t size = 1000, scale = 1, n;
-       int ch, plen, slen = 2, always = 0;
        long l;
+       int ch, plen, slen = 2, always = 0;
+       char name[NAME_MAX + 1], *prefix = "x", *file = NULL, *tmp, *end;
 
        ARGBEGIN {
        case 'a':
@@ -111,9 +108,9 @@ main(int argc, char *argv[])
                eprintf("names cannot exceed %d bytes\n", NAME_MAX);
        estrlcpy(name, prefix, sizeof(name));
 
-       if (file && strcmp(file, "-") != 0) {
+       if (file && strcmp(file, "-")) {
                if (!(in = fopen(file, "r")))
-                       eprintf("'%s':", file);
+                       eprintf("fopen %s:", file);
        }
 
        n = 0;
@@ -126,9 +123,10 @@ main(int argc, char *argv[])
                n += (always || ch == '\n');
                putc(ch, out);
        }
-       if (in != stdin)
-               fclose(in);
+
+       fclose(in);
        if (out)
                fclose(out);
+
        return 0;
 }

Reply via email to