fixes from Vladimir Dronnikov <dronnikov@gmail.ru>
diff --git a/Makefile b/Makefile
index c1103cf..5117c45 100644
--- a/Makefile
+++ b/Makefile
@@ -563,9 +563,17 @@
 # Rule to link busybox - also used during CONFIG_KALLSYMS
 # May be overridden by arch/$(ARCH)/Makefile
 quiet_cmd_busybox__ ?= LINK    $@
+ifdef CONFIG_STATIC
+      cmd_busybox__ ?= $(srctree)/scripts/trylink $(CC) \
+      -static \
+      -o $@ \
+      -Wl,--warn-common -Wl,--sort-common -Wl,--gc-sections \
+      -Wl,--start-group $(busybox-all) -Wl,--end-group
+else
       cmd_busybox__ ?= $(srctree)/scripts/trylink $(CC) -o $@ \
       -Wl,--warn-common -Wl,--sort-common -Wl,--gc-sections \
-      -Wl,--start-group $(busybox-all) -Wl,--end-group \
+      -Wl,--start-group $(busybox-all) -Wl,--end-group
+endif
 
 # Generate System.map
 quiet_cmd_sysmap = SYSMAP 
diff --git a/archival/libunarchive/data_extract_all.c b/archival/libunarchive/data_extract_all.c
index b1c66a4..67f8f35 100644
--- a/archival/libunarchive/data_extract_all.c
+++ b/archival/libunarchive/data_extract_all.c
@@ -14,15 +14,18 @@
 
 	if (archive_handle->flags & ARCHIVE_CREATE_LEADING_DIRS) {
 		char *name = xstrdup(file_header->name);
-		bb_make_directory (dirname(name), -1, FILEUTILS_RECUR);
+		bb_make_directory(dirname(name), -1, FILEUTILS_RECUR);
 		free(name);
 	}
 
 	/* Check if the file already exists */
 	if (archive_handle->flags & ARCHIVE_EXTRACT_UNCONDITIONAL) {
 		/* Remove the existing entry if it exists */
-		if (((file_header->mode & S_IFMT) != S_IFDIR) && (unlink(file_header->name) == -1) && (errno != ENOENT)) {
-			bb_perror_msg_and_die("Couldnt remove old file");
+		if (((file_header->mode & S_IFMT) != S_IFDIR)
+		 && (unlink(file_header->name) == -1)
+		 && (errno != ENOENT)
+		) {
+			bb_perror_msg_and_die("cannot remove old file");
 		}
 	}
 	else if (archive_handle->flags & ARCHIVE_EXTRACT_NEWER) {
@@ -30,64 +33,77 @@
 		struct stat statbuf;
 		if (lstat(file_header->name, &statbuf) == -1) {
 			if (errno != ENOENT) {
-				bb_perror_msg_and_die("Couldnt stat old file");
+				bb_perror_msg_and_die("cannot stat old file");
 			}
 		}
 		else if (statbuf.st_mtime <= file_header->mtime) {
 			if (!(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) {
-				bb_error_msg("%s not created: newer or same age file exists", file_header->name);
+				bb_error_msg("%s not created: newer or "
+					"same age file exists", file_header->name);
 			}
 			data_skip(archive_handle);
 			return;
 		}
 		else if ((unlink(file_header->name) == -1) && (errno != EISDIR)) {
-			bb_perror_msg_and_die("Couldnt remove old file %s", file_header->name);
+			bb_perror_msg_and_die("cannot remove old file %s",
+					file_header->name);
 		}
 	}
 
 	/* Handle hard links separately
 	 * We identified hard links as regular files of size 0 with a symlink */
-	if (S_ISREG(file_header->mode) && (file_header->link_name) && (file_header->size == 0)) {
+	if (S_ISREG(file_header->mode) && (file_header->link_name)
+	 && (file_header->size == 0)
+	) {
 		/* hard link */
 		res = link(file_header->link_name, file_header->name);
 		if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) {
-			bb_perror_msg("Couldnt create hard link");
+			bb_perror_msg("cannot create hard link");
 		}
 	} else {
 		/* Create the filesystem entry */
 		switch (file_header->mode & S_IFMT) {
-			case S_IFREG: {
-				/* Regular file */
-				dst_fd = xopen3(file_header->name, O_WRONLY | O_CREAT | O_EXCL,
-								file_header->mode);
-				bb_copyfd_size(archive_handle->src_fd, dst_fd, file_header->size);
-				close(dst_fd);
-				break;
-				}
-			case S_IFDIR:
-				res = mkdir(file_header->name, file_header->mode);
-				if ((errno != EISDIR) && (res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) {
-					bb_perror_msg("extract_archive: %s", file_header->name);
-				}
-				break;
-			case S_IFLNK:
-				/* Symlink */
-				res = symlink(file_header->link_name, file_header->name);
-				if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) {
-					bb_perror_msg("Cannot create symlink from %s to '%s'", file_header->name, file_header->link_name);
-				}
-				break;
-			case S_IFSOCK:
-			case S_IFBLK:
-			case S_IFCHR:
-			case S_IFIFO:
-				res = mknod(file_header->name, file_header->mode, file_header->device);
-				if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) {
-					bb_perror_msg("Cannot create node %s", file_header->name);
-				}
-				break;
-			default:
-				bb_error_msg_and_die("Unrecognised file type");
+		case S_IFREG: {
+			/* Regular file */
+			dst_fd = xopen3(file_header->name, O_WRONLY | O_CREAT | O_EXCL,
+							file_header->mode);
+			bb_copyfd_size(archive_handle->src_fd, dst_fd, file_header->size);
+			close(dst_fd);
+			break;
+			}
+		case S_IFDIR:
+			res = mkdir(file_header->name, file_header->mode);
+			if ((errno != EISDIR) && (res == -1)
+			 && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)
+			) {
+				bb_perror_msg("extract_archive: %s", file_header->name);
+			}
+			break;
+		case S_IFLNK:
+			/* Symlink */
+			res = symlink(file_header->link_name, file_header->name);
+			if ((res == -1)
+			 && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)
+			) {
+				bb_perror_msg("cannot create symlink "
+					"from %s to '%s'",
+					file_header->name,
+					file_header->link_name);
+			}
+			break;
+		case S_IFSOCK:
+		case S_IFBLK:
+		case S_IFCHR:
+		case S_IFIFO:
+			res = mknod(file_header->name, file_header->mode, file_header->device);
+			if ((res == -1)
+			 && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)
+			) {
+				bb_perror_msg("cannot create node %s", file_header->name);
+			}
+			break;
+		default:
+			bb_error_msg_and_die("unrecognized file type");
 		}
 	}
 
