summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2005-05-17 01:02:16 +0000
committerMike Frysinger <vapier@gentoo.org>2005-05-17 01:02:16 +0000
commit53deb8d345f9677c7d626a73be5a1567a74fb590 (patch)
tree9fefe4d2e4ecb076853416022603b447c0a0fa08
parentold (diff)
downloadgentoo-2-53deb8d345f9677c7d626a73be5a1567a74fb590.tar.gz
gentoo-2-53deb8d345f9677c7d626a73be5a1567a74fb590.tar.bz2
gentoo-2-53deb8d345f9677c7d626a73be5a1567a74fb590.zip
Add more applets and prepare to replace sash.
(Portage version: 2.0.51.21-r1)
-rw-r--r--sys-apps/busybox/ChangeLog9
-rw-r--r--sys-apps/busybox/busybox-1.00-r4.ebuild233
-rw-r--r--sys-apps/busybox/files/1.00/nice.patch152
-rw-r--r--sys-apps/busybox/files/1.00/printenv.patch113
-rw-r--r--sys-apps/busybox/files/1.00/standalone.patch37
-rw-r--r--sys-apps/busybox/files/1.00/sum.patch245
-rw-r--r--sys-apps/busybox/files/busybox-1.00-pre3.config7
-rw-r--r--sys-apps/busybox/files/digest-busybox-1.00-r42
8 files changed, 797 insertions, 1 deletions
diff --git a/sys-apps/busybox/ChangeLog b/sys-apps/busybox/ChangeLog
index 6c3fd5f5c87f..42bdc719f88f 100644
--- a/sys-apps/busybox/ChangeLog
+++ b/sys-apps/busybox/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for sys-apps/busybox
# Copyright 1999-2005 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/busybox/ChangeLog,v 1.65 2005/05/12 16:58:02 ferdy Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/busybox/ChangeLog,v 1.66 2005/05/17 01:02:16 vapier Exp $
+
+*busybox-1.00-r4 (17 May 2005)
+
+ 17 May 2005; Mike Frysinger <vapier@gentoo.org> +files/1.00/nice.patch,
+ +files/1.00/printenv.patch, files/busybox-1.00-pre3.config,
+ +files/1.00/standalone.patch, +files/1.00/sum.patch, +busybox-1.00-r4.ebuild:
+ Add more applets and prepare to replace sash.
12 May 2005; Fernando J. Pereda <ferdy@gentoo.org> busybox-1.00-r1.ebuild:
alpha stable wrt #73241
diff --git a/sys-apps/busybox/busybox-1.00-r4.ebuild b/sys-apps/busybox/busybox-1.00-r4.ebuild
new file mode 100644
index 000000000000..60b762407b4d
--- /dev/null
+++ b/sys-apps/busybox/busybox-1.00-r4.ebuild
@@ -0,0 +1,233 @@
+# Copyright 1999-2005 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/busybox/busybox-1.00-r4.ebuild,v 1.1 2005/05/17 01:02:16 vapier Exp $
+
+inherit eutils
+
+#SNAPSHOT=20040726
+SNAPSHOT=""
+
+DESCRIPTION="Utilities for rescue and embedded systems"
+HOMEPAGE="http://www.busybox.net/"
+if [[ -n ${SNAPSHOT} ]] ; then
+ MY_P=${PN}
+ SRC_URI="http://www.busybox.net/downloads/snapshots/${PN}-${SNAPSHOT}.tar.bz2"
+else
+ MY_P=${PN}-${PV/_/-}
+ SRC_URI="http://www.busybox.net/downloads/${MY_P}.tar.bz2"
+fi
+SRC_URI="${SRC_URI} mirror://gentoo/${P}-e2fsprogs.patch.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86"
+IUSE="debug uclibc static savedconfig netboot floppyboot make-symlinks"
+
+DEPEND=""
+
+S=${WORKDIR}/${MY_P}
+
+# <pebenito> then eventually turning on selinux would mean
+# adding a dep: selinux? ( sys-libs/libselinux )
+
+busybox_config_option() {
+ [[ -z $2 ]] && return 1
+ case $1 in
+ y) sed -i -e "s:.*CONFIG_$2.*set:CONFIG_$2=y:g" .config;;
+ n) sed -i -e "s:CONFIG_$2=y:# CONFIG_$2 is not set:g" .config;;
+ *) return 1;;
+ esac
+ einfo $(grep "CONFIG_$2[= ]" .config)
+}
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+cp -r "${S}"{,.orig}
+
+ # patches for 1.00 go here.
+ epatch "${FILESDIR}"/1.00/busybox-read-timeout.patch
+ epatch "${FILESDIR}"/1.00/readlink-follow.patch
+ epatch "${FILESDIR}"/1.00/more-insmod-arches.patch
+ epatch "${FILESDIR}"/1.00/bash-tests.patch
+ epatch "${FILESDIR}"/1.00/cp-posix-opts.patch
+ epatch "${FILESDIR}"/1.00/standalone.patch
+ epatch "${FILESDIR}"/1.00/nice.patch
+ epatch "${FILESDIR}"/1.00/printenv.patch
+ epatch "${FILESDIR}"/1.00/sum.patch
+ epatch "${WORKDIR}"/${P}-e2fsprogs.patch
+
+ # Don't let KBUILD_OUTPUT mess us up #88088
+ unset KBUILD_OUTPUT
+
+ #bunzip
+ #ftp://ftp.simtreas.ru/pub/my/bb/new/find.c.gz
+
+ # check for a busybox config before making one of our own.
+ # if one exist lets return and use it.
+ # fine grained config control for user defined busybox configs.
+ # [package]-[version]-[revision].config
+ # [package]-[version].config
+ # [package].config
+
+ if use savedconfig ; then
+ [[ -r .config ]] && rm .config
+ for conf in ${PN}-${PV}-${PR} ${PN}-${PV} ${PN}; do
+ configfile=${ROOT}/etc/${PN}/${CHOST}/${conf}.config
+ [[ -r ${configfile} ]] || configfile=/etc/${PN}/${CHOST}/${conf}.config
+ if [[ -r ${configfile} ]] ; then
+ cp ${configfile} ${S}/.config
+ break
+ fi
+ done
+ if [[ -r ${S}/.config ]] ; then
+ einfo "Found your ${configfile} and using it."
+ return 0
+ fi
+ fi
+ if use netboot ; then
+ cp ${FILESDIR}/config-netboot .config
+ sed -i \
+ -e '/DEFAULT_SCRIPT/s:/share/udhcpc/default.script:/lib/udhcpc.script:' \
+ networking/udhcp/libbb_udhcp.h \
+ || die "fixing netboot/udhcpc"
+ elif use floppyboot ; then
+ cp ${FILESDIR}/config-floppyboot .config
+ fi
+
+ # busybox has changed quite a bit from 0.[5-6]* to 1.x so this
+ # config might not be cd ready.
+
+ make allyesconfig > /dev/null
+ busybox_config_option n DMALLOC
+ busybox_config_option n FEATURE_SUID
+
+ # If these are not set and we are using a uclibc/busybox setup
+ # all calls to system() will fail.
+ busybox_config_option y FEATURE_SH_IS_ASH
+ busybox_config_option n FEATURE_SH_IS_NONE
+
+ use static \
+ && busybox_config_option y STATIC \
+ || busybox_config_option n STATIC
+
+ # 1.00-pre2 uses the old selinux api which is no longer
+ # maintained. perhaps the next stable release will include
+ # support.
+ # 1.00-pre5 pebenito says busybox is still using the old se api.
+ #use selinux \
+ # && busybox_config_option y SELINUX \
+ # ||
+ busybox_config_option n SELINUX
+
+ use debug \
+ && busybox_config_option y DEBUG \
+ || busybox_config_option n DEBUG
+
+ #busybox_features=`grep CONFIG_ .config | tr '#' '\n' |
+ # awk '{print $1}' | cut -d = -f 1 | grep -v ^$ | cut -c 8- |
+ # tr [A-Z] [a-z] | awk '{print "busybox_"$1}'`
+ #for f in $busybox_features; do
+ # has $f ${FEATURES} && busybox_config_option y `echo ${f/busybox_/}|tr [a-z] [A-Z]`
+ #done
+ ( echo | make clean oldconfig > /dev/null ) || :
+}
+
+busybox_set_cross_compiler() {
+ type -p ${CHOST}-ar && export CROSS=${CHOST}-
+}
+
+src_compile() {
+ busybox_set_cross_compiler
+ #emake -j1 CROSS="${CROSS}" include/config.h busybox || die
+ emake -j1 CROSS="${CROSS}" busybox || die
+ if ! use static; then
+ cp busybox{,.dyn}
+ rm busybox
+ emake -j1 LDFLAGS="${LDFLAGS} -static" CROSS="${CROSS}" busybox 2>/dev/null || die
+ cp busybox{,.static}
+ cp busybox{.dyn,}
+ fi
+}
+
+src_install() {
+ busybox_set_cross_compiler
+
+ into /
+ dobin busybox
+ use static || dobin busybox.static
+
+ if use make-symlinks ; then
+ if [[ ! ${VERY_BRAVE_OR_VERY_DUMB} == "yes" ]] && [[ ${ROOT} == "/" ]] ;
+ then
+ ewarn "setting USE=make-symlinks and emerging to / is very dangerous."
+ ewarn "it WILL overwrite lots of system programs like: ls bash awk grep (bug 60805 for full list)."
+ ewarn "If you are creating a binary only and not merging this is probably ok."
+ ewarn "set env VERY_BRAVE_OR_VERY_DUMB=yes if this is realy what you want."
+ die "silly options will destroy your system"
+ fi
+ make CROSS="${CROSS}" install || die
+ dodir /bin
+ cp -a _install/bin/* ${D}/bin/
+ dodir /sbin
+ cp -a _install/sbin/* ${D}/sbin/
+ cd ${D}
+ local symlink
+ for symlink in {bin,sbin}/* ; do
+ [[ -L ${symlink} ]] || continue
+ [[ -e ${ROOT}/${symlink} ]] \
+ && eerror "Deleting symlink ${symlink} because it exists in ${ROOT}" \
+ && rm ${symlink}
+ done
+ cd "${S}"
+ fi
+
+ dodoc AUTHORS Changelog README TODO
+
+ cd docs || die
+ docinto txt
+ dodoc *.txt
+ docinto pod
+ dodoc *.pod
+ dohtml *.html *.sgml
+
+ # no man files?
+ # cd ../man && doman *.1
+
+ cd ../examples || die
+ docinto examples
+ dodoc inittab depmod.pl
+
+ cd bootfloppy || die
+ docinto bootfloppy
+ dodoc bootfloppy.txt display.txt mkdevs.sh etc/* etc/init.d/* 2>/dev/null
+
+ cd ../../ || die
+ if has buildpkg ${FEATURES} && has keepwork ${FEATURES} ; then
+ cd ${S}
+ # this should install to the ./_install/ dir by default.
+ # we make a micro pkg of busybox that can be used for
+ # embedded systems -solar
+ if ! use make-symlinks ; then
+ make CROSS="${CROSS}" install || die
+ fi
+ cd ./_install/ \
+ && tar --no-same-owner -jcvf ${WORKDIR}/${MY_P}-${ARCH}.bz2 . \
+ && cd ..
+ fi
+
+ if use savedconfig ; then
+ einfo "Saving this build config to /etc/${PN}/${CHOST}/${PN}-${PV}-${PR}.config"
+ einfo "Read this ebuild for more info on how to take advantage of this option"
+ insinto /etc/${PN}/${CHOST}/
+ newins ${S}/.config ${PN}-${PV}-${PR}.config
+ fi
+}
+
+pkg_postinst() {
+ echo
+ einfo "This ebuild has support for user defined configs"
+ einfo "Please read this ebuild for more details and re-emerge as needed"
+ einfo "if you want to add or remove functionality for ${PN}"
+ echo
+}
diff --git a/sys-apps/busybox/files/1.00/nice.patch b/sys-apps/busybox/files/1.00/nice.patch
new file mode 100644
index 000000000000..d75fe517ddc7
--- /dev/null
+++ b/sys-apps/busybox/files/1.00/nice.patch
@@ -0,0 +1,152 @@
+Index: coreutils/Makefile.in
+===================================================================
+--- coreutils/Makefile.in (revision 9867)
++++ coreutils/Makefile.in (revision 9868)
+@@ -58,6 +58,7 @@
+ COREUTILS-$(CONFIG_MKFIFO) += mkfifo.o
+ COREUTILS-$(CONFIG_MKNOD) += mknod.o
+ COREUTILS-$(CONFIG_MV) += mv.o
++COREUTILS-$(CONFIG_NICE) += nice.o
+ COREUTILS-$(CONFIG_OD) += od.o
+ COREUTILS-$(CONFIG_PRINTF) += printf.o
+ COREUTILS-$(CONFIG_PWD) += pwd.o
+Index: coreutils/nice.c
+===================================================================
+--- coreutils/nice.c (revision 0)
++++ coreutils/nice.c (revision 9868)
+@@ -0,0 +1,86 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * nice implementation for busybox
++ *
++ * Copyright (C) 2005 Manuel Novoa III <mjn3@codepoet.org>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * 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
++ *
++ */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <limits.h>
++#include <errno.h>
++#include <unistd.h>
++#include <sys/time.h>
++#include <sys/resource.h>
++#include "busybox.h"
++
++static inline int int_add_no_wrap(int a, int b)
++{
++ int s = a + b;
++
++ if (b < 0) {
++ if (s > a) s = INT_MIN;
++ } else {
++ if (s < a) s = INT_MAX;
++ }
++
++ return s;
++}
++
++int nice_main(int argc, char **argv)
++{
++ static const char Xetpriority_msg[] = "cannot %cet priority";
++
++ int old_priority, adjustment;
++
++ errno = 0; /* Needed for getpriority error detection. */
++ old_priority = getpriority(PRIO_PROCESS, 0);
++ if (errno) {
++ bb_perror_msg_and_die(Xetpriority_msg, 'g');
++ }
++
++ if (!*++argv) { /* No args, so (GNU) output current nice value. */
++ bb_printf("%d\n", old_priority);
++ bb_fflush_stdout_and_exit(EXIT_SUCCESS);
++ }
++
++ adjustment = 10; /* Set default adjustment. */
++
++ if ((argv[0][0] == '-') && (argv[0][1] == 'n') && !argv[0][2]) { /* "-n" */
++ if (argc < 4) { /* Missing priority and/or utility! */
++ bb_show_usage();
++ }
++ adjustment = bb_xgetlarg(argv[1], 10, INT_MIN, INT_MAX);
++ argv += 2;
++ }
++
++ { /* Set our priority. Handle integer wrapping for old + adjust. */
++ int new_priority = int_add_no_wrap(old_priority, adjustment);
++
++ if (setpriority(PRIO_PROCESS, 0, new_priority) < 0) {
++ bb_perror_msg_and_die(Xetpriority_msg, 's');
++ }
++ }
++
++ execvp(*argv, argv); /* Now exec the desired program. */
++
++ /* The exec failed... */
++ bb_default_error_retval = (errno == ENOENT) ? 127 : 126; /* SUSv3 */
++ bb_perror_msg_and_die("%s", *argv);
++}
+Index: coreutils/Config.in
+===================================================================
+--- coreutils/Config.in (revision 9867)
++++ coreutils/Config.in (revision 9868)
+@@ -329,6 +329,12 @@
+ help
+ mv is used to move or rename files or directories.
+
++config CONFIG_NICE
++ bool "nice"
++ default n
++ help
++ nice runs a program with modified scheduling priority.
++
+ config CONFIG_OD
+ bool "od"
+ default n
+Index: include/usage.h
+===================================================================
+--- include/usage.h (revision 9867)
++++ include/usage.h (revision 9868)
+@@ -1813,6 +1813,13 @@
+ "\t-w raw sockets\n" \
+ "\t-x unix sockets"
+
++#define nice_trivial_usage \
++ "[-n ADJUST] [COMMAND [ARG] ...]"
++#define nice_full_usage \
++ "Nice runs a program with modified scheduling priority.\n\n" \
++ "Options:\n" \
++ "\t-n ADJUST\tAdjust the scheduling priority by ADJUST.\n" \
++
+ #define nslookup_trivial_usage \
+ "[HOST] [SERVER]"
+ #define nslookup_full_usage \
+Index: include/applets.h
+===================================================================
+--- include/applets.h (revision 9867)
++++ include/applets.h (revision 9868)
+@@ -412,6 +412,9 @@
+ #ifdef CONFIG_NETSTAT
+ APPLET(netstat, netstat_main, _BB_DIR_BIN, _BB_SUID_NEVER)
+ #endif
++#ifdef CONFIG_NICE
++ APPLET(nice, nice_main, _BB_DIR_BIN, _BB_SUID_NEVER)
++#endif
+ #ifdef CONFIG_NSLOOKUP
+ APPLET(nslookup, nslookup_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER)
+ #endif
diff --git a/sys-apps/busybox/files/1.00/printenv.patch b/sys-apps/busybox/files/1.00/printenv.patch
new file mode 100644
index 000000000000..4057395628d7
--- /dev/null
+++ b/sys-apps/busybox/files/1.00/printenv.patch
@@ -0,0 +1,113 @@
+Index: coreutils/Makefile.in
+===================================================================
+--- coreutils/Makefile.in (revision 10146)
++++ coreutils/Makefile.in (revision 10147)
+@@ -60,6 +60,7 @@
+ COREUTILS-$(CONFIG_MV) += mv.o
+ COREUTILS-$(CONFIG_NICE) += nice.o
+ COREUTILS-$(CONFIG_OD) += od.o
++COREUTILS-$(CONFIG_PRINTENV) += printenv.o
+ COREUTILS-$(CONFIG_PRINTF) += printf.o
+ COREUTILS-$(CONFIG_PWD) += pwd.o
+ COREUTILS-$(CONFIG_REALPATH) += realpath.o
+Index: coreutils/printenv.c
+===================================================================
+--- coreutils/printenv.c (revision 0)
++++ coreutils/printenv.c (revision 10147)
+@@ -0,0 +1,52 @@
++/*
++ * printenv implementation for busybox
++ *
++ * Copyright (C) 2005 by Erik Andersen <andersen@codepoet.org>
++ * Copyright (C) 2005 by Mike Frysinger <vapier@gentoo.org>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * 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
++ *
++ */
++
++#include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
++
++int printenv_main(int argc, char **argv)
++{
++ extern char **environ;
++ int e = 0;
++
++ /* no variables specified, show whole env */
++ if (argc == 1)
++ while (environ[e])
++ puts(environ[e++]);
++
++ /* search for specified variables and print them out if found */
++ else {
++ int i;
++ size_t l;
++ char *arg, *env;
++
++ for (i=1; (arg = argv[i]); ++i)
++ for (; (env = environ[e]); ++e) {
++ l = strlen(arg);
++ if (!strncmp(env, arg, l) && env[l] == '=')
++ puts(env + l + 1);
++ }
++ }
++
++ exit(EXIT_SUCCESS);
++}
+Index: coreutils/Config.in
+===================================================================
+--- coreutils/Config.in (revision 10146)
++++ coreutils/Config.in (revision 10147)
+@@ -164,6 +164,12 @@
+ a command; without options it displays the current
+ environment.
+
++config CONFIG_PRINTENV
++ bool "printenv"
++ default n
++ help
++ printenv is used to print all or part of environment.
++
+ config CONFIG_EXPR
+ bool "expr"
+ default n
+--- include/usage.h
++++ include/usage.h
+@@ -1949,6 +1949,12 @@
+ "Options:\n" \
+ "\t-d\t\tdelay interval for shutting off."
+
++#define printenv_trivial_usage \
++ "[VARIABLES...]"
++#define printenv_full_usage \
++ "print all or part of environment\n\n" \
++ "If no environment VARIABLE specified, print them all."
++
+ #define printf_trivial_usage \
+ "FORMAT [ARGUMENT...]"
+ #define printf_full_usage \
+--- include/applets.h
++++ include/applets.h
+@@ -452,6 +452,9 @@
+ #ifdef CONFIG_POWEROFF
+ APPLET(poweroff, poweroff_main, _BB_DIR_SBIN, _BB_SUID_NEVER)
+ #endif
++#ifdef CONFIG_PRINTENV
++ APPLET(printenv, printenv_main, _BB_DIR_BIN, _BB_SUID_NEVER)
++#endif
+ #ifdef CONFIG_PRINTF
+ APPLET(printf, printf_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER)
+ #endif
diff --git a/sys-apps/busybox/files/1.00/standalone.patch b/sys-apps/busybox/files/1.00/standalone.patch
new file mode 100644
index 000000000000..25acc4faabef
--- /dev/null
+++ b/sys-apps/busybox/files/1.00/standalone.patch
@@ -0,0 +1,37 @@
+--- trunk/busybox/shell/ash.c 2005/02/10 00:44:31 9838
++++ trunk/busybox/shell/ash.c 2005/05/07 08:27:34 10264
+@@ -3722,27 +3722,13 @@
+ {
+ int repeated = 0;
+ #ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL
+- int flg_bb = 0;
+- char *name = cmd;
+-
+- if(strchr(name, '/') == NULL && find_applet_by_name(name) != NULL) {
+- flg_bb = 1;
+- }
+- if(flg_bb) {
+- char **ap;
+- char **new;
+-
+- *argv = name;
+- if(strcmp(name, "busybox")) {
+- for (ap = argv; *ap; ap++);
+- ap = new = xmalloc((ap - argv + 2) * sizeof(char *));
+- *ap++ = cmd = "/bin/busybox";
+- while ((*ap++ = *argv++));
+- argv = new;
+- repeated++;
+- } else {
+- cmd = "/bin/busybox";
+- }
++ if(find_applet_by_name(cmd) != NULL) {
++ /* re-exec ourselves with the new arguments */
++ execve("/proc/self/exe",argv,envp);
++ /* If proc isn't mounted, try hardcoded path to busybox binary*/
++ execve("/bin/busybox",argv,envp);
++ /* If they called chroot or otherwise made the binary no longer
++ * executable, fall through */
+ }
+ #endif
+
diff --git a/sys-apps/busybox/files/1.00/sum.patch b/sys-apps/busybox/files/1.00/sum.patch
new file mode 100644
index 000000000000..106bdbb47edf
--- /dev/null
+++ b/sys-apps/busybox/files/1.00/sum.patch
@@ -0,0 +1,245 @@
+Index: coreutils/Makefile.in
+===================================================================
+--- coreutils/Makefile.in (revision 10147)
++++ coreutils/Makefile.in (revision 10148)
+@@ -71,6 +71,7 @@
+ COREUTILS-$(CONFIG_SLEEP) += sleep.o
+ COREUTILS-$(CONFIG_SORT) += sort.o
+ COREUTILS-$(CONFIG_STTY) += stty.o
++COREUTILS-$(CONFIG_SUM) += sum.o
+ COREUTILS-$(CONFIG_SYNC) += sync.o
+ COREUTILS-$(CONFIG_TAIL) += tail.o
+ COREUTILS-$(CONFIG_TEE) += tee.o
+Index: coreutils/sum.c
+===================================================================
+--- coreutils/sum.c (revision 0)
++++ coreutils/sum.c (revision 10148)
+@@ -0,0 +1,182 @@
++/*
++ * sum -- checksum and count the blocks in a file
++ * Like BSD sum or SysV sum -r, except like SysV sum if -s option is given.
++ *
++ * Copyright (C) 86, 89, 91, 1995-2002, 2004 Free Software Foundation, Inc.
++ * Copyright (C) 2005 by Erik Andersen <andersen@codepoet.org>
++ * Copyright (C) 2005 by Mike Frysinger <vapier@gentoo.org>
++ *
++ * Written by Kayvan Aghaiepour and David MacKenzie
++ * Taken from coreutils and turned into a busybox applet by Mike Frysinger
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * 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
++ *
++ */
++
++#include <stdio.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <unistd.h>
++#include <getopt.h>
++
++#include "libbb.h"
++
++/* 1 if any of the files read were the standard input */
++static int have_read_stdin;
++
++/* make a little more readable and avoid using strcmp for just 2 bytes */
++#define IS_STDIN(s) (s[0] == '-' && s[1] == '\0')
++
++/* Calculate and print the rotated checksum and the size in 1K blocks
++ of file FILE, or of the standard input if FILE is "-".
++ If PRINT_NAME is >1, print FILE next to the checksum and size.
++ The checksum varies depending on sizeof (int).
++ Return 1 if successful. */
++static int bsd_sum_file(const char *file, int print_name)
++{
++ register FILE *fp;
++ register int checksum = 0; /* The checksum mod 2^16. */
++ register uintmax_t total_bytes = 0; /* The number of bytes. */
++ register int ch; /* Each character read. */
++
++ if (IS_STDIN(file)) {
++ fp = stdin;
++ have_read_stdin = 1;
++ } else {
++ fp = fopen(file, "r");
++ if (fp == NULL) {
++ bb_perror_msg(file);
++ return 0;
++ }
++ }
++
++ while ((ch = getc(fp)) != EOF) {
++ ++total_bytes;
++ checksum = (checksum >> 1) + ((checksum & 1) << 15);
++ checksum += ch;
++ checksum &= 0xffff; /* Keep it within bounds. */
++ }
++
++ if (ferror(fp)) {
++ bb_perror_msg(file);
++ if (!IS_STDIN(file))
++ fclose(fp);
++ return 0;
++ }
++
++ if (!IS_STDIN(file) && fclose(fp) == EOF) {
++ bb_perror_msg(file);
++ return 0;
++ }
++
++ printf("%05d %5s ", checksum,
++ make_human_readable_str(total_bytes, 1, 1024));
++ if (print_name > 1)
++ printf(file);
++ putchar('\n');
++
++ return 1;
++}
++
++/* Calculate and print the checksum and the size in 512-byte blocks
++ of file FILE, or of the standard input if FILE is "-".
++ If PRINT_NAME is >0, print FILE next to the checksum and size.
++ Return 1 if successful. */
++static int sysv_sum_file(const char *file, int print_name)
++{
++ int fd;
++ unsigned char buf[8192];
++ uintmax_t total_bytes = 0;
++ int r;
++ int checksum;
++
++ /* The sum of all the input bytes, modulo (UINT_MAX + 1). */
++ unsigned int s = 0;
++
++ if (IS_STDIN(file)) {
++ fd = 0;
++ have_read_stdin = 1;
++ } else {
++ fd = open(file, O_RDONLY);
++ if (fd == -1) {
++ bb_perror_msg(file);
++ return 0;
++ }
++ }
++
++ while (1) {
++ size_t i;
++ size_t bytes_read = safe_read(fd, buf, sizeof(buf));
++
++ if (bytes_read == 0)
++ break;
++
++ if (bytes_read == -1) {
++ bb_perror_msg(file);
++ if (!IS_STDIN(file))
++ close(fd);
++ return 0;
++ }
++
++ for (i = 0; i < bytes_read; i++)
++ s += buf[i];
++ total_bytes += bytes_read;
++ }
++
++ if (!IS_STDIN(file) && close(fd) == -1) {
++ bb_perror_msg(file);
++ return 0;
++ }
++
++ r = (s & 0xffff) + ((s & 0xffffffff) >> 16);
++ checksum = (r & 0xffff) + (r >> 16);
++
++ printf("%d %s ", checksum,
++ make_human_readable_str(total_bytes, 1, 512));
++ if (print_name)
++ printf(file);
++ putchar('\n');
++
++ return 1;
++}
++
++int sum_main(int argc, char **argv)
++{
++ int flags;
++ int ok;
++ int files_given;
++ int (*sum_func)(const char *, int) = bsd_sum_file;
++
++ /* give the bsd func priority over sysv func */
++ flags = bb_getopt_ulflags(argc, argv, "sr");
++ if (flags & 1)
++ sum_func = sysv_sum_file;
++ if (flags & 2)
++ sum_func = bsd_sum_file;
++
++ have_read_stdin = 0;
++ files_given = argc - optind;
++ if (files_given <= 0)
++ ok = sum_func("-", files_given);
++ else
++ for (ok = 1; optind < argc; optind++)
++ ok &= sum_func(argv[optind], files_given);
++
++ if (have_read_stdin && fclose(stdin) == EOF)
++ bb_perror_msg_and_die("-");
++
++ exit(ok ? EXIT_SUCCESS : EXIT_FAILURE);
++}
+Index: coreutils/Config.in
+===================================================================
+--- coreutils/Config.in (revision 10147)
++++ coreutils/Config.in (revision 10148)
+@@ -428,6 +428,12 @@
+ help
+ stty is used to change and print terminal line settings.
+
++config CONFIG_SUM
++ bool "sum"
++ default n
++ help
++ checksum and count the blocks in a file
++
+ config CONFIG_SYNC
+ bool "sync"
+ default n
+--- include/usage.h
++++ include/usage.h
+@@ -2316,6 +2322,14 @@
+ "\t-h\tName of the remote host for this login.\n" \
+ "\t-p\tPreserve environment."
+
++#define sum_trivial_usage \
++ "[rs] [files...]"
++#define sum_full_usage \
++ "checksum and count the blocks in a file\n\n" \
++ "Options:\n" \
++ "\t-r\tuse BSD sum algorithm (1K blocks)\n" \
++ "\t-s\tuse System V sum algorithm (512byte blocks)\n"
++
+ #define swapoff_trivial_usage \
+ "[OPTION] [DEVICE]"
+ #define swapoff_full_usage \
+--- include/applets.h
++++ include/applets.h
+@@ -545,6 +548,9 @@
+ #ifdef CONFIG_SULOGIN
+ APPLET(sulogin, sulogin_main, _BB_DIR_SBIN, _BB_SUID_NEVER)
+ #endif
++#ifdef CONFIG_SUM
++ APPLET(sum, sum_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER)
++#endif
+ #ifdef CONFIG_SWAPONOFF
+ APPLET(swapoff, swap_on_off_main, _BB_DIR_SBIN, _BB_SUID_NEVER)
+ #endif
diff --git a/sys-apps/busybox/files/busybox-1.00-pre3.config b/sys-apps/busybox/files/busybox-1.00-pre3.config
index a97a9360e875..5457704ed83c 100644
--- a/sys-apps/busybox/files/busybox-1.00-pre3.config
+++ b/sys-apps/busybox/files/busybox-1.00-pre3.config
@@ -103,7 +103,9 @@ CONFIG_MKDIR=y
CONFIG_MKFIFO=y
CONFIG_MKNOD=y
CONFIG_MV=y
+CONFIG_NICE=y
# CONFIG_OD is not set
+CONFIG_PRINTENV=y
# CONFIG_PRINTF is not set
CONFIG_PWD=y
# CONFIG_REALPATH is not set
@@ -114,6 +116,7 @@ CONFIG_RMDIR=y
CONFIG_SLEEP=y
CONFIG_FEATURE_FANCY_SLEEP=y
CONFIG_SORT=y
+CONFIG_SUM=y
CONFIG_FEATURE_SORT_REVERSE=y
CONFIG_FEATURE_SORT_UNIQUE=y
CONFIG_STTY=y
@@ -424,3 +427,7 @@ CONFIG_UMOUNT=y
# Debugging Options
#
# CONFIG_DEBUG is not set
+
+
+CONFIG_LSATTR=y
+CONFIG_CHATTR=y
diff --git a/sys-apps/busybox/files/digest-busybox-1.00-r4 b/sys-apps/busybox/files/digest-busybox-1.00-r4
new file mode 100644
index 000000000000..e85997c1b6b6
--- /dev/null
+++ b/sys-apps/busybox/files/digest-busybox-1.00-r4
@@ -0,0 +1,2 @@
+MD5 5c7ea9b5d3b3677dfcdcec38b281a756 busybox-1.00.tar.bz2 1118427
+MD5 af5bc43f345f102fc257787d7beacaac busybox-1.00-e2fsprogs.patch.bz2 16713