diff options
author | Jim Meyering <jim@meyering.net> | 1995-10-17 13:39:44 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1995-10-17 13:39:44 +0000 |
commit | 434b8092723c69302e49697228a0aaf452cb9dbc (patch) | |
tree | 0ff66511f62e777dfe9911a292a6c3441bcab649 /src/head.c | |
parent | 4feb3b1e06401394a3893a805e61b144ace77e8c (diff) | |
download | coreutils-434b8092723c69302e49697228a0aaf452cb9dbc.tar.xz |
Reorder functions to obviate forward dcls. Remove forward dcls.
Diffstat (limited to 'src/head.c')
-rw-r--r-- | src/head.c | 381 |
1 files changed, 186 insertions, 195 deletions
diff --git a/src/head.c b/src/head.c index 0c1baf3c4..5aca31f1d 100644 --- a/src/head.c +++ b/src/head.c @@ -54,15 +54,6 @@ enum header_mode int safe_read (); -static int head (); -static int head_bytes (); -static int head_file (); -static int head_lines (); -static long atou (); -static void parse_unit (); -static void usage (); -static void write_header (); - /* The name this program was run with. */ char *program_name; @@ -87,6 +78,192 @@ static struct option const long_options[] = {NULL, 0, NULL, 0} }; +static void +usage (status) + int status; +{ + if (status != 0) + fprintf (stderr, _("Try `%s --help' for more information.\n"), + program_name); + else + { + printf (_("\ +Usage: %s [OPTION]... [FILE]...\n\ +"), + program_name); + printf (_("\ +Print first 10 lines of each FILE to standard output.\n\ +With more than one FILE, precede each with a header giving the file name.\n\ +With no FILE, or when FILE is -, read standard input.\n\ +\n\ + -c, --bytes=SIZE print first SIZE bytes\n\ + -n, --lines=NUMBER print first NUMBER lines instead of first 10\n\ + -q, --quiet, --silent never print headers giving file names\n\ + -v, --verbose always print headers giving file names\n\ + --help display this help and exit\n\ + --version output version information and exit\n\ +\n\ +SIZE may have a multiplier suffix: b for 512, k for 1K, m for 1 Meg.\n\ +If -VALUE is used as first OPTION, read -c VALUE when one of\n\ +multipliers bkm follows concatenated, else read -n VALUE.\n\ +")); + } + exit (status); +} + +/* Convert STR, a string of ASCII digits, into an unsigned integer. + Return -1 if STR does not represent a valid unsigned integer. */ + +static long +atou (str) + char *str; +{ + int value; + + for (value = 0; ISDIGIT (*str); ++str) + value = value * 10 + *str - '0'; + return *str ? -1 : value; +} + +static void +parse_unit (str) + char *str; +{ + int arglen = strlen (str); + + if (arglen == 0) + return; + + switch (str[arglen - 1]) + { + case 'b': + unit_size = 512; + str[arglen - 1] = '\0'; + break; + case 'k': + unit_size = 1024; + str[arglen - 1] = '\0'; + break; + case 'm': + unit_size = 1048576; + str[arglen - 1] = '\0'; + break; + } +} + +static void +write_header (filename) + char *filename; +{ + static int first_file = 1; + + printf ("%s==> %s <==\n", (first_file ? "" : "\n"), filename); + first_file = 0; +} + +static int +head_bytes (filename, fd, bytes_to_write) + char *filename; + int fd; + long bytes_to_write; +{ + char buffer[BUFSIZE]; + int bytes_read; + + while (bytes_to_write) + { + bytes_read = safe_read (fd, buffer, BUFSIZE); + if (bytes_read < 0) + { + error (0, errno, "%s", filename); + return 1; + } + if (bytes_read == 0) + break; + if (bytes_read > bytes_to_write) + bytes_read = bytes_to_write; + if (fwrite (buffer, 1, bytes_read, stdout) == 0) + error (1, errno, _("write error")); + bytes_to_write -= bytes_read; + } + return 0; +} + +static int +head_lines (filename, fd, lines_to_write) + char *filename; + int fd; + long lines_to_write; +{ + char buffer[BUFSIZE]; + int bytes_read; + int bytes_to_write; + + while (lines_to_write) + { + bytes_read = safe_read (fd, buffer, BUFSIZE); + if (bytes_read < 0) + { + error (0, errno, "%s", filename); + return 1; + } + if (bytes_read == 0) + break; + bytes_to_write = 0; + while (bytes_to_write < bytes_read) + if (buffer[bytes_to_write++] == '\n' && --lines_to_write == 0) + break; + if (fwrite (buffer, 1, bytes_to_write, stdout) == 0) + error (1, errno, _("write error")); + } + return 0; +} + +static int +head (filename, fd, number) + char *filename; + int fd; + long number; +{ + if (unit_size) + return head_bytes (filename, fd, number); + else + return head_lines (filename, fd, number); +} + +static int +head_file (filename, number) + char *filename; + long number; +{ + int fd; + + if (!strcmp (filename, "-")) + { + have_read_stdin = 1; + filename = _("standard input"); + if (print_headers) + write_header (filename); + return head (filename, 0, number); + } + else + { + fd = open (filename, O_RDONLY); + if (fd >= 0) + { + int errors; + + if (print_headers) + write_header (filename); + errors = head (filename, fd, number); + if (close (fd) == 0) + return errors; + } + error (0, errno, "%s", filename); + return 1; + } +} + void main (argc, argv) int argc; @@ -218,189 +395,3 @@ main (argc, argv) exit (exit_status); } - -static int -head_file (filename, number) - char *filename; - long number; -{ - int fd; - - if (!strcmp (filename, "-")) - { - have_read_stdin = 1; - filename = _("standard input"); - if (print_headers) - write_header (filename); - return head (filename, 0, number); - } - else - { - fd = open (filename, O_RDONLY); - if (fd >= 0) - { - int errors; - - if (print_headers) - write_header (filename); - errors = head (filename, fd, number); - if (close (fd) == 0) - return errors; - } - error (0, errno, "%s", filename); - return 1; - } -} - -static void -write_header (filename) - char *filename; -{ - static int first_file = 1; - - printf ("%s==> %s <==\n", (first_file ? "" : "\n"), filename); - first_file = 0; -} - -static int -head (filename, fd, number) - char *filename; - int fd; - long number; -{ - if (unit_size) - return head_bytes (filename, fd, number); - else - return head_lines (filename, fd, number); -} - -static int -head_bytes (filename, fd, bytes_to_write) - char *filename; - int fd; - long bytes_to_write; -{ - char buffer[BUFSIZE]; - int bytes_read; - - while (bytes_to_write) - { - bytes_read = safe_read (fd, buffer, BUFSIZE); - if (bytes_read < 0) - { - error (0, errno, "%s", filename); - return 1; - } - if (bytes_read == 0) - break; - if (bytes_read > bytes_to_write) - bytes_read = bytes_to_write; - if (fwrite (buffer, 1, bytes_read, stdout) == 0) - error (1, errno, _("write error")); - bytes_to_write -= bytes_read; - } - return 0; -} - -static int -head_lines (filename, fd, lines_to_write) - char *filename; - int fd; - long lines_to_write; -{ - char buffer[BUFSIZE]; - int bytes_read; - int bytes_to_write; - - while (lines_to_write) - { - bytes_read = safe_read (fd, buffer, BUFSIZE); - if (bytes_read < 0) - { - error (0, errno, "%s", filename); - return 1; - } - if (bytes_read == 0) - break; - bytes_to_write = 0; - while (bytes_to_write < bytes_read) - if (buffer[bytes_to_write++] == '\n' && --lines_to_write == 0) - break; - if (fwrite (buffer, 1, bytes_to_write, stdout) == 0) - error (1, errno, _("write error")); - } - return 0; -} - -static void -parse_unit (str) - char *str; -{ - int arglen = strlen (str); - - if (arglen == 0) - return; - - switch (str[arglen - 1]) - { - case 'b': - unit_size = 512; - str[arglen - 1] = '\0'; - break; - case 'k': - unit_size = 1024; - str[arglen - 1] = '\0'; - break; - case 'm': - unit_size = 1048576; - str[arglen - 1] = '\0'; - break; - } -} - -/* Convert STR, a string of ASCII digits, into an unsigned integer. - Return -1 if STR does not represent a valid unsigned integer. */ - -static long -atou (str) - char *str; -{ - int value; - - for (value = 0; ISDIGIT (*str); ++str) - value = value * 10 + *str - '0'; - return *str ? -1 : value; -} - -static void -usage (status) - int status; -{ - if (status != 0) - fprintf (stderr, _("Try `%s --help' for more information.\n"), - program_name); - else - { - printf (_("\ -Usage: %s [OPTION]... [FILE]...\n\ -"), - program_name); - printf (_("\ -Print first 10 lines of each FILE to standard output.\n\ -With more than one FILE, precede each with a header giving the file name.\n\ -With no FILE, or when FILE is -, read standard input.\n\ -\n\ - -c, --bytes=SIZE print first SIZE bytes\n\ - -n, --lines=NUMBER print first NUMBER lines instead of first 10\n\ - -q, --quiet, --silent never print headers giving file names\n\ - -v, --verbose always print headers giving file names\n\ - --help display this help and exit\n\ - --version output version information and exit\n\ -\n\ -SIZE may have a multiplier suffix: b for 512, k for 1K, m for 1 Meg.\n\ -If -VALUE is used as first OPTION, read -c VALUE when one of\n\ -multipliers bkm follows concatenated, else read -n VALUE.\n\ -")); - } - exit (status); -} |