diff --git a/sys-apps/busybox/busybox-1.18.5.ebuild b/sys-apps/busybox/busybox-1.19.0.ebuild
similarity index 92%
rename from sys-apps/busybox/busybox-1.18.5.ebuild
rename to sys-apps/busybox/busybox-1.19.0.ebuild
index 5077886..73915a4 100644
--- a/sys-apps/busybox/busybox-1.18.5.ebuild
+++ b/sys-apps/busybox/busybox-1.19.0.ebuild
@@ -1,6 +1,6 @@
 # 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 $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/busybox/busybox-1.19.0.ebuild,v 1.6 2011/08/24 19:18:38 maekke Exp $
 
 EAPI="3"
 inherit eutils flag-o-matic savedconfig toolchain-funcs
@@ -57,7 +57,7 @@
 fi
 LICENSE="GPL-2"
 SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~x86-linux"
+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"
 
@@ -84,11 +84,12 @@
 src_prepare() {
 	unset KBUILD_OUTPUT #88088
 	append-flags -fno-strict-aliasing #310413
+	use ppc64 && append-flags -mminimal-toc #130943
 	append-cppflags $($(tc-getPKG_CONFIG) libtirpc --cflags)
 
 	# patches go here!
-	epatch "${FILESDIR}"/busybox-1.18.0-bb.patch
-	#epatch "${FILESDIR}"/busybox-${PV}-*.patch
+	#epatch "${FILESDIR}"/busybox-1.19.0-bb.patch
+	epatch "${FILESDIR}"/busybox-${PV}-*.patch
 
 	# flag cleanup
 	sed -i -r \
@@ -252,7 +253,7 @@
 		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."
+		ewarn "set env VERY_BRAVE_OR_VERY_DUMB=yes if this is really what you want."
 		die "silly options will destroy your system"
 	fi
 
@@ -269,9 +270,7 @@
 		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
+	elog "This ebuild has support for user defined configs"
+	elog "Please read this ebuild for more details and re-emerge as needed"
+	elog "if you want to add or remove functionality for ${PN}"
 }
