mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-28 00:51:41 +02:00
Import Upstream busybox to work with new header files
BUG=19148 TEST=builds on amd64-host Change-Id: I453e24ab97d242593a28a1165e882dcfc7e9f9b6 Reviewed-on: http://gerrit.chromium.org/gerrit/5959 Reviewed-by: Anush Elangovan <anush@google.com> Tested-by: Anush Elangovan <anush@google.com>
This commit is contained in:
parent
52c101a5d7
commit
41ee48e704
277
sdk_container/src/third_party/portage-stable/sys-apps/busybox/busybox-1.18.5.ebuild
vendored
Normal file
277
sdk_container/src/third_party/portage-stable/sys-apps/busybox/busybox-1.18.5.ebuild
vendored
Normal file
@ -0,0 +1,277 @@
|
||||
# Copyright 1999-2011 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /data/temp/gentoo//vcs-public-cvsroot/gentoo-x86/sys-apps/busybox/busybox-1.18.5.ebuild,v 1.1 2011/08/07 21:08:47 vapier Exp $
|
||||
|
||||
EAPI="3"
|
||||
inherit eutils flag-o-matic savedconfig toolchain-funcs
|
||||
|
||||
################################################################################
|
||||
# BUSYBOX ALTERNATE CONFIG MINI-HOWTO
|
||||
#
|
||||
# Busybox can be modified in many different ways. Here's a few ways to do it:
|
||||
#
|
||||
# (1) Emerge busybox with FEATURES=keepwork so the work directory won't
|
||||
# get erased afterwards. Add a definition like ROOT=/my/root/path to the
|
||||
# start of the line if you're installing to somewhere else than the root
|
||||
# directory. This command will save the default configuration to
|
||||
# ${PORTAGE_CONFIGROOT} (or ${ROOT} if ${PORTAGE_CONFIGROOT} is not
|
||||
# defined), and it will tell you that it has done this. Note the location
|
||||
# where the config file was saved.
|
||||
#
|
||||
# FEATURES=keepwork USE=savedconfig emerge busybox
|
||||
#
|
||||
# (2) Go to the work directory and change the configuration of busybox using its
|
||||
# menuconfig feature.
|
||||
#
|
||||
# cd /var/tmp/portage/busybox*/work/busybox-*
|
||||
# make menuconfig
|
||||
#
|
||||
# (3) Save your configuration to the default location and copy it to the
|
||||
# one of the locations listed in /usr/portage/eclass/savedconfig.eclass
|
||||
#
|
||||
# (4) Emerge busybox with USE=savedconfig to use the configuration file you
|
||||
# just generated.
|
||||
#
|
||||
################################################################################
|
||||
#
|
||||
# (1) Alternatively skip the above steps and simply emerge busybox without
|
||||
# USE=savedconfig.
|
||||
#
|
||||
# (2) Edit the file it saves by hand. ${ROOT}"/etc/portage/savedconfig/${CATEGORY}/${PF}
|
||||
#
|
||||
# (3) Remerge busybox as using USE=savedconfig.
|
||||
#
|
||||
################################################################################
|
||||
|
||||
#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
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~x86-linux"
|
||||
IUSE="debug ipv6 make-symlinks +mdev nfs -pam selinux static elibc_glibc"
|
||||
RESTRICT="test"
|
||||
|
||||
RDEPEND="selinux? ( sys-libs/libselinux )
|
||||
pam? ( sys-libs/pam )"
|
||||
DEPEND="${RDEPEND}
|
||||
nfs? ( || ( <sys-libs/glibc-2.13 >=net-libs/libtirpc-0.2.2-r1 ) )"
|
||||
|
||||
S=${WORKDIR}/${MY_P}
|
||||
|
||||
busybox_config_option() {
|
||||
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;;
|
||||
*) use $1 \
|
||||
&& busybox_config_option y $2 \
|
||||
|| busybox_config_option n $2
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
einfo $(grep "CONFIG_$2[= ]" .config || echo Could not find CONFIG_$2 ...)
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
unset KBUILD_OUTPUT #88088
|
||||
append-flags -fno-strict-aliasing #310413
|
||||
append-cppflags $($(tc-getPKG_CONFIG) libtirpc --cflags)
|
||||
|
||||
# patches go here!
|
||||
epatch "${FILESDIR}"/busybox-1.18.0-bb.patch
|
||||
#epatch "${FILESDIR}"/busybox-${PV}-*.patch
|
||||
|
||||
# flag cleanup
|
||||
sed -i -r \
|
||||
-e 's:[[:space:]]?-(Werror|Os|falign-(functions|jumps|loops|labels)=1|fomit-frame-pointer)\>::g' \
|
||||
Makefile.flags || die
|
||||
#sed -i '/bbsh/s:^//::' include/applets.h
|
||||
sed -i '/^#error Aborting compilation./d' applets/applets.c || die
|
||||
use elibc_glibc && sed -i 's:-Wl,--gc-sections::' Makefile
|
||||
sed -i \
|
||||
-e "/^CROSS_COMPILE/s:=.*:= ${CHOST}-:" \
|
||||
-e "/^AR\>/s:=.*:= $(tc-getAR):" \
|
||||
-e "/^CC\>/s:=.*:= $(tc-getCC):" \
|
||||
-e "/^HOSTCC/s:=.*:= $(tc-getBUILD_CC):" \
|
||||
Makefile || die
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
# check for a busybox config before making one of our own.
|
||||
# if one exist lets return and use it.
|
||||
|
||||
restore_config .config
|
||||
if [ -f .config ]; then
|
||||
yes "" | emake -j1 oldconfig > /dev/null
|
||||
return 0
|
||||
else
|
||||
ewarn "Could not locate user configfile, so we will save a default one"
|
||||
fi
|
||||
|
||||
# setup the config file
|
||||
emake -j1 allyesconfig > /dev/null
|
||||
busybox_config_option n DMALLOC
|
||||
busybox_config_option n FEATURE_SUID_CONFIG
|
||||
busybox_config_option n BUILD_AT_ONCE
|
||||
busybox_config_option n BUILD_LIBBUSYBOX
|
||||
busybox_config_option n NOMMU
|
||||
busybox_config_option n MONOTONIC_SYSCALL
|
||||
|
||||
# If these are not set and we are using a uclibc/busybox setup
|
||||
# all calls to system() will fail.
|
||||
busybox_config_option y ASH
|
||||
busybox_config_option n HUSH
|
||||
|
||||
# disable ipv6 applets
|
||||
if ! use ipv6; then
|
||||
busybox_config_option n FEATURE_IPV6
|
||||
busybox_config_option n TRACEROUTE6
|
||||
busybox_config_option n PING6
|
||||
fi
|
||||
|
||||
if use static && use pam ; then
|
||||
ewarn "You cannot have USE='static pam'. Assuming static is more important."
|
||||
fi
|
||||
busybox_config_option nfs FEATURE_MOUNT_NFS
|
||||
use static \
|
||||
&& busybox_config_option n PAM \
|
||||
|| busybox_config_option pam PAM
|
||||
busybox_config_option static STATIC
|
||||
busybox_config_option debug DEBUG
|
||||
use debug \
|
||||
&& busybox_config_option y NO_DEBUG_LIB \
|
||||
&& busybox_config_option n DMALLOC \
|
||||
&& busybox_config_option n EFENCE
|
||||
|
||||
busybox_config_option selinux SELINUX
|
||||
|
||||
# default a bunch of uncommon options to off
|
||||
local opt
|
||||
for opt in \
|
||||
ADD_SHELL \
|
||||
BEEP BOOTCHARTD \
|
||||
CRONTAB \
|
||||
DC DEVFSD DNSD DPKG{,_DEB} \
|
||||
FAKEIDENTD FBSPLASH FOLD FSCK_MINIX FTP{GET,PUT} \
|
||||
FEATURE_DEVFS \
|
||||
HOSTID HUSH \
|
||||
INETD INOTIFYD IPCALC \
|
||||
LASH LOCALE_SUPPORT LOGNAME LPD \
|
||||
MAKEMIME MKFS_MINIX MSH \
|
||||
OD \
|
||||
RDEV READPROFILE REFORMIME REMOVE_SHELL RFKILL RUN_PARTS RUNSV{,DIR} \
|
||||
SLATTACH SMEMCAP SULOGIN SV{,LOGD} \
|
||||
TASKSET TCPSVD \
|
||||
RPM RPM2CPIO \
|
||||
UDPSVD UUDECODE UUENCODE
|
||||
do
|
||||
busybox_config_option n ${opt}
|
||||
done
|
||||
|
||||
emake -j1 oldconfig > /dev/null
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
unset KBUILD_OUTPUT #88088
|
||||
export SKIP_STRIP=y
|
||||
|
||||
emake busybox || die "build failed"
|
||||
if ! use static ; then
|
||||
cp .config{,.bak}
|
||||
mv busybox_unstripped{,.bak}
|
||||
use pam && busybox_config_option n PAM
|
||||
emake CONFIG_STATIC=y busybox || die "static build failed"
|
||||
mv busybox_unstripped bb
|
||||
mv busybox_unstripped{.bak,}
|
||||
mv .config{.bak,}
|
||||
fi
|
||||
}
|
||||
|
||||
src_install() {
|
||||
unset KBUILD_OUTPUT #88088
|
||||
save_config .config
|
||||
|
||||
into /
|
||||
newbin busybox_unstripped busybox || die
|
||||
if use static ; then
|
||||
dosym busybox /bin/bb || die
|
||||
dosym bb /bin/busybox.static || die
|
||||
else
|
||||
dobin bb || die
|
||||
fi
|
||||
if use mdev ; then
|
||||
dodir /$(get_libdir)/mdev/
|
||||
use make-symlinks || dosym /bin/bb /sbin/mdev
|
||||
cp "${S}"/examples/mdev_fat.conf "${ED}"/etc/mdev.conf
|
||||
|
||||
exeinto /$(get_libdir)/mdev/
|
||||
doexe "${FILESDIR}"/mdev/*
|
||||
|
||||
insinto /$(get_libdir)/rcscripts/addons
|
||||
doins "${FILESDIR}"/mdev-start.sh || die
|
||||
newinitd "${FILESDIR}"/mdev.rc mdev || die
|
||||
fi
|
||||
|
||||
# bundle up the symlink files for use later
|
||||
emake DESTDIR="${ED}" install || die
|
||||
rm _install/bin/busybox
|
||||
tar cf busybox-links.tar -C _install . || : #;die
|
||||
insinto /usr/share/${PN}
|
||||
doins busybox-links.tar || die
|
||||
newins .config ${PF}.config || die
|
||||
|
||||
dodoc AUTHORS README TODO
|
||||
|
||||
cd docs || die
|
||||
docinto txt
|
||||
dodoc *.txt
|
||||
docinto pod
|
||||
dodoc *.pod
|
||||
dohtml *.html
|
||||
|
||||
cd ../examples || die
|
||||
docinto examples
|
||||
dodoc inittab depmod.pl *.conf *.script undeb unrpm
|
||||
|
||||
cd bootfloppy || die
|
||||
docinto bootfloppy
|
||||
dodoc $(find . -type f)
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
||||
if use make-symlinks && [[ ! ${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
|
||||
|
||||
if use make-symlinks ; then
|
||||
mv "${ED}"/usr/share/${PN}/busybox-links.tar "${T}"/ || die
|
||||
fi
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
if use make-symlinks ; then
|
||||
cd "${T}" || die
|
||||
mkdir _install
|
||||
tar xf busybox-links.tar -C _install || die
|
||||
cp -vpPR _install/* "${ROOT}"/ || die "copying links for ${x} failed"
|
||||
fi
|
||||
|
||||
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
|
||||
}
|
23
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.17.0-bb.patch
vendored
Normal file
23
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.17.0-bb.patch
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
--- a/include/applets.src.h
|
||||
+++ b/include/applets.src.h
|
||||
@@ -77,7 +77,9 @@
|
||||
IF_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_DROP, basename))
|
||||
IF_FEATURE_BASH_IS_ASH(APPLET_ODDNAME(bash, ash, _BB_DIR_BIN, _BB_SUID_DROP, bash))
|
||||
IF_FEATURE_BASH_IS_HUSH(APPLET_ODDNAME(bash, hush, _BB_DIR_BIN, _BB_SUID_DROP, bash))
|
||||
+IF_ASH(APPLET_ODDNAME(bb, ash, _BB_DIR_BIN, _BB_SUID_DROP, ash))
|
||||
IF_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_DROP))
|
||||
+IF_ASH(APPLET_ODDNAME(bbsh, ash, _BB_DIR_BIN, _BB_SUID_DROP, ash))
|
||||
//IF_BBSH(APPLET(bbsh, _BB_DIR_BIN, _BB_SUID_DROP))
|
||||
IF_BEEP(APPLET(beep, _BB_DIR_USR_BIN, _BB_SUID_DROP))
|
||||
IF_BLKID(APPLET(blkid, _BB_DIR_SBIN, _BB_SUID_DROP))
|
||||
--- a/shell/ash.c
|
||||
+++ b/shell/ash.c
|
||||
@@ -7255,6 +7255,8 @@
|
||||
}
|
||||
/* re-exec ourselves with the new arguments */
|
||||
execve(bb_busybox_exec_path, argv, envp);
|
||||
+ execve("/bin/busybox.static", argv, envp);
|
||||
+ execve("/bin/busybox", argv, envp);
|
||||
/* If they called chroot or otherwise made the binary no longer
|
||||
* executable, fall through */
|
||||
}
|
22
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.0-bb.patch
vendored
Normal file
22
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.0-bb.patch
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
--- a/shell/ash.c
|
||||
+++ b/shell/ash.c
|
||||
@@ -75,6 +75,8 @@
|
||||
//applet:IF_ASH(APPLET(ash, _BB_DIR_BIN, _BB_SUID_DROP))
|
||||
//applet:IF_FEATURE_SH_IS_ASH(APPLET_ODDNAME(sh, ash, _BB_DIR_BIN, _BB_SUID_DROP, sh))
|
||||
//applet:IF_FEATURE_BASH_IS_ASH(APPLET_ODDNAME(bash, ash, _BB_DIR_BIN, _BB_SUID_DROP, bash))
|
||||
+//applet:IF_ASH(APPLET_ODDNAME(bb, ash, _BB_DIR_BIN, _BB_SUID_DROP, ash))
|
||||
+//applet:IF_ASH(APPLET_ODDNAME(bbsh, ash, _BB_DIR_BIN, _BB_SUID_DROP, ash))
|
||||
|
||||
//kbuild:lib-$(CONFIG_ASH) += ash.o ash_ptr_hack.o shell_common.o
|
||||
//kbuild:lib-$(CONFIG_ASH_RANDOM_SUPPORT) += random.o
|
||||
--- a/shell/ash.c
|
||||
+++ b/shell/ash.c
|
||||
@@ -7255,6 +7255,8 @@
|
||||
}
|
||||
/* re-exec ourselves with the new arguments */
|
||||
execve(bb_busybox_exec_path, argv, envp);
|
||||
+ execve("/bin/busybox.static", argv, envp);
|
||||
+ execve("/bin/busybox", argv, envp);
|
||||
/* If they called chroot or otherwise made the binary no longer
|
||||
* executable, fall through */
|
||||
}
|
40
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.1-bzip2.patch
vendored
Normal file
40
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.1-bzip2.patch
vendored
Normal file
@ -0,0 +1,40 @@
|
||||
diff -urpN busybox-1.18.1/archival/bzip2.c busybox-1.18.1-bzip2/archival/bzip2.c
|
||||
--- busybox-1.18.1/archival/bzip2.c 2010-12-20 01:41:26.000000000 +0100
|
||||
+++ busybox-1.18.1-bzip2/archival/bzip2.c 2010-12-30 04:43:11.000000000 +0100
|
||||
@@ -128,10 +128,12 @@ IF_DESKTOP(long long) int FAST_FUNC comp
|
||||
break;
|
||||
}
|
||||
|
||||
-#if ENABLE_FEATURE_CLEAN_UP
|
||||
+ /* Can't be conditional on ENABLE_FEATURE_CLEAN_UP -
|
||||
+ * we are called repeatedly
|
||||
+ */
|
||||
BZ2_bzCompressEnd(strm);
|
||||
free(iobuf);
|
||||
-#endif
|
||||
+
|
||||
return total;
|
||||
}
|
||||
|
||||
diff -urpN busybox-1.18.1/archival/libarchive/bz/bzlib.c busybox-1.18.1-bzip2/archival/libarchive/bz/bzlib.c
|
||||
--- busybox-1.18.1/archival/libarchive/bz/bzlib.c 2010-12-20 01:41:26.000000000 +0100
|
||||
+++ busybox-1.18.1-bzip2/archival/libarchive/bz/bzlib.c 2010-12-30 04:43:11.000000000 +0100
|
||||
@@ -361,7 +361,6 @@ int BZ2_bzCompress(bz_stream *strm, int
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
-#if ENABLE_FEATURE_CLEAN_UP
|
||||
static
|
||||
void BZ2_bzCompressEnd(bz_stream *strm)
|
||||
{
|
||||
@@ -372,9 +371,8 @@ void BZ2_bzCompressEnd(bz_stream *strm)
|
||||
free(s->arr2);
|
||||
free(s->ftab);
|
||||
free(s->crc32table);
|
||||
- free(strm->state);
|
||||
+ free(s);
|
||||
}
|
||||
-#endif
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
20
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.1-cpio.patch
vendored
Normal file
20
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.1-cpio.patch
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
diff -urpN busybox-1.18.1/archival/cpio.c busybox-1.18.1-cpio/archival/cpio.c
|
||||
--- busybox-1.18.1/archival/cpio.c 2010-12-20 01:41:26.000000000 +0100
|
||||
+++ busybox-1.18.1-cpio/archival/cpio.c 2010-12-26 02:26:38.000000000 +0100
|
||||
@@ -308,16 +308,12 @@ int cpio_main(int argc UNUSED_PARAM, cha
|
||||
/* -L makes sense only with -o or -p */
|
||||
|
||||
#if !ENABLE_FEATURE_CPIO_O
|
||||
- /* no parameters */
|
||||
- opt_complementary = "=0";
|
||||
opt = getopt32(argv, OPTION_STR, &cpio_filename);
|
||||
argv += optind;
|
||||
if (opt & CPIO_OPT_FILE) { /* -F */
|
||||
xmove_fd(xopen(cpio_filename, O_RDONLY), STDIN_FILENO);
|
||||
}
|
||||
#else
|
||||
- /* _exactly_ one parameter for -p, thus <= 1 param if -p is allowed */
|
||||
- opt_complementary = ENABLE_FEATURE_CPIO_P ? "?1" : "=0";
|
||||
opt = getopt32(argv, OPTION_STR "oH:" IF_FEATURE_CPIO_P("p"), &cpio_filename, &cpio_fmt);
|
||||
argv += optind;
|
||||
if ((opt & (CPIO_OPT_FILE|CPIO_OPT_CREATE)) == CPIO_OPT_FILE) { /* -F without -o */
|
259
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.1-hush.patch
vendored
Normal file
259
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.1-hush.patch
vendored
Normal file
@ -0,0 +1,259 @@
|
||||
diff -urpN busybox-1.18.1/shell/hush.c busybox-1.18.1-hush/shell/hush.c
|
||||
--- busybox-1.18.1/shell/hush.c 2010-12-21 05:31:04.000000000 +0100
|
||||
+++ busybox-1.18.1-hush/shell/hush.c 2011-01-07 14:59:19.649956156 +0100
|
||||
@@ -913,7 +913,7 @@ static const struct built_in_command blt
|
||||
*/
|
||||
#if HUSH_DEBUG
|
||||
/* prevent disasters with G.debug_indent < 0 */
|
||||
-# define indent() fprintf(stderr, "%*s", (G.debug_indent * 2) & 0xff, "")
|
||||
+# define indent() fdprintf(2, "%*s", (G.debug_indent * 2) & 0xff, "")
|
||||
# define debug_enter() (G.debug_indent++)
|
||||
# define debug_leave() (G.debug_indent--)
|
||||
#else
|
||||
@@ -923,56 +923,56 @@ static const struct built_in_command blt
|
||||
#endif
|
||||
|
||||
#ifndef debug_printf
|
||||
-# define debug_printf(...) (indent(), fprintf(stderr, __VA_ARGS__))
|
||||
+# define debug_printf(...) (indent(), fdprintf(2, __VA_ARGS__))
|
||||
#endif
|
||||
|
||||
#ifndef debug_printf_parse
|
||||
-# define debug_printf_parse(...) (indent(), fprintf(stderr, __VA_ARGS__))
|
||||
+# define debug_printf_parse(...) (indent(), fdprintf(2, __VA_ARGS__))
|
||||
#endif
|
||||
|
||||
#ifndef debug_printf_exec
|
||||
-#define debug_printf_exec(...) (indent(), fprintf(stderr, __VA_ARGS__))
|
||||
+#define debug_printf_exec(...) (indent(), fdprintf(2, __VA_ARGS__))
|
||||
#endif
|
||||
|
||||
#ifndef debug_printf_env
|
||||
-# define debug_printf_env(...) (indent(), fprintf(stderr, __VA_ARGS__))
|
||||
+# define debug_printf_env(...) (indent(), fdprintf(2, __VA_ARGS__))
|
||||
#endif
|
||||
|
||||
#ifndef debug_printf_jobs
|
||||
-# define debug_printf_jobs(...) (indent(), fprintf(stderr, __VA_ARGS__))
|
||||
+# define debug_printf_jobs(...) (indent(), fdprintf(2, __VA_ARGS__))
|
||||
# define DEBUG_JOBS 1
|
||||
#else
|
||||
# define DEBUG_JOBS 0
|
||||
#endif
|
||||
|
||||
#ifndef debug_printf_expand
|
||||
-# define debug_printf_expand(...) (indent(), fprintf(stderr, __VA_ARGS__))
|
||||
+# define debug_printf_expand(...) (indent(), fdprintf(2, __VA_ARGS__))
|
||||
# define DEBUG_EXPAND 1
|
||||
#else
|
||||
# define DEBUG_EXPAND 0
|
||||
#endif
|
||||
|
||||
#ifndef debug_printf_varexp
|
||||
-# define debug_printf_varexp(...) (indent(), fprintf(stderr, __VA_ARGS__))
|
||||
+# define debug_printf_varexp(...) (indent(), fdprintf(2, __VA_ARGS__))
|
||||
#endif
|
||||
|
||||
#ifndef debug_printf_glob
|
||||
-# define debug_printf_glob(...) (indent(), fprintf(stderr, __VA_ARGS__))
|
||||
+# define debug_printf_glob(...) (indent(), fdprintf(2, __VA_ARGS__))
|
||||
# define DEBUG_GLOB 1
|
||||
#else
|
||||
# define DEBUG_GLOB 0
|
||||
#endif
|
||||
|
||||
#ifndef debug_printf_list
|
||||
-# define debug_printf_list(...) (indent(), fprintf(stderr, __VA_ARGS__))
|
||||
+# define debug_printf_list(...) (indent(), fdprintf(2, __VA_ARGS__))
|
||||
#endif
|
||||
|
||||
#ifndef debug_printf_subst
|
||||
-# define debug_printf_subst(...) (indent(), fprintf(stderr, __VA_ARGS__))
|
||||
+# define debug_printf_subst(...) (indent(), fdprintf(2, __VA_ARGS__))
|
||||
#endif
|
||||
|
||||
#ifndef debug_printf_clean
|
||||
-# define debug_printf_clean(...) (indent(), fprintf(stderr, __VA_ARGS__))
|
||||
+# define debug_printf_clean(...) (indent(), fdprintf(2, __VA_ARGS__))
|
||||
# define DEBUG_CLEAN 1
|
||||
#else
|
||||
# define DEBUG_CLEAN 0
|
||||
@@ -982,9 +982,9 @@ static const struct built_in_command blt
|
||||
static void debug_print_strings(const char *prefix, char **vv)
|
||||
{
|
||||
indent();
|
||||
- fprintf(stderr, "%s:\n", prefix);
|
||||
+ fdprintf(2, "%s:\n", prefix);
|
||||
while (*vv)
|
||||
- fprintf(stderr, " '%s'\n", *vv++);
|
||||
+ fdprintf(2, " '%s'\n", *vv++);
|
||||
}
|
||||
#else
|
||||
# define debug_print_strings(prefix, vv) ((void)0)
|
||||
@@ -1416,6 +1416,22 @@ static void hush_exit(int exitcode)
|
||||
builtin_eval(argv);
|
||||
}
|
||||
|
||||
+#if ENABLE_FEATURE_CLEAN_UP
|
||||
+ {
|
||||
+ struct variable *cur_var;
|
||||
+ if (G.cwd != bb_msg_unknown)
|
||||
+ free((char*)G.cwd);
|
||||
+ cur_var = G.top_var;
|
||||
+ while (cur_var) {
|
||||
+ struct variable *tmp = cur_var;
|
||||
+ if (!cur_var->max_len)
|
||||
+ free(cur_var->varstr);
|
||||
+ cur_var = cur_var->next;
|
||||
+ free(tmp);
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
#if ENABLE_HUSH_JOB
|
||||
fflush_all();
|
||||
sigexit(- (exitcode & 0xff));
|
||||
@@ -2158,22 +2174,22 @@ static void debug_print_list(const char
|
||||
int i = 0;
|
||||
|
||||
indent();
|
||||
- fprintf(stderr, "%s: list:%p n:%d string_start:%d length:%d maxlen:%d glob:%d quoted:%d escape:%d\n",
|
||||
+ fdprintf(2, "%s: list:%p n:%d string_start:%d length:%d maxlen:%d glob:%d quoted:%d escape:%d\n",
|
||||
prefix, list, n, string_start, o->length, o->maxlen,
|
||||
!!(o->o_expflags & EXP_FLAG_GLOB),
|
||||
o->has_quoted_part,
|
||||
!!(o->o_expflags & EXP_FLAG_ESC_GLOB_CHARS));
|
||||
while (i < n) {
|
||||
indent();
|
||||
- fprintf(stderr, " list[%d]=%d '%s' %p\n", i, (int)list[i],
|
||||
- o->data + (int)list[i] + string_start,
|
||||
- o->data + (int)list[i] + string_start);
|
||||
+ fdprintf(2, " list[%d]=%d '%s' %p\n", i, (int)(uintptr_t)list[i],
|
||||
+ o->data + (int)(uintptr_t)list[i] + string_start,
|
||||
+ o->data + (int)(uintptr_t)list[i] + string_start);
|
||||
i++;
|
||||
}
|
||||
if (n) {
|
||||
- const char *p = o->data + (int)list[n - 1] + string_start;
|
||||
+ const char *p = o->data + (int)(uintptr_t)list[n - 1] + string_start;
|
||||
indent();
|
||||
- fprintf(stderr, " total_sz:%ld\n", (long)((p + strlen(p) + 1) - o->data));
|
||||
+ fdprintf(2, " total_sz:%ld\n", (long)((p + strlen(p) + 1) - o->data));
|
||||
}
|
||||
}
|
||||
#else
|
||||
@@ -2672,18 +2688,18 @@ static void debug_print_tree(struct pipe
|
||||
|
||||
pin = 0;
|
||||
while (pi) {
|
||||
- fprintf(stderr, "%*spipe %d res_word=%s followup=%d %s\n", lvl*2, "",
|
||||
+ fdprintf(2, "%*spipe %d res_word=%s followup=%d %s\n", lvl*2, "",
|
||||
pin, RES[pi->res_word], pi->followup, PIPE[pi->followup]);
|
||||
prn = 0;
|
||||
while (prn < pi->num_cmds) {
|
||||
struct command *command = &pi->cmds[prn];
|
||||
char **argv = command->argv;
|
||||
|
||||
- fprintf(stderr, "%*s cmd %d assignment_cnt:%d",
|
||||
+ fdprintf(2, "%*s cmd %d assignment_cnt:%d",
|
||||
lvl*2, "", prn,
|
||||
command->assignment_cnt);
|
||||
if (command->group) {
|
||||
- fprintf(stderr, " group %s: (argv=%p)%s%s\n",
|
||||
+ fdprintf(2, " group %s: (argv=%p)%s%s\n",
|
||||
CMDTYPE[command->cmd_type],
|
||||
argv
|
||||
# if !BB_MMU
|
||||
@@ -2697,10 +2713,10 @@ static void debug_print_tree(struct pipe
|
||||
continue;
|
||||
}
|
||||
if (argv) while (*argv) {
|
||||
- fprintf(stderr, " '%s'", *argv);
|
||||
+ fdprintf(2, " '%s'", *argv);
|
||||
argv++;
|
||||
}
|
||||
- fprintf(stderr, "\n");
|
||||
+ fdprintf(2, "\n");
|
||||
prn++;
|
||||
}
|
||||
pi = pi->next;
|
||||
@@ -4106,7 +4122,16 @@ static struct pipe *parse_stream(char **
|
||||
if (IS_NULL_CMD(ctx.command)
|
||||
&& dest.length == 0 && !dest.has_quoted_part
|
||||
) {
|
||||
- continue;
|
||||
+ /* This newline can be ignored. But...
|
||||
+ * without the below check, interactive shell
|
||||
+ * will ignore even lines with bare <newline>,
|
||||
+ * and show the continuation prompt:
|
||||
+ * ps1_prompt$ <enter>
|
||||
+ * ps2> _ <=== wrong prompt, should be ps1
|
||||
+ */
|
||||
+ struct pipe *pi = ctx.list_head;
|
||||
+ if (pi->num_cmds != 0)
|
||||
+ continue;
|
||||
}
|
||||
/* Treat newline as a command separator. */
|
||||
done_pipe(&ctx, PIPE_SEQ);
|
||||
@@ -7445,7 +7470,7 @@ int hush_main(int argc, char **argv)
|
||||
unsigned builtin_argc;
|
||||
char **e;
|
||||
struct variable *cur_var;
|
||||
- struct variable shell_ver;
|
||||
+ struct variable *shell_ver;
|
||||
|
||||
INIT_G();
|
||||
if (EXIT_SUCCESS) /* if EXIT_SUCCESS == 0, it is already done */
|
||||
@@ -7454,17 +7479,17 @@ int hush_main(int argc, char **argv)
|
||||
G.argv0_for_re_execing = argv[0];
|
||||
#endif
|
||||
/* Deal with HUSH_VERSION */
|
||||
- memset(&shell_ver, 0, sizeof(shell_ver));
|
||||
- shell_ver.flg_export = 1;
|
||||
- shell_ver.flg_read_only = 1;
|
||||
+ shell_ver = xzalloc(sizeof(*shell_ver));
|
||||
+ shell_ver->flg_export = 1;
|
||||
+ shell_ver->flg_read_only = 1;
|
||||
/* Code which handles ${var<op>...} needs writable values for all variables,
|
||||
* therefore we xstrdup: */
|
||||
- shell_ver.varstr = xstrdup(hush_version_str),
|
||||
- G.top_var = &shell_ver;
|
||||
+ shell_ver->varstr = xstrdup(hush_version_str);
|
||||
/* Create shell local variables from the values
|
||||
* currently living in the environment */
|
||||
debug_printf_env("unsetenv '%s'\n", "HUSH_VERSION");
|
||||
unsetenv("HUSH_VERSION"); /* in case it exists in initial env */
|
||||
+ G.top_var = shell_ver;
|
||||
cur_var = G.top_var;
|
||||
e = environ;
|
||||
if (e) while (*e) {
|
||||
@@ -7479,8 +7504,8 @@ int hush_main(int argc, char **argv)
|
||||
e++;
|
||||
}
|
||||
/* (Re)insert HUSH_VERSION into env (AFTER we scanned the env!) */
|
||||
- debug_printf_env("putenv '%s'\n", shell_ver.varstr);
|
||||
- putenv(shell_ver.varstr);
|
||||
+ debug_printf_env("putenv '%s'\n", shell_ver->varstr);
|
||||
+ putenv(shell_ver->varstr);
|
||||
|
||||
/* Export PWD */
|
||||
set_pwd_var(/*exp:*/ 1);
|
||||
@@ -7840,18 +7865,6 @@ int hush_main(int argc, char **argv)
|
||||
parse_and_run_file(stdin);
|
||||
|
||||
final_return:
|
||||
-#if ENABLE_FEATURE_CLEAN_UP
|
||||
- if (G.cwd != bb_msg_unknown)
|
||||
- free((char*)G.cwd);
|
||||
- cur_var = G.top_var->next;
|
||||
- while (cur_var) {
|
||||
- struct variable *tmp = cur_var;
|
||||
- if (!cur_var->max_len)
|
||||
- free(cur_var->varstr);
|
||||
- cur_var = cur_var->next;
|
||||
- free(tmp);
|
||||
- }
|
||||
-#endif
|
||||
hush_exit(G.last_exitcode);
|
||||
}
|
||||
|
12
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.1-mkswap.patch
vendored
Normal file
12
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.1-mkswap.patch
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
diff -urpN busybox-1.18.1/util-linux/mkswap.c busybox-1.18.1-mkswap/util-linux/mkswap.c
|
||||
--- busybox-1.18.1/util-linux/mkswap.c 2010-12-20 01:41:27.000000000 +0100
|
||||
+++ busybox-1.18.1-mkswap/util-linux/mkswap.c 2011-01-05 11:41:24.455856773 +0100
|
||||
@@ -15,7 +15,7 @@ static void mkswap_selinux_setcontext(in
|
||||
if (!is_selinux_enabled())
|
||||
return;
|
||||
|
||||
- xfstat(fd, &stbuf, argv[0]);
|
||||
+ xfstat(fd, &stbuf, path);
|
||||
if (S_ISREG(stbuf.st_mode)) {
|
||||
security_context_t newcon;
|
||||
security_context_t oldcon = NULL;
|
28
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.1-warning.patch
vendored
Normal file
28
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.1-warning.patch
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
diff -urpN busybox-1.18.1/libbb/procps.c busybox-1.18.1-warning/libbb/procps.c
|
||||
--- busybox-1.18.1/libbb/procps.c 2010-12-21 05:29:45.000000000 +0100
|
||||
+++ busybox-1.18.1-warning/libbb/procps.c 2011-01-07 13:41:22.000000000 +0100
|
||||
@@ -154,6 +154,7 @@ static unsigned long fast_strtoul_10(cha
|
||||
return n;
|
||||
}
|
||||
|
||||
+# if ENABLE_FEATURE_FAST_TOP
|
||||
static long fast_strtol_10(char **endptr)
|
||||
{
|
||||
if (**endptr != '-')
|
||||
@@ -162,6 +163,7 @@ static long fast_strtol_10(char **endptr
|
||||
(*endptr)++;
|
||||
return - (long)fast_strtoul_10(endptr);
|
||||
}
|
||||
+# endif
|
||||
|
||||
static char *skip_fields(char *str, int count)
|
||||
{
|
||||
@@ -448,7 +450,7 @@ procps_status_t* FAST_FUNC procps_scan(p
|
||||
//FIXME: is it safe to assume this field exists?
|
||||
sp->last_seen_on_cpu = fast_strtoul_10(&cp);
|
||||
# endif
|
||||
-#endif /* end of !ENABLE_FEATURE_TOP_SMP_PROCESS */
|
||||
+#endif /* FEATURE_FAST_TOP */
|
||||
|
||||
#if ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS
|
||||
sp->niceness = tasknice;
|
@ -0,0 +1,10 @@
|
||||
--- busybox-1.18.3/Config.in
|
||||
+++ busybox-1.18.3-buildsys/Config.in
|
||||
@@ -126,7 +126,6 @@ config FEATURE_INSTALLER
|
||||
config INSTALL_NO_USR
|
||||
bool "Don't use /usr"
|
||||
default n
|
||||
- depends on FEATURE_INSTALLER
|
||||
help
|
||||
Disable use of /usr. busybox --install and "make install"
|
||||
will install applets only to /bin and /sbin,
|
@ -0,0 +1,36 @@
|
||||
--- busybox-1.18.3/modutils/modutils-24.c
|
||||
+++ busybox-1.18.3-modutils24/modutils/modutils-24.c
|
||||
@@ -2474,6 +2474,7 @@ new_process_module_arguments(struct obj_
|
||||
n = 0;
|
||||
p = val;
|
||||
while (*p != 0) {
|
||||
+ char sv_ch;
|
||||
char *endp;
|
||||
|
||||
if (++n > max)
|
||||
@@ -2482,14 +2483,17 @@ new_process_module_arguments(struct obj_
|
||||
switch (*pinfo) {
|
||||
case 's':
|
||||
len = strcspn(p, ",");
|
||||
+ sv_ch = p[len];
|
||||
p[len] = 0;
|
||||
obj_string_patch(f, sym->secidx,
|
||||
loc - contents, p);
|
||||
loc += tgt_sizeof_char_p;
|
||||
p += len;
|
||||
+ *p = sv_ch;
|
||||
break;
|
||||
case 'c':
|
||||
len = strcspn(p, ",");
|
||||
+ sv_ch = p[len];
|
||||
p[len] = 0;
|
||||
if (len >= charssize)
|
||||
bb_error_msg_and_die("string too long for %s (max %ld)", param,
|
||||
@@ -2497,6 +2501,7 @@ new_process_module_arguments(struct obj_
|
||||
strcpy((char *) loc, p);
|
||||
loc += charssize;
|
||||
p += len;
|
||||
+ *p = sv_ch;
|
||||
break;
|
||||
case 'b':
|
||||
*loc++ = strtoul(p, &endp, 0);
|
128
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.3-wget.patch
vendored
Normal file
128
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.3-wget.patch
vendored
Normal file
@ -0,0 +1,128 @@
|
||||
--- busybox-1.18.3/networking/wget.c
|
||||
+++ busybox-1.18.3-wget/networking/wget.c
|
||||
@@ -446,7 +446,7 @@ static FILE* prepare_ftp_session(FILE **
|
||||
|
||||
static void NOINLINE retrieve_file_data(FILE *dfp, int output_fd)
|
||||
{
|
||||
- char buf[512];
|
||||
+ char buf[4*1024]; /* made bigger to speed up local xfers */
|
||||
#if ENABLE_FEATURE_WGET_STATUSBAR || ENABLE_FEATURE_WGET_TIMEOUT
|
||||
# if ENABLE_FEATURE_WGET_TIMEOUT
|
||||
unsigned second_cnt;
|
||||
@@ -455,7 +455,6 @@ static void NOINLINE retrieve_file_data(
|
||||
|
||||
polldata.fd = fileno(dfp);
|
||||
polldata.events = POLLIN | POLLPRI;
|
||||
- ndelay_on(polldata.fd);
|
||||
#endif
|
||||
progress_meter(PROGRESS_START);
|
||||
|
||||
@@ -464,6 +463,10 @@ static void NOINLINE retrieve_file_data(
|
||||
|
||||
/* Loops only if chunked */
|
||||
while (1) {
|
||||
+
|
||||
+#if ENABLE_FEATURE_WGET_STATUSBAR || ENABLE_FEATURE_WGET_TIMEOUT
|
||||
+ ndelay_on(polldata.fd);
|
||||
+#endif
|
||||
while (1) {
|
||||
int n;
|
||||
unsigned rdsz;
|
||||
@@ -493,22 +496,46 @@ static void NOINLINE retrieve_file_data(
|
||||
progress_meter(PROGRESS_BUMP);
|
||||
}
|
||||
#endif
|
||||
+ /* fread internally uses read loop, which in our case
|
||||
+ * is usually exited when we get EAGAIN.
|
||||
+ * In this case, libc sets error marker on the stream.
|
||||
+ * Need to clear it before next fread to avoid possible
|
||||
+ * rare false positive ferror below. Rare because usually
|
||||
+ * fread gets more than zero bytes, and we don't fall
|
||||
+ * into if (n <= 0) ...
|
||||
+ */
|
||||
+ clearerr(dfp);
|
||||
+ errno = 0;
|
||||
n = safe_fread(buf, rdsz, dfp);
|
||||
+ /* man fread:
|
||||
+ * If error occurs, or EOF is reached, the return value
|
||||
+ * is a short item count (or zero).
|
||||
+ * fread does not distinguish between EOF and error.
|
||||
+ */
|
||||
if (n <= 0) {
|
||||
- if (ferror(dfp)) {
|
||||
- /* perror will not work: ferror doesn't set errno */
|
||||
- bb_error_msg_and_die(bb_msg_read_error);
|
||||
- }
|
||||
- break;
|
||||
+#if ENABLE_FEATURE_WGET_STATUSBAR || ENABLE_FEATURE_WGET_TIMEOUT
|
||||
+ if (errno == EAGAIN) /* poll lied, there is no data? */
|
||||
+ continue; /* yes */
|
||||
+#endif
|
||||
+ if (ferror(dfp))
|
||||
+ bb_perror_msg_and_die(bb_msg_read_error);
|
||||
+ break; /* EOF, not error */
|
||||
}
|
||||
+
|
||||
xwrite(output_fd, buf, n);
|
||||
#if ENABLE_FEATURE_WGET_STATUSBAR
|
||||
G.transferred += n;
|
||||
progress_meter(PROGRESS_BUMP);
|
||||
#endif
|
||||
- if (G.got_clen)
|
||||
+ if (G.got_clen) {
|
||||
G.content_len -= n;
|
||||
+ if (G.content_len == 0)
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
+#if ENABLE_FEATURE_WGET_STATUSBAR || ENABLE_FEATURE_WGET_TIMEOUT
|
||||
+ ndelay_off(polldata.fd);
|
||||
+#endif
|
||||
|
||||
if (!G.chunked)
|
||||
break;
|
||||
@@ -706,6 +733,11 @@ int wget_main(int argc UNUSED_PARAM, cha
|
||||
fprintf(sfp, "Host: %s\r\nUser-Agent: %s\r\n",
|
||||
target.host, user_agent);
|
||||
|
||||
+ /* Ask server to close the connection as soon as we are done
|
||||
+ * (IOW: we do not intend to send more requests)
|
||||
+ */
|
||||
+ fprintf(sfp, "Connection: close\r\n");
|
||||
+
|
||||
#if ENABLE_FEATURE_WGET_AUTHENTICATION
|
||||
if (target.user) {
|
||||
fprintf(sfp, "Proxy-Authorization: Basic %s\r\n"+6,
|
||||
@@ -719,22 +751,25 @@ int wget_main(int argc UNUSED_PARAM, cha
|
||||
|
||||
if (G.beg_range)
|
||||
fprintf(sfp, "Range: bytes=%"OFF_FMT"u-\r\n", G.beg_range);
|
||||
+
|
||||
#if ENABLE_FEATURE_WGET_LONG_OPTIONS
|
||||
if (extra_headers)
|
||||
fputs(extra_headers, sfp);
|
||||
|
||||
if (opt & WGET_OPT_POST_DATA) {
|
||||
char *estr = URL_escape(post_data);
|
||||
- fprintf(sfp, "Content-Type: application/x-www-form-urlencoded\r\n");
|
||||
- fprintf(sfp, "Content-Length: %u\r\n" "\r\n" "%s",
|
||||
- (int) strlen(estr), estr);
|
||||
- /*fprintf(sfp, "Connection: Keep-Alive\r\n\r\n");*/
|
||||
- /*fprintf(sfp, "%s\r\n", estr);*/
|
||||
+ fprintf(sfp,
|
||||
+ "Content-Type: application/x-www-form-urlencoded\r\n"
|
||||
+ "Content-Length: %u\r\n"
|
||||
+ "\r\n"
|
||||
+ "%s",
|
||||
+ (int) strlen(estr), estr
|
||||
+ );
|
||||
free(estr);
|
||||
} else
|
||||
#endif
|
||||
- { /* If "Connection:" is needed, document why */
|
||||
- fprintf(sfp, /* "Connection: close\r\n" */ "\r\n");
|
||||
+ {
|
||||
+ fprintf(sfp, "\r\n");
|
||||
}
|
||||
|
||||
fflush(sfp);
|
11
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.4-fuser.patch
vendored
Normal file
11
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.4-fuser.patch
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
--- busybox-1.18.4/procps/fuser.c
|
||||
+++ busybox-1.18.4-fuser/procps/fuser.c
|
||||
@@ -271,7 +271,7 @@ Find processes which use FILEs or PORTs
|
||||
if (sscanf(*pp, "%u/%4s", &port, tproto) != 2)
|
||||
goto file;
|
||||
sprintf(path, "/proc/net/%s", tproto);
|
||||
- if (access(path, R_OK) != 0) { /* PORT/PROTO */
|
||||
+ if (access(path, R_OK) == 0) { /* PORT/PROTO */
|
||||
scan_proc_net(path, port);
|
||||
} else { /* FILE */
|
||||
file:
|
183
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.4-hush.patch
vendored
Normal file
183
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.18.4-hush.patch
vendored
Normal file
@ -0,0 +1,183 @@
|
||||
--- busybox-1.18.4/shell/hush.c
|
||||
+++ busybox-1.18.4-hush/shell/hush.c
|
||||
@@ -427,6 +427,15 @@ enum {
|
||||
/* Used for initialization: o_string foo = NULL_O_STRING; */
|
||||
#define NULL_O_STRING { NULL }
|
||||
|
||||
+#ifndef debug_printf_parse
|
||||
+static const char *const assignment_flag[] = {
|
||||
+ "MAYBE_ASSIGNMENT",
|
||||
+ "DEFINITELY_ASSIGNMENT",
|
||||
+ "NOT_ASSIGNMENT",
|
||||
+ "WORD_IS_KEYWORD",
|
||||
+};
|
||||
+#endif
|
||||
+
|
||||
/* I can almost use ordinary FILE*. Is open_memstream() universally
|
||||
* available? Where is it documented? */
|
||||
typedef struct in_str {
|
||||
@@ -2885,24 +2894,24 @@ static const struct reserved_combo* matc
|
||||
*/
|
||||
static const struct reserved_combo reserved_list[] = {
|
||||
# if ENABLE_HUSH_IF
|
||||
- { "!", RES_NONE, NOT_ASSIGNMENT , 0 },
|
||||
- { "if", RES_IF, WORD_IS_KEYWORD, FLAG_THEN | FLAG_START },
|
||||
- { "then", RES_THEN, WORD_IS_KEYWORD, FLAG_ELIF | FLAG_ELSE | FLAG_FI },
|
||||
- { "elif", RES_ELIF, WORD_IS_KEYWORD, FLAG_THEN },
|
||||
- { "else", RES_ELSE, WORD_IS_KEYWORD, FLAG_FI },
|
||||
- { "fi", RES_FI, NOT_ASSIGNMENT , FLAG_END },
|
||||
+ { "!", RES_NONE, NOT_ASSIGNMENT , 0 },
|
||||
+ { "if", RES_IF, MAYBE_ASSIGNMENT, FLAG_THEN | FLAG_START },
|
||||
+ { "then", RES_THEN, MAYBE_ASSIGNMENT, FLAG_ELIF | FLAG_ELSE | FLAG_FI },
|
||||
+ { "elif", RES_ELIF, MAYBE_ASSIGNMENT, FLAG_THEN },
|
||||
+ { "else", RES_ELSE, MAYBE_ASSIGNMENT, FLAG_FI },
|
||||
+ { "fi", RES_FI, NOT_ASSIGNMENT , FLAG_END },
|
||||
# endif
|
||||
# if ENABLE_HUSH_LOOPS
|
||||
- { "for", RES_FOR, NOT_ASSIGNMENT , FLAG_IN | FLAG_DO | FLAG_START },
|
||||
- { "while", RES_WHILE, WORD_IS_KEYWORD, FLAG_DO | FLAG_START },
|
||||
- { "until", RES_UNTIL, WORD_IS_KEYWORD, FLAG_DO | FLAG_START },
|
||||
- { "in", RES_IN, NOT_ASSIGNMENT , FLAG_DO },
|
||||
- { "do", RES_DO, WORD_IS_KEYWORD, FLAG_DONE },
|
||||
- { "done", RES_DONE, NOT_ASSIGNMENT , FLAG_END },
|
||||
+ { "for", RES_FOR, NOT_ASSIGNMENT , FLAG_IN | FLAG_DO | FLAG_START },
|
||||
+ { "while", RES_WHILE, MAYBE_ASSIGNMENT, FLAG_DO | FLAG_START },
|
||||
+ { "until", RES_UNTIL, MAYBE_ASSIGNMENT, FLAG_DO | FLAG_START },
|
||||
+ { "in", RES_IN, NOT_ASSIGNMENT , FLAG_DO },
|
||||
+ { "do", RES_DO, MAYBE_ASSIGNMENT, FLAG_DONE },
|
||||
+ { "done", RES_DONE, NOT_ASSIGNMENT , FLAG_END },
|
||||
# endif
|
||||
# if ENABLE_HUSH_CASE
|
||||
- { "case", RES_CASE, NOT_ASSIGNMENT , FLAG_MATCH | FLAG_START },
|
||||
- { "esac", RES_ESAC, NOT_ASSIGNMENT , FLAG_END },
|
||||
+ { "case", RES_CASE, NOT_ASSIGNMENT , FLAG_MATCH | FLAG_START },
|
||||
+ { "esac", RES_ESAC, NOT_ASSIGNMENT , FLAG_END },
|
||||
# endif
|
||||
};
|
||||
const struct reserved_combo *r;
|
||||
@@ -2968,6 +2977,7 @@ static int reserved_word(o_string *word,
|
||||
ctx->ctx_res_w = r->res;
|
||||
ctx->old_flag = r->flag;
|
||||
word->o_assignment = r->assignment_flag;
|
||||
+ debug_printf_parse("word->o_assignment='%s'\n", assignment_flag[word->o_assignment]);
|
||||
|
||||
if (ctx->old_flag & FLAG_END) {
|
||||
struct parse_context *old;
|
||||
@@ -3034,18 +3044,6 @@ static int done_word(o_string *word, str
|
||||
debug_printf_parse("word stored in rd_filename: '%s'\n", word->data);
|
||||
ctx->pending_redirect = NULL;
|
||||
} else {
|
||||
- /* If this word wasn't an assignment, next ones definitely
|
||||
- * can't be assignments. Even if they look like ones. */
|
||||
- if (word->o_assignment != DEFINITELY_ASSIGNMENT
|
||||
- && word->o_assignment != WORD_IS_KEYWORD
|
||||
- ) {
|
||||
- word->o_assignment = NOT_ASSIGNMENT;
|
||||
- } else {
|
||||
- if (word->o_assignment == DEFINITELY_ASSIGNMENT)
|
||||
- command->assignment_cnt++;
|
||||
- word->o_assignment = MAYBE_ASSIGNMENT;
|
||||
- }
|
||||
-
|
||||
#if HAS_KEYWORDS
|
||||
# if ENABLE_HUSH_CASE
|
||||
if (ctx->ctx_dsemicolon
|
||||
@@ -3065,8 +3063,9 @@ static int done_word(o_string *word, str
|
||||
&& ctx->ctx_res_w != RES_CASE
|
||||
# endif
|
||||
) {
|
||||
- debug_printf_parse("checking '%s' for reserved-ness\n", word->data);
|
||||
- if (reserved_word(word, ctx)) {
|
||||
+ int reserved = reserved_word(word, ctx);
|
||||
+ debug_printf_parse("checking for reserved-ness: %d\n", reserved);
|
||||
+ if (reserved) {
|
||||
o_reset_to_empty_unquoted(word);
|
||||
debug_printf_parse("done_word return %d\n",
|
||||
(ctx->ctx_res_w == RES_SNTX));
|
||||
@@ -3087,6 +3086,23 @@ static int done_word(o_string *word, str
|
||||
"groups and arglists don't mix\n");
|
||||
return 1;
|
||||
}
|
||||
+
|
||||
+ /* If this word wasn't an assignment, next ones definitely
|
||||
+ * can't be assignments. Even if they look like ones. */
|
||||
+ if (word->o_assignment != DEFINITELY_ASSIGNMENT
|
||||
+ && word->o_assignment != WORD_IS_KEYWORD
|
||||
+ ) {
|
||||
+ word->o_assignment = NOT_ASSIGNMENT;
|
||||
+ } else {
|
||||
+ if (word->o_assignment == DEFINITELY_ASSIGNMENT) {
|
||||
+ command->assignment_cnt++;
|
||||
+ debug_printf_parse("++assignment_cnt=%d\n", command->assignment_cnt);
|
||||
+ }
|
||||
+ debug_printf_parse("word->o_assignment was:'%s'\n", assignment_flag[word->o_assignment]);
|
||||
+ word->o_assignment = MAYBE_ASSIGNMENT;
|
||||
+ }
|
||||
+ debug_printf_parse("word->o_assignment='%s'\n", assignment_flag[word->o_assignment]);
|
||||
+
|
||||
if (word->has_quoted_part
|
||||
/* optimization: and if it's ("" or '') or ($v... or `cmd`...): */
|
||||
&& (word->data[0] == '\0' || word->data[0] == SPECIAL_VAR_SYMBOL)
|
||||
@@ -4105,6 +4121,7 @@ static struct pipe *parse_stream(char **
|
||||
&& is_well_formed_var_name(dest.data, '=')
|
||||
) {
|
||||
dest.o_assignment = DEFINITELY_ASSIGNMENT;
|
||||
+ debug_printf_parse("dest.o_assignment='%s'\n", assignment_flag[dest.o_assignment]);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@@ -4154,6 +4171,7 @@ static struct pipe *parse_stream(char **
|
||||
heredoc_cnt = 0;
|
||||
}
|
||||
dest.o_assignment = MAYBE_ASSIGNMENT;
|
||||
+ debug_printf_parse("dest.o_assignment='%s'\n", assignment_flag[dest.o_assignment]);
|
||||
ch = ';';
|
||||
/* note: if (is_blank) continue;
|
||||
* will still trigger for us */
|
||||
@@ -4203,6 +4221,7 @@ static struct pipe *parse_stream(char **
|
||||
}
|
||||
done_pipe(&ctx, PIPE_SEQ);
|
||||
dest.o_assignment = MAYBE_ASSIGNMENT;
|
||||
+ debug_printf_parse("dest.o_assignment='%s'\n", assignment_flag[dest.o_assignment]);
|
||||
/* Do we sit outside of any if's, loops or case's? */
|
||||
if (!HAS_KEYWORDS
|
||||
IF_HAS_KEYWORDS(|| (ctx.ctx_res_w == RES_NONE && ctx.old_flag == 0))
|
||||
@@ -4309,6 +4328,7 @@ static struct pipe *parse_stream(char **
|
||||
/* ch is a special char and thus this word
|
||||
* cannot be an assignment */
|
||||
dest.o_assignment = NOT_ASSIGNMENT;
|
||||
+ debug_printf_parse("dest.o_assignment='%s'\n", assignment_flag[dest.o_assignment]);
|
||||
}
|
||||
|
||||
/* Note: nommu_addchr(&ctx.as_string, ch) is already done */
|
||||
@@ -4406,6 +4426,7 @@ static struct pipe *parse_stream(char **
|
||||
/* We just finished a cmd. New one may start
|
||||
* with an assignment */
|
||||
dest.o_assignment = MAYBE_ASSIGNMENT;
|
||||
+ debug_printf_parse("dest.o_assignment='%s'\n", assignment_flag[dest.o_assignment]);
|
||||
break;
|
||||
case '&':
|
||||
if (done_word(&dest, &ctx)) {
|
||||
@@ -7292,7 +7313,10 @@ static int run_list(struct pipe *pi)
|
||||
#endif
|
||||
#if ENABLE_HUSH_LOOPS
|
||||
/* Beware of "while false; true; do ..."! */
|
||||
- if (pi->next && pi->next->res_word == RES_DO) {
|
||||
+ if (pi->next
|
||||
+ && (pi->next->res_word == RES_DO || pi->next->res_word == RES_DONE)
|
||||
+ /* (the second check above is needed for "while ...; do \n done" case) */
|
||||
+ ) {
|
||||
if (rword == RES_WHILE) {
|
||||
if (rcode) {
|
||||
/* "while false; do...done" - exitcode 0 */
|
||||
--- busybox-1.18.4/shell/hush_test/hush-misc/while3.right
|
||||
+++ busybox-1.18.4-hush/shell/hush_test/hush-misc/while3.right
|
||||
@@ -0,0 +1 @@
|
||||
+OK:0
|
||||
--- busybox-1.18.4/shell/hush_test/hush-misc/while3.tests
|
||||
+++ busybox-1.18.4-hush/shell/hush_test/hush-misc/while3.tests
|
||||
@@ -0,0 +1,4 @@
|
||||
+while false; do
|
||||
+ # bash will require at least ":" here...
|
||||
+done
|
||||
+echo OK:$?
|
125
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev-start.sh
vendored
Executable file
125
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev-start.sh
vendored
Executable file
@ -0,0 +1,125 @@
|
||||
# Copyright 1999-2008 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
find_mdev()
|
||||
{
|
||||
if [ -x /sbin/mdev ] ; then
|
||||
echo "/sbin/mdev"
|
||||
else
|
||||
echo "/bin/busybox mdev"
|
||||
fi
|
||||
}
|
||||
|
||||
populate_mdev()
|
||||
{
|
||||
# populate /dev with devices already found by the kernel
|
||||
|
||||
if get_bootparam "nocoldplug" ; then
|
||||
RC_COLDPLUG="no"
|
||||
ewarn "Skipping mdev coldplug as requested in kernel cmdline"
|
||||
fi
|
||||
|
||||
ebegin "Populating /dev with existing devices with mdev -s"
|
||||
$(find_mdev) -s
|
||||
eend $?
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
seed_dev()
|
||||
{
|
||||
# Seed /dev with some things that we know we need
|
||||
|
||||
# creating /dev/console and /dev/tty1 to be able to write
|
||||
# to $CONSOLE with/without bootsplash before mdev creates it
|
||||
[ -c /dev/console ] || mknod /dev/console c 5 1
|
||||
[ -c /dev/tty1 ] || mknod /dev/tty1 c 4 1
|
||||
|
||||
# udevd will dup its stdin/stdout/stderr to /dev/null
|
||||
# and we do not want a file which gets buffered in ram
|
||||
[ -c /dev/null ] || mknod /dev/null c 1 3
|
||||
|
||||
# copy over any persistant things
|
||||
if [ -d /lib/mdev/devices ] ; then
|
||||
cp -RPp /lib/mdev/devices/* /dev 2>/dev/null
|
||||
fi
|
||||
|
||||
# Not provided by sysfs but needed
|
||||
ln -snf /proc/self/fd /dev/fd
|
||||
ln -snf fd/0 /dev/stdin
|
||||
ln -snf fd/1 /dev/stdout
|
||||
ln -snf fd/2 /dev/stderr
|
||||
[ -e /proc/kcore ] && ln -snf /proc/kcore /dev/core
|
||||
|
||||
# Create problematic directories
|
||||
mkdir -p /dev/pts /dev/shm
|
||||
}
|
||||
|
||||
mount_it_b1()
|
||||
{
|
||||
if [ "${RC_USE_FSTAB}" = "yes" ] ; then
|
||||
mntcmd=$(get_mount_fstab /dev)
|
||||
else
|
||||
unset mntcmd
|
||||
fi
|
||||
if [ -n "${mntcmd}" ] ; then
|
||||
try mount -n ${mntcmd}
|
||||
else
|
||||
if grep -Eq "[[:space:]]+tmpfs$" /proc/filesystems ; then
|
||||
mntcmd="tmpfs"
|
||||
else
|
||||
mntcmd="ramfs"
|
||||
fi
|
||||
# many video drivers require exec access in /dev #92921
|
||||
try mount -n -t "${mntcmd}" -o exec,nosuid,mode=0755 mdev /dev
|
||||
fi
|
||||
}
|
||||
mount_it_b2()
|
||||
{
|
||||
if fstabinfo --quiet /dev ; then
|
||||
mount -n /dev
|
||||
else
|
||||
# Some devices require exec, Bug #92921
|
||||
mount -n -t tmpfs -o "exec,nosuid,mode=0755,size=10M" mdev /dev
|
||||
fi
|
||||
}
|
||||
mount_it()
|
||||
{
|
||||
type fstabinfo && mount_it_b2 || mount_it_b1
|
||||
}
|
||||
|
||||
main()
|
||||
{
|
||||
# Setup temporary storage for /dev
|
||||
ebegin "Mounting /dev for mdev"
|
||||
mount_it
|
||||
eend $?
|
||||
|
||||
# Create a file so that our rc system knows it's still in sysinit.
|
||||
# Existance means init scripts will not directly run.
|
||||
# rc will remove the file when done with sysinit.
|
||||
touch /dev/.rcsysinit
|
||||
|
||||
# Selinux lovin; /selinux should be mounted by selinux-patched init
|
||||
if [ -x /sbin/restorecon ] && [ -c /selinux/null ] ; then
|
||||
restorecon /dev > /selinux/null
|
||||
fi
|
||||
|
||||
seed_dev
|
||||
|
||||
# Setup hotplugging (if possible)
|
||||
if [ -e /proc/sys/kernel/hotplug ] ; then
|
||||
ebegin "Setting up proper hotplug agent"
|
||||
eindent
|
||||
einfo "Setting /sbin/mdev as hotplug agent ..."
|
||||
echo $(find_mdev) > /proc/sys/kernel/hotplug
|
||||
eoutdent
|
||||
eend 0
|
||||
fi
|
||||
|
||||
populate_mdev
|
||||
}
|
||||
|
||||
main
|
||||
|
||||
# vim:ts=4
|
9
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev.rc
vendored
Executable file
9
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev.rc
vendored
Executable file
@ -0,0 +1,9 @@
|
||||
#!/sbin/runscript
|
||||
# Copyright 1999-2010 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: ./gentoo-x86-cvsroot/sys-apps/busybox/files/mdev.rc,v 1.1 2010/08/15 03:55:29 vapier Exp $
|
||||
|
||||
start()
|
||||
{
|
||||
. /lib/rcscripts/addons/mdev-start.sh
|
||||
}
|
18
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/dvbdev
vendored
Normal file
18
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/dvbdev
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
#!/bin/sh
|
||||
|
||||
# MDEV=dvb0.demux1 -> ADAPTER=dvb0 -> N=0
|
||||
ADAPTER=${MDEV%.*}
|
||||
N=${ADAPTER#dvb}
|
||||
# MDEV=dvb0.demux1 -> DEVB_DEV=demux1
|
||||
DVB_DEV=${MDEV#*.}
|
||||
|
||||
case "$ACTION" in
|
||||
add|"")
|
||||
mkdir -p dvb/adapter${N}
|
||||
mv ${MDEV} dvb/adapter${N}/${DVB_DEV}
|
||||
;;
|
||||
remove)
|
||||
rm -f dvb/adapter${N}/${DVB_DEV}
|
||||
rmdir dvb/adapter${N} 2>/dev/null
|
||||
rmdir dvb/ 2>/dev/null
|
||||
esac
|
23
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/ide_links
vendored
Normal file
23
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/ide_links
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ -f /proc/ide/$MDEV/media ] || exit
|
||||
|
||||
media=`cat /proc/ide/$MDEV/media`
|
||||
for i in $media $media[0-9]* ; do
|
||||
if [ "`readlink $i 2>/dev/null`" = $MDEV ] ; then
|
||||
LINK=$i
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# link exist, remove if necessary and exit
|
||||
if [ "$LINK" ] ; then
|
||||
[ "$ACTION" = remove ] && rm $LINK
|
||||
exit
|
||||
fi
|
||||
|
||||
# create a link
|
||||
num=`ls $media[0-9]* 2>/dev/null | wc -l`
|
||||
ln -sf $MDEV "$media`echo $num`"
|
||||
[ -e "$media" ] || ln -sf $MDEV "$media"
|
||||
|
62
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/usbdev
vendored
Normal file
62
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/usbdev
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
#!/bin/sh
|
||||
|
||||
# script is buggy; until patched just do exit 0
|
||||
#exit 0
|
||||
|
||||
# add zeros to device or bus
|
||||
add_zeros () {
|
||||
case "$(echo $1 | wc -L)" in
|
||||
1) echo "00$1" ;;
|
||||
2) echo "0$1" ;;
|
||||
*) echo "$1"
|
||||
esac
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
# bus and device dirs in /sys
|
||||
USB_PATH=$(echo $MDEV | sed -e 's/usbdev\([0-9]\).[0-9]/usb\1/')
|
||||
USB_PATH=$(find /sys/devices -type d -name "$USB_PATH")
|
||||
USB_DEV_DIR=$(echo $MDEV | sed -e 's/usbdev\([0-9]\).\([0-9]\)/\1-\2/')
|
||||
|
||||
# dir names in /dev
|
||||
BUS=$(add_zeros $(echo $MDEV | sed -e 's/^usbdev\([0-9]\).[0-9]/\1/'))
|
||||
USB_DEV=$(add_zeros $(echo $MDEV | sed -e 's/^usbdev[0-9].\([0-9]\)/\1/'))
|
||||
|
||||
|
||||
# try to load the proper driver for usb devices
|
||||
case "$ACTION" in
|
||||
add|"")
|
||||
# load usb bus driver
|
||||
for i in $USB_PATH/*/modalias ; do
|
||||
modprobe `cat $i` 2>/dev/null
|
||||
done
|
||||
# load usb device driver if existent
|
||||
if [ -d $USB_PATH/$USB_DEV_DIR ]; then
|
||||
for i in $USB_PATH/$USB_DEV_DIR/*/modalias ; do
|
||||
modprobe `cat $i` 2>/dev/null
|
||||
done
|
||||
fi
|
||||
# move usb device file
|
||||
mkdir -p bus/usb/$BUS
|
||||
mv $MDEV bus/usb/$BUS/$USB_DEV
|
||||
;;
|
||||
remove)
|
||||
# unload device driver, if device dir is existent
|
||||
if [ -d $USB_PATH/$USB_DEV_DIR ]; then
|
||||
for i in $USB_PATH/$USB_DEV_DIR/*/modalias ; do
|
||||
modprobe -r `cat $i` 2>/dev/null
|
||||
done
|
||||
fi
|
||||
# unload usb bus driver. Does this make sense?
|
||||
# what happens, if two usb devices are plugged in
|
||||
# and one is removed?
|
||||
for i in $USB_PATH/*/modalias ; do
|
||||
modprobe -r `cat $i` 2>/dev/null
|
||||
done
|
||||
# remove device file and possible empty dirs
|
||||
rm -f bus/usb/$BUS/$USB_DEV
|
||||
rmdir bus/usb/$BUS/ 2>/dev/null
|
||||
rmdir bus/usb/ 2>/dev/null
|
||||
rmdir bus/ 2>/dev/null
|
||||
esac
|
34
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/usbdisk_link
vendored
Normal file
34
sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/usbdisk_link
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
#!/bin/sh
|
||||
|
||||
# NOTE: since mdev -s only provide $MDEV, don't depend on any hotplug vars.
|
||||
|
||||
current=$(readlink usbdisk)
|
||||
|
||||
if [ "$current" = "$MDEV" ] && [ "$ACTION" = "remove" ]; then
|
||||
rm -f usbdisk usba1
|
||||
fi
|
||||
[ -n "$current" ] && exit
|
||||
|
||||
if [ -e /sys/block/$MDEV ]; then
|
||||
SYSDEV=$(readlink -f /sys/block/$MDEV/device)
|
||||
# if /sys device path contains '/usb[0-9]' then we assume its usb
|
||||
# also, if its an usb without partitions we require FAT
|
||||
if [ "${SYSDEV##*/usb[0-9]}" != "$SYSDEV" ]; then
|
||||
# do not create link if there is not FAT
|
||||
dd if=/dev/$MDEV bs=512 count=1 2>/dev/null | strings | grep FAT >/dev/null || exit 0
|
||||
|
||||
ln -sf $MDEV usbdisk
|
||||
# keep this for compat. people have it in fstab
|
||||
ln -sf $MDEV usba1
|
||||
fi
|
||||
|
||||
elif [ -e /sys/block/*/$MDEV ] ; then
|
||||
PARENT=$(dirname /sys/block/*/$MDEV)
|
||||
SYSDEV=$(readlink -f $PARENT/device)
|
||||
if [ "${SYSDEV##*/usb[0-9]}" != "$SYSDEV" ]; then
|
||||
ln -sf $MDEV usbdisk
|
||||
# keep this for compat. people have it in fstab
|
||||
ln -sf $MDEV usba1
|
||||
fi
|
||||
fi
|
||||
|
Loading…
x
Reference in New Issue
Block a user