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.
This commit is contained in:
parent
4d946a274f
commit
3725d501b3
4
README
4
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
|
||||
|
|
62
split.1
62
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.
|
||||
|
|
26
split.c
26
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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user