Add catv (separate applet instead of cat -v). Also cleanup cat.c comments,

the following of which (from cat.c) belongs in svn history instead of the
source code:

/* Mar 16, 2003      Manuel Novoa III   (mjn3@codepoet.org)
 *
 * This is a new implementation of 'cat' which aims to be SUSv3 compliant.
 *
 * Changes from the previous implementation include:
 * 1) Multiple '-' args are accepted as required by SUSv3.  The previous
 *    implementation would close stdin and segfault on a subsequent '-'.
 * 2) The '-u' options is required by SUSv3.  Note that the specified
 *    behavior for '-u' is done by default, so all we need do is accept
 *    the option.
 */
1_4_stable
Rob Landley 2006-05-31 19:36:04 +00:00
parent 9a5686b605
commit 8abbee474c
6 changed files with 82 additions and 29 deletions

View File

@ -25,6 +25,12 @@ config CONFIG_CAT
help help
cat is used to concatenate files and print them to the standard cat is used to concatenate files and print them to the standard
output. Enable this option if you wish to enable the 'cat' utility. output. Enable this option if you wish to enable the 'cat' utility.
config CONFIG_CATV
bool "catv"
default n
help
Display nonprinting characters as escape sequences (like some
implementations' cat -v option).
config CONFIG_FEATURE_CAT_ESCAPE config CONFIG_FEATURE_CAT_ESCAPE
bool "support -vetET" bool "support -vetET"

View File

@ -14,6 +14,7 @@ COREUTILS-y:=
COREUTILS-$(CONFIG_BASENAME) += basename.o COREUTILS-$(CONFIG_BASENAME) += basename.o
COREUTILS-$(CONFIG_CAL) += cal.o COREUTILS-$(CONFIG_CAL) += cal.o
COREUTILS-$(CONFIG_CAT) += cat.o COREUTILS-$(CONFIG_CAT) += cat.o
COREUTILS-$(CONFIG_CATV) += catv.o
COREUTILS-$(CONFIG_CHGRP) += chgrp.o COREUTILS-$(CONFIG_CHGRP) += chgrp.o
COREUTILS-$(CONFIG_CHMOD) += chmod.o COREUTILS-$(CONFIG_CHMOD) += chmod.o
COREUTILS-$(CONFIG_CHOWN) += chown.o COREUTILS-$(CONFIG_CHOWN) += chown.o

View File

@ -4,41 +4,14 @@
* *
* Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org> * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org>
* *
* This program is free software; you can redistribute it and/or modify * Licensed under GPLv2 or later, see file License in this tarball for details.
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/ */
/* BB_AUDIT SUSv3 compliant */ /* BB_AUDIT SUSv3 compliant */
/* http://www.opengroup.org/onlinepubs/007904975/utilities/cat.html */ /* http://www.opengroup.org/onlinepubs/007904975/utilities/cat.html */
/* Mar 16, 2003 Manuel Novoa III (mjn3@codepoet.org)
*
* This is a new implementation of 'cat' which aims to be SUSv3 compliant.
*
* Changes from the previous implementation include:
* 1) Multiple '-' args are accepted as required by SUSv3. The previous
* implementation would close stdin and segfault on a subsequent '-'.
* 2) The '-u' options is required by SUSv3. Note that the specified
* behavior for '-u' is done by default, so all we need do is accept
* the option.
*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include "busybox.h" #include "busybox.h"
#include <unistd.h>
int cat_main(int argc, char **argv) int cat_main(int argc, char **argv)
{ {

65
coreutils/catv.c Normal file
View File

@ -0,0 +1,65 @@
/* vi: set sw=4 ts=4: */
/*
* cat -v implementation for busybox
*
* Copyright (C) 2006 Rob Landley <rob@landley.net>
*
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
*/
/* See "Cat -v considered harmful" at
* http://cm.bell-labs.com/cm/cs/doc/84/kp.ps.gz */
#include "busybox.h"
#include <unistd.h>
#include <fcntl.h>
int catv_main(int argc, char **argv)
{
int retval = EXIT_SUCCESS, fd, flags;
flags = bb_getopt_ulflags(argc, argv, "etv");
flags ^= 4;
// Loop through files.
argv += optind;
do {
// Read from stdin if there's nothing else to do.
fd = 0;
if (*argv && 0>(fd = bb_xopen(*argv, O_RDONLY))) retval = EXIT_FAILURE;
else for(;;) {
int i, res;
res = read(fd, bb_common_bufsiz1, sizeof(bb_common_bufsiz1));
if (res < 0) retval = EXIT_FAILURE;
if (res <1) break;
for (i=0; i<res; i++) {
char c=bb_common_bufsiz1[i];
if (c > 126 && (flags & 4)) {
if (c == 127) {
printf("^?");
continue;
} else {
printf("M-");
c -= 128;
}
}
if (c < 32) {
if (c == 10) {
if (flags & 1) putchar('$');
} else if (flags & (c==9 ? 2 : 4)) {
printf("^%c", c+'@');
continue;
}
}
putchar(c);
}
}
if (ENABLE_FEATURE_CLEAN_UP && fd) close(fd);
} while (*++argv);
return retval;
}

View File

@ -63,6 +63,7 @@ APPLET_NOUSAGE(busybox, busybox, _BB_DIR_BIN, _BB_SUID_MAYBE)
USE_BUNZIP2(APPLET(bzcat, bunzip2, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) USE_BUNZIP2(APPLET(bzcat, bunzip2, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
USE_CAL(APPLET(cal, cal, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) USE_CAL(APPLET(cal, cal, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
USE_CAT(APPLET(cat, cat, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_CAT(APPLET(cat, cat, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_CATV(APPLET(catv, catv, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_CHATTR(APPLET(chattr, chattr, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_CHATTR(APPLET(chattr, chattr, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_CHGRP(APPLET(chgrp, chgrp, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_CHGRP(APPLET(chgrp, chgrp, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_CHMOD(APPLET(chmod, chmod, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_CHMOD(APPLET(chmod, chmod, _BB_DIR_BIN, _BB_SUID_NEVER))

View File

@ -136,6 +136,13 @@
"$ cat /proc/uptime\n" \ "$ cat /proc/uptime\n" \
"110716.72 17.67" "110716.72 17.67"
#define catv_trivial_usage \
"[-etv] [FILE]..."
#define catv_full_usage \
"Display nonprinting characters as ^x or M-x.\n\n"\
"\t-e\tEnd each line with $\n" \
"\t-t\tShow tabs as ^I\n" \
"\t-v\tDon't use ^x or M-x escapes."
#define chattr_trivial_usage \ #define chattr_trivial_usage \
"[-R] [-+=AacDdijsStTu] [-v version] files..." "[-R] [-+=AacDdijsStTu] [-v version] files..."
#define chattr_full_usage \ #define chattr_full_usage \