summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Kunze <thommycheck@gmx.de>2008-04-15 11:00:53 +0000
committerThomas Kunze <thommycheck@gmx.de>2008-04-15 11:00:53 +0000
commit5acbd244f1d2123346fede058e7bd524e7bd6454 (patch)
tree8727027d26b1d1fffdacacb342f2d7fbd3ec6970
parenteae8b1ef06d535f213846b9e859090b57e263e27 (diff)
parent22586092474a75f63337026fcfaa25701ad5b872 (diff)
merge of '7845f20bb970124a1ca02e777d622c6f8e4cc0e0'
and 'b46f413485607ea3e782a93b2fbc4b59966947fe'
-rw-r--r--packages/klibc/files/wc.patch236
-rw-r--r--packages/klibc/klibc-common.inc1
-rw-r--r--packages/klibc/klibc-utils-static_1.5.bb6
-rw-r--r--packages/klibc/klibc.inc7
-rw-r--r--packages/klibc/klibc_1.5.bb2
5 files changed, 247 insertions, 5 deletions
diff --git a/packages/klibc/files/wc.patch b/packages/klibc/files/wc.patch
new file mode 100644
index 0000000000..296a4f9d92
--- /dev/null
+++ b/packages/klibc/files/wc.patch
@@ -0,0 +1,236 @@
+Index: klibc-1.5/usr/utils/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/utils/Kbuild 2008-04-14 23:21:57.702294843 +0200
++++ klibc-1.5/usr/utils/Kbuild 2008-04-14 23:24:38.817291977 +0200
+@@ -3,7 +3,7 @@
+ #
+
+ progs := chroot dd mkdir mkfifo mknod mount pivot_root umount
+-progs += true false sleep ln nuke minips cat losetup
++progs += true false sleep ln nuke minips cat losetup wc
+ progs += insmod uname halt kill readlink cpio modprobe
+
+ static-y := $(addprefix static/, $(progs))
+@@ -56,6 +56,9 @@
+ shared/modprobe-y := modprobe.o
+ static/losetup-y := losetup.o
+ shared/losetup-y := losetup.o
++static/wc-y := wc.o
++shared/wc-y := wc.o
++
+ # Additionally linked targets
+ always := static/reboot static/poweroff shared/reboot shared/poweroff
+
+Index: klibc-1.5/usr/utils/wc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ klibc-1.5/usr/utils/wc.c 2008-04-14 23:25:15.449292711 +0200
+@@ -0,0 +1,208 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * wc implementation for busybox
++ *
++ * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org>
++ *
++ * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
++ */
++
++/* BB_AUDIT SUSv3 _NOT_ compliant -- option -m is not currently supported. */
++/* http://www.opengroup.org/onlinepubs/007904975/utilities/wc.html */
++
++/* Mar 16, 2003 Manuel Novoa III (mjn3@codepoet.org)
++ *
++ * Rewritten to fix a number of problems and do some size optimizations.
++ * Problems in the previous busybox implementation (besides bloat) included:
++ * 1) broken 'wc -c' optimization (read note below)
++ * 2) broken handling of '-' args
++ * 3) no checking of ferror on EOF returns
++ * 4) isprint() wasn't considered when word counting.
++ *
++ * TODO:
++ *
++ * When locale support is enabled, count multibyte chars in the '-m' case.
++ *
++ * NOTES:
++ *
++ * The previous busybox wc attempted an optimization using stat for the
++ * case of counting chars only. I omitted that because it was broken.
++ * It didn't take into account the possibility of input coming from a
++ * pipe, or input from a file with file pointer not at the beginning.
++ *
++ * To implement such a speed optimization correctly, not only do you
++ * need the size, but also the file position. Note also that the
++ * file position may be past the end of file. Consider the example
++ * (adapted from example in gnu wc.c)
++ *
++ * echo hello > /tmp/testfile &&
++ * (dd ibs=1k skip=1 count=0 &> /dev/null; wc -c) < /tmp/testfile
++ *
++ * for which 'wc -c' should output '0'.
++ */
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++#undef isspace
++#undef isprint
++#define isspace(c) ((((c) == ' ') || (((unsigned int)((c) - 9)) <= (13 - 9))))
++#define isprint(c) (((unsigned int)((c) - 0x20)) <= (0x7e - 0x20))
++#define isspace_given_isprint(c) ((c) == ' ')
++
++#define COUNT_T unsigned long
++#define COUNT_FMT "u"
++#define optind 1
++FILE *fopen_or_warn_stdin(const char *filename)
++{
++ FILE *fp = stdin;
++
++ if (filename[0]) {
++ fp = fopen(filename, "r");
++ }
++
++ return fp;
++}
++
++enum {
++ WC_LINES = 0,
++ WC_WORDS = 1,
++ WC_CHARS = 2,
++ WC_LENGTH = 3
++};
++
++int main(int argc, char **argv)
++{
++ FILE *fp;
++ const char *s, *arg;
++ const char *start_fmt = "%9"COUNT_FMT;
++ const char *fname_fmt = " %s\n";
++ COUNT_T *pcounts;
++ COUNT_T counts[4];
++ COUNT_T totals[4];
++ unsigned linepos;
++ unsigned u;
++ int num_files = 0;
++ int c;
++ signed char status = EXIT_SUCCESS;
++ signed char in_word;
++ unsigned print_type;
++
++ print_type = getopt(argc, argv, "lwcL");
++
++ if (print_type == 0) {
++ print_type = (1 << WC_LINES) | (1 << WC_WORDS) | (1 << WC_CHARS);
++ }
++
++ argv += optind;
++ if (!argv[0]) {
++ *--argv = (char *) "wc";
++ fname_fmt = "\n";
++ if (!((print_type-1) & print_type)) /* exactly one option? */
++ start_fmt = "%"COUNT_FMT;
++ }
++
++ memset(totals, 0, sizeof(totals));
++
++ pcounts = counts;
++
++ while ((arg = *argv++) != 0) {
++ ++num_files;
++ fp = fopen_or_warn_stdin(arg);
++ if (!fp) {
++ status = EXIT_FAILURE;
++ continue;
++ }
++
++ memset(counts, 0, sizeof(counts));
++ linepos = 0;
++ in_word = 0;
++
++ do {
++ /* Our -w doesn't match GNU wc exactly... oh well */
++
++ ++counts[WC_CHARS];
++ c = getc(fp);
++ if (isprint(c)) {
++ ++linepos;
++ if (!isspace_given_isprint(c)) {
++ in_word = 1;
++ continue;
++ }
++ } else if (((unsigned int)(c - 9)) <= 4) {
++ /* \t 9
++ * \n 10
++ * \v 11
++ * \f 12
++ * \r 13
++ */
++ if (c == '\t') {
++ linepos = (linepos | 7) + 1;
++ } else { /* '\n', '\r', '\f', or '\v' */
++ DO_EOF:
++ if (linepos > counts[WC_LENGTH]) {
++ counts[WC_LENGTH] = linepos;
++ }
++ if (c == '\n') {
++ ++counts[WC_LINES];
++ }
++ if (c != '\v') {
++ linepos = 0;
++ }
++ }
++ } else if (c == EOF) {
++/* if (ferror(fp)) {
++ status = EXIT_FAILURE;
++ }
++*/ --counts[WC_CHARS];
++ goto DO_EOF; /* Treat an EOF as '\r'. */
++ } else {
++ continue;
++ }
++
++ counts[WC_WORDS] += in_word;
++ in_word = 0;
++ if (c == EOF) {
++ break;
++ }
++ } while (1);
++
++ if (totals[WC_LENGTH] < counts[WC_LENGTH]) {
++ totals[WC_LENGTH] = counts[WC_LENGTH];
++ }
++ totals[WC_LENGTH] -= counts[WC_LENGTH];
++
++ if(fp != stdin)
++ fclose(fp);
++
++ OUTPUT:
++ /* coreutils wc tries hard to print pretty columns
++ * (saves results for all files, find max col len etc...)
++ * we won't try that hard, it will bloat us too much */
++ s = start_fmt;
++ u = 0;
++ do {
++ if (print_type & (1 << u)) {
++ printf(s, pcounts[u]);
++ s = " %9"COUNT_FMT; /* Ok... restore the leading space. */
++ }
++ totals[u] += pcounts[u];
++ } while (++u < 4);
++ printf(fname_fmt, arg);
++ }
++
++ /* If more than one file was processed, we want the totals. To save some
++ * space, we set the pcounts ptr to the totals array. This has the side
++ * effect of trashing the totals array after outputting it, but that's
++ * irrelavent since we no longer need it. */
++ if (num_files > 1) {
++ num_files = 0; /* Make sure we don't get here again. */
++ arg = "total";
++ pcounts = totals;
++ --argv;
++ goto OUTPUT;
++ }
++
++ fflush(stdout);
++ exit(status);
++}
diff --git a/packages/klibc/klibc-common.inc b/packages/klibc/klibc-common.inc
index 5e890b3bc8..87fb6498f4 100644
--- a/packages/klibc/klibc-common.inc
+++ b/packages/klibc/klibc-common.inc
@@ -9,6 +9,7 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/Stable/klibc-${PV}.tar.bz2 \
file://modprobe.patch;patch=1 \
file://losetup.patch;patch=1 \
file://dash_readopt.patch;patch=1 \
+ file://wc.patch;patch=1 \
"
S = "${WORKDIR}/klibc-${PV}"
PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/packages/klibc/klibc-utils-static_1.5.bb b/packages/klibc/klibc-utils-static_1.5.bb
index f0429e34a2..f7015ffaf7 100644
--- a/packages/klibc/klibc-utils-static_1.5.bb
+++ b/packages/klibc/klibc-utils-static_1.5.bb
@@ -1,6 +1,6 @@
require klibc-common.inc
-PR = "r9"
+PR = "r10"
# We only want the static utils. klibc build both. So we install only what we want.
do_install() {
@@ -38,6 +38,7 @@ do_install() {
install -m 755 usr/utils/static/uname ${D}${base_bindir}
install -m 755 usr/utils/static/modprobe ${D}${base_bindir}
install -m 755 usr/utils/static/losetup ${D}${base_bindir}
+ install -m 755 usr/utils/static/wc ${D}${base_bindir}
cd ${D}${base_bindir}
ln -s gzip gunzip
ln -s gzip zcat
@@ -60,7 +61,7 @@ PACKAGES = "klibc-utils-static-sh klibc-utils-static-gzip \
klibc-utils-static-reboot klibc-utils-static-sleep \
klibc-utils-static-true klibc-utils-static-umount \
klibc-utils-static-uname klibc-utils-static-modprobe \
- klibc-utils-static-losetup"
+ klibc-utils-static-losetup klibc-utils-static-wc"
FILES_klibc-utils-static-sh = "${base_bindir}/sh"
FILES_klibc-utils-static-gzip = "${base_bindir}/gzip ${base_bindir}/gunzip ${base_bindir}/zcat"
@@ -95,3 +96,4 @@ FILES_klibc-utils-static-umount = "${base_bindir}/umount"
FILES_klibc-utils-static-uname = "${base_bindir}/uname"
FILES_klibc-utils-static-modprobe = "${base_bindir}/modprobe"
FILES_klibc-utils-static-losetup = "${base_bindir}/losetup"
+FILES_klibc-utils-static-wc = "${base_bindir}/wc"
diff --git a/packages/klibc/klibc.inc b/packages/klibc/klibc.inc
index c32111af37..15205c754b 100644
--- a/packages/klibc/klibc.inc
+++ b/packages/klibc/klibc.inc
@@ -40,7 +40,8 @@ do_install() {
install -m 755 usr/utils/shared/uname ${D}${base_bindir}
install -m 755 usr/utils/shared/modprobe ${D}${base_bindir}
install -m 755 usr/utils/shared/losetup ${D}${base_bindir}
-
+ install -m 755 usr/utils/shared/wc ${D}${base_bindir}
+
install -d ${D}${base_libdir}
install -m 755 usr/klibc/klibc-*.so ${D}${base_libdir}
cd ${D}${base_libdir}
@@ -74,7 +75,7 @@ PACKAGES = "${PN} klibc-utils-sh klibc-utils-kinit \
klibc-utils-sleep klibc-utils-true \
klibc-utils-umount klibc-utils-uname \
klibc-utils-gzip klibc-utils-modprobe \
- klibc-utils-losetup"
+ klibc-utils-losetup klibc-utils-wc"
FILES_${PN} = "${base_libdir}/klibc*.so"
FILES_klibc-utils-sh = "${base_bindir}/sh"
@@ -110,6 +111,7 @@ FILES_klibc-utils-umount = "${base_bindir}/umount"
FILES_klibc-utils-uname = "${base_bindir}/uname"
FILES_klibc-utils-modprobe = "${base_bindir}/modprobe"
FILES_klibc-utils-losetup = "${base_bindir}/losetup"
+FILES_klibc-utils-wc = "${base_bindir}/wc"
# Yes we want exactly the klibc that was compiled with the utils
RDEPENDS_klibc-utils-sh = "${PN} (=${PV}-${PR})"
@@ -144,3 +146,4 @@ RDEPENDS_klibc-utils-umount = "${PN} (=${PV}-${PR})"
RDEPENDS_klibc-utils-uname = "${PN} (=${PV}-${PR})"
RDEPENDS_klibc-utils-modprobe = "${PN} (=${PV}-${PR})"
RDEPENDS_klibc-utils-losetup = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-wc = "${PN} (=${PV}-${PR})"
diff --git a/packages/klibc/klibc_1.5.bb b/packages/klibc/klibc_1.5.bb
index 967f88f948..70d2819394 100644
--- a/packages/klibc/klibc_1.5.bb
+++ b/packages/klibc/klibc_1.5.bb
@@ -1,2 +1,2 @@
require klibc.inc
-PR = "r7"
+PR = "r8"