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#include "libbb.h" 26 27/* This is a NOFORK applet. Be very careful! */ 28 29 30int bb_cat(char **argv) 31{ 32 int fd; 33 int retval = EXIT_SUCCESS; 34 35 if (!*argv) 36 argv = (char**) &bb_argv_dash; 37 38 do { 39 fd = open_or_warn_stdin(*argv); 40 if (fd >= 0) { 41 /* This is not a xfunc - never exits */ 42 off_t r = bb_copyfd_eof(fd, STDOUT_FILENO); 43 if (fd != STDIN_FILENO) 44 close(fd); 45 if (r >= 0) 46 continue; 47 } 48 retval = EXIT_FAILURE; 49 } while (*++argv); 50 51 return retval; 52} 53 54int cat_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 55int cat_main(int argc UNUSED_PARAM, char **argv) 56{ 57 getopt32(argv, "u"); 58 argv += optind; 59 return bb_cat(argv); 60} 61