+++ /dev/null
-From b58a1a06ca695aed6a4f6e5039e2de0e5a3df111 Mon Sep 17 00:00:00 2001
-From: Peter Korsgaard <jacmet@sunsite.dk>
-Date: Wed, 19 Oct 2011 02:35:54 +0200
-Subject: [PATCH 01/10] ifupdown: support post-up / pre-down hooks
-
-function old new delta
-set_environ 330 371 +41
-ifupdown_main 2156 2194 +38
-iface_up 97 113 +16
-iface_down 97 113 +16
-------------------------------------------------------------------------------
-(add/remove: 0/0 grow/shrink: 4/0 up/down: 111/0) Total: 111 bytes
-
-Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
----
- networking/ifupdown.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/networking/ifupdown.c b/networking/ifupdown.c
-index 3820330..abc6b58 100644
---- a/networking/ifupdown.c
-+++ b/networking/ifupdown.c
-@@ -891,6 +891,8 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
- if (strcmp(first_word, "up") != 0
- && strcmp(first_word, "down") != 0
- && strcmp(first_word, "pre-up") != 0
-+ && strcmp(first_word, "pre-down") != 0
-+ && strcmp(first_word, "post-up") != 0
- && strcmp(first_word, "post-down") != 0
- ) {
- int i;
-@@ -987,6 +989,8 @@ static void set_environ(struct interface_defn_t *iface, const char *mode)
- if (strcmp(iface->option[i].name, "up") == 0
- || strcmp(iface->option[i].name, "down") == 0
- || strcmp(iface->option[i].name, "pre-up") == 0
-+ || strcmp(iface->option[i].name, "pre-down") == 0
-+ || strcmp(iface->option[i].name, "post-up") == 0
- || strcmp(iface->option[i].name, "post-down") == 0
- ) {
- continue;
-@@ -1056,6 +1060,7 @@ static int iface_up(struct interface_defn_t *iface)
- if (!execute_all(iface, "pre-up")) return 0;
- if (!iface->method->up(iface, doit)) return 0;
- if (!execute_all(iface, "up")) return 0;
-+ if (!execute_all(iface, "post-up")) return 0;
- return 1;
- }
-
-@@ -1063,6 +1068,7 @@ static int iface_down(struct interface_defn_t *iface)
- {
- if (!iface->method->down(iface,check)) return -1;
- set_environ(iface, "stop");
-+ if (!execute_all(iface, "pre-down")) return 0;
- if (!execute_all(iface, "down")) return 0;
- if (!iface->method->down(iface, doit)) return 0;
- if (!execute_all(iface, "post-down")) return 0;
---
-1.7.10.4
-
+++ /dev/null
-From caf5768154301697430f0a3718838967d0f55f95 Mon Sep 17 00:00:00 2001
-From: Denys Vlasenko <vda.linux@googlemail.com>
-Date: Thu, 12 Apr 2012 14:01:10 +0200
-Subject: [PATCH 01/33] work around linux/ext2_fs.h breakage
-
-See https://bugzilla.kernel.org/show_bug.cgi?id=42986
-
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
----
- e2fsprogs/tune2fs.c | 6 ++++++
- util-linux/mkfs_ext2.c | 6 ++++++
- 2 files changed, 12 insertions(+)
-
-diff --git a/e2fsprogs/tune2fs.c b/e2fsprogs/tune2fs.c
-index 020bdaa..8da7432 100644
---- a/e2fsprogs/tune2fs.c
-+++ b/e2fsprogs/tune2fs.c
-@@ -8,6 +8,12 @@
- */
- #include "libbb.h"
- #include <linux/fs.h>
-+/*
-+ * Work around linux/ext2_fs.h breakage.
-+ * See https://bugzilla.kernel.org/show_bug.cgi?id=42986.
-+ */
-+typedef mode_t bb__umode_t;
-+#define umode_t bb__umode_t
- #include <linux/ext2_fs.h>
-
- // storage helpers
-diff --git a/util-linux/mkfs_ext2.c b/util-linux/mkfs_ext2.c
-index 6cbbe0e..759bb0a 100644
---- a/util-linux/mkfs_ext2.c
-+++ b/util-linux/mkfs_ext2.c
-@@ -48,6 +48,12 @@
-
- #include "libbb.h"
- #include <linux/fs.h>
-+/*
-+ * Work around linux/ext2_fs.h breakage.
-+ * See https://bugzilla.kernel.org/show_bug.cgi?id=42986.
-+ */
-+typedef mode_t bb__umode_t;
-+#define umode_t bb__umode_t
- #include <linux/ext2_fs.h>
-
- #define ENABLE_FEATURE_MKFS_EXT2_RESERVED_GDT 0
---
-1.7.9.5
-
+++ /dev/null
-From 0b2b0f31a38d77ebfb2a6416011562687ef58191 Mon Sep 17 00:00:00 2001
-From: Denys Vlasenko <vda.linux@googlemail.com>
-Date: Fri, 13 Apr 2012 16:39:18 +0200
-Subject: [PATCH 01/32] Create and use our own copy of linux/ext2_fs.h
-
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
----
- e2fsprogs/tune2fs.c | 8 +-
- include/bb_linux_ext2_fs.h | 547 ++++++++++++++++++++++++++++++++++++++++++++
- util-linux/mkfs_ext2.c | 8 +-
- 3 files changed, 549 insertions(+), 14 deletions(-)
- create mode 100644 include/bb_linux_ext2_fs.h
-
-diff --git a/e2fsprogs/tune2fs.c b/e2fsprogs/tune2fs.c
-index 8da7432..841d58a 100644
---- a/e2fsprogs/tune2fs.c
-+++ b/e2fsprogs/tune2fs.c
-@@ -8,13 +8,7 @@
- */
- #include "libbb.h"
- #include <linux/fs.h>
--/*
-- * Work around linux/ext2_fs.h breakage.
-- * See https://bugzilla.kernel.org/show_bug.cgi?id=42986.
-- */
--typedef mode_t bb__umode_t;
--#define umode_t bb__umode_t
--#include <linux/ext2_fs.h>
-+#include "bb_linux_ext2_fs.h"
-
- // storage helpers
- char BUG_wrong_field_size(void);
-diff --git a/include/bb_linux_ext2_fs.h b/include/bb_linux_ext2_fs.h
-new file mode 100644
-index 0000000..fdc470b
---- /dev/null
-+++ b/include/bb_linux_ext2_fs.h
-@@ -0,0 +1,547 @@
-+/*
-+ * Work around linux/ext2_fs.h breakage.
-+ * linux/ext2_fs.h might be removed from future kernel header distribution.
-+ * See https://bugzilla.kernel.org/show_bug.cgi?id=42986
-+ *
-+ * Licensed under GPLv2, see file LICENSE in this source tree.
-+ */
-+#ifndef BB_LINUX_EXT2_FS_H
-+#define BB_LINUX_EXT2_FS_H
-+
-+/*
-+ * From linux/magic.h
-+ */
-+
-+#define EXT2_SUPER_MAGIC 0xEF53
-+#define EXT3_SUPER_MAGIC 0xEF53
-+#define EXT4_SUPER_MAGIC 0xEF53
-+
-+/*
-+ * From linux/ext2_fs.h, with minor changes.
-+ */
-+
-+/*
-+ * Copyright (C) 1992, 1993, 1994, 1995
-+ * Remy Card (card@masi.ibp.fr)
-+ * Laboratoire MASI - Institut Blaise Pascal
-+ * Universite Pierre et Marie Curie (Paris VI)
-+ *
-+ * from
-+ *
-+ * linux/include/linux/minix_fs.h
-+ *
-+ * Copyright (C) 1991, 1992 Linus Torvalds
-+ */
-+
-+/*
-+ * The second extended filesystem constants/structures
-+ */
-+
-+/*
-+ * Define EXT2_RESERVATION to reserve data blocks for expanding files
-+ */
-+#define EXT2_DEFAULT_RESERVE_BLOCKS 8
-+/*max window size: 1024(direct blocks) + 3([t,d]indirect blocks) */
-+#define EXT2_MAX_RESERVE_BLOCKS 1027
-+#define EXT2_RESERVE_WINDOW_NOT_ALLOCATED 0
-+
-+/*
-+ * Special inode numbers
-+ */
-+#define EXT2_BAD_INO 1 /* Bad blocks inode */
-+#define EXT2_ROOT_INO 2 /* Root inode */
-+#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */
-+#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */
-+
-+/* First non-reserved inode for old ext2 filesystems */
-+#define EXT2_GOOD_OLD_FIRST_INO 11
-+
-+/* Assume that user mode programs are passing in an ext2fs superblock, not
-+ * a kernel struct super_block. This will allow us to call the feature-test
-+ * macros from user land. */
-+#define EXT2_SB(sb) (sb)
-+
-+/*
-+ * Maximal count of links to a file
-+ */
-+#define EXT2_LINK_MAX 32000
-+
-+/*
-+ * Macro-instructions used to manage several block sizes
-+ */
-+#define EXT2_MIN_BLOCK_SIZE 1024
-+#define EXT2_MAX_BLOCK_SIZE 4096
-+#define EXT2_MIN_BLOCK_LOG_SIZE 10
-+# define EXT2_BLOCK_SIZE(s) (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
-+#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (uint32_t))
-+# define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
-+#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
-+ EXT2_GOOD_OLD_INODE_SIZE : \
-+ (s)->s_inode_size)
-+#define EXT2_FIRST_INO(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
-+ EXT2_GOOD_OLD_FIRST_INO : \
-+ (s)->s_first_ino)
-+
-+/*
-+ * Macro-instructions used to manage fragments
-+ */
-+#define EXT2_MIN_FRAG_SIZE 1024
-+#define EXT2_MAX_FRAG_SIZE 4096
-+#define EXT2_MIN_FRAG_LOG_SIZE 10
-+# define EXT2_FRAG_SIZE(s) (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size)
-+# define EXT2_FRAGS_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s))
-+
-+/*
-+ * Structure of a blocks group descriptor
-+ */
-+struct ext2_group_desc
-+{
-+ uint32_t bg_block_bitmap; /* Blocks bitmap block */
-+ uint32_t bg_inode_bitmap; /* Inodes bitmap block */
-+ uint32_t bg_inode_table; /* Inodes table block */
-+ uint16_t bg_free_blocks_count; /* Free blocks count */
-+ uint16_t bg_free_inodes_count; /* Free inodes count */
-+ uint16_t bg_used_dirs_count; /* Directories count */
-+ uint16_t bg_pad;
-+ uint32_t bg_reserved[3];
-+};
-+
-+/*
-+ * Macro-instructions used to manage group descriptors
-+ */
-+# define EXT2_BLOCKS_PER_GROUP(s) ((s)->s_blocks_per_group)
-+# define EXT2_DESC_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
-+# define EXT2_INODES_PER_GROUP(s) ((s)->s_inodes_per_group)
-+
-+/*
-+ * Constants relative to the data blocks
-+ */
-+#define EXT2_NDIR_BLOCKS 12
-+#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
-+#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
-+#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
-+#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
-+
-+/*
-+ * Inode flags (GETFLAGS/SETFLAGS)
-+ */
-+#define EXT2_SECRM_FL FS_SECRM_FL /* Secure deletion */
-+#define EXT2_UNRM_FL FS_UNRM_FL /* Undelete */
-+#define EXT2_COMPR_FL FS_COMPR_FL /* Compress file */
-+#define EXT2_SYNC_FL FS_SYNC_FL /* Synchronous updates */
-+#define EXT2_IMMUTABLE_FL FS_IMMUTABLE_FL /* Immutable file */
-+#define EXT2_APPEND_FL FS_APPEND_FL /* writes to file may only append */
-+#define EXT2_NODUMP_FL FS_NODUMP_FL /* do not dump file */
-+#define EXT2_NOATIME_FL FS_NOATIME_FL /* do not update atime */
-+/* Reserved for compression usage... */
-+#define EXT2_DIRTY_FL FS_DIRTY_FL
-+#define EXT2_COMPRBLK_FL FS_COMPRBLK_FL /* One or more compressed clusters */
-+#define EXT2_NOCOMP_FL FS_NOCOMP_FL /* Don't compress */
-+#define EXT2_ECOMPR_FL FS_ECOMPR_FL /* Compression error */
-+/* End compression flags --- maybe not all used */
-+#define EXT2_BTREE_FL FS_BTREE_FL /* btree format dir */
-+#define EXT2_INDEX_FL FS_INDEX_FL /* hash-indexed directory */
-+#define EXT2_IMAGIC_FL FS_IMAGIC_FL /* AFS directory */
-+#define EXT2_JOURNAL_DATA_FL FS_JOURNAL_DATA_FL /* Reserved for ext3 */
-+#define EXT2_NOTAIL_FL FS_NOTAIL_FL /* file tail should not be merged */
-+#define EXT2_DIRSYNC_FL FS_DIRSYNC_FL /* dirsync behaviour (directories only) */
-+#define EXT2_TOPDIR_FL FS_TOPDIR_FL /* Top of directory hierarchies*/
-+#define EXT2_RESERVED_FL FS_RESERVED_FL /* reserved for ext2 lib */
-+
-+#define EXT2_FL_USER_VISIBLE FS_FL_USER_VISIBLE /* User visible flags */
-+#define EXT2_FL_USER_MODIFIABLE FS_FL_USER_MODIFIABLE /* User modifiable flags */
-+
-+/* Flags that should be inherited by new inodes from their parent. */
-+#define EXT2_FL_INHERITED (EXT2_SECRM_FL | EXT2_UNRM_FL | EXT2_COMPR_FL |\
-+ EXT2_SYNC_FL | EXT2_IMMUTABLE_FL | EXT2_APPEND_FL |\
-+ EXT2_NODUMP_FL | EXT2_NOATIME_FL | EXT2_COMPRBLK_FL|\
-+ EXT2_NOCOMP_FL | EXT2_JOURNAL_DATA_FL |\
-+ EXT2_NOTAIL_FL | EXT2_DIRSYNC_FL)
-+
-+/* Flags that are appropriate for regular files (all but dir-specific ones). */
-+#define EXT2_REG_FLMASK (~(EXT2_DIRSYNC_FL | EXT2_TOPDIR_FL))
-+
-+/* Flags that are appropriate for non-directories/regular files. */
-+#define EXT2_OTHER_FLMASK (EXT2_NODUMP_FL | EXT2_NOATIME_FL)
-+
-+/* Mask out flags that are inappropriate for the given type of inode. */
-+static inline uint32_t ext2_mask_flags(mode_t mode, uint32_t flags)
-+{
-+ if (S_ISDIR(mode))
-+ return flags;
-+ else if (S_ISREG(mode))
-+ return flags & EXT2_REG_FLMASK;
-+ else
-+ return flags & EXT2_OTHER_FLMASK;
-+}
-+
-+/*
-+ * ioctl commands
-+ */
-+#define EXT2_IOC_GETFLAGS FS_IOC_GETFLAGS
-+#define EXT2_IOC_SETFLAGS FS_IOC_SETFLAGS
-+#define EXT2_IOC_GETVERSION FS_IOC_GETVERSION
-+#define EXT2_IOC_SETVERSION FS_IOC_SETVERSION
-+#define EXT2_IOC_GETRSVSZ _IOR('f', 5, long)
-+#define EXT2_IOC_SETRSVSZ _IOW('f', 6, long)
-+
-+/*
-+ * ioctl commands in 32 bit emulation
-+ */
-+#define EXT2_IOC32_GETFLAGS FS_IOC32_GETFLAGS
-+#define EXT2_IOC32_SETFLAGS FS_IOC32_SETFLAGS
-+#define EXT2_IOC32_GETVERSION FS_IOC32_GETVERSION
-+#define EXT2_IOC32_SETVERSION FS_IOC32_SETVERSION
-+
-+/*
-+ * Structure of an inode on the disk
-+ */
-+struct ext2_inode {
-+ uint16_t i_mode; /* File mode */
-+ uint16_t i_uid; /* Low 16 bits of Owner Uid */
-+ uint32_t i_size; /* Size in bytes */
-+ uint32_t i_atime; /* Access time */
-+ uint32_t i_ctime; /* Creation time */
-+ uint32_t i_mtime; /* Modification time */
-+ uint32_t i_dtime; /* Deletion Time */
-+ uint16_t i_gid; /* Low 16 bits of Group Id */
-+ uint16_t i_links_count; /* Links count */
-+ uint32_t i_blocks; /* Blocks count */
-+ uint32_t i_flags; /* File flags */
-+ union {
-+ struct {
-+ uint32_t l_i_reserved1;
-+ } linux1;
-+ struct {
-+ uint32_t h_i_translator;
-+ } hurd1;
-+ struct {
-+ uint32_t m_i_reserved1;
-+ } masix1;
-+ } osd1; /* OS dependent 1 */
-+ uint32_t i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
-+ uint32_t i_generation; /* File version (for NFS) */
-+ uint32_t i_file_acl; /* File ACL */
-+ uint32_t i_dir_acl; /* Directory ACL */
-+ uint32_t i_faddr; /* Fragment address */
-+ union {
-+ struct {
-+ uint8_t l_i_frag; /* Fragment number */
-+ uint8_t l_i_fsize; /* Fragment size */
-+ uint16_t i_pad1;
-+ uint16_t l_i_uid_high; /* these 2 fields */
-+ uint16_t l_i_gid_high; /* were reserved2[0] */
-+ uint32_t l_i_reserved2;
-+ } linux2;
-+ struct {
-+ uint8_t h_i_frag; /* Fragment number */
-+ uint8_t h_i_fsize; /* Fragment size */
-+ uint16_t h_i_mode_high;
-+ uint16_t h_i_uid_high;
-+ uint16_t h_i_gid_high;
-+ uint32_t h_i_author;
-+ } hurd2;
-+ struct {
-+ uint8_t m_i_frag; /* Fragment number */
-+ uint8_t m_i_fsize; /* Fragment size */
-+ uint16_t m_pad1;
-+ uint32_t m_i_reserved2[2];
-+ } masix2;
-+ } osd2; /* OS dependent 2 */
-+};
-+
-+#define i_size_high i_dir_acl
-+
-+#if defined(__KERNEL__) || defined(__linux__)
-+#define i_reserved1 osd1.linux1.l_i_reserved1
-+#define i_frag osd2.linux2.l_i_frag
-+#define i_fsize osd2.linux2.l_i_fsize
-+#define i_uid_low i_uid
-+#define i_gid_low i_gid
-+#define i_uid_high osd2.linux2.l_i_uid_high
-+#define i_gid_high osd2.linux2.l_i_gid_high
-+#define i_reserved2 osd2.linux2.l_i_reserved2
-+#endif
-+
-+#ifdef __hurd__
-+#define i_translator osd1.hurd1.h_i_translator
-+#define i_frag osd2.hurd2.h_i_frag
-+#define i_fsize osd2.hurd2.h_i_fsize
-+#define i_uid_high osd2.hurd2.h_i_uid_high
-+#define i_gid_high osd2.hurd2.h_i_gid_high
-+#define i_author osd2.hurd2.h_i_author
-+#endif
-+
-+#ifdef __masix__
-+#define i_reserved1 osd1.masix1.m_i_reserved1
-+#define i_frag osd2.masix2.m_i_frag
-+#define i_fsize osd2.masix2.m_i_fsize
-+#define i_reserved2 osd2.masix2.m_i_reserved2
-+#endif
-+
-+/*
-+ * File system states
-+ */
-+#define EXT2_VALID_FS 0x0001 /* Unmounted cleanly */
-+#define EXT2_ERROR_FS 0x0002 /* Errors detected */
-+
-+/*
-+ * Mount flags
-+ */
-+#define EXT2_MOUNT_CHECK 0x000001 /* Do mount-time checks */
-+#define EXT2_MOUNT_OLDALLOC 0x000002 /* Don't use the new Orlov allocator */
-+#define EXT2_MOUNT_GRPID 0x000004 /* Create files with directory's group */
-+#define EXT2_MOUNT_DEBUG 0x000008 /* Some debugging messages */
-+#define EXT2_MOUNT_ERRORS_CONT 0x000010 /* Continue on errors */
-+#define EXT2_MOUNT_ERRORS_RO 0x000020 /* Remount fs ro on errors */
-+#define EXT2_MOUNT_ERRORS_PANIC 0x000040 /* Panic on errors */
-+#define EXT2_MOUNT_MINIX_DF 0x000080 /* Mimics the Minix statfs */
-+#define EXT2_MOUNT_NOBH 0x000100 /* No buffer_heads */
-+#define EXT2_MOUNT_NO_UID32 0x000200 /* Disable 32-bit UIDs */
-+#define EXT2_MOUNT_XATTR_USER 0x004000 /* Extended user attributes */
-+#define EXT2_MOUNT_POSIX_ACL 0x008000 /* POSIX Access Control Lists */
-+#define EXT2_MOUNT_XIP 0x010000 /* Execute in place */
-+#define EXT2_MOUNT_USRQUOTA 0x020000 /* user quota */
-+#define EXT2_MOUNT_GRPQUOTA 0x040000 /* group quota */
-+#define EXT2_MOUNT_RESERVATION 0x080000 /* Preallocation */
-+
-+
-+#define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt
-+#define set_opt(o, opt) o |= EXT2_MOUNT_##opt
-+#define test_opt(sb, opt) (EXT2_SB(sb)->s_mount_opt & \
-+ EXT2_MOUNT_##opt)
-+/*
-+ * Maximal mount counts between two filesystem checks
-+ */
-+#define EXT2_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */
-+#define EXT2_DFL_CHECKINTERVAL 0 /* Don't use interval check */
-+
-+/*
-+ * Behaviour when detecting errors
-+ */
-+#define EXT2_ERRORS_CONTINUE 1 /* Continue execution */
-+#define EXT2_ERRORS_RO 2 /* Remount fs read-only */
-+#define EXT2_ERRORS_PANIC 3 /* Panic */
-+#define EXT2_ERRORS_DEFAULT EXT2_ERRORS_CONTINUE
-+
-+/*
-+ * Structure of the super block
-+ */
-+struct ext2_super_block {
-+ uint32_t s_inodes_count; /* Inodes count */
-+ uint32_t s_blocks_count; /* Blocks count */
-+ uint32_t s_r_blocks_count; /* Reserved blocks count */
-+ uint32_t s_free_blocks_count; /* Free blocks count */
-+ uint32_t s_free_inodes_count; /* Free inodes count */
-+ uint32_t s_first_data_block; /* First Data Block */
-+ uint32_t s_log_block_size; /* Block size */
-+ uint32_t s_log_frag_size; /* Fragment size */
-+ uint32_t s_blocks_per_group; /* # Blocks per group */
-+ uint32_t s_frags_per_group; /* # Fragments per group */
-+ uint32_t s_inodes_per_group; /* # Inodes per group */
-+ uint32_t s_mtime; /* Mount time */
-+ uint32_t s_wtime; /* Write time */
-+ uint16_t s_mnt_count; /* Mount count */
-+ uint16_t s_max_mnt_count; /* Maximal mount count */
-+ uint16_t s_magic; /* Magic signature */
-+ uint16_t s_state; /* File system state */
-+ uint16_t s_errors; /* Behaviour when detecting errors */
-+ uint16_t s_minor_rev_level; /* minor revision level */
-+ uint32_t s_lastcheck; /* time of last check */
-+ uint32_t s_checkinterval; /* max. time between checks */
-+ uint32_t s_creator_os; /* OS */
-+ uint32_t s_rev_level; /* Revision level */
-+ uint16_t s_def_resuid; /* Default uid for reserved blocks */
-+ uint16_t s_def_resgid; /* Default gid for reserved blocks */
-+ /*
-+ * These fields are for EXT2_DYNAMIC_REV superblocks only.
-+ *
-+ * Note: the difference between the compatible feature set and
-+ * the incompatible feature set is that if there is a bit set
-+ * in the incompatible feature set that the kernel doesn't
-+ * know about, it should refuse to mount the filesystem.
-+ *
-+ * e2fsck's requirements are more strict; if it doesn't know
-+ * about a feature in either the compatible or incompatible
-+ * feature set, it must abort and not try to meddle with
-+ * things it doesn't understand...
-+ */
-+ uint32_t s_first_ino; /* First non-reserved inode */
-+ uint16_t s_inode_size; /* size of inode structure */
-+ uint16_t s_block_group_nr; /* block group # of this superblock */
-+ uint32_t s_feature_compat; /* compatible feature set */
-+ uint32_t s_feature_incompat; /* incompatible feature set */
-+ uint32_t s_feature_ro_compat; /* readonly-compatible feature set */
-+ uint8_t s_uuid[16]; /* 128-bit uuid for volume */
-+ char s_volume_name[16]; /* volume name */
-+ char s_last_mounted[64]; /* directory where last mounted */
-+ uint32_t s_algorithm_usage_bitmap; /* For compression */
-+ /*
-+ * Performance hints. Directory preallocation should only
-+ * happen if the EXT2_COMPAT_PREALLOC flag is on.
-+ */
-+ uint8_t s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
-+ uint8_t s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
-+ uint16_t s_padding1;
-+ /*
-+ * Journaling support valid if EXT3_FEATURE_COMPAT_HAS_JOURNAL set.
-+ */
-+ uint8_t s_journal_uuid[16]; /* uuid of journal superblock */
-+ uint32_t s_journal_inum; /* inode number of journal file */
-+ uint32_t s_journal_dev; /* device number of journal file */
-+ uint32_t s_last_orphan; /* start of list of inodes to delete */
-+ uint32_t s_hash_seed[4]; /* HTREE hash seed */
-+ uint8_t s_def_hash_version; /* Default hash version to use */
-+ uint8_t s_reserved_char_pad;
-+ uint16_t s_reserved_word_pad;
-+ uint32_t s_default_mount_opts;
-+ uint32_t s_first_meta_bg; /* First metablock block group */
-+ uint32_t s_reserved[190]; /* Padding to the end of the block */
-+};
-+
-+/*
-+ * Codes for operating systems
-+ */
-+#define EXT2_OS_LINUX 0
-+#define EXT2_OS_HURD 1
-+#define EXT2_OS_MASIX 2
-+#define EXT2_OS_FREEBSD 3
-+#define EXT2_OS_LITES 4
-+
-+/*
-+ * Revision levels
-+ */
-+#define EXT2_GOOD_OLD_REV 0 /* The good old (original) format */
-+#define EXT2_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */
-+
-+#define EXT2_CURRENT_REV EXT2_GOOD_OLD_REV
-+#define EXT2_MAX_SUPP_REV EXT2_DYNAMIC_REV
-+
-+#define EXT2_GOOD_OLD_INODE_SIZE 128
-+
-+/*
-+ * Feature set definitions
-+ */
-+
-+#define EXT2_HAS_COMPAT_FEATURE(sb,mask) \
-+ ( EXT2_SB(sb)->s_es->s_feature_compat & cpu_to_le32(mask) )
-+#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask) \
-+ ( EXT2_SB(sb)->s_es->s_feature_ro_compat & cpu_to_le32(mask) )
-+#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \
-+ ( EXT2_SB(sb)->s_es->s_feature_incompat & cpu_to_le32(mask) )
-+#define EXT2_SET_COMPAT_FEATURE(sb,mask) \
-+ EXT2_SB(sb)->s_es->s_feature_compat |= cpu_to_le32(mask)
-+#define EXT2_SET_RO_COMPAT_FEATURE(sb,mask) \
-+ EXT2_SB(sb)->s_es->s_feature_ro_compat |= cpu_to_le32(mask)
-+#define EXT2_SET_INCOMPAT_FEATURE(sb,mask) \
-+ EXT2_SB(sb)->s_es->s_feature_incompat |= cpu_to_le32(mask)
-+#define EXT2_CLEAR_COMPAT_FEATURE(sb,mask) \
-+ EXT2_SB(sb)->s_es->s_feature_compat &= ~cpu_to_le32(mask)
-+#define EXT2_CLEAR_RO_COMPAT_FEATURE(sb,mask) \
-+ EXT2_SB(sb)->s_es->s_feature_ro_compat &= ~cpu_to_le32(mask)
-+#define EXT2_CLEAR_INCOMPAT_FEATURE(sb,mask) \
-+ EXT2_SB(sb)->s_es->s_feature_incompat &= ~cpu_to_le32(mask)
-+
-+#define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001
-+#define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002
-+#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
-+#define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008
-+#define EXT2_FEATURE_COMPAT_RESIZE_INO 0x0010
-+#define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020
-+#define EXT2_FEATURE_COMPAT_ANY 0xffffffff
-+
-+#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
-+#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
-+#define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004
-+#define EXT2_FEATURE_RO_COMPAT_ANY 0xffffffff
-+
-+#define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001
-+#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
-+#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004
-+#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008
-+#define EXT2_FEATURE_INCOMPAT_META_BG 0x0010
-+#define EXT2_FEATURE_INCOMPAT_ANY 0xffffffff
-+
-+#define EXT2_FEATURE_COMPAT_SUPP EXT2_FEATURE_COMPAT_EXT_ATTR
-+#define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \
-+ EXT2_FEATURE_INCOMPAT_META_BG)
-+#define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-+ EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
-+ EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
-+#define EXT2_FEATURE_RO_COMPAT_UNSUPPORTED ~EXT2_FEATURE_RO_COMPAT_SUPP
-+#define EXT2_FEATURE_INCOMPAT_UNSUPPORTED ~EXT2_FEATURE_INCOMPAT_SUPP
-+
-+/*
-+ * Default values for user and/or group using reserved blocks
-+ */
-+#define EXT2_DEF_RESUID 0
-+#define EXT2_DEF_RESGID 0
-+
-+/*
-+ * Default mount options
-+ */
-+#define EXT2_DEFM_DEBUG 0x0001
-+#define EXT2_DEFM_BSDGROUPS 0x0002
-+#define EXT2_DEFM_XATTR_USER 0x0004
-+#define EXT2_DEFM_ACL 0x0008
-+#define EXT2_DEFM_UID16 0x0010
-+ /* Not used by ext2, but reserved for use by ext3 */
-+#define EXT3_DEFM_JMODE 0x0060
-+#define EXT3_DEFM_JMODE_DATA 0x0020
-+#define EXT3_DEFM_JMODE_ORDERED 0x0040
-+#define EXT3_DEFM_JMODE_WBACK 0x0060
-+
-+/*
-+ * Structure of a directory entry
-+ */
-+#define EXT2_NAME_LEN 255
-+
-+struct ext2_dir_entry {
-+ uint32_t inode; /* Inode number */
-+ uint16_t rec_len; /* Directory entry length */
-+ uint16_t name_len; /* Name length */
-+ char name[EXT2_NAME_LEN]; /* File name */
-+};
-+
-+/*
-+ * The new version of the directory entry. Since EXT2 structures are
-+ * stored in intel byte order, and the name_len field could never be
-+ * bigger than 255 chars, it's safe to reclaim the extra byte for the
-+ * file_type field.
-+ */
-+struct ext2_dir_entry_2 {
-+ uint32_t inode; /* Inode number */
-+ uint16_t rec_len; /* Directory entry length */
-+ uint8_t name_len; /* Name length */
-+ uint8_t file_type;
-+ char name[EXT2_NAME_LEN]; /* File name */
-+};
-+
-+/*
-+ * Ext2 directory file types. Only the low 3 bits are used. The
-+ * other bits are reserved for now.
-+ */
-+enum {
-+ EXT2_FT_UNKNOWN = 0,
-+ EXT2_FT_REG_FILE = 1,
-+ EXT2_FT_DIR = 2,
-+ EXT2_FT_CHRDEV = 3,
-+ EXT2_FT_BLKDEV = 4,
-+ EXT2_FT_FIFO = 5,
-+ EXT2_FT_SOCK = 6,
-+ EXT2_FT_SYMLINK = 7,
-+ EXT2_FT_MAX
-+};
-+
-+/*
-+ * EXT2_DIR_PAD defines the directory entries boundaries
-+ *
-+ * NOTE: It must be a multiple of 4
-+ */
-+#define EXT2_DIR_PAD 4
-+#define EXT2_DIR_ROUND (EXT2_DIR_PAD - 1)
-+#define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \
-+ ~EXT2_DIR_ROUND)
-+#define EXT2_MAX_REC_LEN ((1<<16)-1)
-+
-+#endif
-diff --git a/util-linux/mkfs_ext2.c b/util-linux/mkfs_ext2.c
-index 759bb0a..2d9d720 100644
---- a/util-linux/mkfs_ext2.c
-+++ b/util-linux/mkfs_ext2.c
-@@ -48,13 +48,7 @@
-
- #include "libbb.h"
- #include <linux/fs.h>
--/*
-- * Work around linux/ext2_fs.h breakage.
-- * See https://bugzilla.kernel.org/show_bug.cgi?id=42986.
-- */
--typedef mode_t bb__umode_t;
--#define umode_t bb__umode_t
--#include <linux/ext2_fs.h>
-+#include "bb_linux_ext2_fs.h"
-
- #define ENABLE_FEATURE_MKFS_EXT2_RESERVED_GDT 0
- #define ENABLE_FEATURE_MKFS_EXT2_DIR_INDEX 1
---
-1.7.9.5
-
+++ /dev/null
-From e5221a142e8ee4509734c17584f898a1f4ac86cc Mon Sep 17 00:00:00 2001
-From: Denys Vlasenko <vda.linux@googlemail.com>
-Date: Wed, 19 Oct 2011 02:37:08 +0200
-Subject: [PATCH 02/10] ifupdown: code shrink
-
-function old new delta
-keywords_up_down - 43 +43
-set_environ 371 259 -112
-ifupdown_main 2194 2073 -121
-------------------------------------------------------------------------------
-(add/remove: 1/0 grow/shrink: 0/2 up/down: 43/-233) Total: -190 bytes
-
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
----
- networking/ifupdown.c | 42 +++++++++++++++---------------------------
- 1 file changed, 15 insertions(+), 27 deletions(-)
-
-diff --git a/networking/ifupdown.c b/networking/ifupdown.c
-index abc6b58..5946323 100644
---- a/networking/ifupdown.c
-+++ b/networking/ifupdown.c
-@@ -87,7 +87,6 @@ struct mapping_defn_t {
-
- char *script;
-
-- int max_mappings;
- int n_mappings;
- char **mapping;
- };
-@@ -102,7 +101,6 @@ struct interface_defn_t {
- const struct method_t *method;
-
- char *iface;
-- int max_options;
- int n_options;
- struct variable_t *option;
- };
-@@ -138,6 +136,16 @@ struct globals {
- #define INIT_G() do { } while (0)
-
-
-+static const char keywords_up_down[] ALIGN1 =
-+ "up\0"
-+ "down\0"
-+ "pre-up\0"
-+ "pre-down\0"
-+ "post-up\0"
-+ "post-down\0"
-+;
-+
-+
- #if ENABLE_FEATURE_IFUPDOWN_IPV4 || ENABLE_FEATURE_IFUPDOWN_IPV6
-
- static void addstr(char **bufp, const char *str, size_t str_length)
-@@ -803,7 +811,6 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
- currmap->match = xrealloc_vector(currmap->match, 4, currmap->n_matches);
- currmap->match[currmap->n_matches++] = xstrdup(first_word);
- }
-- /*currmap->max_mappings = 0; - done by xzalloc */
- /*currmap->n_mappings = 0;*/
- /*currmap->mapping = NULL;*/
- /*currmap->script = NULL;*/
-@@ -888,25 +895,16 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
- if (rest_of_line[0] == '\0')
- bb_error_msg_and_die("option with empty value \"%s\"", buf);
-
-- if (strcmp(first_word, "up") != 0
-- && strcmp(first_word, "down") != 0
-- && strcmp(first_word, "pre-up") != 0
-- && strcmp(first_word, "pre-down") != 0
-- && strcmp(first_word, "post-up") != 0
-- && strcmp(first_word, "post-down") != 0
-- ) {
-+ /* If not one of "up", "down",... words... */
-+ if (index_in_strings(keywords_up_down, first_word) < 0) {
- int i;
- for (i = 0; i < currif->n_options; i++) {
- if (strcmp(currif->option[i].name, first_word) == 0)
- bb_error_msg_and_die("duplicate option \"%s\"", buf);
- }
- }
-- if (currif->n_options >= currif->max_options) {
-- currif->max_options += 10;
-- currif->option = xrealloc(currif->option,
-- sizeof(*currif->option) * currif->max_options);
-- }
- debug_noise("\t%s=%s\n", first_word, rest_of_line);
-+ currif->option = xrealloc_vector(currif->option, 4, currif->n_options);
- currif->option[currif->n_options].name = xstrdup(first_word);
- currif->option[currif->n_options].value = xstrdup(rest_of_line);
- currif->n_options++;
-@@ -918,11 +916,7 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
- bb_error_msg_and_die("duplicate script in mapping \"%s\"", buf);
- currmap->script = xstrdup(next_word(&rest_of_line));
- } else if (strcmp(first_word, "map") == 0) {
-- if (currmap->n_mappings >= currmap->max_mappings) {
-- currmap->max_mappings = currmap->max_mappings * 2 + 1;
-- currmap->mapping = xrealloc(currmap->mapping,
-- sizeof(char *) * currmap->max_mappings);
-- }
-+ currmap->mapping = xrealloc_vector(currmap->mapping, 2, currmap->n_mappings);
- currmap->mapping[currmap->n_mappings] = xstrdup(next_word(&rest_of_line));
- currmap->n_mappings++;
- } else {
-@@ -986,13 +980,7 @@ static void set_environ(struct interface_defn_t *iface, const char *mode)
- pp = G.my_environ;
-
- for (i = 0; i < iface->n_options; i++) {
-- if (strcmp(iface->option[i].name, "up") == 0
-- || strcmp(iface->option[i].name, "down") == 0
-- || strcmp(iface->option[i].name, "pre-up") == 0
-- || strcmp(iface->option[i].name, "pre-down") == 0
-- || strcmp(iface->option[i].name, "post-up") == 0
-- || strcmp(iface->option[i].name, "post-down") == 0
-- ) {
-+ if (index_in_strings(keywords_up_down, iface->option[i].name) >= 0) {
- continue;
- }
- *pp++ = setlocalenv("IF_%s=%s", iface->option[i].name, iface->option[i].value);
---
-1.7.10.4
-
+++ /dev/null
-From 176bc344751dfc41e87976182381ae0560c94f22 Mon Sep 17 00:00:00 2001
-From: Denys Vlasenko <vda.linux@googlemail.com>
-Date: Tue, 17 Apr 2012 15:06:55 +0200
-Subject: [PATCH 04/32] Drop include/bb_linux_ext2_fs.h, use existing
- e2fsprogs/e2fs_defs.h
-
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
----
- e2fsprogs/e2fs_defs.h | 561 ---------------------------
- e2fsprogs/e2fs_lib.h | 2 +-
- e2fsprogs/old_e2fsprogs/e2fsck.c | 6 +-
- e2fsprogs/old_e2fsprogs/e2p/feature.c | 2 +-
- e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h | 2 +-
- e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h | 2 +-
- e2fsprogs/old_e2fsprogs/ext2fs/initialize.c | 2 +-
- e2fsprogs/old_e2fsprogs/mke2fs.c | 8 +-
- e2fsprogs/tune2fs.c | 2 +-
- include/bb_e2fs_defs.h | 561 +++++++++++++++++++++++++++
- include/bb_linux_ext2_fs.h | 547 --------------------------
- util-linux/mkfs_ext2.c | 2 +-
- 12 files changed, 575 insertions(+), 1122 deletions(-)
- delete mode 100644 e2fsprogs/e2fs_defs.h
- create mode 100644 include/bb_e2fs_defs.h
- delete mode 100644 include/bb_linux_ext2_fs.h
-
-diff --git a/e2fsprogs/e2fs_defs.h b/e2fsprogs/e2fs_defs.h
-deleted file mode 100644
-index 379640e..0000000
---- a/e2fsprogs/e2fs_defs.h
-+++ /dev/null
-@@ -1,561 +0,0 @@
--/* vi: set sw=4 ts=4: */
--/*
-- * linux/include/linux/ext2_fs.h
-- *
-- * Copyright (C) 1992, 1993, 1994, 1995
-- * Remy Card (card@masi.ibp.fr)
-- * Laboratoire MASI - Institut Blaise Pascal
-- * Universite Pierre et Marie Curie (Paris VI)
-- *
-- * Copyright (C) 1991, 1992 Linus Torvalds
-- */
--
--#ifndef LINUX_EXT2_FS_H
--#define LINUX_EXT2_FS_H 1
--
--/*
-- * Special inode numbers
-- */
--#define EXT2_BAD_INO 1 /* Bad blocks inode */
--#define EXT2_ROOT_INO 2 /* Root inode */
--#define EXT2_ACL_IDX_INO 3 /* ACL inode */
--#define EXT2_ACL_DATA_INO 4 /* ACL inode */
--#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */
--#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */
--#define EXT2_RESIZE_INO 7 /* Reserved group descriptors inode */
--#define EXT2_JOURNAL_INO 8 /* Journal inode */
--
--/* First non-reserved inode for old ext2 filesystems */
--#define EXT2_GOOD_OLD_FIRST_INO 11
--
--/*
-- * The second extended file system magic number
-- */
--#define EXT2_SUPER_MAGIC 0xEF53
--
--/* Assume that user mode programs are passing in an ext2fs superblock, not
-- * a kernel struct super_block. This will allow us to call the feature-test
-- * macros from user land. */
--#define EXT2_SB(sb) (sb)
--
--/*
-- * Maximal count of links to a file
-- */
--#define EXT2_LINK_MAX 32000
--
--/*
-- * Macro-instructions used to manage several block sizes
-- */
--#define EXT2_MIN_BLOCK_LOG_SIZE 10 /* 1024 */
--#define EXT2_MAX_BLOCK_LOG_SIZE 16 /* 65536 */
--#define EXT2_MIN_BLOCK_SIZE (1 << EXT2_MIN_BLOCK_LOG_SIZE)
--#define EXT2_MAX_BLOCK_SIZE (1 << EXT2_MAX_BLOCK_LOG_SIZE)
--#define EXT2_BLOCK_SIZE(s) (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
--#define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
--#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
-- EXT2_GOOD_OLD_INODE_SIZE : (s)->s_inode_size)
--#define EXT2_FIRST_INO(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
-- EXT2_GOOD_OLD_FIRST_INO : (s)->s_first_ino)
--#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof(uint32_t))
--
--/*
-- * Macro-instructions used to manage fragments
-- */
--#define EXT2_MIN_FRAG_SIZE EXT2_MIN_BLOCK_SIZE
--#define EXT2_MAX_FRAG_SIZE EXT2_MAX_BLOCK_SIZE
--#define EXT2_MIN_FRAG_LOG_SIZE EXT2_MIN_BLOCK_LOG_SIZE
--#define EXT2_FRAG_SIZE(s) (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size)
--#define EXT2_FRAGS_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s))
--
--/*
-- * ACL structures
-- */
--struct ext2_acl_header { /* Header of Access Control Lists */
-- uint32_t aclh_size;
-- uint32_t aclh_file_count;
-- uint32_t aclh_acle_count;
-- uint32_t aclh_first_acle;
--};
--
--struct ext2_acl_entry { /* Access Control List Entry */
-- uint32_t acle_size;
-- uint16_t acle_perms; /* Access permissions */
-- uint16_t acle_type; /* Type of entry */
-- uint16_t acle_tag; /* User or group identity */
-- uint16_t acle_pad1;
-- uint32_t acle_next; /* Pointer on next entry for the */
-- /* same inode or on next free entry */
--};
--
--/*
-- * Structure of a blocks group descriptor
-- */
--struct ext2_group_desc {
-- uint32_t bg_block_bitmap; /* Blocks bitmap block */
-- uint32_t bg_inode_bitmap; /* Inodes bitmap block */
-- uint32_t bg_inode_table; /* Inodes table block */
-- uint16_t bg_free_blocks_count; /* Free blocks count */
-- uint16_t bg_free_inodes_count; /* Free inodes count */
-- uint16_t bg_used_dirs_count; /* Directories count */
-- uint16_t bg_pad;
-- uint32_t bg_reserved[3];
--};
--
--/*
-- * Data structures used by the directory indexing feature
-- *
-- * Note: all of the multibyte integer fields are little endian.
-- */
--
--/*
-- * Note: dx_root_info is laid out so that if it should somehow get
-- * overlaid by a dirent the two low bits of the hash version will be
-- * zero. Therefore, the hash version mod 4 should never be 0.
-- * Sincerely, the paranoia department.
-- */
--struct ext2_dx_root_info {
-- uint32_t reserved_zero;
-- uint8_t hash_version; /* 0 now, 1 at release */
-- uint8_t info_length; /* 8 */
-- uint8_t indirect_levels;
-- uint8_t unused_flags;
--};
--
--#define EXT2_HASH_LEGACY 0
--#define EXT2_HASH_HALF_MD4 1
--#define EXT2_HASH_TEA 2
--
--#define EXT2_HASH_FLAG_INCOMPAT 0x1
--
--struct ext2_dx_entry {
-- uint32_t hash;
-- uint32_t block;
--};
--
--struct ext2_dx_countlimit {
-- uint16_t limit;
-- uint16_t count;
--};
--
--
--/*
-- * Macro-instructions used to manage group descriptors
-- */
--#define EXT2_BLOCKS_PER_GROUP(s) (EXT2_SB(s)->s_blocks_per_group)
--#define EXT2_INODES_PER_GROUP(s) (EXT2_SB(s)->s_inodes_per_group)
--#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
--/* limits imposed by 16-bit value gd_free_{blocks,inode}_count */
--#define EXT2_MAX_BLOCKS_PER_GROUP(s) ((1 << 16) - 8)
--#define EXT2_MAX_INODES_PER_GROUP(s) ((1 << 16) - EXT2_INODES_PER_BLOCK(s))
--#define EXT2_DESC_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
--
--/*
-- * Constants relative to the data blocks
-- */
--#define EXT2_NDIR_BLOCKS 12
--#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
--#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
--#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
--#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
--
--/*
-- * Inode flags
-- */
--#define EXT2_SECRM_FL 0x00000001 /* Secure deletion */
--#define EXT2_UNRM_FL 0x00000002 /* Undelete */
--#define EXT2_COMPR_FL 0x00000004 /* Compress file */
--#define EXT2_SYNC_FL 0x00000008 /* Synchronous updates */
--#define EXT2_IMMUTABLE_FL 0x00000010 /* Immutable file */
--#define EXT2_APPEND_FL 0x00000020 /* writes to file may only append */
--#define EXT2_NODUMP_FL 0x00000040 /* do not dump file */
--#define EXT2_NOATIME_FL 0x00000080 /* do not update atime */
--/* Reserved for compression usage... */
--#define EXT2_DIRTY_FL 0x00000100
--#define EXT2_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */
--#define EXT2_NOCOMPR_FL 0x00000400 /* Access raw compressed data */
--#define EXT2_ECOMPR_FL 0x00000800 /* Compression error */
--/* End compression flags --- maybe not all used */
--#define EXT2_BTREE_FL 0x00001000 /* btree format dir */
--#define EXT2_INDEX_FL 0x00001000 /* hash-indexed directory */
--#define EXT2_IMAGIC_FL 0x00002000
--#define EXT3_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */
--#define EXT2_NOTAIL_FL 0x00008000 /* file tail should not be merged */
--#define EXT2_DIRSYNC_FL 0x00010000 /* Synchronous directory modifications */
--#define EXT2_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
--#define EXT3_EXTENTS_FL 0x00080000 /* Inode uses extents */
--#define EXT2_RESERVED_FL 0x80000000 /* reserved for ext2 lib */
--
--#define EXT2_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
--#define EXT2_FL_USER_MODIFIABLE 0x000080FF /* User modifiable flags */
--
--/*
-- * ioctl commands
-- */
--#define EXT2_IOC_GETFLAGS _IOR('f', 1, long)
--#define EXT2_IOC_SETFLAGS _IOW('f', 2, long)
--#define EXT2_IOC_GETVERSION _IOR('v', 1, long)
--#define EXT2_IOC_SETVERSION _IOW('v', 2, long)
--
--/*
-- * Structure of an inode on the disk
-- */
--struct ext2_inode {
-- uint16_t i_mode; /* File mode */
-- uint16_t i_uid; /* Low 16 bits of Owner Uid */
-- uint32_t i_size; /* Size in bytes */
-- uint32_t i_atime; /* Access time */
-- uint32_t i_ctime; /* Creation time */
-- uint32_t i_mtime; /* Modification time */
-- uint32_t i_dtime; /* Deletion Time */
-- uint16_t i_gid; /* Low 16 bits of Group Id */
-- uint16_t i_links_count; /* Links count */
-- uint32_t i_blocks; /* Blocks count */
-- uint32_t i_flags; /* File flags */
-- union {
-- struct {
-- uint32_t l_i_reserved1;
-- } linux1;
-- struct {
-- uint32_t h_i_translator;
-- } hurd1;
-- struct {
-- uint32_t m_i_reserved1;
-- } masix1;
-- } osd1; /* OS dependent 1 */
-- uint32_t i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
-- uint32_t i_generation; /* File version (for NFS) */
-- uint32_t i_file_acl; /* File ACL */
-- uint32_t i_dir_acl; /* Directory ACL */
-- uint32_t i_faddr; /* Fragment address */
-- union {
-- struct {
-- uint8_t l_i_frag; /* Fragment number */
-- uint8_t l_i_fsize; /* Fragment size */
-- uint16_t i_pad1;
-- uint16_t l_i_uid_high; /* these 2 fields */
-- uint16_t l_i_gid_high; /* were reserved2[0] */
-- uint32_t l_i_reserved2;
-- } linux2;
-- struct {
-- uint8_t h_i_frag; /* Fragment number */
-- uint8_t h_i_fsize; /* Fragment size */
-- uint16_t h_i_mode_high;
-- uint16_t h_i_uid_high;
-- uint16_t h_i_gid_high;
-- uint32_t h_i_author;
-- } hurd2;
-- struct {
-- uint8_t m_i_frag; /* Fragment number */
-- uint8_t m_i_fsize; /* Fragment size */
-- uint16_t m_pad1;
-- uint32_t m_i_reserved2[2];
-- } masix2;
-- } osd2; /* OS dependent 2 */
--};
--
--/*
-- * Permanent part of an large inode on the disk
-- */
--struct ext2_inode_large {
-- uint16_t i_mode; /* File mode */
-- uint16_t i_uid; /* Low 16 bits of Owner Uid */
-- uint32_t i_size; /* Size in bytes */
-- uint32_t i_atime; /* Access time */
-- uint32_t i_ctime; /* Creation time */
-- uint32_t i_mtime; /* Modification time */
-- uint32_t i_dtime; /* Deletion Time */
-- uint16_t i_gid; /* Low 16 bits of Group Id */
-- uint16_t i_links_count; /* Links count */
-- uint32_t i_blocks; /* Blocks count */
-- uint32_t i_flags; /* File flags */
-- union {
-- struct {
-- uint32_t l_i_reserved1;
-- } linux1;
-- struct {
-- uint32_t h_i_translator;
-- } hurd1;
-- struct {
-- uint32_t m_i_reserved1;
-- } masix1;
-- } osd1; /* OS dependent 1 */
-- uint32_t i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
-- uint32_t i_generation; /* File version (for NFS) */
-- uint32_t i_file_acl; /* File ACL */
-- uint32_t i_dir_acl; /* Directory ACL */
-- uint32_t i_faddr; /* Fragment address */
-- union {
-- struct {
-- uint8_t l_i_frag; /* Fragment number */
-- uint8_t l_i_fsize; /* Fragment size */
-- uint16_t i_pad1;
-- uint16_t l_i_uid_high; /* these 2 fields */
-- uint16_t l_i_gid_high; /* were reserved2[0] */
-- uint32_t l_i_reserved2;
-- } linux2;
-- struct {
-- uint8_t h_i_frag; /* Fragment number */
-- uint8_t h_i_fsize; /* Fragment size */
-- uint16_t h_i_mode_high;
-- uint16_t h_i_uid_high;
-- uint16_t h_i_gid_high;
-- uint32_t h_i_author;
-- } hurd2;
-- struct {
-- uint8_t m_i_frag; /* Fragment number */
-- uint8_t m_i_fsize; /* Fragment size */
-- uint16_t m_pad1;
-- uint32_t m_i_reserved2[2];
-- } masix2;
-- } osd2; /* OS dependent 2 */
-- uint16_t i_extra_isize;
-- uint16_t i_pad1;
--};
--
--#define i_size_high i_dir_acl
--
--/*
-- * File system states
-- */
--#define EXT2_VALID_FS 0x0001 /* Unmounted cleanly */
--#define EXT2_ERROR_FS 0x0002 /* Errors detected */
--
--/*
-- * Mount flags
-- */
--#define EXT2_MOUNT_CHECK 0x0001 /* Do mount-time checks */
--#define EXT2_MOUNT_GRPID 0x0004 /* Create files with directory's group */
--#define EXT2_MOUNT_DEBUG 0x0008 /* Some debugging messages */
--#define EXT2_MOUNT_ERRORS_CONT 0x0010 /* Continue on errors */
--#define EXT2_MOUNT_ERRORS_RO 0x0020 /* Remount fs ro on errors */
--#define EXT2_MOUNT_ERRORS_PANIC 0x0040 /* Panic on errors */
--#define EXT2_MOUNT_MINIX_DF 0x0080 /* Mimics the Minix statfs */
--#define EXT2_MOUNT_NO_UID32 0x0200 /* Disable 32-bit UIDs */
--
--#define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt
--#define set_opt(o, opt) o |= EXT2_MOUNT_##opt
--#define test_opt(sb, opt) (EXT2_SB(sb)->s_mount_opt & \
-- EXT2_MOUNT_##opt)
--/*
-- * Maximal mount counts between two filesystem checks
-- */
--#define EXT2_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */
--#define EXT2_DFL_CHECKINTERVAL 0 /* Don't use interval check */
--
--/*
-- * Behaviour when detecting errors
-- */
--#define EXT2_ERRORS_CONTINUE 1 /* Continue execution */
--#define EXT2_ERRORS_RO 2 /* Remount fs read-only */
--#define EXT2_ERRORS_PANIC 3 /* Panic */
--#define EXT2_ERRORS_DEFAULT EXT2_ERRORS_CONTINUE
--
--/*
-- * Structure of the super block
-- */
--struct ext2_super_block {
-- uint32_t s_inodes_count; /* Inodes count */
-- uint32_t s_blocks_count; /* Blocks count */
-- uint32_t s_r_blocks_count; /* Reserved blocks count */
-- uint32_t s_free_blocks_count; /* Free blocks count */
-- uint32_t s_free_inodes_count; /* Free inodes count */
-- uint32_t s_first_data_block; /* First Data Block */
-- uint32_t s_log_block_size; /* Block size */
-- int32_t s_log_frag_size; /* Fragment size */
-- uint32_t s_blocks_per_group; /* # Blocks per group */
-- uint32_t s_frags_per_group; /* # Fragments per group */
-- uint32_t s_inodes_per_group; /* # Inodes per group */
-- uint32_t s_mtime; /* Mount time */
-- uint32_t s_wtime; /* Write time */
-- uint16_t s_mnt_count; /* Mount count */
-- int16_t s_max_mnt_count; /* Maximal mount count */
-- uint16_t s_magic; /* Magic signature */
-- uint16_t s_state; /* File system state */
-- uint16_t s_errors; /* Behaviour when detecting errors */
-- uint16_t s_minor_rev_level; /* minor revision level */
-- uint32_t s_lastcheck; /* time of last check */
-- uint32_t s_checkinterval; /* max. time between checks */
-- uint32_t s_creator_os; /* OS */
-- uint32_t s_rev_level; /* Revision level */
-- uint16_t s_def_resuid; /* Default uid for reserved blocks */
-- uint16_t s_def_resgid; /* Default gid for reserved blocks */
-- /*
-- * These fields are for EXT2_DYNAMIC_REV superblocks only.
-- *
-- * Note: the difference between the compatible feature set and
-- * the incompatible feature set is that if there is a bit set
-- * in the incompatible feature set that the kernel doesn't
-- * know about, it should refuse to mount the filesystem.
-- *
-- * e2fsck's requirements are more strict; if it doesn't know
-- * about a feature in either the compatible or incompatible
-- * feature set, it must abort and not try to meddle with
-- * things it doesn't understand...
-- */
-- uint32_t s_first_ino; /* First non-reserved inode */
-- uint16_t s_inode_size; /* size of inode structure */
-- uint16_t s_block_group_nr; /* block group # of this superblock */
-- uint32_t s_feature_compat; /* compatible feature set */
-- uint32_t s_feature_incompat; /* incompatible feature set */
-- uint32_t s_feature_ro_compat; /* readonly-compatible feature set */
-- uint8_t s_uuid[16]; /* 128-bit uuid for volume */
-- char s_volume_name[16]; /* volume name */
-- char s_last_mounted[64]; /* directory where last mounted */
-- uint32_t s_algorithm_usage_bitmap; /* For compression */
-- /*
-- * Performance hints. Directory preallocation should only
-- * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
-- */
-- uint8_t s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
-- uint8_t s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
-- uint16_t s_reserved_gdt_blocks; /* Per group table for online growth */
-- /*
-- * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
-- */
-- uint8_t s_journal_uuid[16]; /* uuid of journal superblock */
-- uint32_t s_journal_inum; /* inode number of journal file */
-- uint32_t s_journal_dev; /* device number of journal file */
-- uint32_t s_last_orphan; /* start of list of inodes to delete */
-- uint32_t s_hash_seed[4]; /* HTREE hash seed */
-- uint8_t s_def_hash_version; /* Default hash version to use */
-- uint8_t s_jnl_backup_type; /* Default type of journal backup */
-- uint16_t s_reserved_word_pad;
-- uint32_t s_default_mount_opts;
-- uint32_t s_first_meta_bg; /* First metablock group */
-- uint32_t s_mkfs_time; /* When the filesystem was created */
-- uint32_t s_jnl_blocks[17]; /* Backup of the journal inode */
-- uint32_t s_reserved[172]; /* Padding to the end of the block */
--};
--
--/*
-- * Codes for operating systems
-- */
--#define EXT2_OS_LINUX 0
--#define EXT2_OS_HURD 1
--#define EXT2_OS_MASIX 2
--#define EXT2_OS_FREEBSD 3
--#define EXT2_OS_LITES 4
--
--/*
-- * Revision levels
-- */
--#define EXT2_GOOD_OLD_REV 0 /* The good old (original) format */
--#define EXT2_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */
--
--#define EXT2_CURRENT_REV EXT2_GOOD_OLD_REV
--#define EXT2_MAX_SUPP_REV EXT2_DYNAMIC_REV
--
--#define EXT2_GOOD_OLD_INODE_SIZE 128
--
--/*
-- * Journal inode backup types
-- */
--#define EXT3_JNL_BACKUP_BLOCKS 1
--
--/*
-- * Feature set definitions
-- */
--
--#define EXT2_HAS_COMPAT_FEATURE(sb,mask) \
-- ( EXT2_SB(sb)->s_feature_compat & (mask) )
--#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask) \
-- ( EXT2_SB(sb)->s_feature_ro_compat & (mask) )
--#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \
-- ( EXT2_SB(sb)->s_feature_incompat & (mask) )
--
--#define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001
--#define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002
--#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
--#define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008
--#define EXT2_FEATURE_COMPAT_RESIZE_INODE 0x0010
--#define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020
--
--#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
--#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
--/* #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 not used */
--
--#define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001
--#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
--#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */
--#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */
--#define EXT2_FEATURE_INCOMPAT_META_BG 0x0010
--#define EXT3_FEATURE_INCOMPAT_EXTENTS 0x0040
--
--
--#define EXT2_FEATURE_COMPAT_SUPP 0
--#define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE)
--#define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-- EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
-- EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
--
--/*
-- * Default values for user and/or group using reserved blocks
-- */
--#define EXT2_DEF_RESUID 0
--#define EXT2_DEF_RESGID 0
--
--/*
-- * Default mount options
-- */
--#define EXT2_DEFM_DEBUG 0x0001
--#define EXT2_DEFM_BSDGROUPS 0x0002
--#define EXT2_DEFM_XATTR_USER 0x0004
--#define EXT2_DEFM_ACL 0x0008
--#define EXT2_DEFM_UID16 0x0010
--#define EXT3_DEFM_JMODE 0x0060
--#define EXT3_DEFM_JMODE_DATA 0x0020
--#define EXT3_DEFM_JMODE_ORDERED 0x0040
--#define EXT3_DEFM_JMODE_WBACK 0x0060
--
--/*
-- * Structure of a directory entry
-- */
--#define EXT2_NAME_LEN 255
--
--struct ext2_dir_entry {
-- uint32_t inode; /* Inode number */
-- uint16_t rec_len; /* Directory entry length */
-- uint16_t name_len; /* Name length */
-- char name[EXT2_NAME_LEN]; /* File name */
--};
--
--/*
-- * The new version of the directory entry. Since EXT2 structures are
-- * stored in intel byte order, and the name_len field could never be
-- * bigger than 255 chars, it's safe to reclaim the extra byte for the
-- * file_type field.
-- */
--struct ext2_dir_entry_2 {
-- uint32_t inode; /* Inode number */
-- uint16_t rec_len; /* Directory entry length */
-- uint8_t name_len; /* Name length */
-- uint8_t file_type;
-- char name[EXT2_NAME_LEN]; /* File name */
--};
--
--/*
-- * Ext2 directory file types. Only the low 3 bits are used. The
-- * other bits are reserved for now.
-- */
--#define EXT2_FT_UNKNOWN 0
--#define EXT2_FT_REG_FILE 1
--#define EXT2_FT_DIR 2
--#define EXT2_FT_CHRDEV 3
--#define EXT2_FT_BLKDEV 4
--#define EXT2_FT_FIFO 5
--#define EXT2_FT_SOCK 6
--#define EXT2_FT_SYMLINK 7
--
--#define EXT2_FT_MAX 8
--
--/*
-- * EXT2_DIR_PAD defines the directory entries boundaries
-- *
-- * NOTE: It must be a multiple of 4
-- */
--#define EXT2_DIR_PAD 4
--#define EXT2_DIR_ROUND (EXT2_DIR_PAD - 1)
--#define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \
-- ~EXT2_DIR_ROUND)
--
--#endif
-diff --git a/e2fsprogs/e2fs_lib.h b/e2fsprogs/e2fs_lib.h
-index 3905ee7..f2ae56f 100644
---- a/e2fsprogs/e2fs_lib.h
-+++ b/e2fsprogs/e2fs_lib.h
-@@ -7,7 +7,7 @@
- */
-
- /* Constants and structures */
--#include "e2fs_defs.h"
-+#include "bb_e2fs_defs.h"
-
- PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
-
-diff --git a/e2fsprogs/old_e2fsprogs/e2fsck.c b/e2fsprogs/old_e2fsprogs/e2fsck.c
-index 8fffa7f..373e8ce 100644
---- a/e2fsprogs/old_e2fsprogs/e2fsck.c
-+++ b/e2fsprogs/old_e2fsprogs/e2fsck.c
-@@ -11577,7 +11577,7 @@ static void check_resize_inode(e2fsck_t ctx)
- * s_reserved_gdt_blocks must be zero.
- */
- if (!(fs->super->s_feature_compat &
-- EXT2_FEATURE_COMPAT_RESIZE_INODE)) {
-+ EXT2_FEATURE_COMPAT_RESIZE_INO)) {
- if (fs->super->s_reserved_gdt_blocks) {
- pctx.num = fs->super->s_reserved_gdt_blocks;
- if (fix_problem(ctx, PR_0_NONZERO_RESERVED_GDT_BLOCKS,
-@@ -11593,7 +11593,7 @@ static void check_resize_inode(e2fsck_t ctx)
- retval = ext2fs_read_inode(fs, EXT2_RESIZE_INO, &inode);
- if (retval) {
- if (fs->super->s_feature_compat &
-- EXT2_FEATURE_COMPAT_RESIZE_INODE)
-+ EXT2_FEATURE_COMPAT_RESIZE_INO)
- ctx->flags |= E2F_FLAG_RESIZE_INODE;
- return;
- }
-@@ -11603,7 +11603,7 @@ static void check_resize_inode(e2fsck_t ctx)
- * the resize inode is cleared; then we're done.
- */
- if (!(fs->super->s_feature_compat &
-- EXT2_FEATURE_COMPAT_RESIZE_INODE)) {
-+ EXT2_FEATURE_COMPAT_RESIZE_INO)) {
- for (i=0; i < EXT2_N_BLOCKS; i++) {
- if (inode.i_block[i])
- break;
-diff --git a/e2fsprogs/old_e2fsprogs/e2p/feature.c b/e2fsprogs/old_e2fsprogs/e2p/feature.c
-index b45754f..2102ed8 100644
---- a/e2fsprogs/old_e2fsprogs/e2p/feature.c
-+++ b/e2fsprogs/old_e2fsprogs/e2p/feature.c
-@@ -34,7 +34,7 @@ static const struct feature feature_list[] = {
- "ext_attr" },
- { E2P_FEATURE_COMPAT, EXT2_FEATURE_COMPAT_DIR_INDEX,
- "dir_index" },
-- { E2P_FEATURE_COMPAT, EXT2_FEATURE_COMPAT_RESIZE_INODE,
-+ { E2P_FEATURE_COMPAT, EXT2_FEATURE_COMPAT_RESIZE_INO,
- "resize_inode" },
- { E2P_FEATURE_RO_INCOMPAT, EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER,
- "sparse_super" },
-diff --git a/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h b/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h
-index 6f4f708..80ea2cb 100644
---- a/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h
-+++ b/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h
-@@ -475,7 +475,7 @@ struct ext2_super_block {
- #define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002
- #define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
- #define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008
--#define EXT2_FEATURE_COMPAT_RESIZE_INODE 0x0010
-+#define EXT2_FEATURE_COMPAT_RESIZE_INO 0x0010
- #define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020
-
- #define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
-diff --git a/e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h b/e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h
-index 9f77201..39fb116 100644
---- a/e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h
-+++ b/e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h
-@@ -383,7 +383,7 @@ typedef struct ext2_icount *ext2_icount_t;
- #define EXT2_LIB_FEATURE_COMPAT_SUPP (EXT2_FEATURE_COMPAT_DIR_PREALLOC|\
- EXT2_FEATURE_COMPAT_IMAGIC_INODES|\
- EXT3_FEATURE_COMPAT_HAS_JOURNAL|\
-- EXT2_FEATURE_COMPAT_RESIZE_INODE|\
-+ EXT2_FEATURE_COMPAT_RESIZE_INO|\
- EXT2_FEATURE_COMPAT_DIR_INDEX|\
- EXT2_FEATURE_COMPAT_EXT_ATTR)
-
-diff --git a/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c b/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c
-index ef1d343..da2d151 100644
---- a/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c
-+++ b/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c
-@@ -284,7 +284,7 @@ retry:
- /*
- * check the number of reserved group descriptor table blocks
- */
-- if (super->s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INODE)
-+ if (super->s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INO)
- rsv_gdt = calc_reserved_gdt_blocks(fs);
- else
- rsv_gdt = 0;
-diff --git a/e2fsprogs/old_e2fsprogs/mke2fs.c b/e2fsprogs/old_e2fsprogs/mke2fs.c
-index 7555650..35d717a 100644
---- a/e2fsprogs/old_e2fsprogs/mke2fs.c
-+++ b/e2fsprogs/old_e2fsprogs/mke2fs.c
-@@ -757,7 +757,7 @@ static void parse_extended_opts(struct ext2_super_block *sb_param,
-
- if (rsv_gdb > 0) {
- sb_param->s_feature_compat |=
-- EXT2_FEATURE_COMPAT_RESIZE_INODE;
-+ EXT2_FEATURE_COMPAT_RESIZE_INO;
-
- sb_param->s_reserved_gdt_blocks = rsv_gdb;
- }
-@@ -778,7 +778,7 @@ static void parse_extended_opts(struct ext2_super_block *sb_param,
-
- static __u32 ok_features[3] = {
- EXT3_FEATURE_COMPAT_HAS_JOURNAL |
-- EXT2_FEATURE_COMPAT_RESIZE_INODE |
-+ EXT2_FEATURE_COMPAT_RESIZE_INO |
- EXT2_FEATURE_COMPAT_DIR_INDEX, /* Compat */
- EXT2_FEATURE_INCOMPAT_FILETYPE| /* Incompat */
- EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|
-@@ -1123,7 +1123,7 @@ static int PRS(int argc, char **argv)
- /* Since sparse_super is the default, we would only have a problem
- * here if it was explicitly disabled.
- */
-- if ((param.s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INODE) &&
-+ if ((param.s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INO) &&
- !(param.s_feature_ro_compat&EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER)) {
- bb_error_msg_and_die("reserved online resize blocks not supported "
- "on non-sparse filesystem");
-@@ -1312,7 +1312,7 @@ int mke2fs_main (int argc, char **argv)
- reserve_inodes(fs);
- create_bad_block_inode(fs, bb_list);
- if (fs->super->s_feature_compat &
-- EXT2_FEATURE_COMPAT_RESIZE_INODE) {
-+ EXT2_FEATURE_COMPAT_RESIZE_INO) {
- retval = ext2fs_create_resize_inode(fs);
- mke2fs_error_msg_and_die(retval, "reserve blocks for online resize");
- }
-diff --git a/e2fsprogs/tune2fs.c b/e2fsprogs/tune2fs.c
-index 841d58a..46a745e 100644
---- a/e2fsprogs/tune2fs.c
-+++ b/e2fsprogs/tune2fs.c
-@@ -8,7 +8,7 @@
- */
- #include "libbb.h"
- #include <linux/fs.h>
--#include "bb_linux_ext2_fs.h"
-+#include "bb_e2fs_defs.h"
-
- // storage helpers
- char BUG_wrong_field_size(void);
-diff --git a/include/bb_e2fs_defs.h b/include/bb_e2fs_defs.h
-new file mode 100644
-index 0000000..7974497
---- /dev/null
-+++ b/include/bb_e2fs_defs.h
-@@ -0,0 +1,561 @@
-+/* vi: set sw=4 ts=4: */
-+/*
-+ * linux/include/linux/ext2_fs.h
-+ *
-+ * Copyright (C) 1992, 1993, 1994, 1995
-+ * Remy Card (card@masi.ibp.fr)
-+ * Laboratoire MASI - Institut Blaise Pascal
-+ * Universite Pierre et Marie Curie (Paris VI)
-+ *
-+ * Copyright (C) 1991, 1992 Linus Torvalds
-+ */
-+
-+#ifndef LINUX_EXT2_FS_H
-+#define LINUX_EXT2_FS_H 1
-+
-+/*
-+ * Special inode numbers
-+ */
-+#define EXT2_BAD_INO 1 /* Bad blocks inode */
-+#define EXT2_ROOT_INO 2 /* Root inode */
-+#define EXT2_ACL_IDX_INO 3 /* ACL inode */
-+#define EXT2_ACL_DATA_INO 4 /* ACL inode */
-+#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */
-+#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */
-+#define EXT2_RESIZE_INO 7 /* Reserved group descriptors inode */
-+#define EXT2_JOURNAL_INO 8 /* Journal inode */
-+
-+/* First non-reserved inode for old ext2 filesystems */
-+#define EXT2_GOOD_OLD_FIRST_INO 11
-+
-+/*
-+ * The second extended file system magic number
-+ */
-+#define EXT2_SUPER_MAGIC 0xEF53
-+
-+/* Assume that user mode programs are passing in an ext2fs superblock, not
-+ * a kernel struct super_block. This will allow us to call the feature-test
-+ * macros from user land. */
-+#define EXT2_SB(sb) (sb)
-+
-+/*
-+ * Maximal count of links to a file
-+ */
-+#define EXT2_LINK_MAX 32000
-+
-+/*
-+ * Macro-instructions used to manage several block sizes
-+ */
-+#define EXT2_MIN_BLOCK_LOG_SIZE 10 /* 1024 */
-+#define EXT2_MAX_BLOCK_LOG_SIZE 16 /* 65536 */
-+#define EXT2_MIN_BLOCK_SIZE (1 << EXT2_MIN_BLOCK_LOG_SIZE)
-+#define EXT2_MAX_BLOCK_SIZE (1 << EXT2_MAX_BLOCK_LOG_SIZE)
-+#define EXT2_BLOCK_SIZE(s) (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
-+#define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
-+#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
-+ EXT2_GOOD_OLD_INODE_SIZE : (s)->s_inode_size)
-+#define EXT2_FIRST_INO(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
-+ EXT2_GOOD_OLD_FIRST_INO : (s)->s_first_ino)
-+#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof(uint32_t))
-+
-+/*
-+ * Macro-instructions used to manage fragments
-+ */
-+#define EXT2_MIN_FRAG_SIZE EXT2_MIN_BLOCK_SIZE
-+#define EXT2_MAX_FRAG_SIZE EXT2_MAX_BLOCK_SIZE
-+#define EXT2_MIN_FRAG_LOG_SIZE EXT2_MIN_BLOCK_LOG_SIZE
-+#define EXT2_FRAG_SIZE(s) (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size)
-+#define EXT2_FRAGS_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s))
-+
-+/*
-+ * ACL structures
-+ */
-+struct ext2_acl_header { /* Header of Access Control Lists */
-+ uint32_t aclh_size;
-+ uint32_t aclh_file_count;
-+ uint32_t aclh_acle_count;
-+ uint32_t aclh_first_acle;
-+};
-+
-+struct ext2_acl_entry { /* Access Control List Entry */
-+ uint32_t acle_size;
-+ uint16_t acle_perms; /* Access permissions */
-+ uint16_t acle_type; /* Type of entry */
-+ uint16_t acle_tag; /* User or group identity */
-+ uint16_t acle_pad1;
-+ uint32_t acle_next; /* Pointer on next entry for the */
-+ /* same inode or on next free entry */
-+};
-+
-+/*
-+ * Structure of a blocks group descriptor
-+ */
-+struct ext2_group_desc {
-+ uint32_t bg_block_bitmap; /* Blocks bitmap block */
-+ uint32_t bg_inode_bitmap; /* Inodes bitmap block */
-+ uint32_t bg_inode_table; /* Inodes table block */
-+ uint16_t bg_free_blocks_count; /* Free blocks count */
-+ uint16_t bg_free_inodes_count; /* Free inodes count */
-+ uint16_t bg_used_dirs_count; /* Directories count */
-+ uint16_t bg_pad;
-+ uint32_t bg_reserved[3];
-+};
-+
-+/*
-+ * Data structures used by the directory indexing feature
-+ *
-+ * Note: all of the multibyte integer fields are little endian.
-+ */
-+
-+/*
-+ * Note: dx_root_info is laid out so that if it should somehow get
-+ * overlaid by a dirent the two low bits of the hash version will be
-+ * zero. Therefore, the hash version mod 4 should never be 0.
-+ * Sincerely, the paranoia department.
-+ */
-+struct ext2_dx_root_info {
-+ uint32_t reserved_zero;
-+ uint8_t hash_version; /* 0 now, 1 at release */
-+ uint8_t info_length; /* 8 */
-+ uint8_t indirect_levels;
-+ uint8_t unused_flags;
-+};
-+
-+#define EXT2_HASH_LEGACY 0
-+#define EXT2_HASH_HALF_MD4 1
-+#define EXT2_HASH_TEA 2
-+
-+#define EXT2_HASH_FLAG_INCOMPAT 0x1
-+
-+struct ext2_dx_entry {
-+ uint32_t hash;
-+ uint32_t block;
-+};
-+
-+struct ext2_dx_countlimit {
-+ uint16_t limit;
-+ uint16_t count;
-+};
-+
-+
-+/*
-+ * Macro-instructions used to manage group descriptors
-+ */
-+#define EXT2_BLOCKS_PER_GROUP(s) (EXT2_SB(s)->s_blocks_per_group)
-+#define EXT2_INODES_PER_GROUP(s) (EXT2_SB(s)->s_inodes_per_group)
-+#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
-+/* limits imposed by 16-bit value gd_free_{blocks,inode}_count */
-+#define EXT2_MAX_BLOCKS_PER_GROUP(s) ((1 << 16) - 8)
-+#define EXT2_MAX_INODES_PER_GROUP(s) ((1 << 16) - EXT2_INODES_PER_BLOCK(s))
-+#define EXT2_DESC_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
-+
-+/*
-+ * Constants relative to the data blocks
-+ */
-+#define EXT2_NDIR_BLOCKS 12
-+#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
-+#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
-+#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
-+#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
-+
-+/*
-+ * Inode flags
-+ */
-+#define EXT2_SECRM_FL 0x00000001 /* Secure deletion */
-+#define EXT2_UNRM_FL 0x00000002 /* Undelete */
-+#define EXT2_COMPR_FL 0x00000004 /* Compress file */
-+#define EXT2_SYNC_FL 0x00000008 /* Synchronous updates */
-+#define EXT2_IMMUTABLE_FL 0x00000010 /* Immutable file */
-+#define EXT2_APPEND_FL 0x00000020 /* writes to file may only append */
-+#define EXT2_NODUMP_FL 0x00000040 /* do not dump file */
-+#define EXT2_NOATIME_FL 0x00000080 /* do not update atime */
-+/* Reserved for compression usage... */
-+#define EXT2_DIRTY_FL 0x00000100
-+#define EXT2_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */
-+#define EXT2_NOCOMPR_FL 0x00000400 /* Access raw compressed data */
-+#define EXT2_ECOMPR_FL 0x00000800 /* Compression error */
-+/* End compression flags --- maybe not all used */
-+#define EXT2_BTREE_FL 0x00001000 /* btree format dir */
-+#define EXT2_INDEX_FL 0x00001000 /* hash-indexed directory */
-+#define EXT2_IMAGIC_FL 0x00002000
-+#define EXT3_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */
-+#define EXT2_NOTAIL_FL 0x00008000 /* file tail should not be merged */
-+#define EXT2_DIRSYNC_FL 0x00010000 /* Synchronous directory modifications */
-+#define EXT2_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
-+#define EXT3_EXTENTS_FL 0x00080000 /* Inode uses extents */
-+#define EXT2_RESERVED_FL 0x80000000 /* reserved for ext2 lib */
-+
-+#define EXT2_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
-+#define EXT2_FL_USER_MODIFIABLE 0x000080FF /* User modifiable flags */
-+
-+/*
-+ * ioctl commands
-+ */
-+#define EXT2_IOC_GETFLAGS _IOR('f', 1, long)
-+#define EXT2_IOC_SETFLAGS _IOW('f', 2, long)
-+#define EXT2_IOC_GETVERSION _IOR('v', 1, long)
-+#define EXT2_IOC_SETVERSION _IOW('v', 2, long)
-+
-+/*
-+ * Structure of an inode on the disk
-+ */
-+struct ext2_inode {
-+ uint16_t i_mode; /* File mode */
-+ uint16_t i_uid; /* Low 16 bits of Owner Uid */
-+ uint32_t i_size; /* Size in bytes */
-+ uint32_t i_atime; /* Access time */
-+ uint32_t i_ctime; /* Creation time */
-+ uint32_t i_mtime; /* Modification time */
-+ uint32_t i_dtime; /* Deletion Time */
-+ uint16_t i_gid; /* Low 16 bits of Group Id */
-+ uint16_t i_links_count; /* Links count */
-+ uint32_t i_blocks; /* Blocks count */
-+ uint32_t i_flags; /* File flags */
-+ union {
-+ struct {
-+ uint32_t l_i_reserved1;
-+ } linux1;
-+ struct {
-+ uint32_t h_i_translator;
-+ } hurd1;
-+ struct {
-+ uint32_t m_i_reserved1;
-+ } masix1;
-+ } osd1; /* OS dependent 1 */
-+ uint32_t i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
-+ uint32_t i_generation; /* File version (for NFS) */
-+ uint32_t i_file_acl; /* File ACL */
-+ uint32_t i_dir_acl; /* Directory ACL */
-+ uint32_t i_faddr; /* Fragment address */
-+ union {
-+ struct {
-+ uint8_t l_i_frag; /* Fragment number */
-+ uint8_t l_i_fsize; /* Fragment size */
-+ uint16_t i_pad1;
-+ uint16_t l_i_uid_high; /* these 2 fields */
-+ uint16_t l_i_gid_high; /* were reserved2[0] */
-+ uint32_t l_i_reserved2;
-+ } linux2;
-+ struct {
-+ uint8_t h_i_frag; /* Fragment number */
-+ uint8_t h_i_fsize; /* Fragment size */
-+ uint16_t h_i_mode_high;
-+ uint16_t h_i_uid_high;
-+ uint16_t h_i_gid_high;
-+ uint32_t h_i_author;
-+ } hurd2;
-+ struct {
-+ uint8_t m_i_frag; /* Fragment number */
-+ uint8_t m_i_fsize; /* Fragment size */
-+ uint16_t m_pad1;
-+ uint32_t m_i_reserved2[2];
-+ } masix2;
-+ } osd2; /* OS dependent 2 */
-+};
-+
-+/*
-+ * Permanent part of an large inode on the disk
-+ */
-+struct ext2_inode_large {
-+ uint16_t i_mode; /* File mode */
-+ uint16_t i_uid; /* Low 16 bits of Owner Uid */
-+ uint32_t i_size; /* Size in bytes */
-+ uint32_t i_atime; /* Access time */
-+ uint32_t i_ctime; /* Creation time */
-+ uint32_t i_mtime; /* Modification time */
-+ uint32_t i_dtime; /* Deletion Time */
-+ uint16_t i_gid; /* Low 16 bits of Group Id */
-+ uint16_t i_links_count; /* Links count */
-+ uint32_t i_blocks; /* Blocks count */
-+ uint32_t i_flags; /* File flags */
-+ union {
-+ struct {
-+ uint32_t l_i_reserved1;
-+ } linux1;
-+ struct {
-+ uint32_t h_i_translator;
-+ } hurd1;
-+ struct {
-+ uint32_t m_i_reserved1;
-+ } masix1;
-+ } osd1; /* OS dependent 1 */
-+ uint32_t i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
-+ uint32_t i_generation; /* File version (for NFS) */
-+ uint32_t i_file_acl; /* File ACL */
-+ uint32_t i_dir_acl; /* Directory ACL */
-+ uint32_t i_faddr; /* Fragment address */
-+ union {
-+ struct {
-+ uint8_t l_i_frag; /* Fragment number */
-+ uint8_t l_i_fsize; /* Fragment size */
-+ uint16_t i_pad1;
-+ uint16_t l_i_uid_high; /* these 2 fields */
-+ uint16_t l_i_gid_high; /* were reserved2[0] */
-+ uint32_t l_i_reserved2;
-+ } linux2;
-+ struct {
-+ uint8_t h_i_frag; /* Fragment number */
-+ uint8_t h_i_fsize; /* Fragment size */
-+ uint16_t h_i_mode_high;
-+ uint16_t h_i_uid_high;
-+ uint16_t h_i_gid_high;
-+ uint32_t h_i_author;
-+ } hurd2;
-+ struct {
-+ uint8_t m_i_frag; /* Fragment number */
-+ uint8_t m_i_fsize; /* Fragment size */
-+ uint16_t m_pad1;
-+ uint32_t m_i_reserved2[2];
-+ } masix2;
-+ } osd2; /* OS dependent 2 */
-+ uint16_t i_extra_isize;
-+ uint16_t i_pad1;
-+};
-+
-+#define i_size_high i_dir_acl
-+
-+/*
-+ * File system states
-+ */
-+#define EXT2_VALID_FS 0x0001 /* Unmounted cleanly */
-+#define EXT2_ERROR_FS 0x0002 /* Errors detected */
-+
-+/*
-+ * Mount flags
-+ */
-+#define EXT2_MOUNT_CHECK 0x0001 /* Do mount-time checks */
-+#define EXT2_MOUNT_GRPID 0x0004 /* Create files with directory's group */
-+#define EXT2_MOUNT_DEBUG 0x0008 /* Some debugging messages */
-+#define EXT2_MOUNT_ERRORS_CONT 0x0010 /* Continue on errors */
-+#define EXT2_MOUNT_ERRORS_RO 0x0020 /* Remount fs ro on errors */
-+#define EXT2_MOUNT_ERRORS_PANIC 0x0040 /* Panic on errors */
-+#define EXT2_MOUNT_MINIX_DF 0x0080 /* Mimics the Minix statfs */
-+#define EXT2_MOUNT_NO_UID32 0x0200 /* Disable 32-bit UIDs */
-+
-+#define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt
-+#define set_opt(o, opt) o |= EXT2_MOUNT_##opt
-+#define test_opt(sb, opt) (EXT2_SB(sb)->s_mount_opt & \
-+ EXT2_MOUNT_##opt)
-+/*
-+ * Maximal mount counts between two filesystem checks
-+ */
-+#define EXT2_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */
-+#define EXT2_DFL_CHECKINTERVAL 0 /* Don't use interval check */
-+
-+/*
-+ * Behaviour when detecting errors
-+ */
-+#define EXT2_ERRORS_CONTINUE 1 /* Continue execution */
-+#define EXT2_ERRORS_RO 2 /* Remount fs read-only */
-+#define EXT2_ERRORS_PANIC 3 /* Panic */
-+#define EXT2_ERRORS_DEFAULT EXT2_ERRORS_CONTINUE
-+
-+/*
-+ * Structure of the super block
-+ */
-+struct ext2_super_block {
-+ uint32_t s_inodes_count; /* Inodes count */
-+ uint32_t s_blocks_count; /* Blocks count */
-+ uint32_t s_r_blocks_count; /* Reserved blocks count */
-+ uint32_t s_free_blocks_count; /* Free blocks count */
-+ uint32_t s_free_inodes_count; /* Free inodes count */
-+ uint32_t s_first_data_block; /* First Data Block */
-+ uint32_t s_log_block_size; /* Block size */
-+ int32_t s_log_frag_size; /* Fragment size */
-+ uint32_t s_blocks_per_group; /* # Blocks per group */
-+ uint32_t s_frags_per_group; /* # Fragments per group */
-+ uint32_t s_inodes_per_group; /* # Inodes per group */
-+ uint32_t s_mtime; /* Mount time */
-+ uint32_t s_wtime; /* Write time */
-+ uint16_t s_mnt_count; /* Mount count */
-+ int16_t s_max_mnt_count; /* Maximal mount count */
-+ uint16_t s_magic; /* Magic signature */
-+ uint16_t s_state; /* File system state */
-+ uint16_t s_errors; /* Behaviour when detecting errors */
-+ uint16_t s_minor_rev_level; /* minor revision level */
-+ uint32_t s_lastcheck; /* time of last check */
-+ uint32_t s_checkinterval; /* max. time between checks */
-+ uint32_t s_creator_os; /* OS */
-+ uint32_t s_rev_level; /* Revision level */
-+ uint16_t s_def_resuid; /* Default uid for reserved blocks */
-+ uint16_t s_def_resgid; /* Default gid for reserved blocks */
-+ /*
-+ * These fields are for EXT2_DYNAMIC_REV superblocks only.
-+ *
-+ * Note: the difference between the compatible feature set and
-+ * the incompatible feature set is that if there is a bit set
-+ * in the incompatible feature set that the kernel doesn't
-+ * know about, it should refuse to mount the filesystem.
-+ *
-+ * e2fsck's requirements are more strict; if it doesn't know
-+ * about a feature in either the compatible or incompatible
-+ * feature set, it must abort and not try to meddle with
-+ * things it doesn't understand...
-+ */
-+ uint32_t s_first_ino; /* First non-reserved inode */
-+ uint16_t s_inode_size; /* size of inode structure */
-+ uint16_t s_block_group_nr; /* block group # of this superblock */
-+ uint32_t s_feature_compat; /* compatible feature set */
-+ uint32_t s_feature_incompat; /* incompatible feature set */
-+ uint32_t s_feature_ro_compat; /* readonly-compatible feature set */
-+ uint8_t s_uuid[16]; /* 128-bit uuid for volume */
-+ char s_volume_name[16]; /* volume name */
-+ char s_last_mounted[64]; /* directory where last mounted */
-+ uint32_t s_algorithm_usage_bitmap; /* For compression */
-+ /*
-+ * Performance hints. Directory preallocation should only
-+ * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
-+ */
-+ uint8_t s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
-+ uint8_t s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
-+ uint16_t s_reserved_gdt_blocks; /* Per group table for online growth */
-+ /*
-+ * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
-+ */
-+ uint8_t s_journal_uuid[16]; /* uuid of journal superblock */
-+ uint32_t s_journal_inum; /* inode number of journal file */
-+ uint32_t s_journal_dev; /* device number of journal file */
-+ uint32_t s_last_orphan; /* start of list of inodes to delete */
-+ uint32_t s_hash_seed[4]; /* HTREE hash seed */
-+ uint8_t s_def_hash_version; /* Default hash version to use */
-+ uint8_t s_jnl_backup_type; /* Default type of journal backup */
-+ uint16_t s_reserved_word_pad;
-+ uint32_t s_default_mount_opts;
-+ uint32_t s_first_meta_bg; /* First metablock group */
-+ uint32_t s_mkfs_time; /* When the filesystem was created */
-+ uint32_t s_jnl_blocks[17]; /* Backup of the journal inode */
-+ uint32_t s_reserved[172]; /* Padding to the end of the block */
-+};
-+
-+/*
-+ * Codes for operating systems
-+ */
-+#define EXT2_OS_LINUX 0
-+#define EXT2_OS_HURD 1
-+#define EXT2_OS_MASIX 2
-+#define EXT2_OS_FREEBSD 3
-+#define EXT2_OS_LITES 4
-+
-+/*
-+ * Revision levels
-+ */
-+#define EXT2_GOOD_OLD_REV 0 /* The good old (original) format */
-+#define EXT2_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */
-+
-+#define EXT2_CURRENT_REV EXT2_GOOD_OLD_REV
-+#define EXT2_MAX_SUPP_REV EXT2_DYNAMIC_REV
-+
-+#define EXT2_GOOD_OLD_INODE_SIZE 128
-+
-+/*
-+ * Journal inode backup types
-+ */
-+#define EXT3_JNL_BACKUP_BLOCKS 1
-+
-+/*
-+ * Feature set definitions
-+ */
-+
-+#define EXT2_HAS_COMPAT_FEATURE(sb,mask) \
-+ ( EXT2_SB(sb)->s_feature_compat & (mask) )
-+#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask) \
-+ ( EXT2_SB(sb)->s_feature_ro_compat & (mask) )
-+#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \
-+ ( EXT2_SB(sb)->s_feature_incompat & (mask) )
-+
-+#define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001
-+#define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002
-+#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
-+#define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008
-+#define EXT2_FEATURE_COMPAT_RESIZE_INO 0x0010
-+#define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020
-+
-+#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
-+#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
-+/* #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 not used */
-+
-+#define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001
-+#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
-+#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */
-+#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */
-+#define EXT2_FEATURE_INCOMPAT_META_BG 0x0010
-+#define EXT3_FEATURE_INCOMPAT_EXTENTS 0x0040
-+
-+
-+#define EXT2_FEATURE_COMPAT_SUPP 0
-+#define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE)
-+#define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-+ EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
-+ EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
-+
-+/*
-+ * Default values for user and/or group using reserved blocks
-+ */
-+#define EXT2_DEF_RESUID 0
-+#define EXT2_DEF_RESGID 0
-+
-+/*
-+ * Default mount options
-+ */
-+#define EXT2_DEFM_DEBUG 0x0001
-+#define EXT2_DEFM_BSDGROUPS 0x0002
-+#define EXT2_DEFM_XATTR_USER 0x0004
-+#define EXT2_DEFM_ACL 0x0008
-+#define EXT2_DEFM_UID16 0x0010
-+#define EXT3_DEFM_JMODE 0x0060
-+#define EXT3_DEFM_JMODE_DATA 0x0020
-+#define EXT3_DEFM_JMODE_ORDERED 0x0040
-+#define EXT3_DEFM_JMODE_WBACK 0x0060
-+
-+/*
-+ * Structure of a directory entry
-+ */
-+#define EXT2_NAME_LEN 255
-+
-+struct ext2_dir_entry {
-+ uint32_t inode; /* Inode number */
-+ uint16_t rec_len; /* Directory entry length */
-+ uint16_t name_len; /* Name length */
-+ char name[EXT2_NAME_LEN]; /* File name */
-+};
-+
-+/*
-+ * The new version of the directory entry. Since EXT2 structures are
-+ * stored in intel byte order, and the name_len field could never be
-+ * bigger than 255 chars, it's safe to reclaim the extra byte for the
-+ * file_type field.
-+ */
-+struct ext2_dir_entry_2 {
-+ uint32_t inode; /* Inode number */
-+ uint16_t rec_len; /* Directory entry length */
-+ uint8_t name_len; /* Name length */
-+ uint8_t file_type;
-+ char name[EXT2_NAME_LEN]; /* File name */
-+};
-+
-+/*
-+ * Ext2 directory file types. Only the low 3 bits are used. The
-+ * other bits are reserved for now.
-+ */
-+#define EXT2_FT_UNKNOWN 0
-+#define EXT2_FT_REG_FILE 1
-+#define EXT2_FT_DIR 2
-+#define EXT2_FT_CHRDEV 3
-+#define EXT2_FT_BLKDEV 4
-+#define EXT2_FT_FIFO 5
-+#define EXT2_FT_SOCK 6
-+#define EXT2_FT_SYMLINK 7
-+
-+#define EXT2_FT_MAX 8
-+
-+/*
-+ * EXT2_DIR_PAD defines the directory entries boundaries
-+ *
-+ * NOTE: It must be a multiple of 4
-+ */
-+#define EXT2_DIR_PAD 4
-+#define EXT2_DIR_ROUND (EXT2_DIR_PAD - 1)
-+#define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \
-+ ~EXT2_DIR_ROUND)
-+
-+#endif
-diff --git a/include/bb_linux_ext2_fs.h b/include/bb_linux_ext2_fs.h
-deleted file mode 100644
-index fdc470b..0000000
---- a/include/bb_linux_ext2_fs.h
-+++ /dev/null
-@@ -1,547 +0,0 @@
--/*
-- * Work around linux/ext2_fs.h breakage.
-- * linux/ext2_fs.h might be removed from future kernel header distribution.
-- * See https://bugzilla.kernel.org/show_bug.cgi?id=42986
-- *
-- * Licensed under GPLv2, see file LICENSE in this source tree.
-- */
--#ifndef BB_LINUX_EXT2_FS_H
--#define BB_LINUX_EXT2_FS_H
--
--/*
-- * From linux/magic.h
-- */
--
--#define EXT2_SUPER_MAGIC 0xEF53
--#define EXT3_SUPER_MAGIC 0xEF53
--#define EXT4_SUPER_MAGIC 0xEF53
--
--/*
-- * From linux/ext2_fs.h, with minor changes.
-- */
--
--/*
-- * Copyright (C) 1992, 1993, 1994, 1995
-- * Remy Card (card@masi.ibp.fr)
-- * Laboratoire MASI - Institut Blaise Pascal
-- * Universite Pierre et Marie Curie (Paris VI)
-- *
-- * from
-- *
-- * linux/include/linux/minix_fs.h
-- *
-- * Copyright (C) 1991, 1992 Linus Torvalds
-- */
--
--/*
-- * The second extended filesystem constants/structures
-- */
--
--/*
-- * Define EXT2_RESERVATION to reserve data blocks for expanding files
-- */
--#define EXT2_DEFAULT_RESERVE_BLOCKS 8
--/*max window size: 1024(direct blocks) + 3([t,d]indirect blocks) */
--#define EXT2_MAX_RESERVE_BLOCKS 1027
--#define EXT2_RESERVE_WINDOW_NOT_ALLOCATED 0
--
--/*
-- * Special inode numbers
-- */
--#define EXT2_BAD_INO 1 /* Bad blocks inode */
--#define EXT2_ROOT_INO 2 /* Root inode */
--#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */
--#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */
--
--/* First non-reserved inode for old ext2 filesystems */
--#define EXT2_GOOD_OLD_FIRST_INO 11
--
--/* Assume that user mode programs are passing in an ext2fs superblock, not
-- * a kernel struct super_block. This will allow us to call the feature-test
-- * macros from user land. */
--#define EXT2_SB(sb) (sb)
--
--/*
-- * Maximal count of links to a file
-- */
--#define EXT2_LINK_MAX 32000
--
--/*
-- * Macro-instructions used to manage several block sizes
-- */
--#define EXT2_MIN_BLOCK_SIZE 1024
--#define EXT2_MAX_BLOCK_SIZE 4096
--#define EXT2_MIN_BLOCK_LOG_SIZE 10
--# define EXT2_BLOCK_SIZE(s) (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
--#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (uint32_t))
--# define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
--#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
-- EXT2_GOOD_OLD_INODE_SIZE : \
-- (s)->s_inode_size)
--#define EXT2_FIRST_INO(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
-- EXT2_GOOD_OLD_FIRST_INO : \
-- (s)->s_first_ino)
--
--/*
-- * Macro-instructions used to manage fragments
-- */
--#define EXT2_MIN_FRAG_SIZE 1024
--#define EXT2_MAX_FRAG_SIZE 4096
--#define EXT2_MIN_FRAG_LOG_SIZE 10
--# define EXT2_FRAG_SIZE(s) (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size)
--# define EXT2_FRAGS_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s))
--
--/*
-- * Structure of a blocks group descriptor
-- */
--struct ext2_group_desc
--{
-- uint32_t bg_block_bitmap; /* Blocks bitmap block */
-- uint32_t bg_inode_bitmap; /* Inodes bitmap block */
-- uint32_t bg_inode_table; /* Inodes table block */
-- uint16_t bg_free_blocks_count; /* Free blocks count */
-- uint16_t bg_free_inodes_count; /* Free inodes count */
-- uint16_t bg_used_dirs_count; /* Directories count */
-- uint16_t bg_pad;
-- uint32_t bg_reserved[3];
--};
--
--/*
-- * Macro-instructions used to manage group descriptors
-- */
--# define EXT2_BLOCKS_PER_GROUP(s) ((s)->s_blocks_per_group)
--# define EXT2_DESC_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
--# define EXT2_INODES_PER_GROUP(s) ((s)->s_inodes_per_group)
--
--/*
-- * Constants relative to the data blocks
-- */
--#define EXT2_NDIR_BLOCKS 12
--#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
--#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
--#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
--#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
--
--/*
-- * Inode flags (GETFLAGS/SETFLAGS)
-- */
--#define EXT2_SECRM_FL FS_SECRM_FL /* Secure deletion */
--#define EXT2_UNRM_FL FS_UNRM_FL /* Undelete */
--#define EXT2_COMPR_FL FS_COMPR_FL /* Compress file */
--#define EXT2_SYNC_FL FS_SYNC_FL /* Synchronous updates */
--#define EXT2_IMMUTABLE_FL FS_IMMUTABLE_FL /* Immutable file */
--#define EXT2_APPEND_FL FS_APPEND_FL /* writes to file may only append */
--#define EXT2_NODUMP_FL FS_NODUMP_FL /* do not dump file */
--#define EXT2_NOATIME_FL FS_NOATIME_FL /* do not update atime */
--/* Reserved for compression usage... */
--#define EXT2_DIRTY_FL FS_DIRTY_FL
--#define EXT2_COMPRBLK_FL FS_COMPRBLK_FL /* One or more compressed clusters */
--#define EXT2_NOCOMP_FL FS_NOCOMP_FL /* Don't compress */
--#define EXT2_ECOMPR_FL FS_ECOMPR_FL /* Compression error */
--/* End compression flags --- maybe not all used */
--#define EXT2_BTREE_FL FS_BTREE_FL /* btree format dir */
--#define EXT2_INDEX_FL FS_INDEX_FL /* hash-indexed directory */
--#define EXT2_IMAGIC_FL FS_IMAGIC_FL /* AFS directory */
--#define EXT2_JOURNAL_DATA_FL FS_JOURNAL_DATA_FL /* Reserved for ext3 */
--#define EXT2_NOTAIL_FL FS_NOTAIL_FL /* file tail should not be merged */
--#define EXT2_DIRSYNC_FL FS_DIRSYNC_FL /* dirsync behaviour (directories only) */
--#define EXT2_TOPDIR_FL FS_TOPDIR_FL /* Top of directory hierarchies*/
--#define EXT2_RESERVED_FL FS_RESERVED_FL /* reserved for ext2 lib */
--
--#define EXT2_FL_USER_VISIBLE FS_FL_USER_VISIBLE /* User visible flags */
--#define EXT2_FL_USER_MODIFIABLE FS_FL_USER_MODIFIABLE /* User modifiable flags */
--
--/* Flags that should be inherited by new inodes from their parent. */
--#define EXT2_FL_INHERITED (EXT2_SECRM_FL | EXT2_UNRM_FL | EXT2_COMPR_FL |\
-- EXT2_SYNC_FL | EXT2_IMMUTABLE_FL | EXT2_APPEND_FL |\
-- EXT2_NODUMP_FL | EXT2_NOATIME_FL | EXT2_COMPRBLK_FL|\
-- EXT2_NOCOMP_FL | EXT2_JOURNAL_DATA_FL |\
-- EXT2_NOTAIL_FL | EXT2_DIRSYNC_FL)
--
--/* Flags that are appropriate for regular files (all but dir-specific ones). */
--#define EXT2_REG_FLMASK (~(EXT2_DIRSYNC_FL | EXT2_TOPDIR_FL))
--
--/* Flags that are appropriate for non-directories/regular files. */
--#define EXT2_OTHER_FLMASK (EXT2_NODUMP_FL | EXT2_NOATIME_FL)
--
--/* Mask out flags that are inappropriate for the given type of inode. */
--static inline uint32_t ext2_mask_flags(mode_t mode, uint32_t flags)
--{
-- if (S_ISDIR(mode))
-- return flags;
-- else if (S_ISREG(mode))
-- return flags & EXT2_REG_FLMASK;
-- else
-- return flags & EXT2_OTHER_FLMASK;
--}
--
--/*
-- * ioctl commands
-- */
--#define EXT2_IOC_GETFLAGS FS_IOC_GETFLAGS
--#define EXT2_IOC_SETFLAGS FS_IOC_SETFLAGS
--#define EXT2_IOC_GETVERSION FS_IOC_GETVERSION
--#define EXT2_IOC_SETVERSION FS_IOC_SETVERSION
--#define EXT2_IOC_GETRSVSZ _IOR('f', 5, long)
--#define EXT2_IOC_SETRSVSZ _IOW('f', 6, long)
--
--/*
-- * ioctl commands in 32 bit emulation
-- */
--#define EXT2_IOC32_GETFLAGS FS_IOC32_GETFLAGS
--#define EXT2_IOC32_SETFLAGS FS_IOC32_SETFLAGS
--#define EXT2_IOC32_GETVERSION FS_IOC32_GETVERSION
--#define EXT2_IOC32_SETVERSION FS_IOC32_SETVERSION
--
--/*
-- * Structure of an inode on the disk
-- */
--struct ext2_inode {
-- uint16_t i_mode; /* File mode */
-- uint16_t i_uid; /* Low 16 bits of Owner Uid */
-- uint32_t i_size; /* Size in bytes */
-- uint32_t i_atime; /* Access time */
-- uint32_t i_ctime; /* Creation time */
-- uint32_t i_mtime; /* Modification time */
-- uint32_t i_dtime; /* Deletion Time */
-- uint16_t i_gid; /* Low 16 bits of Group Id */
-- uint16_t i_links_count; /* Links count */
-- uint32_t i_blocks; /* Blocks count */
-- uint32_t i_flags; /* File flags */
-- union {
-- struct {
-- uint32_t l_i_reserved1;
-- } linux1;
-- struct {
-- uint32_t h_i_translator;
-- } hurd1;
-- struct {
-- uint32_t m_i_reserved1;
-- } masix1;
-- } osd1; /* OS dependent 1 */
-- uint32_t i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
-- uint32_t i_generation; /* File version (for NFS) */
-- uint32_t i_file_acl; /* File ACL */
-- uint32_t i_dir_acl; /* Directory ACL */
-- uint32_t i_faddr; /* Fragment address */
-- union {
-- struct {
-- uint8_t l_i_frag; /* Fragment number */
-- uint8_t l_i_fsize; /* Fragment size */
-- uint16_t i_pad1;
-- uint16_t l_i_uid_high; /* these 2 fields */
-- uint16_t l_i_gid_high; /* were reserved2[0] */
-- uint32_t l_i_reserved2;
-- } linux2;
-- struct {
-- uint8_t h_i_frag; /* Fragment number */
-- uint8_t h_i_fsize; /* Fragment size */
-- uint16_t h_i_mode_high;
-- uint16_t h_i_uid_high;
-- uint16_t h_i_gid_high;
-- uint32_t h_i_author;
-- } hurd2;
-- struct {
-- uint8_t m_i_frag; /* Fragment number */
-- uint8_t m_i_fsize; /* Fragment size */
-- uint16_t m_pad1;
-- uint32_t m_i_reserved2[2];
-- } masix2;
-- } osd2; /* OS dependent 2 */
--};
--
--#define i_size_high i_dir_acl
--
--#if defined(__KERNEL__) || defined(__linux__)
--#define i_reserved1 osd1.linux1.l_i_reserved1
--#define i_frag osd2.linux2.l_i_frag
--#define i_fsize osd2.linux2.l_i_fsize
--#define i_uid_low i_uid
--#define i_gid_low i_gid
--#define i_uid_high osd2.linux2.l_i_uid_high
--#define i_gid_high osd2.linux2.l_i_gid_high
--#define i_reserved2 osd2.linux2.l_i_reserved2
--#endif
--
--#ifdef __hurd__
--#define i_translator osd1.hurd1.h_i_translator
--#define i_frag osd2.hurd2.h_i_frag
--#define i_fsize osd2.hurd2.h_i_fsize
--#define i_uid_high osd2.hurd2.h_i_uid_high
--#define i_gid_high osd2.hurd2.h_i_gid_high
--#define i_author osd2.hurd2.h_i_author
--#endif
--
--#ifdef __masix__
--#define i_reserved1 osd1.masix1.m_i_reserved1
--#define i_frag osd2.masix2.m_i_frag
--#define i_fsize osd2.masix2.m_i_fsize
--#define i_reserved2 osd2.masix2.m_i_reserved2
--#endif
--
--/*
-- * File system states
-- */
--#define EXT2_VALID_FS 0x0001 /* Unmounted cleanly */
--#define EXT2_ERROR_FS 0x0002 /* Errors detected */
--
--/*
-- * Mount flags
-- */
--#define EXT2_MOUNT_CHECK 0x000001 /* Do mount-time checks */
--#define EXT2_MOUNT_OLDALLOC 0x000002 /* Don't use the new Orlov allocator */
--#define EXT2_MOUNT_GRPID 0x000004 /* Create files with directory's group */
--#define EXT2_MOUNT_DEBUG 0x000008 /* Some debugging messages */
--#define EXT2_MOUNT_ERRORS_CONT 0x000010 /* Continue on errors */
--#define EXT2_MOUNT_ERRORS_RO 0x000020 /* Remount fs ro on errors */
--#define EXT2_MOUNT_ERRORS_PANIC 0x000040 /* Panic on errors */
--#define EXT2_MOUNT_MINIX_DF 0x000080 /* Mimics the Minix statfs */
--#define EXT2_MOUNT_NOBH 0x000100 /* No buffer_heads */
--#define EXT2_MOUNT_NO_UID32 0x000200 /* Disable 32-bit UIDs */
--#define EXT2_MOUNT_XATTR_USER 0x004000 /* Extended user attributes */
--#define EXT2_MOUNT_POSIX_ACL 0x008000 /* POSIX Access Control Lists */
--#define EXT2_MOUNT_XIP 0x010000 /* Execute in place */
--#define EXT2_MOUNT_USRQUOTA 0x020000 /* user quota */
--#define EXT2_MOUNT_GRPQUOTA 0x040000 /* group quota */
--#define EXT2_MOUNT_RESERVATION 0x080000 /* Preallocation */
--
--
--#define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt
--#define set_opt(o, opt) o |= EXT2_MOUNT_##opt
--#define test_opt(sb, opt) (EXT2_SB(sb)->s_mount_opt & \
-- EXT2_MOUNT_##opt)
--/*
-- * Maximal mount counts between two filesystem checks
-- */
--#define EXT2_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */
--#define EXT2_DFL_CHECKINTERVAL 0 /* Don't use interval check */
--
--/*
-- * Behaviour when detecting errors
-- */
--#define EXT2_ERRORS_CONTINUE 1 /* Continue execution */
--#define EXT2_ERRORS_RO 2 /* Remount fs read-only */
--#define EXT2_ERRORS_PANIC 3 /* Panic */
--#define EXT2_ERRORS_DEFAULT EXT2_ERRORS_CONTINUE
--
--/*
-- * Structure of the super block
-- */
--struct ext2_super_block {
-- uint32_t s_inodes_count; /* Inodes count */
-- uint32_t s_blocks_count; /* Blocks count */
-- uint32_t s_r_blocks_count; /* Reserved blocks count */
-- uint32_t s_free_blocks_count; /* Free blocks count */
-- uint32_t s_free_inodes_count; /* Free inodes count */
-- uint32_t s_first_data_block; /* First Data Block */
-- uint32_t s_log_block_size; /* Block size */
-- uint32_t s_log_frag_size; /* Fragment size */
-- uint32_t s_blocks_per_group; /* # Blocks per group */
-- uint32_t s_frags_per_group; /* # Fragments per group */
-- uint32_t s_inodes_per_group; /* # Inodes per group */
-- uint32_t s_mtime; /* Mount time */
-- uint32_t s_wtime; /* Write time */
-- uint16_t s_mnt_count; /* Mount count */
-- uint16_t s_max_mnt_count; /* Maximal mount count */
-- uint16_t s_magic; /* Magic signature */
-- uint16_t s_state; /* File system state */
-- uint16_t s_errors; /* Behaviour when detecting errors */
-- uint16_t s_minor_rev_level; /* minor revision level */
-- uint32_t s_lastcheck; /* time of last check */
-- uint32_t s_checkinterval; /* max. time between checks */
-- uint32_t s_creator_os; /* OS */
-- uint32_t s_rev_level; /* Revision level */
-- uint16_t s_def_resuid; /* Default uid for reserved blocks */
-- uint16_t s_def_resgid; /* Default gid for reserved blocks */
-- /*
-- * These fields are for EXT2_DYNAMIC_REV superblocks only.
-- *
-- * Note: the difference between the compatible feature set and
-- * the incompatible feature set is that if there is a bit set
-- * in the incompatible feature set that the kernel doesn't
-- * know about, it should refuse to mount the filesystem.
-- *
-- * e2fsck's requirements are more strict; if it doesn't know
-- * about a feature in either the compatible or incompatible
-- * feature set, it must abort and not try to meddle with
-- * things it doesn't understand...
-- */
-- uint32_t s_first_ino; /* First non-reserved inode */
-- uint16_t s_inode_size; /* size of inode structure */
-- uint16_t s_block_group_nr; /* block group # of this superblock */
-- uint32_t s_feature_compat; /* compatible feature set */
-- uint32_t s_feature_incompat; /* incompatible feature set */
-- uint32_t s_feature_ro_compat; /* readonly-compatible feature set */
-- uint8_t s_uuid[16]; /* 128-bit uuid for volume */
-- char s_volume_name[16]; /* volume name */
-- char s_last_mounted[64]; /* directory where last mounted */
-- uint32_t s_algorithm_usage_bitmap; /* For compression */
-- /*
-- * Performance hints. Directory preallocation should only
-- * happen if the EXT2_COMPAT_PREALLOC flag is on.
-- */
-- uint8_t s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
-- uint8_t s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
-- uint16_t s_padding1;
-- /*
-- * Journaling support valid if EXT3_FEATURE_COMPAT_HAS_JOURNAL set.
-- */
-- uint8_t s_journal_uuid[16]; /* uuid of journal superblock */
-- uint32_t s_journal_inum; /* inode number of journal file */
-- uint32_t s_journal_dev; /* device number of journal file */
-- uint32_t s_last_orphan; /* start of list of inodes to delete */
-- uint32_t s_hash_seed[4]; /* HTREE hash seed */
-- uint8_t s_def_hash_version; /* Default hash version to use */
-- uint8_t s_reserved_char_pad;
-- uint16_t s_reserved_word_pad;
-- uint32_t s_default_mount_opts;
-- uint32_t s_first_meta_bg; /* First metablock block group */
-- uint32_t s_reserved[190]; /* Padding to the end of the block */
--};
--
--/*
-- * Codes for operating systems
-- */
--#define EXT2_OS_LINUX 0
--#define EXT2_OS_HURD 1
--#define EXT2_OS_MASIX 2
--#define EXT2_OS_FREEBSD 3
--#define EXT2_OS_LITES 4
--
--/*
-- * Revision levels
-- */
--#define EXT2_GOOD_OLD_REV 0 /* The good old (original) format */
--#define EXT2_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */
--
--#define EXT2_CURRENT_REV EXT2_GOOD_OLD_REV
--#define EXT2_MAX_SUPP_REV EXT2_DYNAMIC_REV
--
--#define EXT2_GOOD_OLD_INODE_SIZE 128
--
--/*
-- * Feature set definitions
-- */
--
--#define EXT2_HAS_COMPAT_FEATURE(sb,mask) \
-- ( EXT2_SB(sb)->s_es->s_feature_compat & cpu_to_le32(mask) )
--#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask) \
-- ( EXT2_SB(sb)->s_es->s_feature_ro_compat & cpu_to_le32(mask) )
--#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \
-- ( EXT2_SB(sb)->s_es->s_feature_incompat & cpu_to_le32(mask) )
--#define EXT2_SET_COMPAT_FEATURE(sb,mask) \
-- EXT2_SB(sb)->s_es->s_feature_compat |= cpu_to_le32(mask)
--#define EXT2_SET_RO_COMPAT_FEATURE(sb,mask) \
-- EXT2_SB(sb)->s_es->s_feature_ro_compat |= cpu_to_le32(mask)
--#define EXT2_SET_INCOMPAT_FEATURE(sb,mask) \
-- EXT2_SB(sb)->s_es->s_feature_incompat |= cpu_to_le32(mask)
--#define EXT2_CLEAR_COMPAT_FEATURE(sb,mask) \
-- EXT2_SB(sb)->s_es->s_feature_compat &= ~cpu_to_le32(mask)
--#define EXT2_CLEAR_RO_COMPAT_FEATURE(sb,mask) \
-- EXT2_SB(sb)->s_es->s_feature_ro_compat &= ~cpu_to_le32(mask)
--#define EXT2_CLEAR_INCOMPAT_FEATURE(sb,mask) \
-- EXT2_SB(sb)->s_es->s_feature_incompat &= ~cpu_to_le32(mask)
--
--#define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001
--#define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002
--#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
--#define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008
--#define EXT2_FEATURE_COMPAT_RESIZE_INO 0x0010
--#define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020
--#define EXT2_FEATURE_COMPAT_ANY 0xffffffff
--
--#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
--#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
--#define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004
--#define EXT2_FEATURE_RO_COMPAT_ANY 0xffffffff
--
--#define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001
--#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
--#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004
--#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008
--#define EXT2_FEATURE_INCOMPAT_META_BG 0x0010
--#define EXT2_FEATURE_INCOMPAT_ANY 0xffffffff
--
--#define EXT2_FEATURE_COMPAT_SUPP EXT2_FEATURE_COMPAT_EXT_ATTR
--#define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \
-- EXT2_FEATURE_INCOMPAT_META_BG)
--#define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-- EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
-- EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
--#define EXT2_FEATURE_RO_COMPAT_UNSUPPORTED ~EXT2_FEATURE_RO_COMPAT_SUPP
--#define EXT2_FEATURE_INCOMPAT_UNSUPPORTED ~EXT2_FEATURE_INCOMPAT_SUPP
--
--/*
-- * Default values for user and/or group using reserved blocks
-- */
--#define EXT2_DEF_RESUID 0
--#define EXT2_DEF_RESGID 0
--
--/*
-- * Default mount options
-- */
--#define EXT2_DEFM_DEBUG 0x0001
--#define EXT2_DEFM_BSDGROUPS 0x0002
--#define EXT2_DEFM_XATTR_USER 0x0004
--#define EXT2_DEFM_ACL 0x0008
--#define EXT2_DEFM_UID16 0x0010
-- /* Not used by ext2, but reserved for use by ext3 */
--#define EXT3_DEFM_JMODE 0x0060
--#define EXT3_DEFM_JMODE_DATA 0x0020
--#define EXT3_DEFM_JMODE_ORDERED 0x0040
--#define EXT3_DEFM_JMODE_WBACK 0x0060
--
--/*
-- * Structure of a directory entry
-- */
--#define EXT2_NAME_LEN 255
--
--struct ext2_dir_entry {
-- uint32_t inode; /* Inode number */
-- uint16_t rec_len; /* Directory entry length */
-- uint16_t name_len; /* Name length */
-- char name[EXT2_NAME_LEN]; /* File name */
--};
--
--/*
-- * The new version of the directory entry. Since EXT2 structures are
-- * stored in intel byte order, and the name_len field could never be
-- * bigger than 255 chars, it's safe to reclaim the extra byte for the
-- * file_type field.
-- */
--struct ext2_dir_entry_2 {
-- uint32_t inode; /* Inode number */
-- uint16_t rec_len; /* Directory entry length */
-- uint8_t name_len; /* Name length */
-- uint8_t file_type;
-- char name[EXT2_NAME_LEN]; /* File name */
--};
--
--/*
-- * Ext2 directory file types. Only the low 3 bits are used. The
-- * other bits are reserved for now.
-- */
--enum {
-- EXT2_FT_UNKNOWN = 0,
-- EXT2_FT_REG_FILE = 1,
-- EXT2_FT_DIR = 2,
-- EXT2_FT_CHRDEV = 3,
-- EXT2_FT_BLKDEV = 4,
-- EXT2_FT_FIFO = 5,
-- EXT2_FT_SOCK = 6,
-- EXT2_FT_SYMLINK = 7,
-- EXT2_FT_MAX
--};
--
--/*
-- * EXT2_DIR_PAD defines the directory entries boundaries
-- *
-- * NOTE: It must be a multiple of 4
-- */
--#define EXT2_DIR_PAD 4
--#define EXT2_DIR_ROUND (EXT2_DIR_PAD - 1)
--#define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \
-- ~EXT2_DIR_ROUND)
--#define EXT2_MAX_REC_LEN ((1<<16)-1)
--
--#endif
-diff --git a/util-linux/mkfs_ext2.c b/util-linux/mkfs_ext2.c
-index 2d9d720..69b25c9 100644
---- a/util-linux/mkfs_ext2.c
-+++ b/util-linux/mkfs_ext2.c
-@@ -48,7 +48,7 @@
-
- #include "libbb.h"
- #include <linux/fs.h>
--#include "bb_linux_ext2_fs.h"
-+#include "bb_e2fs_defs.h"
-
- #define ENABLE_FEATURE_MKFS_EXT2_RESERVED_GDT 0
- #define ENABLE_FEATURE_MKFS_EXT2_DIR_INDEX 1
---
-1.7.9.5
-
+++ /dev/null
-From a7b406ba64b7a4d9c9610726cb72568fc9848f5d Mon Sep 17 00:00:00 2001
-From: Lauri Hintsala <lauri.hintsala@bluegiga.com>
-Date: Wed, 14 Dec 2011 16:49:58 +0200
-Subject: [PATCH 03/10] ifupdown: remove interface from state_list if iface_up
- fails
-
-Fix the issue where interface is set to the configured state even if
-configuration has failed. Add error check to state setting logic.
-
-Signed-off-by: Lauri Hintsala <lauri.hintsala@bluegiga.com>
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
----
- networking/ifupdown.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/networking/ifupdown.c b/networking/ifupdown.c
-index 5946323..9c2cad2 100644
---- a/networking/ifupdown.c
-+++ b/networking/ifupdown.c
-@@ -1311,7 +1311,7 @@ int ifupdown_main(int argc UNUSED_PARAM, char **argv)
- llist_t *state_list = read_iface_state();
- llist_t *iface_state = find_iface_state(state_list, iface);
-
-- if (cmds == iface_up) {
-+ if (cmds == iface_up && !any_failures) {
- char * const newiface = xasprintf("%s=%s", iface, liface);
- if (iface_state == NULL) {
- llist_add_to_end(&state_list, newiface);
---
-1.7.10.4
-
+++ /dev/null
-From fecb0cbff5ca703f8fc00a8e0e93f1f2e3ae942b Mon Sep 17 00:00:00 2001
-From: Natanael Copa <natanael.copa@gmail.com>
-Date: Fri, 17 Feb 2012 19:36:26 +0000
-Subject: [PATCH 04/10] ifupdown: support metric for static default gw
-
-This is useful when you have multiple ISPs with failover. It allows
-setting the priority of the static gateway and makes it possible
-to specify multiple static gateways.
-
-The ubuntu ifupdown supports it.
-
-function old new delta
-.rodata 116725 116797 +72
-------------------------------------------------------------------------------
-(add/remove: 0/0 grow/shrink: 1/0 up/down: 72/0) Total: 72 bytes
- text data bss dec hex filename
- 953343 7313 8984 969640 ecba8 busybox_old
- 953415 7313 8984 969712 ecbf0 busybox_unstripped
-
-Signed-off-by: Natanael Copa <natanael.copa@gmail.com>
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
----
- networking/ifupdown.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/networking/ifupdown.c b/networking/ifupdown.c
-index 9c2cad2..9f49619 100644
---- a/networking/ifupdown.c
-+++ b/networking/ifupdown.c
-@@ -403,11 +403,11 @@ static int FAST_FUNC static_up6(struct interface_defn_t *ifd, execfn *exec)
- result = execute("ip addr add %address%/%netmask% dev %iface%[[ label %label%]]", ifd, exec);
- result += execute("ip link set[[ mtu %mtu%]][[ addr %hwaddress%]] %iface% up", ifd, exec);
- /* Was: "[[ ip ....%gateway% ]]". Removed extra spaces w/o checking */
-- result += execute("[[ip route add ::/0 via %gateway%]]", ifd, exec);
-+ result += execute("[[ip route add ::/0 via %gateway%]][[ prio %metric%]]", ifd, exec);
- # else
- result = execute("ifconfig %iface%[[ media %media%]][[ hw %hwaddress%]][[ mtu %mtu%]] up", ifd, exec);
- result += execute("ifconfig %iface% add %address%/%netmask%", ifd, exec);
-- result += execute("[[route -A inet6 add ::/0 gw %gateway%]]", ifd, exec);
-+ result += execute("[[route -A inet6 add ::/0 gw %gateway%[[ metric %metric%]]]]", ifd, exec);
- # endif
- return ((result == 3) ? 3 : 0);
- }
-@@ -490,7 +490,7 @@ static int FAST_FUNC static_up(struct interface_defn_t *ifd, execfn *exec)
- result = execute("ip addr add %address%/%bnmask%[[ broadcast %broadcast%]] "
- "dev %iface%[[ peer %pointopoint%]][[ label %label%]]", ifd, exec);
- result += execute("ip link set[[ mtu %mtu%]][[ addr %hwaddress%]] %iface% up", ifd, exec);
-- result += execute("[[ip route add default via %gateway% dev %iface%]]", ifd, exec);
-+ result += execute("[[ip route add default via %gateway% dev %iface%[[ prio %metric%]]]]", ifd, exec);
- return ((result == 3) ? 3 : 0);
- # else
- /* ifconfig said to set iface up before it processes hw %hwaddress%,
-@@ -500,7 +500,7 @@ static int FAST_FUNC static_up(struct interface_defn_t *ifd, execfn *exec)
- result += execute("ifconfig %iface% %address% netmask %netmask%"
- "[[ broadcast %broadcast%]][[ pointopoint %pointopoint%]] ",
- ifd, exec);
-- result += execute("[[route add default gw %gateway% %iface%]]", ifd, exec);
-+ result += execute("[[route add default gw %gateway%[[ metric %metric%]] %iface%]]", ifd, exec);
- return ((result == 3) ? 3 : 0);
- # endif
- }
---
-1.7.10.4
-
+++ /dev/null
-From 7ec30bf273cbdf5f0ae335684939a883182e493e Mon Sep 17 00:00:00 2001
-From: Andreas Oberritter <obi@opendreambox.org>
-Date: Mon, 23 Apr 2012 22:08:39 +0200
-Subject: [PATCH 05/10] ifupdown: improve compatibility with Debian
-
-Set environment variable 'PHASE'.
-Treat post-up and pre-down as aliases for up and down.
-Uses the same logic as ifupdown.nw from ifupdown-0.6.16.
-Makes it possible to execute Debian's ifupdown script for
-wpa-supplicant.
-
-Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
----
- networking/ifupdown.c | 20 ++++++++++++--------
- 1 file changed, 12 insertions(+), 8 deletions(-)
-
-diff --git a/networking/ifupdown.c b/networking/ifupdown.c
-index 9f49619..5c3dcec 100644
---- a/networking/ifupdown.c
-+++ b/networking/ifupdown.c
-@@ -140,8 +140,6 @@ static const char keywords_up_down[] ALIGN1 =
- "up\0"
- "down\0"
- "pre-up\0"
-- "pre-down\0"
-- "post-up\0"
- "post-down\0"
- ;
-
-@@ -895,6 +893,11 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
- if (rest_of_line[0] == '\0')
- bb_error_msg_and_die("option with empty value \"%s\"", buf);
-
-+ if (strcmp(first_word, "post-up") == 0)
-+ first_word += 5; /* "up" */
-+ else if (strcmp(first_word, "pre-down") == 0)
-+ first_word += 4; /* "down" */
-+
- /* If not one of "up", "down",... words... */
- if (index_in_strings(keywords_up_down, first_word) < 0) {
- int i;
-@@ -963,7 +966,7 @@ static char *setlocalenv(const char *format, const char *name, const char *value
- return result;
- }
-
--static void set_environ(struct interface_defn_t *iface, const char *mode)
-+static void set_environ(struct interface_defn_t *iface, const char *mode, const char *opt)
- {
- int i;
- char **pp;
-@@ -976,7 +979,7 @@ static void set_environ(struct interface_defn_t *iface, const char *mode)
- }
-
- /* note: last element will stay NULL: */
-- G.my_environ = xzalloc(sizeof(char *) * (iface->n_options + 6));
-+ G.my_environ = xzalloc(sizeof(char *) * (iface->n_options + 7));
- pp = G.my_environ;
-
- for (i = 0; i < iface->n_options; i++) {
-@@ -990,6 +993,7 @@ static void set_environ(struct interface_defn_t *iface, const char *mode)
- *pp++ = setlocalenv("%s=%s", "ADDRFAM", iface->address_family->name);
- *pp++ = setlocalenv("%s=%s", "METHOD", iface->method->name);
- *pp++ = setlocalenv("%s=%s", "MODE", mode);
-+ *pp++ = setlocalenv("%s=%s", "PHASE", opt);
- if (G.startup_PATH)
- *pp++ = setlocalenv("%s=%s", "PATH", G.startup_PATH);
- }
-@@ -1044,21 +1048,21 @@ static int check(char *str)
- static int iface_up(struct interface_defn_t *iface)
- {
- if (!iface->method->up(iface, check)) return -1;
-- set_environ(iface, "start");
-+ set_environ(iface, "start", "pre-up");
- if (!execute_all(iface, "pre-up")) return 0;
- if (!iface->method->up(iface, doit)) return 0;
-+ set_environ(iface, "start", "post-up");
- if (!execute_all(iface, "up")) return 0;
-- if (!execute_all(iface, "post-up")) return 0;
- return 1;
- }
-
- static int iface_down(struct interface_defn_t *iface)
- {
- if (!iface->method->down(iface,check)) return -1;
-- set_environ(iface, "stop");
-- if (!execute_all(iface, "pre-down")) return 0;
-+ set_environ(iface, "stop", "pre-down");
- if (!execute_all(iface, "down")) return 0;
- if (!iface->method->down(iface, doit)) return 0;
-+ set_environ(iface, "stop", "post-down");
- if (!execute_all(iface, "post-down")) return 0;
- return 1;
- }
---
-1.7.10.4
-
+++ /dev/null
-From c011ab2fb52c2ee03aa9544b0d242683ee4362e1 Mon Sep 17 00:00:00 2001
-From: Andreas Oberritter <obi@opendreambox.org>
-Date: Fri, 27 Apr 2012 01:40:25 +0200
-Subject: [PATCH 06/10] get_linux_version_code: don't fail on 3.0-foo
-
-Fixes segmentation fault in mount (nfs):
-
- #0 __GI_____strtol_l_internal (nptr=0x0, endptr=0x0, base=10, group=<optimized out>, loc=0x77f6f3c8) at strtol_l.c:298
- #1 __GI_strtol (nptr=<optimized out>, endptr=<optimized out>, base=<optimized out>) at strtol.c:110
- #2 get_linux_version_code () at libbb/kernel_version.c:34
- #3 find_kernel_nfs_mount_version () at util-linux/mount.c:979
-
-Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
----
- libbb/kernel_version.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/libbb/kernel_version.c b/libbb/kernel_version.c
-index a168a1e..12f1146 100644
---- a/libbb/kernel_version.c
-+++ b/libbb/kernel_version.c
-@@ -20,7 +20,7 @@
- int FAST_FUNC get_linux_version_code(void)
- {
- struct utsname name;
-- char *s;
-+ char *s, *t;
- int i, r;
-
- if (uname(&name) == -1) {
-@@ -31,7 +31,8 @@ int FAST_FUNC get_linux_version_code(void)
- s = name.release;
- r = 0;
- for (i = 0; i < 3; i++) {
-- r = r * 256 + atoi(strtok(s, "."));
-+ t = strtok(s, ".");
-+ r = r * 256 + (t ? atoi(t) : 0);
- s = NULL;
- }
- return r;
---
-1.7.10.4
-
+++ /dev/null
-From 4119652f74ce6f8f370df3c80076792d509bc941 Mon Sep 17 00:00:00 2001
-From: Andreas Oberritter <obi@opendreambox.org>
-Date: Mon, 14 May 2012 16:15:50 +0200
-Subject: [PATCH 07/10] ifplugd: move read_pid to libbb/pidfile.c and rename
- it to read_pidfile
-
-Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
----
- include/libbb.h | 2 ++
- libbb/pidfile.c | 14 ++++++++++++++
- networking/ifplugd.c | 18 +-----------------
- 3 files changed, 17 insertions(+), 17 deletions(-)
-
-diff --git a/include/libbb.h b/include/libbb.h
-index 63d0419..e9538e7 100644
---- a/include/libbb.h
-+++ b/include/libbb.h
-@@ -1031,10 +1031,12 @@ llist_t *llist_find_str(llist_t *first, const char *str) FAST_FUNC;
- #if ENABLE_FEATURE_PIDFILE || defined(WANT_PIDFILE)
- /* True only if we created pidfile which is *file*, not /dev/null etc */
- extern smallint wrote_pidfile;
-+pid_t read_pidfile(const char *path) FAST_FUNC;
- void write_pidfile(const char *path) FAST_FUNC;
- #define remove_pidfile(path) do { if (wrote_pidfile) unlink(path); } while (0)
- #else
- enum { wrote_pidfile = 0 };
-+#define read_pidfile(path) ((void)0)
- #define write_pidfile(path) ((void)0)
- #define remove_pidfile(path) ((void)0)
- #endif
-diff --git a/libbb/pidfile.c b/libbb/pidfile.c
-index a48dfc3..6734a2d 100644
---- a/libbb/pidfile.c
-+++ b/libbb/pidfile.c
-@@ -13,6 +13,20 @@
-
- smallint wrote_pidfile;
-
-+pid_t FAST_FUNC read_pidfile(const char *filename)
-+{
-+ int len;
-+ char buf[128];
-+
-+ len = open_read_close(filename, buf, 127);
-+ if (len > 0) {
-+ buf[len] = '\0';
-+ /* returns ULONG_MAX on error => -1 */
-+ return bb_strtoul(buf, NULL, 10);
-+ }
-+ return 0;
-+}
-+
- void FAST_FUNC write_pidfile(const char *path)
- {
- int pid_fd;
-diff --git a/networking/ifplugd.c b/networking/ifplugd.c
-index d8358cd..9a15576 100644
---- a/networking/ifplugd.c
-+++ b/networking/ifplugd.c
-@@ -510,22 +510,6 @@ static NOINLINE int check_existence_through_netlink(void)
- return G.iface_exists;
- }
-
--#if ENABLE_FEATURE_PIDFILE
--static NOINLINE pid_t read_pid(const char *filename)
--{
-- int len;
-- char buf[128];
--
-- len = open_read_close(filename, buf, 127);
-- if (len > 0) {
-- buf[len] = '\0';
-- /* returns ULONG_MAX on error => -1 */
-- return bb_strtoul(buf, NULL, 10);
-- }
-- return 0;
--}
--#endif
--
- int ifplugd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int ifplugd_main(int argc UNUSED_PARAM, char **argv)
- {
-@@ -552,7 +536,7 @@ int ifplugd_main(int argc UNUSED_PARAM, char **argv)
-
- #if ENABLE_FEATURE_PIDFILE
- pidfile_name = xasprintf(_PATH_VARRUN"ifplugd.%s.pid", G.iface);
-- pid_from_pidfile = read_pid(pidfile_name);
-+ pid_from_pidfile = read_pidfile(pidfile_name);
-
- if (opts & FLAG_KILL) {
- if (pid_from_pidfile > 0)
---
-1.7.10.4
-
+++ /dev/null
-From 517f8da0345752d3cc5e2c99b8acd88c60355373 Mon Sep 17 00:00:00 2001
-From: Andreas Oberritter <obi@opendreambox.org>
-Date: Mon, 14 May 2012 16:20:36 +0200
-Subject: [PATCH 08/10] ifupdown: dhcp_down: wait until udhcpc has been killed
-
-* Otherwise there's a race condition between ifdown and udhcpc,
- which executes deconfig scripts in /etc/udhcpc.d.
-
-Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
----
- networking/ifupdown.c | 23 +++++++++++++++++------
- 1 file changed, 17 insertions(+), 6 deletions(-)
-
-diff --git a/networking/ifupdown.c b/networking/ifupdown.c
-index 5c3dcec..35e5035 100644
---- a/networking/ifupdown.c
-+++ b/networking/ifupdown.c
-@@ -618,18 +618,29 @@ static int FAST_FUNC dhcp_down(struct interface_defn_t *ifd, execfn *exec)
- static int FAST_FUNC dhcp_down(struct interface_defn_t *ifd, execfn *exec)
- {
- int result;
-- result = execute(
-- "test -f /var/run/udhcpc.%iface%.pid && "
-- "kill `cat /var/run/udhcpc.%iface%.pid` 2>/dev/null",
-- ifd, exec);
-+ char *pidfile_name;
-+ pid_t pid_from_pidfile;
-+
-+ pidfile_name = xasprintf(_PATH_VARRUN "udhcpc.%s.pid", ifd->iface);
-+ pid_from_pidfile = read_pidfile(pidfile_name);
-+ result = (pid_from_pidfile > 0);
- /* Also bring the hardware interface down since
- killing the dhcp client alone doesn't do it.
- This enables consecutive ifup->ifdown->ifup */
- /* Sleep a bit, otherwise static_down tries to bring down interface too soon,
- and it may come back up because udhcpc is still shutting down */
-- usleep(100000);
-+ if (result && kill(pid_from_pidfile, SIGTERM) == 0) {
-+ unsigned int i;
-+ for (i = 0; i < 100; i++) {
-+ if (kill(pid_from_pidfile, 0) < 0) {
-+ result++;
-+ break;
-+ }
-+ usleep(100000);
-+ }
-+ }
- result += static_down(ifd, exec);
-- return ((result == 3) ? 3 : 0);
-+ return ((result == 4) ? 4 : 0);
- }
- # else
- static int FAST_FUNC dhcp_down(struct interface_defn_t *ifd UNUSED_PARAM,
---
-1.7.10.4
-
+++ /dev/null
-From 7f3d0f0e58602e8d96988736d80ba28d31338ea2 Mon Sep 17 00:00:00 2001
-From: Andreas Oberritter <obi@opendreambox.org>
-Date: Mon, 14 May 2012 17:32:16 +0200
-Subject: [PATCH 09/10] udhcpc: calculate broadcast address if not given by
- server
-
-* This is more efficient than doing it in the scripts
-
-Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
----
- networking/udhcp/common.h | 2 +-
- networking/udhcp/dhcpc.c | 16 ++++++++++++++++
- 2 files changed, 17 insertions(+), 1 deletion(-)
-
-diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h
-index ad6991c..1517498 100644
---- a/networking/udhcp/common.h
-+++ b/networking/udhcp/common.h
-@@ -122,7 +122,7 @@ enum {
- //#define DHCP_ROOT_PATH 0x11
- //#define DHCP_IP_TTL 0x17
- //#define DHCP_MTU 0x1a
--//#define DHCP_BROADCAST 0x1c
-+#define DHCP_BROADCAST 0x1c
- //#define DHCP_ROUTES 0x21
- //#define DHCP_NIS_DOMAIN 0x28
- //#define DHCP_NIS_SERVER 0x29
-diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
-index 4d755e6..9fbd3b3 100644
---- a/networking/udhcp/dhcpc.c
-+++ b/networking/udhcp/dhcpc.c
-@@ -399,6 +399,22 @@ static char **fill_envp(struct dhcp_packet *packet)
- }
- i++;
- }
-+ /* Calculate the broadcast address, if it wasn't provided
-+ * by the server, but a subnet mask of /30 or lower was given.
-+ */
-+ if (udhcp_get_option(packet, DHCP_BROADCAST) == NULL) {
-+ temp = udhcp_get_option(packet, DHCP_SUBNET);
-+ if (temp) {
-+ uint32_t subnet;
-+ move_from_unaligned32(subnet, temp);
-+ if (ntohl(subnet) <= 0xfffffffc) {
-+ uint32_t broadcast = packet->yiaddr | ~subnet;
-+ *curr = xmalloc(sizeof("broadcast=255.255.255.255"));
-+ sprint_nip(*curr, "broadcast=", (uint8_t *)&broadcast);
-+ putenv(*curr++);
-+ }
-+ }
-+ }
- return envp;
- }
-
---
-1.7.10.4
-
+++ /dev/null
-From 2b4773b6ae48fee56c60fb4a1835672cbca78aee Mon Sep 17 00:00:00 2001
-From: Andreas Oberritter <obi@opendreambox.org>
-Date: Tue, 15 Jan 2013 17:33:53 +0100
-Subject: [PATCH 10/10] udhcpc: obtain hostname from OS by default
-
-* Doesn't require the 'hostname' option in /etc/network/interfaces,
- and thus makes udhcpc behave like other clients.
-
-Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
----
- networking/udhcp/dhcpc.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
-index 9fbd3b3..ec9f25d 100644
---- a/networking/udhcp/dhcpc.c
-+++ b/networking/udhcp/dhcpc.c
-@@ -1117,6 +1117,13 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
- );
- if (opt & (OPT_h|OPT_H))
- client_config.hostname = alloc_dhcp_option(DHCP_HOST_NAME, str_h, 0);
-+ else {
-+ char hostname[256]; /* SUSv2: hostnames are <= 255 bytes */
-+ if (gethostname(hostname, sizeof(hostname)) == 0) {
-+ hostname[sizeof(hostname) - 1] = '\0';
-+ client_config.hostname = alloc_dhcp_option(DHCP_HOST_NAME, hostname, 0);
-+ }
-+ }
- if (opt & OPT_F) {
- /* FQDN option format: [0x51][len][flags][0][0]<fqdn> */
- client_config.fqdn = alloc_dhcp_option(DHCP_FQDN, str_F, 3);
---
-1.7.10.4
-
+++ /dev/null
-From 7c462943dd3c283314e68e945d544dfbaaa4cb25 Mon Sep 17 00:00:00 2001
-From: Andreas Oberritter <obi@opendreambox.org>
-Date: Mon, 22 Apr 2013 10:40:36 +0200
-Subject: [PATCH 11/11] mount: don't pass option "auto" to kernel
-
-Fixes the following error if "auto" is set in fs options:
-| EXT3-fs (sda1): error: unrecognized mount option "auto" or missing value
-| EXT4-fs (sda1): Unrecognized mount option "auto" or missing value
-| XFS (sda1): unknown mount option [auto].
-
-Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
----
- util-linux/mount.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/util-linux/mount.c b/util-linux/mount.c
-index 05e532c..670935d 100644
---- a/util-linux/mount.c
-+++ b/util-linux/mount.c
-@@ -212,6 +212,7 @@ static const int32_t mount_options[] = {
- IF_FEATURE_MOUNT_FSTAB(
- /* "defaults" */ 0,
- /* "quiet" 0 - do not filter out, vfat wants to see it */
-+ /* "auto" */ 0,
- /* "noauto" */ MOUNT_NOAUTO,
- /* "sw" */ MOUNT_SWAP,
- /* "swap" */ MOUNT_SWAP,
-@@ -269,6 +270,7 @@ static const char mount_option_str[] =
- IF_FEATURE_MOUNT_FSTAB(
- "defaults\0"
- // "quiet\0" - do not filter out, vfat wants to see it
-+ "auto\0"
- "noauto\0"
- "sw\0"
- "swap\0"
---
-1.7.10.4
-
+++ /dev/null
-diff --git a/loginutils/passwd.c b/loginutils/passwd.c
-index 1cfafae..3231b23 100644
---- a/loginutils/passwd.c
-+++ b/loginutils/passwd.c
-@@ -94,7 +94,7 @@ int passwd_main(int argc UNUSED_PARAM, char **argv)
- };
- unsigned opt;
- int rc;
-- const char *opt_a = "d"; /* des */
-+ const char *opt_a = "sha512"; /* sha512 */
- const char *filename;
- char *myname;
- char *name;
+++ /dev/null
-#
-# Automatically generated make config: don't edit
-# Busybox version: 1.19.4
-# Tue Jan 29 14:06:37 2013
-#
-CONFIG_HAVE_DOT_CONFIG=y
-
-#
-# Busybox Settings
-#
-
-#
-# General Configuration
-#
-# CONFIG_DESKTOP is not set
-# CONFIG_EXTRA_COMPAT is not set
-# CONFIG_INCLUDE_SUSv2 is not set
-# CONFIG_USE_PORTABLE_CODE is not set
-CONFIG_PLATFORM_LINUX=y
-CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
-# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
-# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
-CONFIG_SHOW_USAGE=y
-CONFIG_FEATURE_VERBOSE_USAGE=y
-CONFIG_FEATURE_COMPRESS_USAGE=y
-# CONFIG_FEATURE_INSTALLER is not set
-# CONFIG_INSTALL_NO_USR is not set
-# CONFIG_LOCALE_SUPPORT is not set
-CONFIG_UNICODE_SUPPORT=y
-# CONFIG_UNICODE_USING_LOCALE is not set
-CONFIG_FEATURE_CHECK_UNICODE_IN_ENV=y
-CONFIG_SUBST_WCHAR=0
-CONFIG_LAST_SUPPORTED_WCHAR=0
-# CONFIG_UNICODE_COMBINING_WCHARS is not set
-# CONFIG_UNICODE_WIDE_WCHARS is not set
-# CONFIG_UNICODE_BIDI_SUPPORT is not set
-# CONFIG_UNICODE_NEUTRAL_TABLE is not set
-# CONFIG_UNICODE_PRESERVE_BROKEN is not set
-CONFIG_LONG_OPTS=y
-CONFIG_FEATURE_DEVPTS=y
-# CONFIG_FEATURE_CLEAN_UP is not set
-CONFIG_FEATURE_UTMP=y
-CONFIG_FEATURE_WTMP=y
-CONFIG_FEATURE_PIDFILE=y
-CONFIG_FEATURE_SUID=y
-CONFIG_FEATURE_SUID_CONFIG=y
-CONFIG_FEATURE_SUID_CONFIG_QUIET=y
-# CONFIG_SELINUX is not set
-# CONFIG_FEATURE_PREFER_APPLETS is not set
-CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
-CONFIG_FEATURE_SYSLOG=y
-CONFIG_FEATURE_HAVE_RPC=y
-
-#
-# Build Options
-#
-# CONFIG_STATIC is not set
-# CONFIG_PIE is not set
-# CONFIG_NOMMU is not set
-# CONFIG_BUILD_LIBBUSYBOX is not set
-# CONFIG_FEATURE_INDIVIDUAL is not set
-# CONFIG_FEATURE_SHARED_BUSYBOX is not set
-CONFIG_LFS=y
-CONFIG_CROSS_COMPILER_PREFIX="mipsel-oe-linux-"
-CONFIG_EXTRA_CFLAGS=" -Os -pipe -g -feliminate-unused-debug-types"
-
-#
-# Debugging Options
-#
-# CONFIG_DEBUG is not set
-# CONFIG_DEBUG_PESSIMIZE is not set
-# CONFIG_WERROR is not set
-CONFIG_NO_DEBUG_LIB=y
-# CONFIG_DMALLOC is not set
-# CONFIG_EFENCE is not set
-
-#
-# Installation Options ("make install" behavior)
-#
-CONFIG_INSTALL_APPLET_SYMLINKS=y
-# CONFIG_INSTALL_APPLET_HARDLINKS is not set
-# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
-# CONFIG_INSTALL_APPLET_DONT is not set
-# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
-# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
-# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
-CONFIG_PREFIX="./_install"
-
-#
-# Busybox Library Tuning
-#
-CONFIG_FEATURE_SYSTEMD=y
-CONFIG_FEATURE_RTMINMAX=y
-CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=2
-CONFIG_FEATURE_FAST_TOP=y
-# CONFIG_FEATURE_ETC_NETWORKS is not set
-CONFIG_FEATURE_USE_TERMIOS=y
-CONFIG_FEATURE_EDITING=y
-CONFIG_FEATURE_EDITING_MAX_LEN=1024
-CONFIG_FEATURE_EDITING_VI=y
-CONFIG_FEATURE_EDITING_HISTORY=63
-CONFIG_FEATURE_EDITING_SAVEHISTORY=y
-CONFIG_FEATURE_REVERSE_SEARCH=y
-CONFIG_FEATURE_TAB_COMPLETION=y
-# CONFIG_FEATURE_USERNAME_COMPLETION is not set
-CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
-CONFIG_FEATURE_EDITING_ASK_TERMINAL=y
-# CONFIG_FEATURE_NON_POSIX_CP is not set
-CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
-CONFIG_FEATURE_COPYBUF_KB=64
-CONFIG_FEATURE_SKIP_ROOTFS=y
-CONFIG_MONOTONIC_SYSCALL=y
-CONFIG_IOCTL_HEX2STR_ERROR=y
-# CONFIG_FEATURE_HWIB is not set
-
-#
-# Applets
-#
-
-#
-# Archival Utilities
-#
-CONFIG_FEATURE_SEAMLESS_XZ=y
-CONFIG_FEATURE_SEAMLESS_LZMA=y
-CONFIG_FEATURE_SEAMLESS_BZ2=y
-CONFIG_FEATURE_SEAMLESS_GZ=y
-CONFIG_FEATURE_SEAMLESS_Z=y
-CONFIG_AR=y
-# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
-# CONFIG_FEATURE_AR_CREATE is not set
-CONFIG_BUNZIP2=y
-CONFIG_BZIP2=y
-CONFIG_CPIO=y
-# CONFIG_FEATURE_CPIO_O is not set
-# CONFIG_FEATURE_CPIO_P is not set
-# CONFIG_DPKG is not set
-# CONFIG_DPKG_DEB is not set
-# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
-CONFIG_GUNZIP=y
-CONFIG_GZIP=y
-# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set
-# CONFIG_LZOP is not set
-# CONFIG_LZOP_COMPR_HIGH is not set
-# CONFIG_RPM2CPIO is not set
-# CONFIG_RPM is not set
-CONFIG_TAR=y
-CONFIG_FEATURE_TAR_CREATE=y
-CONFIG_FEATURE_TAR_AUTODETECT=y
-CONFIG_FEATURE_TAR_FROM=y
-CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
-# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
-CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
-# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
-# CONFIG_FEATURE_TAR_TO_COMMAND is not set
-# CONFIG_FEATURE_TAR_UNAME_GNAME is not set
-# CONFIG_FEATURE_TAR_NOPRESERVE_TIME is not set
-# CONFIG_FEATURE_TAR_SELINUX is not set
-# CONFIG_UNCOMPRESS is not set
-CONFIG_UNLZMA=y
-# CONFIG_FEATURE_LZMA_FAST is not set
-# CONFIG_LZMA is not set
-CONFIG_UNXZ=y
-# CONFIG_XZ is not set
-CONFIG_UNZIP=y
-
-#
-# Coreutils
-#
-CONFIG_BASENAME=y
-CONFIG_CAT=y
-CONFIG_DATE=y
-CONFIG_FEATURE_DATE_ISOFMT=y
-# CONFIG_FEATURE_DATE_NANO is not set
-CONFIG_FEATURE_DATE_COMPAT=y
-CONFIG_ID=y
-CONFIG_GROUPS=y
-CONFIG_TEST=y
-CONFIG_FEATURE_TEST_64=y
-CONFIG_TOUCH=y
-CONFIG_TR=y
-CONFIG_FEATURE_TR_CLASSES=y
-# CONFIG_FEATURE_TR_EQUIV is not set
-CONFIG_BASE64=y
-CONFIG_WHO=y
-CONFIG_USERS=y
-# CONFIG_CAL is not set
-# CONFIG_CATV is not set
-CONFIG_CHGRP=y
-CONFIG_CHMOD=y
-CONFIG_CHOWN=y
-# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
-CONFIG_CHROOT=y
-# CONFIG_CKSUM is not set
-# CONFIG_COMM is not set
-CONFIG_CP=y
-# CONFIG_FEATURE_CP_LONG_OPTIONS is not set
-CONFIG_CUT=y
-CONFIG_DD=y
-CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
-CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
-CONFIG_FEATURE_DD_IBS_OBS=y
-CONFIG_DF=y
-CONFIG_FEATURE_DF_FANCY=y
-CONFIG_DIRNAME=y
-CONFIG_DOS2UNIX=y
-CONFIG_UNIX2DOS=y
-CONFIG_DU=y
-CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
-CONFIG_ECHO=y
-CONFIG_FEATURE_FANCY_ECHO=y
-CONFIG_ENV=y
-CONFIG_FEATURE_ENV_LONG_OPTIONS=y
-# CONFIG_EXPAND is not set
-# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set
-CONFIG_EXPR=y
-CONFIG_EXPR_MATH_SUPPORT_64=y
-CONFIG_FALSE=y
-# CONFIG_FOLD is not set
-# CONFIG_FSYNC is not set
-CONFIG_HEAD=y
-# CONFIG_FEATURE_FANCY_HEAD is not set
-# CONFIG_HOSTID is not set
-# CONFIG_INSTALL is not set
-# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
-CONFIG_LN=y
-CONFIG_LOGNAME=y
-CONFIG_LS=y
-CONFIG_FEATURE_LS_FILETYPES=y
-CONFIG_FEATURE_LS_FOLLOWLINKS=y
-CONFIG_FEATURE_LS_RECURSIVE=y
-CONFIG_FEATURE_LS_SORTFILES=y
-CONFIG_FEATURE_LS_TIMESTAMPS=y
-CONFIG_FEATURE_LS_USERNAME=y
-CONFIG_FEATURE_LS_COLOR=y
-CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
-CONFIG_MD5SUM=y
-CONFIG_MKDIR=y
-CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
-CONFIG_MKFIFO=y
-CONFIG_MKNOD=y
-CONFIG_MV=y
-# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
-CONFIG_NICE=y
-CONFIG_NOHUP=y
-CONFIG_OD=y
-# CONFIG_PRINTENV is not set
-CONFIG_PRINTF=y
-CONFIG_PWD=y
-CONFIG_READLINK=y
-CONFIG_FEATURE_READLINK_FOLLOW=y
-CONFIG_REALPATH=y
-CONFIG_RM=y
-CONFIG_RMDIR=y
-# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
-CONFIG_SEQ=y
-CONFIG_SHA1SUM=y
-CONFIG_SHA256SUM=y
-CONFIG_SHA512SUM=y
-CONFIG_SLEEP=y
-CONFIG_FEATURE_FANCY_SLEEP=y
-CONFIG_FEATURE_FLOAT_SLEEP=y
-CONFIG_SORT=y
-CONFIG_FEATURE_SORT_BIG=y
-# CONFIG_SPLIT is not set
-# CONFIG_FEATURE_SPLIT_FANCY is not set
-# CONFIG_STAT is not set
-# CONFIG_FEATURE_STAT_FORMAT is not set
-CONFIG_STTY=y
-# CONFIG_SUM is not set
-CONFIG_SYNC=y
-# CONFIG_TAC is not set
-CONFIG_TAIL=y
-CONFIG_FEATURE_FANCY_TAIL=y
-CONFIG_TEE=y
-CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
-CONFIG_TRUE=y
-CONFIG_TTY=y
-CONFIG_UNAME=y
-# CONFIG_UNEXPAND is not set
-# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
-CONFIG_UNIQ=y
-CONFIG_USLEEP=y
-CONFIG_UUDECODE=y
-CONFIG_UUENCODE=y
-CONFIG_WC=y
-# CONFIG_FEATURE_WC_LARGE is not set
-CONFIG_WHOAMI=y
-CONFIG_YES=y
-
-#
-# Common options for cp and mv
-#
-CONFIG_FEATURE_PRESERVE_HARDLINKS=y
-
-#
-# Common options for ls, more and telnet
-#
-CONFIG_FEATURE_AUTOWIDTH=y
-
-#
-# Common options for df, du, ls
-#
-CONFIG_FEATURE_HUMAN_READABLE=y
-
-#
-# Common options for md5sum, sha1sum, sha256sum, sha512sum
-#
-CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
-
-#
-# Console Utilities
-#
-CONFIG_CHVT=y
-# CONFIG_FGCONSOLE is not set
-CONFIG_CLEAR=y
-CONFIG_DEALLOCVT=y
-CONFIG_DUMPKMAP=y
-CONFIG_KBD_MODE=y
-CONFIG_LOADFONT=y
-CONFIG_LOADKMAP=y
-CONFIG_OPENVT=y
-CONFIG_RESET=y
-# CONFIG_RESIZE is not set
-# CONFIG_FEATURE_RESIZE_PRINT is not set
-CONFIG_SETCONSOLE=y
-# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
-CONFIG_SETFONT=y
-# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
-CONFIG_DEFAULT_SETFONT_DIR=""
-CONFIG_SETKEYCODES=y
-CONFIG_SETLOGCONS=y
-CONFIG_SHOWKEY=y
-
-#
-# Common options for loadfont and setfont
-#
-# CONFIG_FEATURE_LOADFONT_PSF2 is not set
-# CONFIG_FEATURE_LOADFONT_RAW is not set
-
-#
-# Debian Utilities
-#
-CONFIG_MKTEMP=y
-# CONFIG_PIPE_PROGRESS is not set
-CONFIG_RUN_PARTS=y
-CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
-# CONFIG_FEATURE_RUN_PARTS_FANCY is not set
-CONFIG_START_STOP_DAEMON=y
-CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
-CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
-CONFIG_WHICH=y
-
-#
-# Editors
-#
-CONFIG_PATCH=y
-CONFIG_VI=y
-CONFIG_FEATURE_VI_MAX_LEN=4096
-CONFIG_FEATURE_VI_8BIT=y
-CONFIG_FEATURE_VI_COLON=y
-CONFIG_FEATURE_VI_YANKMARK=y
-CONFIG_FEATURE_VI_SEARCH=y
-CONFIG_FEATURE_VI_REGEX_SEARCH=y
-CONFIG_FEATURE_VI_USE_SIGNALS=y
-CONFIG_FEATURE_VI_DOT_CMD=y
-CONFIG_FEATURE_VI_READONLY=y
-CONFIG_FEATURE_VI_SETOPTS=y
-CONFIG_FEATURE_VI_SET=y
-CONFIG_FEATURE_VI_WIN_RESIZE=y
-CONFIG_FEATURE_VI_ASK_TERMINAL=y
-CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
-CONFIG_AWK=y
-# CONFIG_FEATURE_AWK_LIBM is not set
-CONFIG_CMP=y
-CONFIG_DIFF=y
-# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set
-CONFIG_FEATURE_DIFF_DIR=y
-# CONFIG_ED is not set
-CONFIG_SED=y
-CONFIG_FEATURE_ALLOW_EXEC=y
-
-#
-# Finding Utilities
-#
-CONFIG_FIND=y
-CONFIG_FEATURE_FIND_PRINT0=y
-CONFIG_FEATURE_FIND_MTIME=y
-CONFIG_FEATURE_FIND_MMIN=y
-CONFIG_FEATURE_FIND_PERM=y
-CONFIG_FEATURE_FIND_TYPE=y
-CONFIG_FEATURE_FIND_XDEV=y
-CONFIG_FEATURE_FIND_MAXDEPTH=y
-CONFIG_FEATURE_FIND_NEWER=y
-CONFIG_FEATURE_FIND_INUM=y
-CONFIG_FEATURE_FIND_EXEC=y
-CONFIG_FEATURE_FIND_USER=y
-CONFIG_FEATURE_FIND_GROUP=y
-CONFIG_FEATURE_FIND_NOT=y
-CONFIG_FEATURE_FIND_DEPTH=y
-CONFIG_FEATURE_FIND_PAREN=y
-CONFIG_FEATURE_FIND_SIZE=y
-CONFIG_FEATURE_FIND_PRUNE=y
-CONFIG_FEATURE_FIND_DELETE=y
-CONFIG_FEATURE_FIND_PATH=y
-CONFIG_FEATURE_FIND_REGEX=y
-# CONFIG_FEATURE_FIND_CONTEXT is not set
-CONFIG_FEATURE_FIND_LINKS=y
-CONFIG_GREP=y
-CONFIG_FEATURE_GREP_EGREP_ALIAS=y
-CONFIG_FEATURE_GREP_FGREP_ALIAS=y
-CONFIG_FEATURE_GREP_CONTEXT=y
-CONFIG_XARGS=y
-CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
-CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
-CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
-CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
-
-#
-# Init Utilities
-#
-# CONFIG_BOOTCHARTD is not set
-# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
-# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
-# CONFIG_HALT is not set
-# CONFIG_FEATURE_CALL_TELINIT is not set
-CONFIG_TELINIT_PATH=""
-# CONFIG_INIT is not set
-# CONFIG_FEATURE_USE_INITTAB is not set
-# CONFIG_FEATURE_KILL_REMOVED is not set
-CONFIG_FEATURE_KILL_DELAY=0
-# CONFIG_FEATURE_INIT_SCTTY is not set
-# CONFIG_FEATURE_INIT_SYSLOG is not set
-# CONFIG_FEATURE_EXTRA_QUIET is not set
-# CONFIG_FEATURE_INIT_COREDUMPS is not set
-# CONFIG_FEATURE_INITRD is not set
-CONFIG_INIT_TERMINAL_TYPE=""
-# CONFIG_MESG is not set
-# CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set
-
-#
-# Login/Password Management Utilities
-#
-# CONFIG_ADD_SHELL is not set
-# CONFIG_REMOVE_SHELL is not set
-CONFIG_FEATURE_SHADOWPASSWDS=y
-# CONFIG_USE_BB_PWD_GRP is not set
-# CONFIG_USE_BB_SHADOW is not set
-CONFIG_USE_BB_CRYPT=y
-CONFIG_USE_BB_CRYPT_SHA=y
-# CONFIG_ADDUSER is not set
-# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set
-# CONFIG_FEATURE_CHECK_NAMES is not set
-CONFIG_FIRST_SYSTEM_ID=0
-CONFIG_LAST_SYSTEM_ID=0
-# CONFIG_ADDGROUP is not set
-# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set
-# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
-# CONFIG_DELUSER is not set
-# CONFIG_DELGROUP is not set
-# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
-CONFIG_GETTY=y
-CONFIG_LOGIN=y
-# CONFIG_PAM is not set
-CONFIG_LOGIN_SCRIPTS=y
-CONFIG_FEATURE_NOLOGIN=y
-CONFIG_FEATURE_SECURETTY=y
-CONFIG_PASSWD=y
-CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
-# CONFIG_CRYPTPW is not set
-# CONFIG_CHPASSWD is not set
-# CONFIG_SU is not set
-# CONFIG_FEATURE_SU_SYSLOG is not set
-# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
-CONFIG_SULOGIN=y
-# CONFIG_VLOCK is not set
-
-#
-# Linux Ext2 FS Progs
-#
-CONFIG_CHATTR=y
-# CONFIG_FSCK is not set
-CONFIG_LSATTR=y
-CONFIG_TUNE2FS=y
-
-#
-# Linux Module Utilities
-#
-CONFIG_MODINFO=y
-# CONFIG_MODPROBE_SMALL is not set
-# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
-# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
-CONFIG_INSMOD=y
-CONFIG_RMMOD=y
-CONFIG_LSMOD=y
-CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
-CONFIG_MODPROBE=y
-CONFIG_FEATURE_MODPROBE_BLACKLIST=y
-# CONFIG_DEPMOD is not set
-
-#
-# Options common to multiple modutils
-#
-# CONFIG_FEATURE_2_4_MODULES is not set
-# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
-# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
-# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
-# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
-# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
-# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
-CONFIG_FEATURE_MODUTILS_ALIAS=y
-CONFIG_FEATURE_MODUTILS_SYMBOLS=y
-CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
-CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
-
-#
-# Linux System Utilities
-#
-# CONFIG_BLOCKDEV is not set
-# CONFIG_REV is not set
-# CONFIG_ACPID is not set
-# CONFIG_FEATURE_ACPID_COMPAT is not set
-# CONFIG_BLKID is not set
-# CONFIG_FEATURE_BLKID_TYPE is not set
-CONFIG_DMESG=y
-CONFIG_FEATURE_DMESG_PRETTY=y
-CONFIG_FBSET=y
-CONFIG_FEATURE_FBSET_FANCY=y
-CONFIG_FEATURE_FBSET_READMODE=y
-# CONFIG_FDFLUSH is not set
-# CONFIG_FDFORMAT is not set
-CONFIG_FDISK=y
-# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
-CONFIG_FEATURE_FDISK_WRITABLE=y
-# CONFIG_FEATURE_AIX_LABEL is not set
-# CONFIG_FEATURE_SGI_LABEL is not set
-# CONFIG_FEATURE_SUN_LABEL is not set
-# CONFIG_FEATURE_OSF_LABEL is not set
-CONFIG_FEATURE_GPT_LABEL=y
-CONFIG_FEATURE_FDISK_ADVANCED=y
-CONFIG_FINDFS=y
-CONFIG_FLOCK=y
-# CONFIG_FREERAMDISK is not set
-# CONFIG_FSCK_MINIX is not set
-# CONFIG_MKFS_EXT2 is not set
-# CONFIG_MKFS_MINIX is not set
-# CONFIG_FEATURE_MINIX2 is not set
-# CONFIG_MKFS_REISER is not set
-CONFIG_MKFS_VFAT=y
-CONFIG_GETOPT=y
-CONFIG_FEATURE_GETOPT_LONG=y
-CONFIG_HEXDUMP=y
-# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
-CONFIG_HD=y
-# CONFIG_HWCLOCK is not set
-# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set
-# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
-# CONFIG_IPCRM is not set
-# CONFIG_IPCS is not set
-CONFIG_LOSETUP=y
-CONFIG_LSPCI=y
-CONFIG_LSUSB=y
-# CONFIG_MDEV is not set
-# CONFIG_FEATURE_MDEV_CONF is not set
-# CONFIG_FEATURE_MDEV_RENAME is not set
-# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
-# CONFIG_FEATURE_MDEV_EXEC is not set
-# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
-CONFIG_MKSWAP=y
-CONFIG_FEATURE_MKSWAP_UUID=y
-CONFIG_MORE=y
-CONFIG_MOUNT=y
-# CONFIG_FEATURE_MOUNT_FAKE is not set
-# CONFIG_FEATURE_MOUNT_VERBOSE is not set
-CONFIG_FEATURE_MOUNT_HELPERS=y
-CONFIG_FEATURE_MOUNT_LABEL=y
-CONFIG_FEATURE_MOUNT_NFS=y
-CONFIG_FEATURE_MOUNT_CIFS=y
-CONFIG_FEATURE_MOUNT_FLAGS=y
-CONFIG_FEATURE_MOUNT_FSTAB=y
-# CONFIG_PIVOT_ROOT is not set
-CONFIG_RDATE=y
-CONFIG_RDEV=y
-CONFIG_READPROFILE=y
-# CONFIG_RTCWAKE is not set
-# CONFIG_SCRIPT is not set
-# CONFIG_SCRIPTREPLAY is not set
-# CONFIG_SETARCH is not set
-CONFIG_SWAPONOFF=y
-# CONFIG_FEATURE_SWAPON_PRI is not set
-CONFIG_SWITCH_ROOT=y
-CONFIG_UMOUNT=y
-CONFIG_FEATURE_UMOUNT_ALL=y
-
-#
-# Common options for mount/umount
-#
-CONFIG_FEATURE_MOUNT_LOOP=y
-CONFIG_FEATURE_MOUNT_LOOP_CREATE=y
-# CONFIG_FEATURE_MTAB_SUPPORT is not set
-CONFIG_VOLUMEID=y
-
-#
-# Filesystem/Volume identification
-#
-CONFIG_FEATURE_VOLUMEID_EXT=y
-CONFIG_FEATURE_VOLUMEID_BTRFS=y
-CONFIG_FEATURE_VOLUMEID_REISERFS=y
-CONFIG_FEATURE_VOLUMEID_FAT=y
-CONFIG_FEATURE_VOLUMEID_HFS=y
-CONFIG_FEATURE_VOLUMEID_JFS=y
-CONFIG_FEATURE_VOLUMEID_XFS=y
-CONFIG_FEATURE_VOLUMEID_NTFS=y
-CONFIG_FEATURE_VOLUMEID_ISO9660=y
-CONFIG_FEATURE_VOLUMEID_UDF=y
-CONFIG_FEATURE_VOLUMEID_LUKS=y
-CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
-CONFIG_FEATURE_VOLUMEID_CRAMFS=y
-CONFIG_FEATURE_VOLUMEID_ROMFS=y
-CONFIG_FEATURE_VOLUMEID_SYSV=y
-CONFIG_FEATURE_VOLUMEID_OCFS2=y
-CONFIG_FEATURE_VOLUMEID_LINUXRAID=y
-
-#
-# Miscellaneous Utilities
-#
-# CONFIG_CONSPY is not set
-CONFIG_LESS=y
-CONFIG_FEATURE_LESS_MAXLINES=9999999
-CONFIG_FEATURE_LESS_BRACKETS=y
-CONFIG_FEATURE_LESS_FLAGS=y
-# CONFIG_FEATURE_LESS_MARKS is not set
-CONFIG_FEATURE_LESS_REGEXP=y
-CONFIG_FEATURE_LESS_WINCH=y
-CONFIG_FEATURE_LESS_ASK_TERMINAL=y
-# CONFIG_FEATURE_LESS_DASHCMD is not set
-# CONFIG_FEATURE_LESS_LINENUMS is not set
-# CONFIG_NANDWRITE is not set
-# CONFIG_NANDDUMP is not set
-CONFIG_SETSERIAL=y
-# CONFIG_UBIATTACH is not set
-# CONFIG_UBIDETACH is not set
-# CONFIG_UBIMKVOL is not set
-# CONFIG_UBIRMVOL is not set
-# CONFIG_UBIRSVOL is not set
-# CONFIG_UBIUPDATEVOL is not set
-# CONFIG_ADJTIMEX is not set
-CONFIG_BBCONFIG=y
-CONFIG_FEATURE_COMPRESS_BBCONFIG=y
-# CONFIG_BEEP is not set
-CONFIG_FEATURE_BEEP_FREQ=0
-CONFIG_FEATURE_BEEP_LENGTH_MS=0
-# CONFIG_CHAT is not set
-# CONFIG_FEATURE_CHAT_NOFAIL is not set
-# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
-# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
-# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
-# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
-# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
-# CONFIG_FEATURE_CHAT_CLR_ABORT is not set
-CONFIG_CHRT=y
-CONFIG_CROND=y
-# CONFIG_FEATURE_CROND_D is not set
-# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
-CONFIG_FEATURE_CROND_DIR="/etc/cron"
-CONFIG_CRONTAB=y
-CONFIG_DC=y
-# CONFIG_FEATURE_DC_LIBM is not set
-# CONFIG_DEVFSD is not set
-# CONFIG_DEVFSD_MODLOAD is not set
-# CONFIG_DEVFSD_FG_NP is not set
-# CONFIG_DEVFSD_VERBOSE is not set
-# CONFIG_FEATURE_DEVFS is not set
-CONFIG_DEVMEM=y
-CONFIG_EJECT=y
-CONFIG_FEATURE_EJECT_SCSI=y
-CONFIG_FBSPLASH=y
-# CONFIG_FLASHCP is not set
-# CONFIG_FLASH_LOCK is not set
-# CONFIG_FLASH_UNLOCK is not set
-# CONFIG_FLASH_ERASEALL is not set
-CONFIG_IONICE=y
-CONFIG_INOTIFYD=y
-# CONFIG_LAST is not set
-# CONFIG_FEATURE_LAST_SMALL is not set
-# CONFIG_FEATURE_LAST_FANCY is not set
-# CONFIG_HDPARM is not set
-# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
-# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
-# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
-# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
-# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
-# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
-# CONFIG_MAKEDEVS is not set
-# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
-# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
-# CONFIG_MAN is not set
-CONFIG_MICROCOM=y
-# CONFIG_MOUNTPOINT is not set
-# CONFIG_MT is not set
-# CONFIG_RAIDAUTORUN is not set
-CONFIG_READAHEAD=y
-# CONFIG_RFKILL is not set
-# CONFIG_RUNLEVEL is not set
-# CONFIG_RX is not set
-CONFIG_SETSID=y
-CONFIG_STRINGS=y
-CONFIG_TASKSET=y
-CONFIG_FEATURE_TASKSET_FANCY=y
-CONFIG_TIME=y
-CONFIG_TIMEOUT=y
-# CONFIG_TTYSIZE is not set
-CONFIG_VOLNAME=y
-# CONFIG_WALL is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Networking Utilities
-#
-CONFIG_NAMEIF=y
-CONFIG_FEATURE_NAMEIF_EXTENDED=y
-CONFIG_NBDCLIENT=y
-CONFIG_NC=y
-CONFIG_NC_SERVER=y
-CONFIG_NC_EXTRA=y
-# CONFIG_NC_110_COMPAT is not set
-CONFIG_PING=y
-CONFIG_PING6=y
-CONFIG_FEATURE_FANCY_PING=y
-CONFIG_WHOIS=y
-CONFIG_FEATURE_IPV6=y
-# CONFIG_FEATURE_UNIX_LOCAL is not set
-CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
-# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
-CONFIG_ARP=y
-# CONFIG_ARPING is not set
-CONFIG_BRCTL=y
-CONFIG_FEATURE_BRCTL_FANCY=y
-CONFIG_FEATURE_BRCTL_SHOW=y
-# CONFIG_DNSD is not set
-CONFIG_ETHER_WAKE=y
-# CONFIG_FAKEIDENTD is not set
-# CONFIG_FTPD is not set
-# CONFIG_FEATURE_FTP_WRITE is not set
-# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set
-# CONFIG_FTPGET is not set
-# CONFIG_FTPPUT is not set
-# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
-CONFIG_HOSTNAME=y
-# CONFIG_HTTPD is not set
-# CONFIG_FEATURE_HTTPD_RANGES is not set
-# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set
-# CONFIG_FEATURE_HTTPD_SETUID is not set
-# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
-# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
-# CONFIG_FEATURE_HTTPD_CGI is not set
-# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
-# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
-# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
-# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set
-# CONFIG_FEATURE_HTTPD_PROXY is not set
-# CONFIG_FEATURE_HTTPD_GZIP is not set
-CONFIG_IFCONFIG=y
-CONFIG_FEATURE_IFCONFIG_STATUS=y
-# CONFIG_FEATURE_IFCONFIG_SLIP is not set
-# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
-CONFIG_FEATURE_IFCONFIG_HW=y
-# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
-# CONFIG_IFENSLAVE is not set
-# CONFIG_IFPLUGD is not set
-CONFIG_IFUPDOWN=y
-CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
-CONFIG_FEATURE_IFUPDOWN_IP=y
-CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
-# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set
-CONFIG_FEATURE_IFUPDOWN_IPV4=y
-CONFIG_FEATURE_IFUPDOWN_IPV6=y
-CONFIG_FEATURE_IFUPDOWN_MAPPING=y
-# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
-CONFIG_INETD=y
-CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y
-CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y
-CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y
-CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y
-CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y
-CONFIG_FEATURE_INETD_RPC=y
-CONFIG_IP=y
-CONFIG_FEATURE_IP_ADDRESS=y
-CONFIG_FEATURE_IP_LINK=y
-CONFIG_FEATURE_IP_ROUTE=y
-CONFIG_FEATURE_IP_TUNNEL=y
-CONFIG_FEATURE_IP_RULE=y
-# CONFIG_FEATURE_IP_SHORT_FORMS is not set
-# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
-# CONFIG_IPADDR is not set
-# CONFIG_IPLINK is not set
-# CONFIG_IPROUTE is not set
-# CONFIG_IPTUNNEL is not set
-# CONFIG_IPRULE is not set
-# CONFIG_IPCALC is not set
-# CONFIG_FEATURE_IPCALC_FANCY is not set
-# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
-CONFIG_NETSTAT=y
-CONFIG_FEATURE_NETSTAT_WIDE=y
-CONFIG_FEATURE_NETSTAT_PRG=y
-CONFIG_NSLOOKUP=y
-# CONFIG_NTPD is not set
-# CONFIG_FEATURE_NTPD_SERVER is not set
-# CONFIG_PSCAN is not set
-CONFIG_ROUTE=y
-# CONFIG_SLATTACH is not set
-# CONFIG_TCPSVD is not set
-CONFIG_TELNET=y
-CONFIG_FEATURE_TELNET_TTYPE=y
-CONFIG_FEATURE_TELNET_AUTOLOGIN=y
-CONFIG_TELNETD=y
-# CONFIG_FEATURE_TELNETD_STANDALONE is not set
-# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
-CONFIG_TFTP=y
-# CONFIG_TFTPD is not set
-
-#
-# Common options for tftp/tftpd
-#
-CONFIG_FEATURE_TFTP_GET=y
-CONFIG_FEATURE_TFTP_PUT=y
-# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
-# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set
-# CONFIG_TFTP_DEBUG is not set
-CONFIG_TRACEROUTE=y
-CONFIG_TRACEROUTE6=y
-CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
-# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
-CONFIG_FEATURE_TRACEROUTE_USE_ICMP=y
-CONFIG_TUNCTL=y
-CONFIG_FEATURE_TUNCTL_UG=y
-# CONFIG_UDHCPD is not set
-# CONFIG_DHCPRELAY is not set
-# CONFIG_DUMPLEASES is not set
-# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
-# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
-CONFIG_DHCPD_LEASES_FILE=""
-CONFIG_UDHCPC=y
-CONFIG_FEATURE_UDHCPC_ARPING=y
-# CONFIG_FEATURE_UDHCP_PORT is not set
-CONFIG_UDHCP_DEBUG=0
-# CONFIG_FEATURE_UDHCP_RFC3397 is not set
-CONFIG_FEATURE_UDHCP_8021Q=y
-CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
-CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
-CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -b -T3 -A10"
-# CONFIG_UDPSVD is not set
-CONFIG_VCONFIG=y
-CONFIG_WGET=y
-CONFIG_FEATURE_WGET_STATUSBAR=y
-CONFIG_FEATURE_WGET_AUTHENTICATION=y
-CONFIG_FEATURE_WGET_LONG_OPTIONS=y
-CONFIG_FEATURE_WGET_TIMEOUT=y
-# CONFIG_ZCIP is not set
-
-#
-# Print Utilities
-#
-# CONFIG_LPD is not set
-# CONFIG_LPR is not set
-# CONFIG_LPQ is not set
-
-#
-# Mail Utilities
-#
-# CONFIG_MAKEMIME is not set
-CONFIG_FEATURE_MIME_CHARSET="us-ascii"
-# CONFIG_POPMAILDIR is not set
-# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
-# CONFIG_REFORMIME is not set
-# CONFIG_FEATURE_REFORMIME_COMPAT is not set
-CONFIG_SENDMAIL=y
-
-#
-# Process Utilities
-#
-CONFIG_IOSTAT=y
-CONFIG_MPSTAT=y
-CONFIG_NMETER=y
-# CONFIG_PMAP is not set
-CONFIG_POWERTOP=y
-# CONFIG_PSTREE is not set
-# CONFIG_PWDX is not set
-CONFIG_SMEMCAP=y
-# CONFIG_UPTIME is not set
-# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set
-# CONFIG_FREE is not set
-# CONFIG_FUSER is not set
-# CONFIG_KILL is not set
-# CONFIG_KILLALL is not set
-# CONFIG_KILLALL5 is not set
-# CONFIG_PGREP is not set
-CONFIG_PIDOF=y
-CONFIG_FEATURE_PIDOF_SINGLE=y
-CONFIG_FEATURE_PIDOF_OMIT=y
-# CONFIG_PKILL is not set
-# CONFIG_PS is not set
-# CONFIG_FEATURE_PS_WIDE is not set
-# CONFIG_FEATURE_PS_TIME is not set
-# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
-# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
-CONFIG_RENICE=y
-# CONFIG_BB_SYSCTL is not set
-# CONFIG_TOP is not set
-# CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE is not set
-# CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS is not set
-# CONFIG_FEATURE_TOP_SMP_CPU is not set
-# CONFIG_FEATURE_TOP_DECIMALS is not set
-# CONFIG_FEATURE_TOP_SMP_PROCESS is not set
-# CONFIG_FEATURE_TOPMEM is not set
-# CONFIG_FEATURE_SHOW_THREADS is not set
-# CONFIG_WATCH is not set
-
-#
-# Runit Utilities
-#
-# CONFIG_RUNSV is not set
-# CONFIG_RUNSVDIR is not set
-# CONFIG_FEATURE_RUNSVDIR_LOG is not set
-# CONFIG_SV is not set
-CONFIG_SV_DEFAULT_SERVICE_DIR=""
-# CONFIG_SVLOGD is not set
-# CONFIG_CHPST is not set
-# CONFIG_SETUIDGID is not set
-# CONFIG_ENVUIDGID is not set
-# CONFIG_ENVDIR is not set
-# CONFIG_SOFTLIMIT is not set
-# CONFIG_CHCON is not set
-# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
-# CONFIG_GETENFORCE is not set
-# CONFIG_GETSEBOOL is not set
-# CONFIG_LOAD_POLICY is not set
-# CONFIG_MATCHPATHCON is not set
-# CONFIG_RESTORECON is not set
-# CONFIG_RUNCON is not set
-# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
-# CONFIG_SELINUXENABLED is not set
-# CONFIG_SETENFORCE is not set
-# CONFIG_SETFILES is not set
-# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
-# CONFIG_SETSEBOOL is not set
-# CONFIG_SESTATUS is not set
-
-#
-# Shells
-#
-CONFIG_ASH=y
-CONFIG_ASH_BASH_COMPAT=y
-CONFIG_ASH_IDLE_TIMEOUT=y
-CONFIG_ASH_JOB_CONTROL=y
-CONFIG_ASH_ALIAS=y
-CONFIG_ASH_GETOPTS=y
-CONFIG_ASH_BUILTIN_ECHO=y
-CONFIG_ASH_BUILTIN_PRINTF=y
-CONFIG_ASH_BUILTIN_TEST=y
-# CONFIG_ASH_CMDCMD is not set
-# CONFIG_ASH_MAIL is not set
-CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
-CONFIG_ASH_RANDOM_SUPPORT=y
-CONFIG_ASH_EXPAND_PRMT=y
-# CONFIG_CTTYHACK is not set
-# CONFIG_HUSH is not set
-# CONFIG_HUSH_BASH_COMPAT is not set
-# CONFIG_HUSH_BRACE_EXPANSION is not set
-# CONFIG_HUSH_HELP is not set
-# CONFIG_HUSH_INTERACTIVE is not set
-# CONFIG_HUSH_SAVEHISTORY is not set
-# CONFIG_HUSH_JOB is not set
-# CONFIG_HUSH_TICK is not set
-# CONFIG_HUSH_IF is not set
-# CONFIG_HUSH_LOOPS is not set
-# CONFIG_HUSH_CASE is not set
-# CONFIG_HUSH_FUNCTIONS is not set
-# CONFIG_HUSH_LOCAL is not set
-# CONFIG_HUSH_RANDOM_SUPPORT is not set
-# CONFIG_HUSH_EXPORT_N is not set
-# CONFIG_HUSH_MODE_X is not set
-# CONFIG_MSH is not set
-CONFIG_FEATURE_SH_IS_ASH=y
-# CONFIG_FEATURE_SH_IS_HUSH is not set
-# CONFIG_FEATURE_SH_IS_NONE is not set
-CONFIG_FEATURE_BASH_IS_ASH=y
-# CONFIG_FEATURE_BASH_IS_HUSH is not set
-# CONFIG_FEATURE_BASH_IS_NONE is not set
-CONFIG_SH_MATH_SUPPORT=y
-# CONFIG_SH_MATH_SUPPORT_64 is not set
-CONFIG_FEATURE_SH_EXTRA_QUIET=y
-# CONFIG_FEATURE_SH_STANDALONE is not set
-# CONFIG_FEATURE_SH_NOFORK is not set
-CONFIG_FEATURE_SH_HISTFILESIZE=y
-
-#
-# System Logging Utilities
-#
-CONFIG_SYSLOGD=y
-CONFIG_FEATURE_ROTATE_LOGFILE=y
-CONFIG_FEATURE_REMOTE_LOG=y
-CONFIG_FEATURE_SYSLOGD_DUP=y
-CONFIG_FEATURE_SYSLOGD_CFG=y
-CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
-CONFIG_FEATURE_IPC_SYSLOG=y
-CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
-CONFIG_LOGREAD=y
-CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
-CONFIG_KLOGD=y
-CONFIG_FEATURE_KLOGD_KLOGCTL=y
-CONFIG_LOGGER=y
+++ /dev/null
-#!/bin/sh
-#
-# start/stop inetd super server.
-
-if ! [ -x /usr/sbin/inetd ]; then
- exit 0
-fi
-
-case "$1" in
- start)
- echo -n "Starting internet superserver:"
- echo -n " inetd" ; start-stop-daemon -S -x /usr/sbin/inetd > /dev/null
- echo "."
- ;;
- stop)
- echo -n "Stopping internet superserver:"
- echo -n " inetd" ; start-stop-daemon -K -x /usr/sbin/inetd > /dev/null
- echo "."
- ;;
- restart)
- echo -n "Restarting internet superserver:"
- echo -n " inetd "
- killall -HUP inetd
- echo "."
- ;;
- *)
- echo "Usage: /etc/init.d/inetd {start|stop|restart}"
- exit 1
- ;;
-esac
-
-exit 0
-
+++ /dev/null
-# /etc/inetd.conf: see inetd(8) for further informations.
-#
-# Internet server configuration database
-#
-# If you want to disable an entry so it isn't touched during
-# package updates just comment it out with a single '#' character.
-#
-# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
-#
-#:INTERNAL: Internal services
-#echo stream tcp nowait root internal
-#echo dgram udp wait root internal
-#chargen stream tcp nowait root internal
-#chargen dgram udp wait root internal
-#discard stream tcp nowait root internal
-#discard dgram udp wait root internal
-#daytime stream tcp nowait root internal
-#daytime dgram udp wait root internal
-#time stream tcp nowait root internal
-#time dgram udp wait root internal
-ftp stream tcp nowait root /usr/sbin/vsftpd vsftpd
-telnet stream tcp nowait root /usr/sbin/telnetd telnetd
-8001 stream tcp nowait root /usr/bin/streamproxy streamproxy
+++ /dev/null
-Index: busybox-1.18.5/util-linux/mount.c
-===================================================================
---- busybox-1.18.5.orig/util-linux/mount.c
-+++ busybox-1.18.5/util-linux/mount.c
-@@ -1934,6 +1934,8 @@ int mount_main(int argc UNUSED_PARAM, ch
- // "proc") or a full path from root
- if (argv[0]) {
-
-+ // Check for UUID= or LABEL= entries too
-+ resolve_mount_spec(&mtcur->mnt_fsname);
- // Is this what we're looking for?
- if (strcmp(argv[0], mtcur->mnt_fsname) != 0
- && strcmp(storage_path, mtcur->mnt_fsname) != 0
--- /dev/null
+From 7c462943dd3c283314e68e945d544dfbaaa4cb25 Mon Sep 17 00:00:00 2001
+From: Andreas Oberritter <obi@opendreambox.org>
+Date: Mon, 22 Apr 2013 10:40:36 +0200
+Subject: [PATCH 11/11] mount: don't pass option "auto" to kernel
+
+Fixes the following error if "auto" is set in fs options:
+| EXT3-fs (sda1): error: unrecognized mount option "auto" or missing value
+| EXT4-fs (sda1): Unrecognized mount option "auto" or missing value
+| XFS (sda1): unknown mount option [auto].
+
+Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
+---
+ util-linux/mount.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/util-linux/mount.c b/util-linux/mount.c
+index 05e532c..670935d 100644
+--- a/util-linux/mount.c
++++ b/util-linux/mount.c
+@@ -212,6 +212,7 @@ static const int32_t mount_options[] = {
+ IF_FEATURE_MOUNT_FSTAB(
+ /* "defaults" */ 0,
+ /* "quiet" 0 - do not filter out, vfat wants to see it */
++ /* "auto" */ 0,
+ /* "noauto" */ MOUNT_NOAUTO,
+ /* "sw" */ MOUNT_SWAP,
+ /* "swap" */ MOUNT_SWAP,
+@@ -269,6 +270,7 @@ static const char mount_option_str[] =
+ IF_FEATURE_MOUNT_FSTAB(
+ "defaults\0"
+ // "quiet\0" - do not filter out, vfat wants to see it
++ "auto\0"
+ "noauto\0"
+ "sw\0"
+ "swap\0"
+--
+1.7.10.4
+
--- /dev/null
+#
+# Automatically generated make config: don't edit
+# Busybox version: 1.22.1
+# Thu Jun 19 14:19:41 2014
+#
+CONFIG_HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_DESKTOP is not set
+# CONFIG_EXTRA_COMPAT is not set
+# CONFIG_INCLUDE_SUSv2 is not set
+# CONFIG_USE_PORTABLE_CODE is not set
+CONFIG_PLATFORM_LINUX=y
+CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_SHOW_USAGE=y
+CONFIG_FEATURE_VERBOSE_USAGE=y
+CONFIG_FEATURE_COMPRESS_USAGE=y
+# CONFIG_FEATURE_INSTALLER is not set
+# CONFIG_INSTALL_NO_USR is not set
+# CONFIG_LOCALE_SUPPORT is not set
+CONFIG_UNICODE_SUPPORT=y
+# CONFIG_UNICODE_USING_LOCALE is not set
+CONFIG_FEATURE_CHECK_UNICODE_IN_ENV=y
+CONFIG_SUBST_WCHAR=0
+CONFIG_LAST_SUPPORTED_WCHAR=0
+# CONFIG_UNICODE_COMBINING_WCHARS is not set
+# CONFIG_UNICODE_WIDE_WCHARS is not set
+# CONFIG_UNICODE_BIDI_SUPPORT is not set
+# CONFIG_UNICODE_NEUTRAL_TABLE is not set
+# CONFIG_UNICODE_PRESERVE_BROKEN is not set
+CONFIG_LONG_OPTS=y
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+CONFIG_FEATURE_UTMP=y
+CONFIG_FEATURE_WTMP=y
+CONFIG_FEATURE_PIDFILE=y
+CONFIG_PID_FILE_PATH="/var/run"
+CONFIG_FEATURE_SUID=y
+CONFIG_FEATURE_SUID_CONFIG=y
+CONFIG_FEATURE_SUID_CONFIG_QUIET=y
+# CONFIG_SELINUX is not set
+# CONFIG_FEATURE_PREFER_APPLETS is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+CONFIG_FEATURE_SYSLOG=y
+CONFIG_FEATURE_HAVE_RPC=y
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_PIE is not set
+# CONFIG_NOMMU is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_INDIVIDUAL is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+CONFIG_CROSS_COMPILER_PREFIX="mipsel-oe-linux-"
+CONFIG_SYSROOT=""
+CONFIG_EXTRA_CFLAGS=" -Os -pipe -g -feliminate-unused-debug-types"
+CONFIG_EXTRA_LDFLAGS=""
+CONFIG_EXTRA_LDLIBS=""
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_WERROR is not set
+CONFIG_NO_DEBUG_LIB=y
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+
+#
+# Installation Options ("make install" behavior)
+#
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
+# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
+# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
+CONFIG_PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_FEATURE_SYSTEMD=y
+CONFIG_FEATURE_RTMINMAX=y
+CONFIG_PASSWORD_MINLEN=6
+CONFIG_MD5_SMALL=1
+CONFIG_SHA3_SMALL=1
+CONFIG_FEATURE_FAST_TOP=y
+# CONFIG_FEATURE_ETC_NETWORKS is not set
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_FEATURE_EDITING=y
+CONFIG_FEATURE_EDITING_MAX_LEN=1024
+CONFIG_FEATURE_EDITING_VI=y
+CONFIG_FEATURE_EDITING_HISTORY=63
+CONFIG_FEATURE_EDITING_SAVEHISTORY=y
+# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
+CONFIG_FEATURE_REVERSE_SEARCH=y
+CONFIG_FEATURE_TAB_COMPLETION=y
+# CONFIG_FEATURE_USERNAME_COMPLETION is not set
+CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
+CONFIG_FEATURE_EDITING_ASK_TERMINAL=y
+# CONFIG_FEATURE_NON_POSIX_CP is not set
+CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
+CONFIG_FEATURE_COPYBUF_KB=64
+CONFIG_FEATURE_SKIP_ROOTFS=y
+CONFIG_MONOTONIC_SYSCALL=y
+CONFIG_IOCTL_HEX2STR_ERROR=y
+# CONFIG_FEATURE_HWIB is not set
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_FEATURE_SEAMLESS_XZ=y
+CONFIG_FEATURE_SEAMLESS_LZMA=y
+CONFIG_FEATURE_SEAMLESS_BZ2=y
+CONFIG_FEATURE_SEAMLESS_GZ=y
+CONFIG_FEATURE_SEAMLESS_Z=y
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+# CONFIG_FEATURE_AR_CREATE is not set
+# CONFIG_UNCOMPRESS is not set
+CONFIG_GUNZIP=y
+CONFIG_BUNZIP2=y
+CONFIG_UNLZMA=y
+# CONFIG_FEATURE_LZMA_FAST is not set
+# CONFIG_LZMA is not set
+CONFIG_UNXZ=y
+# CONFIG_XZ is not set
+CONFIG_BZIP2=y
+CONFIG_CPIO=y
+# CONFIG_FEATURE_CPIO_O is not set
+# CONFIG_FEATURE_CPIO_P is not set
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GZIP=y
+# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set
+CONFIG_GZIP_FAST=0
+# CONFIG_LZOP is not set
+# CONFIG_LZOP_COMPR_HIGH is not set
+# CONFIG_RPM is not set
+# CONFIG_RPM2CPIO is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_AUTODETECT=y
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
+# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+# CONFIG_FEATURE_TAR_TO_COMMAND is not set
+# CONFIG_FEATURE_TAR_UNAME_GNAME is not set
+# CONFIG_FEATURE_TAR_NOPRESERVE_TIME is not set
+# CONFIG_FEATURE_TAR_SELINUX is not set
+CONFIG_UNZIP=y
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+CONFIG_CAT=y
+CONFIG_DATE=y
+CONFIG_FEATURE_DATE_ISOFMT=y
+# CONFIG_FEATURE_DATE_NANO is not set
+CONFIG_FEATURE_DATE_COMPAT=y
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+CONFIG_GROUPS=y
+CONFIG_TEST=y
+CONFIG_FEATURE_TEST_64=y
+CONFIG_TOUCH=y
+CONFIG_FEATURE_TOUCH_NODEREF=y
+CONFIG_FEATURE_TOUCH_SUSV3=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_BASE64=y
+CONFIG_WHO=y
+CONFIG_USERS=y
+# CONFIG_CAL is not set
+# CONFIG_CATV is not set
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
+CONFIG_CHROOT=y
+# CONFIG_CKSUM is not set
+# CONFIG_COMM is not set
+CONFIG_CP=y
+# CONFIG_FEATURE_CP_LONG_OPTIONS is not set
+CONFIG_CUT=y
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
+CONFIG_FEATURE_DD_IBS_OBS=y
+CONFIG_DF=y
+CONFIG_FEATURE_DF_FANCY=y
+CONFIG_DIRNAME=y
+CONFIG_DOS2UNIX=y
+CONFIG_UNIX2DOS=y
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+CONFIG_FEATURE_ENV_LONG_OPTIONS=y
+# CONFIG_EXPAND is not set
+# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set
+CONFIG_EXPR=y
+CONFIG_EXPR_MATH_SUPPORT_64=y
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+# CONFIG_FSYNC is not set
+CONFIG_HEAD=y
+# CONFIG_FEATURE_FANCY_HEAD is not set
+# CONFIG_INSTALL is not set
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+CONFIG_NICE=y
+CONFIG_NOHUP=y
+CONFIG_OD=y
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
+CONFIG_SEQ=y
+CONFIG_SHA1SUM=y
+CONFIG_SHA256SUM=y
+CONFIG_SHA512SUM=y
+CONFIG_SHA3SUM=y
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_FEATURE_FLOAT_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+# CONFIG_SPLIT is not set
+# CONFIG_FEATURE_SPLIT_FANCY is not set
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+# CONFIG_TAC is not set
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+# CONFIG_UNEXPAND is not set
+# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+CONFIG_UUDECODE=y
+CONFIG_UUENCODE=y
+CONFIG_WC=y
+# CONFIG_FEATURE_WC_LARGE is not set
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+CONFIG_FEATURE_PRESERVE_HARDLINKS=y
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+# CONFIG_FGCONSOLE is not set
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+CONFIG_KBD_MODE=y
+CONFIG_LOADFONT=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+# CONFIG_RESIZE is not set
+# CONFIG_FEATURE_RESIZE_PRINT is not set
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+CONFIG_SETFONT=y
+# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
+CONFIG_DEFAULT_SETFONT_DIR=""
+CONFIG_SETKEYCODES=y
+CONFIG_SETLOGCONS=y
+CONFIG_SHOWKEY=y
+
+#
+# Common options for loadfont and setfont
+#
+# CONFIG_FEATURE_LOADFONT_PSF2 is not set
+# CONFIG_FEATURE_LOADFONT_RAW is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_RUN_PARTS=y
+CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
+# CONFIG_FEATURE_RUN_PARTS_FANCY is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+# CONFIG_FEATURE_AWK_LIBM is not set
+CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y
+CONFIG_CMP=y
+CONFIG_DIFF=y
+# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_MAX_LEN=4096
+CONFIG_FEATURE_VI_8BIT=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_REGEX_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+CONFIG_FEATURE_VI_DOT_CMD=y
+CONFIG_FEATURE_VI_READONLY=y
+CONFIG_FEATURE_VI_SETOPTS=y
+CONFIG_FEATURE_VI_SET=y
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_ASK_TERMINAL=y
+CONFIG_FEATURE_ALLOW_EXEC=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_MAXDEPTH=y
+CONFIG_FEATURE_FIND_NEWER=y
+CONFIG_FEATURE_FIND_INUM=y
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_FEATURE_FIND_USER=y
+CONFIG_FEATURE_FIND_GROUP=y
+CONFIG_FEATURE_FIND_NOT=y
+CONFIG_FEATURE_FIND_DEPTH=y
+CONFIG_FEATURE_FIND_PAREN=y
+CONFIG_FEATURE_FIND_SIZE=y
+CONFIG_FEATURE_FIND_PRUNE=y
+CONFIG_FEATURE_FIND_DELETE=y
+CONFIG_FEATURE_FIND_PATH=y
+CONFIG_FEATURE_FIND_REGEX=y
+# CONFIG_FEATURE_FIND_CONTEXT is not set
+CONFIG_FEATURE_FIND_LINKS=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+
+#
+# Init Utilities
+#
+# CONFIG_BOOTCHARTD is not set
+# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
+# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
+# CONFIG_HALT is not set
+# CONFIG_FEATURE_CALL_TELINIT is not set
+CONFIG_TELINIT_PATH=""
+# CONFIG_INIT is not set
+# CONFIG_FEATURE_USE_INITTAB is not set
+# CONFIG_FEATURE_KILL_REMOVED is not set
+CONFIG_FEATURE_KILL_DELAY=0
+# CONFIG_FEATURE_INIT_SCTTY is not set
+# CONFIG_FEATURE_INIT_SYSLOG is not set
+# CONFIG_FEATURE_EXTRA_QUIET is not set
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+# CONFIG_FEATURE_INITRD is not set
+CONFIG_INIT_TERMINAL_TYPE=""
+# CONFIG_MESG is not set
+# CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_ADD_SHELL is not set
+# CONFIG_REMOVE_SHELL is not set
+CONFIG_FEATURE_SHADOWPASSWDS=y
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_USE_BB_SHADOW is not set
+CONFIG_USE_BB_CRYPT=y
+CONFIG_USE_BB_CRYPT_SHA=y
+# CONFIG_ADDUSER is not set
+# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set
+# CONFIG_FEATURE_CHECK_NAMES is not set
+CONFIG_FIRST_SYSTEM_ID=0
+CONFIG_LAST_SYSTEM_ID=0
+# CONFIG_ADDGROUP is not set
+# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set
+# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
+# CONFIG_DELUSER is not set
+# CONFIG_DELGROUP is not set
+# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
+CONFIG_GETTY=y
+CONFIG_LOGIN=y
+# CONFIG_LOGIN_SESSION_AS_CHILD is not set
+# CONFIG_PAM is not set
+CONFIG_LOGIN_SCRIPTS=y
+CONFIG_FEATURE_NOLOGIN=y
+CONFIG_FEATURE_SECURETTY=y
+CONFIG_PASSWD=y
+CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
+# CONFIG_CRYPTPW is not set
+# CONFIG_CHPASSWD is not set
+CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="sha512"
+# CONFIG_SU is not set
+# CONFIG_FEATURE_SU_SYSLOG is not set
+# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
+CONFIG_SULOGIN=y
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+# CONFIG_FSCK is not set
+CONFIG_LSATTR=y
+CONFIG_TUNE2FS=y
+
+#
+# Linux Module Utilities
+#
+CONFIG_MODINFO=y
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+CONFIG_INSMOD=y
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_BLACKLIST=y
+# CONFIG_DEPMOD is not set
+
+#
+# Options common to multiple modutils
+#
+# CONFIG_FEATURE_2_4_MODULES is not set
+# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
+CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
+CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
+
+#
+# Linux System Utilities
+#
+# CONFIG_BLOCKDEV is not set
+CONFIG_FSTRIM=y
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_RENAME is not set
+# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
+# CONFIG_REV is not set
+# CONFIG_ACPID is not set
+# CONFIG_FEATURE_ACPID_COMPAT is not set
+# CONFIG_BLKID is not set
+# CONFIG_FEATURE_BLKID_TYPE is not set
+CONFIG_DMESG=y
+CONFIG_FEATURE_DMESG_PRETTY=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+CONFIG_FDISK=y
+# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+CONFIG_FEATURE_GPT_LABEL=y
+CONFIG_FEATURE_FDISK_ADVANCED=y
+CONFIG_FINDFS=y
+CONFIG_FLOCK=y
+# CONFIG_FREERAMDISK is not set
+# CONFIG_FSCK_MINIX is not set
+# CONFIG_MKFS_EXT2 is not set
+# CONFIG_MKFS_MINIX is not set
+# CONFIG_FEATURE_MINIX2 is not set
+# CONFIG_MKFS_REISER is not set
+CONFIG_MKFS_VFAT=y
+CONFIG_GETOPT=y
+CONFIG_FEATURE_GETOPT_LONG=y
+CONFIG_HEXDUMP=y
+# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
+CONFIG_HD=y
+# CONFIG_HWCLOCK is not set
+# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set
+# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+CONFIG_LOSETUP=y
+CONFIG_LSPCI=y
+CONFIG_LSUSB=y
+CONFIG_MKSWAP=y
+CONFIG_FEATURE_MKSWAP_UUID=y
+CONFIG_MORE=y
+CONFIG_MOUNT=y
+# CONFIG_FEATURE_MOUNT_FAKE is not set
+# CONFIG_FEATURE_MOUNT_VERBOSE is not set
+CONFIG_FEATURE_MOUNT_HELPERS=y
+CONFIG_FEATURE_MOUNT_LABEL=y
+CONFIG_FEATURE_MOUNT_NFS=y
+CONFIG_FEATURE_MOUNT_CIFS=y
+CONFIG_FEATURE_MOUNT_FLAGS=y
+CONFIG_FEATURE_MOUNT_FSTAB=y
+# CONFIG_PIVOT_ROOT is not set
+CONFIG_RDATE=y
+CONFIG_RDEV=y
+CONFIG_READPROFILE=y
+# CONFIG_RTCWAKE is not set
+# CONFIG_SCRIPT is not set
+# CONFIG_SCRIPTREPLAY is not set
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+# CONFIG_FEATURE_SWAPON_PRI is not set
+CONFIG_SWITCH_ROOT=y
+CONFIG_UMOUNT=y
+CONFIG_FEATURE_UMOUNT_ALL=y
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+CONFIG_FEATURE_MOUNT_LOOP_CREATE=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+CONFIG_VOLUMEID=y
+
+#
+# Filesystem/Volume identification
+#
+CONFIG_FEATURE_VOLUMEID_BTRFS=y
+CONFIG_FEATURE_VOLUMEID_CRAMFS=y
+CONFIG_FEATURE_VOLUMEID_EXFAT=y
+CONFIG_FEATURE_VOLUMEID_EXT=y
+CONFIG_FEATURE_VOLUMEID_F2FS=y
+CONFIG_FEATURE_VOLUMEID_FAT=y
+CONFIG_FEATURE_VOLUMEID_HFS=y
+CONFIG_FEATURE_VOLUMEID_ISO9660=y
+CONFIG_FEATURE_VOLUMEID_JFS=y
+CONFIG_FEATURE_VOLUMEID_LINUXRAID=y
+CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
+CONFIG_FEATURE_VOLUMEID_LUKS=y
+CONFIG_FEATURE_VOLUMEID_NILFS=y
+CONFIG_FEATURE_VOLUMEID_NTFS=y
+CONFIG_FEATURE_VOLUMEID_OCFS2=y
+CONFIG_FEATURE_VOLUMEID_REISERFS=y
+CONFIG_FEATURE_VOLUMEID_ROMFS=y
+# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set
+CONFIG_FEATURE_VOLUMEID_SYSV=y
+CONFIG_FEATURE_VOLUMEID_UDF=y
+CONFIG_FEATURE_VOLUMEID_XFS=y
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_CONSPY is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_MAXLINES=9999999
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+# CONFIG_FEATURE_LESS_MARKS is not set
+CONFIG_FEATURE_LESS_REGEXP=y
+CONFIG_FEATURE_LESS_WINCH=y
+CONFIG_FEATURE_LESS_ASK_TERMINAL=y
+# CONFIG_FEATURE_LESS_DASHCMD is not set
+# CONFIG_FEATURE_LESS_LINENUMS is not set
+# CONFIG_NANDWRITE is not set
+# CONFIG_NANDDUMP is not set
+# CONFIG_RFKILL is not set
+CONFIG_SETSERIAL=y
+# CONFIG_UBIATTACH is not set
+# CONFIG_UBIDETACH is not set
+# CONFIG_UBIMKVOL is not set
+# CONFIG_UBIRMVOL is not set
+# CONFIG_UBIRSVOL is not set
+# CONFIG_UBIUPDATEVOL is not set
+# CONFIG_WALL is not set
+# CONFIG_ADJTIMEX is not set
+CONFIG_BBCONFIG=y
+CONFIG_FEATURE_COMPRESS_BBCONFIG=y
+# CONFIG_BEEP is not set
+CONFIG_FEATURE_BEEP_FREQ=0
+CONFIG_FEATURE_BEEP_LENGTH_MS=0
+# CONFIG_CHAT is not set
+# CONFIG_FEATURE_CHAT_NOFAIL is not set
+# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
+# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
+# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
+# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
+# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
+# CONFIG_FEATURE_CHAT_CLR_ABORT is not set
+CONFIG_CHRT=y
+CONFIG_CROND=y
+# CONFIG_FEATURE_CROND_D is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+CONFIG_FEATURE_CROND_DIR="/etc/cron"
+CONFIG_CRONTAB=y
+CONFIG_DC=y
+# CONFIG_FEATURE_DC_LIBM is not set
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+CONFIG_DEVMEM=y
+CONFIG_EJECT=y
+CONFIG_FEATURE_EJECT_SCSI=y
+CONFIG_FBSPLASH=y
+# CONFIG_FLASHCP is not set
+# CONFIG_FLASH_LOCK is not set
+# CONFIG_FLASH_UNLOCK is not set
+# CONFIG_FLASH_ERASEALL is not set
+CONFIG_IONICE=y
+CONFIG_INOTIFYD=y
+# CONFIG_LAST is not set
+# CONFIG_FEATURE_LAST_SMALL is not set
+# CONFIG_FEATURE_LAST_FANCY is not set
+# CONFIG_HDPARM is not set
+# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
+# CONFIG_MAKEDEVS is not set
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+# CONFIG_MAN is not set
+CONFIG_MICROCOM=y
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RAIDAUTORUN is not set
+CONFIG_READAHEAD=y
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+CONFIG_SETSID=y
+CONFIG_STRINGS=y
+CONFIG_TASKSET=y
+CONFIG_FEATURE_TASKSET_FANCY=y
+CONFIG_TIME=y
+CONFIG_TIMEOUT=y
+# CONFIG_TTYSIZE is not set
+CONFIG_VOLNAME=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+CONFIG_NAMEIF=y
+CONFIG_FEATURE_NAMEIF_EXTENDED=y
+CONFIG_NBDCLIENT=y
+CONFIG_NC=y
+CONFIG_NC_SERVER=y
+CONFIG_NC_EXTRA=y
+# CONFIG_NC_110_COMPAT is not set
+CONFIG_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_WHOIS=y
+CONFIG_FEATURE_IPV6=y
+# CONFIG_FEATURE_UNIX_LOCAL is not set
+CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
+# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
+CONFIG_ARP=y
+# CONFIG_ARPING is not set
+CONFIG_BRCTL=y
+CONFIG_FEATURE_BRCTL_FANCY=y
+CONFIG_FEATURE_BRCTL_SHOW=y
+# CONFIG_DNSD is not set
+CONFIG_ETHER_WAKE=y
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPD is not set
+# CONFIG_FEATURE_FTP_WRITE is not set
+# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_RANGES is not set
+# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set
+# CONFIG_FEATURE_HTTPD_PROXY is not set
+# CONFIG_FEATURE_HTTPD_GZIP is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
+CONFIG_FEATURE_IFCONFIG_HW=y
+# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
+# CONFIG_IFENSLAVE is not set
+# CONFIG_IFPLUGD is not set
+CONFIG_IFUPDOWN=y
+CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
+CONFIG_FEATURE_IFUPDOWN_IP=y
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
+CONFIG_INETD=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y
+CONFIG_FEATURE_INETD_RPC=y
+CONFIG_IP=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+CONFIG_FEATURE_IP_RULE=y
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_IPRULE is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+CONFIG_NETSTAT=y
+CONFIG_FEATURE_NETSTAT_WIDE=y
+CONFIG_FEATURE_NETSTAT_PRG=y
+CONFIG_NSLOOKUP=y
+# CONFIG_NTPD is not set
+# CONFIG_FEATURE_NTPD_SERVER is not set
+# CONFIG_PSCAN is not set
+CONFIG_ROUTE=y
+# CONFIG_SLATTACH is not set
+# CONFIG_TCPSVD is not set
+CONFIG_TELNET=y
+CONFIG_FEATURE_TELNET_TTYPE=y
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+CONFIG_TELNETD=y
+# CONFIG_FEATURE_TELNETD_STANDALONE is not set
+# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
+CONFIG_TFTP=y
+# CONFIG_TFTPD is not set
+
+#
+# Common options for tftp/tftpd
+#
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
+# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set
+# CONFIG_TFTP_DEBUG is not set
+CONFIG_TRACEROUTE=y
+CONFIG_TRACEROUTE6=y
+CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+CONFIG_FEATURE_TRACEROUTE_USE_ICMP=y
+CONFIG_TUNCTL=y
+CONFIG_FEATURE_TUNCTL_UG=y
+# CONFIG_UDHCPC6 is not set
+# CONFIG_UDHCPD is not set
+# CONFIG_DHCPRELAY is not set
+# CONFIG_DUMPLEASES is not set
+# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
+# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
+CONFIG_DHCPD_LEASES_FILE=""
+CONFIG_UDHCPC=y
+CONFIG_FEATURE_UDHCPC_ARPING=y
+# CONFIG_FEATURE_UDHCP_PORT is not set
+CONFIG_UDHCP_DEBUG=0
+# CONFIG_FEATURE_UDHCP_RFC3397 is not set
+CONFIG_FEATURE_UDHCP_8021Q=y
+CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
+CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
+CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -b -T3 -A10"
+# CONFIG_UDPSVD is not set
+CONFIG_VCONFIG=y
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+CONFIG_FEATURE_WGET_TIMEOUT=y
+# CONFIG_ZCIP is not set
+
+#
+# Print Utilities
+#
+# CONFIG_LPD is not set
+# CONFIG_LPR is not set
+# CONFIG_LPQ is not set
+
+#
+# Mail Utilities
+#
+# CONFIG_MAKEMIME is not set
+CONFIG_FEATURE_MIME_CHARSET="us-ascii"
+# CONFIG_POPMAILDIR is not set
+# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
+# CONFIG_REFORMIME is not set
+# CONFIG_FEATURE_REFORMIME_COMPAT is not set
+CONFIG_SENDMAIL=y
+
+#
+# Process Utilities
+#
+CONFIG_IOSTAT=y
+CONFIG_LSOF=y
+CONFIG_MPSTAT=y
+CONFIG_NMETER=y
+# CONFIG_PMAP is not set
+CONFIG_POWERTOP=y
+# CONFIG_PSTREE is not set
+# CONFIG_PWDX is not set
+CONFIG_SMEMCAP=y
+# CONFIG_TOP is not set
+# CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE is not set
+# CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS is not set
+# CONFIG_FEATURE_TOP_SMP_CPU is not set
+# CONFIG_FEATURE_TOP_DECIMALS is not set
+# CONFIG_FEATURE_TOP_SMP_PROCESS is not set
+# CONFIG_FEATURE_TOPMEM is not set
+# CONFIG_UPTIME is not set
+# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set
+# CONFIG_FREE is not set
+# CONFIG_FUSER is not set
+# CONFIG_KILL is not set
+# CONFIG_KILLALL is not set
+# CONFIG_KILLALL5 is not set
+# CONFIG_PGREP is not set
+CONFIG_PIDOF=y
+CONFIG_FEATURE_PIDOF_SINGLE=y
+CONFIG_FEATURE_PIDOF_OMIT=y
+# CONFIG_PKILL is not set
+# CONFIG_PS is not set
+# CONFIG_FEATURE_PS_WIDE is not set
+# CONFIG_FEATURE_PS_LONG is not set
+# CONFIG_FEATURE_PS_TIME is not set
+# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
+# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
+CONFIG_RENICE=y
+# CONFIG_BB_SYSCTL is not set
+# CONFIG_FEATURE_SHOW_THREADS is not set
+# CONFIG_WATCH is not set
+
+#
+# Runit Utilities
+#
+# CONFIG_RUNSV is not set
+# CONFIG_RUNSVDIR is not set
+# CONFIG_FEATURE_RUNSVDIR_LOG is not set
+# CONFIG_SV is not set
+CONFIG_SV_DEFAULT_SERVICE_DIR=""
+# CONFIG_SVLOGD is not set
+# CONFIG_CHPST is not set
+# CONFIG_SETUIDGID is not set
+# CONFIG_ENVUIDGID is not set
+# CONFIG_ENVDIR is not set
+# CONFIG_SOFTLIMIT is not set
+# CONFIG_CHCON is not set
+# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
+# CONFIG_GETENFORCE is not set
+# CONFIG_GETSEBOOL is not set
+# CONFIG_LOAD_POLICY is not set
+# CONFIG_MATCHPATHCON is not set
+# CONFIG_RESTORECON is not set
+# CONFIG_RUNCON is not set
+# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
+# CONFIG_SELINUXENABLED is not set
+# CONFIG_SETENFORCE is not set
+# CONFIG_SETFILES is not set
+# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
+# CONFIG_SETSEBOOL is not set
+# CONFIG_SESTATUS is not set
+
+#
+# Shells
+#
+CONFIG_ASH=y
+CONFIG_ASH_BASH_COMPAT=y
+CONFIG_ASH_IDLE_TIMEOUT=y
+CONFIG_ASH_JOB_CONTROL=y
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_GETOPTS=y
+CONFIG_ASH_BUILTIN_ECHO=y
+CONFIG_ASH_BUILTIN_PRINTF=y
+CONFIG_ASH_BUILTIN_TEST=y
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+CONFIG_ASH_RANDOM_SUPPORT=y
+CONFIG_ASH_EXPAND_PRMT=y
+# CONFIG_CTTYHACK is not set
+# CONFIG_HUSH is not set
+# CONFIG_HUSH_BASH_COMPAT is not set
+# CONFIG_HUSH_BRACE_EXPANSION is not set
+# CONFIG_HUSH_HELP is not set
+# CONFIG_HUSH_INTERACTIVE is not set
+# CONFIG_HUSH_SAVEHISTORY is not set
+# CONFIG_HUSH_JOB is not set
+# CONFIG_HUSH_TICK is not set
+# CONFIG_HUSH_IF is not set
+# CONFIG_HUSH_LOOPS is not set
+# CONFIG_HUSH_CASE is not set
+# CONFIG_HUSH_FUNCTIONS is not set
+# CONFIG_HUSH_LOCAL is not set
+# CONFIG_HUSH_RANDOM_SUPPORT is not set
+# CONFIG_HUSH_EXPORT_N is not set
+# CONFIG_HUSH_MODE_X is not set
+# CONFIG_MSH is not set
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+CONFIG_FEATURE_BASH_IS_ASH=y
+# CONFIG_FEATURE_BASH_IS_HUSH is not set
+# CONFIG_FEATURE_BASH_IS_NONE is not set
+CONFIG_SH_MATH_SUPPORT=y
+# CONFIG_SH_MATH_SUPPORT_64 is not set
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE is not set
+# CONFIG_FEATURE_SH_NOFORK is not set
+CONFIG_FEATURE_SH_HISTFILESIZE=y
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_SYSLOGD_DUP=y
+CONFIG_FEATURE_SYSLOGD_CFG=y
+CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
+CONFIG_FEATURE_KMSG_SYSLOG=y
+CONFIG_KLOGD=y
+
+#
+# klogd should not be used together with syslog to kernel printk buffer
+#
+CONFIG_FEATURE_KLOGD_KLOGCTL=y
+CONFIG_LOGGER=y
--- /dev/null
+#!/bin/sh
+#
+# start/stop inetd super server.
+
+if ! [ -x /usr/sbin/inetd ]; then
+ exit 0
+fi
+
+case "$1" in
+ start)
+ echo -n "Starting internet superserver:"
+ echo -n " inetd" ; start-stop-daemon -S -x /usr/sbin/inetd > /dev/null
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping internet superserver:"
+ echo -n " inetd" ; start-stop-daemon -K -x /usr/sbin/inetd > /dev/null
+ echo "."
+ ;;
+ restart)
+ echo -n "Restarting internet superserver:"
+ echo -n " inetd "
+ killall -HUP inetd
+ echo "."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/inetd {start|stop|restart}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
--- /dev/null
+# /etc/inetd.conf: see inetd(8) for further informations.
+#
+# Internet server configuration database
+#
+# If you want to disable an entry so it isn't touched during
+# package updates just comment it out with a single '#' character.
+#
+# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
+#
+#:INTERNAL: Internal services
+#echo stream tcp nowait root internal
+#echo dgram udp wait root internal
+#chargen stream tcp nowait root internal
+#chargen dgram udp wait root internal
+#discard stream tcp nowait root internal
+#discard dgram udp wait root internal
+#daytime stream tcp nowait root internal
+#daytime dgram udp wait root internal
+#time stream tcp nowait root internal
+#time dgram udp wait root internal
+ftp stream tcp nowait root /usr/sbin/vsftpd vsftpd
+telnet stream tcp nowait root /usr/sbin/telnetd telnetd
+8001 stream tcp nowait root /usr/bin/streamproxy streamproxy
--- /dev/null
+Index: busybox-1.18.5/util-linux/mount.c
+===================================================================
+--- busybox-1.18.5.orig/util-linux/mount.c
++++ busybox-1.18.5/util-linux/mount.c
+@@ -1934,6 +1934,8 @@ int mount_main(int argc UNUSED_PARAM, ch
+ // "proc") or a full path from root
+ if (argv[0]) {
+
++ // Check for UUID= or LABEL= entries too
++ resolve_mount_spec(&mtcur->mnt_fsname);
+ // Is this what we're looking for?
+ if (strcmp(argv[0], mtcur->mnt_fsname) != 0
+ && strcmp(storage_path, mtcur->mnt_fsname) != 0
+++ /dev/null
-PR .= "-vuplus11"
-
-SRC_URI += " \
- file://0001-ifupdown-support-post-up-pre-down-hooks.patch \
- file://0002-ifupdown-code-shrink.patch \
- file://0003-ifupdown-remove-interface-from-state_list-if-iface_u.patch \
- file://0004-ifupdown-support-metric-for-static-default-gw.patch \
- file://0005-ifupdown-improve-compatibility-with-Debian.patch \
- file://0006-get_linux_version_code-don-t-fail-on-3.0-foo.patch \
- file://0007-ifplugd-move-read_pid-to-libbb-pidfile.c-and-rename-.patch \
- file://0009-udhcpc-calculate-broadcast-address-if-not-given-by-s.patch \
- file://0010-udhcpc-obtain-hostname-from-OS-by-default.patch \
- file://0011-mount-don-t-pass-option-auto-to-kernel.patch \
- file://0001-work-around-linux-ext2_fs.h-breakage.patch \
- file://0002-Create-and-use-our-own-copy-of-linux-ext2_fs.h.patch \
- file://0003-Drop-include-bb_linux_ext2_fs.h-use-existing-e2fspro.patch \
- file://mount_single_uuid.patch \
- file://change-passwd-default-algorithm.patch \
- file://inetd \
- file://inetd.conf \
-"
-# 0008-ifupdown-dhcp_down-wait-until-udhcpc-has-been-killed.patch is removed. if patched, postdown is not working.(/etc/network/interfaces)
-
-DEPENDS += "mtd-utils"
-
-PACKAGES =+ "${PN}-inetd"
-INITSCRIPT_PACKAGES += "${PN}-inetd"
-INITSCRIPT_NAME_${PN}-inetd = "inetd.${BPN}"
-CONFFILES_${PN}-inetd = "${sysconfdir}/inetd.conf"
-FILES_${PN}-inetd = "${sysconfdir}/init.d/inetd.${BPN} ${sysconfdir}/inetd.conf"
-RDEPENDS_${PN}-inetd += "${PN}"
-
-RRECOMMENDS_${PN} += "${PN}-inetd"
-
-do_install_append() {
- if grep -q "CONFIG_CRONTAB=y" ${WORKDIR}/defconfig; then
- install -d ${D}${sysconfdir}/cron/crontabs
- fi
-}
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/${P}:"
-
--- /dev/null
+PR .= "-vuplus0"
+
+SRC_URI += " \
+ file://0011-mount-don-t-pass-option-auto-to-kernel.patch \
+ file://mount_single_uuid.patch \
+ file://inetd \
+ file://inetd.conf \
+"
+
+DEPENDS += "mtd-utils"
+
+PACKAGES =+ "${PN}-inetd"
+INITSCRIPT_PACKAGES += "${PN}-inetd"
+INITSCRIPT_NAME_${PN}-inetd = "inetd.${BPN}"
+CONFFILES_${PN}-inetd = "${sysconfdir}/inetd.conf"
+FILES_${PN}-inetd = "${sysconfdir}/init.d/inetd.${BPN} ${sysconfdir}/inetd.conf"
+RDEPENDS_${PN}-inetd += "${PN}"
+
+RRECOMMENDS_${PN} += "${PN}-inetd"
+
+do_install_append() {
+ if grep -q "CONFIG_CRONTAB=y" ${WORKDIR}/defconfig; then
+ install -d ${D}${sysconfdir}/cron/crontabs
+ fi
+}
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/${P}:"
+