busybox/coreutils/cat.c
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2/*
   3 * cat implementation for busybox
   4 *
   5 * Copyright (C) 2003  Manuel Novoa III  <mjn3@codepoet.org>
   6 *
   7 * Licensed under GPLv2, see file LICENSE in this source tree.
   8 */
   9
  10/* BB_AUDIT SUSv3 compliant */
  11/* http://www.opengroup.org/onlinepubs/007904975/utilities/cat.html */
  12
  13//kbuild:lib-$(CONFIG_CAT)     += cat.o
  14//kbuild:lib-$(CONFIG_MORE)    += cat.o # more uses it if stdout isn't a tty
  15//kbuild:lib-$(CONFIG_LESS)    += cat.o # less too
  16//kbuild:lib-$(CONFIG_CRONTAB) += cat.o # crontab -l
  17
  18//config:config CAT
  19//config:       bool "cat"
  20//config:       default y
  21//config:       help
  22//config:         cat is used to concatenate files and print them to the standard
  23//config:         output. Enable this option if you wish to enable the 'cat' utility.
  24
  25//usage:#define cat_trivial_usage
  26//usage:       "[FILE]..."
  27//usage:#define cat_full_usage "\n\n"
  28//usage:       "Concatenate FILEs and print them to stdout"
  29//usage:
  30//usage:#define cat_example_usage
  31//usage:       "$ cat /proc/uptime\n"
  32//usage:       "110716.72 17.67"
  33
  34#include "libbb.h"
  35
  36/* This is a NOFORK applet. Be very careful! */
  37
  38
  39int bb_cat(char **argv)
  40{
  41        int fd;
  42        int retval = EXIT_SUCCESS;
  43
  44        if (!*argv)
  45                argv = (char**) &bb_argv_dash;
  46
  47        do {
  48                fd = open_or_warn_stdin(*argv);
  49                if (fd >= 0) {
  50                        /* This is not a xfunc - never exits */
  51                        off_t r = bb_copyfd_eof(fd, STDOUT_FILENO);
  52                        if (fd != STDIN_FILENO)
  53                                close(fd);
  54                        if (r >= 0)
  55                                continue;
  56                }
  57                retval = EXIT_FAILURE;
  58        } while (*++argv);
  59
  60        return retval;
  61}
  62
  63int cat_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
  64int cat_main(int argc UNUSED_PARAM, char **argv)
  65{
  66        getopt32(argv, "u");
  67        argv += optind;
  68        return bb_cat(argv);
  69}
  70