diff options
author | Mike Frysinger <vapier@gentoo.org> | 2005-05-17 01:02:16 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2005-05-17 01:02:16 +0000 |
commit | 53deb8d345f9677c7d626a73be5a1567a74fb590 (patch) | |
tree | 9fefe4d2e4ecb076853416022603b447c0a0fa08 | |
parent | old (diff) | |
download | gentoo-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/ChangeLog | 9 | ||||
-rw-r--r-- | sys-apps/busybox/busybox-1.00-r4.ebuild | 233 | ||||
-rw-r--r-- | sys-apps/busybox/files/1.00/nice.patch | 152 | ||||
-rw-r--r-- | sys-apps/busybox/files/1.00/printenv.patch | 113 | ||||
-rw-r--r-- | sys-apps/busybox/files/1.00/standalone.patch | 37 | ||||
-rw-r--r-- | sys-apps/busybox/files/1.00/sum.patch | 245 | ||||
-rw-r--r-- | sys-apps/busybox/files/busybox-1.00-pre3.config | 7 | ||||
-rw-r--r-- | sys-apps/busybox/files/digest-busybox-1.00-r4 | 2 |
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 |