diff --git a/archival/libunarchive/get_header_cpio.c b/archival/libunarchive/get_header_cpio.c
index bc766c6..56862f1 100644
--- a/archival/libunarchive/get_header_cpio.c
+++ b/archival/libunarchive/get_header_cpio.c
@@ -61,13 +61,13 @@
 	}
 
 	{
-	    unsigned long tmpsize;
-	    sscanf(cpio_header, "%6c%8x%8x%8x%8x%8x%8lx%8lx%16c%8x%8x%8x%8c",
+		unsigned long tmpsize;
+		sscanf(cpio_header, "%6c%8x%8x%8x%8x%8x%8lx%8lx%16c%8x%8x%8x%8c",
 		    dummy, &inode, (unsigned int*)&file_header->mode,
 		    (unsigned int*)&file_header->uid, (unsigned int*)&file_header->gid,
 		    &nlink, &file_header->mtime, &tmpsize,
 		    dummy, &major, &minor, &namesize, dummy);
-	    file_header->size = tmpsize;
+		file_header->size = tmpsize;
 	}
 
 	file_header->name = (char *) xzalloc(namesize + 1);
diff --git a/archival/libunarchive/get_header_tar.c b/archival/libunarchive/get_header_tar.c
index d3cd96d..f78377e 100644
--- a/archival/libunarchive/get_header_tar.c
+++ b/archival/libunarchive/get_header_tar.c
@@ -74,12 +74,12 @@
 	 */
 	if (strncmp(tar.formatted.magic, "ustar", 5) != 0) {
 #ifdef CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY
-		if (strncmp(tar.formatted.magic, "\0\0\0\0\0", 5) != 0)
+		if (memcmp(tar.formatted.magic, "\0\0\0\0", 5) != 0)
 #endif
 			bb_error_msg_and_die("invalid tar magic");
 	}
 	/* Do checksum on headers */
-	for (i =  0; i < 148 ; i++) {
+	for (i = 0; i < 148 ; i++) {
 		sum += tar.raw[i];
 	}
 	sum += ' ' * 8;
@@ -111,13 +111,14 @@
 
 	file_header->uid = xstrtoul(tar.formatted.uid, 8);
 	file_header->gid = xstrtoul(tar.formatted.gid, 8);
-	// TODO: LFS support
-	file_header->size = xstrtoul(tar.formatted.size, 8);
+	file_header->size = XSTRTOUOFF(tar.formatted.size, 8);
 	file_header->mtime = xstrtoul(tar.formatted.mtime, 8);
 	file_header->link_name = tar.formatted.linkname[0] ?
 	                         xstrdup(tar.formatted.linkname) : NULL;
-	file_header->device = makedev(xstrtoul(tar.formatted.devmajor, 8),
-	                              xstrtoul(tar.formatted.devminor, 8));
+	if (tar.formatted.devmajor[0]) {
+		file_header->device = makedev(xstrtoul(tar.formatted.devmajor, 8),
+	                                      xstrtoul(tar.formatted.devminor, 8));
+	}
 
 	/* Set bits 0-11 of the files mode */
 	file_header->mode = 07777 & xstrtoul(tar.formatted.mode, 8);
diff --git a/archival/libunarchive/init_handle.c b/archival/libunarchive/init_handle.c
index 96bb1db..beda1b4 100644
--- a/archival/libunarchive/init_handle.c
+++ b/archival/libunarchive/init_handle.c
@@ -3,8 +3,8 @@
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include <unistd.h>
-#include <string.h>
+//#include <unistd.h>
+//#include <string.h>
 #include "libbb.h"
 #include "unarchive.h"
 
@@ -12,7 +12,7 @@
 {
 	archive_handle_t *archive_handle;
 
-	/* Initialise default values */
+	/* Initialize default values */
 	archive_handle = xzalloc(sizeof(archive_handle_t));
 	archive_handle->file_header = xmalloc(sizeof(file_header_t));
 	archive_handle->action_header = header_skip;
@@ -20,5 +20,5 @@
 	archive_handle->filter = filter_accept_all;
 	archive_handle->seek = seek_by_jump;
 
-	return(archive_handle);
+	return archive_handle;
 }
diff --git a/e2fsprogs/e2p/Kbuild b/e2fsprogs/e2p/Kbuild
index 64e4621..c0ff824 100644
--- a/e2fsprogs/e2p/Kbuild
+++ b/e2fsprogs/e2p/Kbuild
@@ -5,9 +5,9 @@
 # Licensed under the GPL v2, see the file LICENSE in this tarball.
 
 NEEDED-$(CONFIG_CHATTR) = y
-NEEDED-$(LSATTR) = y
-NEEDED-$(MKE2FS) = y
-NEEDED-$(TUNE2FS) = y
+NEEDED-$(CONFIG_LSATTR) = y
+NEEDED-$(CONFIG_MKE2FS) = y
+NEEDED-$(CONFIG_TUNE2FS) = y
 
 lib-y:=
 lib-$(NEEDED-y) += fgetsetflags.o fgetsetversion.o pf.o iod.o mntopts.o \
diff --git a/include/libbb.h b/include/libbb.h
index 7b9b839..e4e67aa 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -89,23 +89,27 @@
 /* "long" is long enough on this system */
 #  define STRTOOFF strtol
 #  define SAFE_STRTOOFF safe_strtol
+#  define XSTRTOUOFF xstrtoul
 #  define OFF_FMT "%ld"
 # else
-/* "long" is too short, need "lomg long" */
+/* "long" is too short, need "long long" */
 #  define STRTOOFF strtoll
 #  define SAFE_STRTOOFF safe_strtoll
+#  define XSTRTOUOFF xstrtoull
 #  define OFF_FMT "%lld"
 # endif
 #else
-# if 0 /* UINT_MAX == 0xffffffff */
+# if 0 /* #if UINT_MAX == 0xffffffff */
 /* Doesn't work. off_t is a long. gcc will throw warnings on printf("%d", off_t)
  * even if long==int on this arch. Crap... */
 #  define STRTOOFF strtol
 #  define SAFE_STRTOOFF safe_strtoi
+#  define XSTRTOUOFF xstrtou
 #  define OFF_FMT "%d"
 # else
 #  define STRTOOFF strtol
 #  define SAFE_STRTOOFF safe_strtol
+#  define XSTRTOUOFF xstrtoul
 #  define OFF_FMT "%ld"
 # endif
 #endif
@@ -313,6 +317,8 @@
 	unsigned int mult;
 };
 
+unsigned long long xstrtoull(const char *numstr, int base);
+unsigned long long xatoull(const char *numstr);
 unsigned long xstrtoul_range_sfx(const char *numstr, int base,
 		unsigned long lower,
 		unsigned long upper,
@@ -331,7 +337,6 @@
 		unsigned long lower,
 		unsigned long upper);
 unsigned long xatoul(const char *numstr);
-unsigned long long xatoull(const char *numstr);
 long xstrtol_range_sfx(const char *numstr, int base,
 		long lower,
 		long upper,
diff --git a/libbb/xatol.c b/libbb/xatol.c
index 3316c3d..1b71e9c 100644
--- a/libbb/xatol.c
+++ b/libbb/xatol.c
@@ -9,7 +9,7 @@
 
 #include "libbb.h"
 
-unsigned long long xatoull(const char *numstr)
+unsigned long long xstrtoull(const char *numstr, int base)
 {
 	unsigned long long r;
 	int old_errno;
@@ -18,7 +18,7 @@
 		bb_error_msg_and_die("invalid number '%s'", numstr);
 	old_errno = errno;
 	errno = 0;
-	r = strtoull(numstr, &e, 10);
+	r = strtoull(numstr, &e, base);
 	if (errno || (numstr == e) || *e)
 		/* Error / no digits / illegal trailing chars */
 		bb_error_msg_and_die("invalid number '%s'", numstr);
@@ -27,6 +27,11 @@
 	return r;
 }
 
+unsigned long long xatoull(const char *numstr)
+{
+	return xstrtoull(numstr, 10);
+}
+
 unsigned long xstrtoul_range_sfx(const char *numstr, int base,
 		unsigned long lower,
 		unsigned long upper,
diff --git a/modutils/Config.in b/modutils/Config.in
index b28c66d..c8bd619 100644
--- a/modutils/Config.in
+++ b/modutils/Config.in
@@ -43,7 +43,7 @@
 config FEATURE_INSMOD_LOAD_MAP
 	bool "Enable load map (-m) option"
 	default n
-	depends on INSMOD && FEATURE_2_4_MODULES
+	depends on INSMOD && ( FEATURE_2_4_MODULES || FEATURE_2_6_MODULES )
 	help
 	  Enabling this, one would be able to get a load map
 	  output on stdout. This makes kernel module debugging
diff --git a/networking/wget.c b/networking/wget.c
index 74feccc..264ae44 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -31,7 +31,9 @@
 /* Globals (can be accessed from signal handlers */
 static off_t content_len;        /* Content-length of the file */
 static off_t beg_range;          /* Range at which continue begins */
+#ifdef CONFIG_FEATURE_WGET_STATUSBAR
 static off_t transferred;        /* Number of bytes transferred so far */
+#endif
 static int chunked;                     /* chunked transfer encoding */
 #ifdef CONFIG_FEATURE_WGET_STATUSBAR
 static void progressmeter(int flag);
diff --git a/runit/chpst.c b/runit/chpst.c
index 5f30b88..1b6f378 100644
--- a/runit/chpst.c
+++ b/runit/chpst.c
@@ -223,7 +223,7 @@
 
 	{
 		char *m,*d,*o,*p,*f,*c,*r,*t,*n;
-		getopt32(argc, argv, "u:U:e:m:d:o:p:f:c:r:t:/:n:vP012",
+		getopt32(argc, argv, "+u:U:e:m:d:o:p:f:c:r:t:/:n:vP012",
 				&set_user,&env_user,&env_dir,
 				&m,&d,&o,&p,&f,&c,&r,&t,&root,&n);
 		// if (option_mask32 & 0x1) // -u
@@ -310,7 +310,7 @@
 static void softlimit(int argc, char **argv)
 {
 	char *a,*c,*d,*f,*l,*m,*o,*p,*r,*s,*t;
-	getopt32(argc, argv, "a:c:d:f:l:m:o:p:r:s:t:",
+	getopt32(argc, argv, "+a:c:d:f:l:m:o:p:r:s:t:",
 			&a,&c,&d,&f,&l,&m,&o,&p,&r,&s,&t);
 	if (option_mask32 & 0x001) limita = xatoul(a); // -a
 	if (option_mask32 & 0x002) limitc = xatoul(c); // -c
diff --git a/shell/ash.c b/shell/ash.c
index 3564044..1260d5e 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -12542,7 +12542,7 @@
 letcmd(int argc, char **argv)
 {
 	char **ap;
-	arith_t i;
+	arith_t i = 0;
 
 	ap = argv + 1;
 	if(!*ap)