diff --git a/sys-apps/busybox/files/busybox-1.17.0-bb.patch b/sys-apps/busybox/files/busybox-1.17.0-bb.patch
deleted file mode 100644
index a9d64e0..0000000
--- a/sys-apps/busybox/files/busybox-1.17.0-bb.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- 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 */
- 	}
diff --git a/sys-apps/busybox/files/busybox-1.18.0-bb.patch b/sys-apps/busybox/files/busybox-1.18.0-bb.patch
deleted file mode 100644
index 309d243..0000000
--- a/sys-apps/busybox/files/busybox-1.18.0-bb.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- 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 */
- 	}
diff --git a/sys-apps/busybox/files/busybox-1.18.1-bzip2.patch b/sys-apps/busybox/files/busybox-1.18.1-bzip2.patch
deleted file mode 100644
index cffa194..0000000
--- a/sys-apps/busybox/files/busybox-1.18.1-bzip2.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-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
- 
- 
- /*---------------------------------------------------*/
diff --git a/sys-apps/busybox/files/busybox-1.18.1-cpio.patch b/sys-apps/busybox/files/busybox-1.18.1-cpio.patch
deleted file mode 100644
index 135f809..0000000
--- a/sys-apps/busybox/files/busybox-1.18.1-cpio.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-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 */
diff --git a/sys-apps/busybox/files/busybox-1.18.1-hush.patch b/sys-apps/busybox/files/busybox-1.18.1-hush.patch
deleted file mode 100644
index 5281a52..0000000
--- a/sys-apps/busybox/files/busybox-1.18.1-hush.patch
+++ /dev/null
@@ -1,259 +0,0 @@
-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);
- }
- 
diff --git a/sys-apps/busybox/files/busybox-1.18.1-mkswap.patch b/sys-apps/busybox/files/busybox-1.18.1-mkswap.patch
deleted file mode 100644
index 41dff57..0000000
--- a/sys-apps/busybox/files/busybox-1.18.1-mkswap.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-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;
diff --git a/sys-apps/busybox/files/busybox-1.18.1-warning.patch b/sys-apps/busybox/files/busybox-1.18.1-warning.patch
deleted file mode 100644
index cda94bd..0000000
--- a/sys-apps/busybox/files/busybox-1.18.1-warning.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-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;
diff --git a/sys-apps/busybox/files/busybox-1.18.3-buildsys.patch b/sys-apps/busybox/files/busybox-1.18.3-buildsys.patch
deleted file mode 100644
index 330b73f..0000000
--- a/sys-apps/busybox/files/busybox-1.18.3-buildsys.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- 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,
diff --git a/sys-apps/busybox/files/busybox-1.18.3-modutils24.patch b/sys-apps/busybox/files/busybox-1.18.3-modutils24.patch
deleted file mode 100644
index 2b13787..0000000
--- a/sys-apps/busybox/files/busybox-1.18.3-modutils24.patch
+++ /dev/null
@@ -1,36 +0,0 @@
---- 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);
diff --git a/sys-apps/busybox/files/busybox-1.18.3-wget.patch b/sys-apps/busybox/files/busybox-1.18.3-wget.patch
deleted file mode 100644
index 88cfc91..0000000
--- a/sys-apps/busybox/files/busybox-1.18.3-wget.patch
+++ /dev/null
@@ -1,128 +0,0 @@
---- 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);
diff --git a/sys-apps/busybox/files/busybox-1.18.4-fuser.patch b/sys-apps/busybox/files/busybox-1.18.4-fuser.patch
deleted file mode 100644
index 838d9ac..0000000
--- a/sys-apps/busybox/files/busybox-1.18.4-fuser.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- 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:
diff --git a/sys-apps/busybox/files/busybox-1.18.4-hush.patch b/sys-apps/busybox/files/busybox-1.18.4-hush.patch
deleted file mode 100644
index 1e5a5cf..0000000
--- a/sys-apps/busybox/files/busybox-1.18.4-hush.patch
+++ /dev/null
@@ -1,183 +0,0 @@
---- 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:$?
diff --git a/sys-apps/busybox/files/busybox-1.19.0-bb.patch b/sys-apps/busybox/files/busybox-1.19.0-bb.patch
new file mode 100644
index 0000000..a66b45a
--- /dev/null
+++ b/sys-apps/busybox/files/busybox-1.19.0-bb.patch
@@ -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 */
+ 	}
diff --git a/sys-apps/busybox/files/busybox-1.19.0-cttyhack.patch b/sys-apps/busybox/files/busybox-1.19.0-cttyhack.patch
new file mode 100644
index 0000000..ef2781d
--- /dev/null
+++ b/sys-apps/busybox/files/busybox-1.19.0-cttyhack.patch
@@ -0,0 +1,18 @@
+--- busybox-1.19.0/shell/cttyhack.c
++++ busybox-1.19.0-cttyhack/shell/cttyhack.c
+@@ -122,10 +122,12 @@ int cttyhack_main(int argc UNUSED_PARAM,
+ 		do {
+ #ifdef __linux__
+ 			int s = open_read_close("/sys/class/tty/console/active",
+-				console + 5, sizeof(console) - 5 - 1);
++				console + 5, sizeof(console) - 5);
+ 			if (s > 0) {
+-				/* found active console via sysfs (Linux 2.6.38+) */
+-				console[5 + s] = '\0';
++				/* found active console via sysfs (Linux 2.6.38+)
++				 * sysfs string looks like "ttyS0\n" so zap the newline:
++				 */
++				console[4 + s] = '\0';
+ 				break;
+ 			}
+ 
diff --git a/sys-apps/busybox/files/busybox-1.19.0-less.patch b/sys-apps/busybox/files/busybox-1.19.0-less.patch
new file mode 100644
index 0000000..a1d3374
--- /dev/null
+++ b/sys-apps/busybox/files/busybox-1.19.0-less.patch
@@ -0,0 +1,12 @@
+--- busybox-1.19.0/miscutils/less.c
++++ busybox-1.19.0-less/miscutils/less.c
+@@ -990,7 +990,8 @@ static int64_t less_getch(int pos)
+ 	 */
+ 	if (key >= 0 && key < ' ' && key != 0x0d && key != 8)
+ 		goto again;
+-	return key;
++
++	return key64;
+ }
+ 
+ static char* less_gets(int sz)
diff --git a/sys-apps/busybox/files/busybox-1.19.0-sed.patch b/sys-apps/busybox/files/busybox-1.19.0-sed.patch
new file mode 100644
index 0000000..c71e9c2
--- /dev/null
+++ b/sys-apps/busybox/files/busybox-1.19.0-sed.patch
@@ -0,0 +1,237 @@
+--- busybox-1.19.0/editors/sed.c
++++ busybox-1.19.0-sed/editors/sed.c
+@@ -75,6 +75,13 @@
+ #include "libbb.h"
+ #include "xregex.h"
+ 
++#if 0
++# define dbg(...) bb_error_msg(__VA_ARGS__)
++#else
++# define dbg(...) ((void)0)
++#endif
++
++
+ enum {
+ 	OPT_in_place = 1 << 0,
+ };
+@@ -89,6 +96,7 @@ typedef struct sed_cmd_s {
+ 	regex_t *end_match;     /* sed -e '/match/,/end_match/cmd' */
+ 	regex_t *sub_match;     /* For 's/sub_match/string/' */
+ 	int beg_line;           /* 'sed 1p'   0 == apply commands to all lines */
++	int beg_line_orig;      /* copy of the above, needed for -i */
+ 	int end_line;           /* 'sed 1,3p' 0 == one line only. -1 = last line ($) */
+ 
+ 	FILE *sw_file;          /* File (sw) command writes to, -1 for none. */
+@@ -123,7 +131,7 @@ struct globals {
+ 	regex_t *previous_regex_ptr;
+ 
+ 	/* linked list of sed commands */
+-	sed_cmd_t sed_cmd_head, *sed_cmd_tail;
++	sed_cmd_t *sed_cmd_head, **sed_cmd_tail;
+ 
+ 	/* Linked list of append lines */
+ 	llist_t *append_head;
+@@ -148,7 +156,7 @@ struct BUG_G_too_big {
+ #if ENABLE_FEATURE_CLEAN_UP
+ static void sed_free_and_close_stuff(void)
+ {
+-	sed_cmd_t *sed_cmd = G.sed_cmd_head.next;
++	sed_cmd_t *sed_cmd = G.sed_cmd_head;
+ 
+ 	llist_free(G.append_head, free);
+ 
+@@ -599,6 +607,7 @@ static void add_cmd(const char *cmdstr)
+ 
+ 		/* first part (if present) is an address: either a '$', a number or a /regex/ */
+ 		cmdstr += get_address(cmdstr, &sed_cmd->beg_line, &sed_cmd->beg_match);
++		sed_cmd->beg_line_orig = sed_cmd->beg_line;
+ 
+ 		/* second part (if present) will begin with a comma */
+ 		if (*cmdstr == ',') {
+@@ -630,8 +639,8 @@ static void add_cmd(const char *cmdstr)
+ 		cmdstr = parse_cmd_args(sed_cmd, cmdstr);
+ 
+ 		/* Add the command to the command array */
+-		G.sed_cmd_tail->next = sed_cmd;
+-		G.sed_cmd_tail = G.sed_cmd_tail->next;
++		*G.sed_cmd_tail = sed_cmd;
++		G.sed_cmd_tail = &sed_cmd->next;
+ 	}
+ 
+ 	/* If we glued multiple lines together, free the memory. */
+@@ -777,7 +786,7 @@ static sed_cmd_t *branch_to(char *label)
+ {
+ 	sed_cmd_t *sed_cmd;
+ 
+-	for (sed_cmd = G.sed_cmd_head.next; sed_cmd; sed_cmd = sed_cmd->next) {
++	for (sed_cmd = G.sed_cmd_head; sed_cmd; sed_cmd = sed_cmd->next) {
+ 		if (sed_cmd->cmd == ':' && sed_cmd->string && !strcmp(sed_cmd->string, label)) {
+ 			return sed_cmd;
+ 		}
+@@ -953,24 +962,24 @@ static void process_files(void)
+ 
+ 	/* For every line, go through all the commands */
+  restart:
+-	for (sed_cmd = G.sed_cmd_head.next; sed_cmd; sed_cmd = sed_cmd->next) {
++	for (sed_cmd = G.sed_cmd_head; sed_cmd; sed_cmd = sed_cmd->next) {
+ 		int old_matched, matched;
+ 
+ 		old_matched = sed_cmd->in_match;
+ 
+ 		/* Determine if this command matches this line: */
+ 
+-		//bb_error_msg("match1:%d", sed_cmd->in_match);
+-		//bb_error_msg("match2:%d", (!sed_cmd->beg_line && !sed_cmd->end_line
+-		//		&& !sed_cmd->beg_match && !sed_cmd->end_match));
+-		//bb_error_msg("match3:%d", (sed_cmd->beg_line > 0
+-		//	&& (sed_cmd->end_line || sed_cmd->end_match
+-		//	    ? (sed_cmd->beg_line <= linenum)
+-		//	    : (sed_cmd->beg_line == linenum)
+-		//	    )
+-		//	)
+-		//bb_error_msg("match4:%d", (beg_match(sed_cmd, pattern_space)));
+-		//bb_error_msg("match5:%d", (sed_cmd->beg_line == -1 && next_line == NULL));
++		dbg("match1:%d", sed_cmd->in_match);
++		dbg("match2:%d", (!sed_cmd->beg_line && !sed_cmd->end_line
++				&& !sed_cmd->beg_match && !sed_cmd->end_match));
++		dbg("match3:%d", (sed_cmd->beg_line > 0
++			&& (sed_cmd->end_line || sed_cmd->end_match
++			    ? (sed_cmd->beg_line <= linenum)
++			    : (sed_cmd->beg_line == linenum)
++			    )
++			));
++		dbg("match4:%d", (beg_match(sed_cmd, pattern_space)));
++		dbg("match5:%d", (sed_cmd->beg_line == -1 && next_line == NULL));
+ 
+ 		/* Are we continuing a previous multi-line match? */
+ 		sed_cmd->in_match = sed_cmd->in_match
+@@ -981,7 +990,14 @@ static void process_files(void)
+ 			|| (sed_cmd->beg_line > 0
+ 			    && (sed_cmd->end_line || sed_cmd->end_match
+ 				  /* note: even if end is numeric and is < linenum too,
+-				   * GNU sed matches! We match too */
++				   * GNU sed matches! We match too, therefore we don't
++				   * check here that linenum <= end.
++				   * Example:
++				   * printf '1\n2\n3\n4\n' | sed -n '1{N;N;d};1p;2,3p;3p;4p'
++				   * first three input lines are deleted;
++				   * 4th line is matched and printed
++				   * by "2,3" (!) and by "4" ranges
++				   */
+ 				? (sed_cmd->beg_line <= linenum)    /* N,end */
+ 				: (sed_cmd->beg_line == linenum)    /* N */
+ 				)
+@@ -994,16 +1010,14 @@ static void process_files(void)
+ 		/* Snapshot the value */
+ 		matched = sed_cmd->in_match;
+ 
+-		//bb_error_msg("cmd:'%c' matched:%d beg_line:%d end_line:%d linenum:%d",
+-		//sed_cmd->cmd, matched, sed_cmd->beg_line, sed_cmd->end_line, linenum);
++		dbg("cmd:'%c' matched:%d beg_line:%d end_line:%d linenum:%d",
++			sed_cmd->cmd, matched, sed_cmd->beg_line, sed_cmd->end_line, linenum);
+ 
+ 		/* Is this line the end of the current match? */
+ 
+ 		if (matched) {
+ 			/* once matched, "n,xxx" range is dead, disabling it */
+-			if (sed_cmd->beg_line > 0
+-			 && !(option_mask32 & OPT_in_place) /* but not for -i */
+-			) {
++			if (sed_cmd->beg_line > 0) {
+ 				sed_cmd->beg_line = -2;
+ 			}
+ 			sed_cmd->in_match = !(
+@@ -1017,7 +1031,8 @@ static void process_files(void)
+ 				/* or does this line matches our last address regex */
+ 				|| (sed_cmd->end_match && old_matched
+ 				     && (regexec(sed_cmd->end_match,
+-				                 pattern_space, 0, NULL, 0) == 0))
++				                 pattern_space, 0, NULL, 0) == 0)
++				)
+ 			);
+ 		}
+ 
+@@ -1407,11 +1422,12 @@ int sed_main(int argc UNUSED_PARAM, char
+ 		add_input_file(stdin);
+ 	} else {
+ 		int i;
+-		FILE *file;
+ 
+ 		for (i = 0; argv[i]; i++) {
+ 			struct stat statbuf;
+ 			int nonstdoutfd;
++			FILE *file;
++			sed_cmd_t *sed_cmd;
+ 
+ 			if (LONE_DASH(argv[i]) && !(opt & OPT_in_place)) {
+ 				add_input_file(stdin);
+@@ -1423,11 +1439,13 @@ int sed_main(int argc UNUSED_PARAM, char
+ 				status = EXIT_FAILURE;
+ 				continue;
+ 			}
++			add_input_file(file);
+ 			if (!(opt & OPT_in_place)) {
+-				add_input_file(file);
+ 				continue;
+ 			}
+ 
++			/* -i: process each FILE separately: */
++
+ 			G.outname = xasprintf("%sXXXXXX", argv[i]);
+ 			nonstdoutfd = xmkstemp(G.outname);
+ 			G.nonstdout = xfdopen_for_write(nonstdoutfd);
+@@ -1438,15 +1456,20 @@ int sed_main(int argc UNUSED_PARAM, char
+ 			 * but GNU sed 4.2.1 does not preserve them either */
+ 			fchmod(nonstdoutfd, statbuf.st_mode);
+ 			fchown(nonstdoutfd, statbuf.st_uid, statbuf.st_gid);
+-			add_input_file(file);
++
+ 			process_files();
+ 			fclose(G.nonstdout);
+-
+ 			G.nonstdout = stdout;
++
+ 			/* unlink(argv[i]); */
+ 			xrename(G.outname, argv[i]);
+ 			free(G.outname);
+ 			G.outname = NULL;
++
++			/* Re-enable disabled range matches */
++			for (sed_cmd = G.sed_cmd_head; sed_cmd; sed_cmd = sed_cmd->next) {
++				sed_cmd->beg_line = sed_cmd->beg_line_orig;
++			}
+ 		}
+ 		/* Here, to handle "sed 'cmds' nonexistent_file" case we did:
+ 		 * if (G.current_input_file >= G.input_file_count)
+--- busybox-1.19.0/testsuite/sed.tests
++++ busybox-1.19.0-sed/testsuite/sed.tests
+@@ -6,7 +6,7 @@
+ 
+ . ./testing.sh
+ 
+-# testing "description" "arguments" "result" "infile" "stdin"
++# testing "description" "commands" "result" "infile" "stdin"
+ 
+ # Corner cases
+ testing "sed no files (stdin)" 'sed ""' "hello\n" "" "hello\n"
+@@ -225,7 +225,7 @@ testing "sed s/xxx/[/" "sed -e 's/xxx/[/
+ #testing "sed -g (exhaustive)" "sed -e 's/[[:space:]]*/,/g'" ",1,2,3,4,5," \
+ #	"" "12345"
+ 
+-# testing "description" "arguments" "result" "infile" "stdin"
++# testing "description" "commands" "result" "infile" "stdin"
+ 
+ testing "sed n command must reset 'substituted' bit" \
+ 	"sed 's/1/x/;T;n;: next;s/3/y/;t quit;n;b next;: quit;q'" \
+@@ -291,6 +291,10 @@ testing "sed understands \r" \
+ 	"sed 's/r/\r/'" \
+ 	"\rrr\n" "" "rrr\n"
+ 
+-# testing "description" "arguments" "result" "infile" "stdin"
++testing "sed -i finishes ranges correctly" \
++	"sed '1,2d' -i input; echo \$?; cat input" \
++	"0\n3\n4\n" "1\n2\n3\n4\n" ""
++
++# testing "description" "commands" "result" "infile" "stdin"
+ 
+ exit $FAILCOUNT
diff --git a/sys-apps/busybox/files/busybox-1.19.0-swap.patch b/sys-apps/busybox/files/busybox-1.19.0-swap.patch
new file mode 100644
index 0000000..c783945
--- /dev/null
+++ b/sys-apps/busybox/files/busybox-1.19.0-swap.patch
@@ -0,0 +1,12 @@
+--- busybox-1.19.0/util-linux/swaponoff.c
++++ busybox-1.19.0-swap/util-linux/swaponoff.c
+@@ -114,7 +114,8 @@ int swap_on_off_main(int argc UNUSED_PAR
+ #if !ENABLE_FEATURE_SWAPON_PRI
+ 	ret = getopt32(argv, "a");
+ #else
+-	opt_complementary = "p+";
++	if (applet_name[5] == 'n')
++		opt_complementary = "p+";
+ 	ret = getopt32(argv, (applet_name[5] == 'n') ? "ap:" : "a", &g_flags);
+ 
+ 	if (ret & 2) { // -p
diff --git a/sys-apps/busybox/files/busybox-1.19.0-uncompress.patch b/sys-apps/busybox/files/busybox-1.19.0-uncompress.patch
new file mode 100644
index 0000000..3033739
--- /dev/null
+++ b/sys-apps/busybox/files/busybox-1.19.0-uncompress.patch
@@ -0,0 +1,50 @@
+--- busybox-1.19.0/archival/libarchive/decompress_uncompress.c
++++ busybox-1.19.0-uncompress/archival/libarchive/decompress_uncompress.c
+@@ -163,7 +163,8 @@ unpack_Z_stream(int fd_in, int fd_out)
+ 
+ 		if (insize < (int) (IBUFSIZ + 64) - IBUFSIZ) {
+ 			rsize = safe_read(fd_in, inbuf + insize, IBUFSIZ);
+-//error check??
++			if (rsize < 0)
++				bb_error_msg(bb_msg_read_error);
+ 			insize += rsize;
+ 		}
+ 
+@@ -195,6 +196,8 @@ unpack_Z_stream(int fd_in, int fd_out)
+ 
+ 
+ 			if (oldcode == -1) {
++				if (code >= 256)
++					bb_error_msg_and_die("corrupted data"); /* %ld", code); */
+ 				oldcode = code;
+ 				finchar = (int) oldcode;
+ 				outbuf[outpos++] = (unsigned char) finchar;
+@@ -239,6 +242,8 @@ unpack_Z_stream(int fd_in, int fd_out)
+ 
+ 			/* Generate output characters in reverse order */
+ 			while ((long) code >= (long) 256) {
++				if (stackp <= &htabof(0))
++					bb_error_msg_and_die("corrupted data");
+ 				*--stackp = tab_suffixof(code);
+ 				code = tab_prefixof(code);
+ 			}
+@@ -263,8 +268,7 @@ unpack_Z_stream(int fd_in, int fd_out)
+ 						}
+ 
+ 						if (outpos >= OBUFSIZ) {
+-							full_write(fd_out, outbuf, outpos);
+-//error check??
++							xwrite(fd_out, outbuf, outpos);
+ 							IF_DESKTOP(total_written += outpos;)
+ 							outpos = 0;
+ 						}
+@@ -292,8 +296,7 @@ unpack_Z_stream(int fd_in, int fd_out)
+ 	} while (rsize > 0);
+ 
+ 	if (outpos > 0) {
+-		full_write(fd_out, outbuf, outpos);
+-//error check??
++		xwrite(fd_out, outbuf, outpos);
+ 		IF_DESKTOP(total_written += outpos;)
+ 	}
+ 
