busybox: do not fetch fixes patches but store them in metadata
authorMarcin Juszkiewicz <hrw@openembedded.org>
Wed, 18 Mar 2009 12:16:01 +0000 (13:16 +0100)
committerMarcin Juszkiewicz <hrw@openembedded.org>
Wed, 18 Mar 2009 13:01:25 +0000 (14:01 +0100)
I am tired of discussions how to solve situation where upstream changes
it's files without versioning them and we workaround it instead of
solving.

recipes/busybox/busybox-1.13.2/busybox-1.13.2-depmod.patch [new file with mode: 0644]
recipes/busybox/busybox-1.13.2/busybox-1.13.2-init.patch [new file with mode: 0644]
recipes/busybox/busybox-1.13.2/busybox-1.13.2-mdev.patch [new file with mode: 0644]
recipes/busybox/busybox-1.13.2/busybox-1.13.2-modprobe.patch [new file with mode: 0644]
recipes/busybox/busybox-1.13.2/busybox-1.13.2-tar.patch [new file with mode: 0644]
recipes/busybox/busybox_1.13.2.bb

diff --git a/recipes/busybox/busybox-1.13.2/busybox-1.13.2-depmod.patch b/recipes/busybox/busybox-1.13.2/busybox-1.13.2-depmod.patch
new file mode 100644 (file)
index 0000000..32d6163
--- /dev/null
@@ -0,0 +1,121 @@
+--- busybox-1.13.2/modutils/depmod.c   Sun Nov  9 18:28:03 2008
++++ busybox-1.13.2-depmod/modutils/depmod.c    Mon Jan 12 23:12:59 2009
+@@ -33,7 +33,7 @@
+ enum {
+       ARG_a = (1<<0), /* All modules, ignore mods in argv */
+       ARG_A = (1<<1), /* Only emit .ko that are newer than modules.dep file */
+-      ARG_b = (1<<2), /* not /lib/modules/$(uname -r)/ but this base-dir */
++      ARG_b = (1<<2), /* base directory when modules are in staging area */
+       ARG_e = (1<<3), /* with -F, print unresolved symbols */
+       ARG_F = (1<<4), /* System.map that contains the symbols */
+       ARG_n = (1<<5)  /* dry-run, print to stdout only */
+@@ -57,7 +57,7 @@
+       *first = info;
+       info->dnext = info->dprev = info;
+-      info->name = xstrdup(fname);
++      info->name = xasprintf("/%s", fname);
+       info->modname = filename2modname(fname, NULL);
+       for (ptr = image; ptr < image + len - 10; ptr++) {
+               if (strncmp(ptr, "depends=", 8) == 0) {
+@@ -123,44 +123,61 @@
+       }
+ }
++static void xfreopen_write(const char *file, FILE *f)
++{
++      if (freopen(file, "w", f) == NULL)
++              bb_perror_msg_and_die("can't open '%s'", file);
++}
++
+ int depmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+ int depmod_main(int argc UNUSED_PARAM, char **argv)
+ {
+       module_info *modules = NULL, *m, *dep;
+-      char *moddir_base = (char *)CONFIG_DEFAULT_MODULES_DIR;
++      const char *moddir_base = "/";
++      char *moddir, *version;
++      struct utsname uts;
+       int tmp;
+       getopt32(argv, "aAb:eF:n", &moddir_base, NULL);
+       argv += optind;
+       /* goto modules location */
++      xchdir(moddir_base);
+       /* If a version is provided, then that kernel version's module directory
+        * is used, rather than the current kernel version (as returned by
+        * "uname -r").  */
+-      xchdir(moddir_base);
+-      if (*argv && (sscanf(*argv, "%d.%d.%d", &tmp, &tmp, &tmp) == 3)) {
+-              xchdir(*argv++);
++      if (*argv && sscanf(*argv, "%d.%d.%d", &tmp, &tmp, &tmp) == 3) {
++              version = *argv++;
+       } else {
+-              struct utsname uts;
+               uname(&uts);
+-              xchdir(uts.release);
++              version = uts.release;
+       }
+-      /* If no modules are given on the command-line, -a is on per default.  */
+-      option_mask32 |= *argv == NULL;
++      moddir = concat_path_file(&CONFIG_DEFAULT_MODULES_DIR[1], version);
+       /* Scan modules */
+-      moddir_base = xrealloc_getcwd_or_warn(NULL);
+-      do {
+-              recursive_action((option_mask32 & ARG_a) ? moddir_base : *argv,
+-                              ACTION_RECURSE, parse_module, NULL,  &modules, 0);
+-      } while (!(option_mask32 & ARG_a) && *(++argv));
++      if (*argv) {
++              char *modfile;
++              struct stat sb;
++              do {
++                      modfile = concat_path_file(moddir, *argv);
++                      xstat(modfile, &sb);
++                      parse_module(modfile, &sb, &modules, 0);
++                      free(modfile);
++              } while (*(++argv));
++      } else {
++              recursive_action(moddir, ACTION_RECURSE,
++                               parse_module, NULL, &modules, 0);
++      }
++
++      /* Prepare for writing out the dep files */
++      xchdir(moddir);
+       if (ENABLE_FEATURE_CLEAN_UP)
+-              free(moddir_base);
++              free(moddir);
+       /* Generate dependency and alias files */
+       if (!(option_mask32 & ARG_n))
+-              freopen(CONFIG_DEFAULT_DEPMOD_FILE, "w", stdout);
++              xfreopen_write(CONFIG_DEFAULT_DEPMOD_FILE, stdout);
+       for (m = modules; m != NULL; m = m->next) {
+               printf("%s:", m->name);
+@@ -174,12 +191,12 @@
+                       dep->dprev->dnext = dep->dnext;
+                       dep->dnext = dep->dprev = dep;
+               }
+-              puts("");
++              bb_putchar('\n');
+       }
+ #if ENABLE_FEATURE_MODUTILS_ALIAS
+       if (!(option_mask32 & ARG_n))
+-              freopen("modules.alias", "w", stdout);
++              xfreopen_write("modules.alias", stdout);
+       for (m = modules; m != NULL; m = m->next) {
+               while (m->aliases) {
+                       printf("alias %s %s\n",
+@@ -190,7 +207,7 @@
+ #endif
+ #if ENABLE_FEATURE_MODUTILS_SYMBOLS
+       if (!(option_mask32 & ARG_n))
+-              freopen("modules.symbols", "w", stdout);
++              xfreopen_write("modules.symbols", stdout);
+       for (m = modules; m != NULL; m = m->next) {
+               while (m->symbols) {
+                       printf("alias symbol:%s %s\n",
diff --git a/recipes/busybox/busybox-1.13.2/busybox-1.13.2-init.patch b/recipes/busybox/busybox-1.13.2/busybox-1.13.2-init.patch
new file mode 100644 (file)
index 0000000..1d98467
--- /dev/null
@@ -0,0 +1,50 @@
+--- busybox-1.13.2/init/init.c Wed Dec 31 04:06:45 2008
++++ busybox-1.13.2-init/init/init.c    Thu Jan 29 03:02:13 2009
+@@ -671,15 +671,14 @@
+  */
+ static void parse_inittab(void)
+ {
++#if ENABLE_FEATURE_USE_INITTAB
+       char *token[4];
+-      /* order must correspond to SYSINIT..RESTART constants */
+-      static const char actions[] ALIGN1 =
+-              "sysinit\0""respawn\0""askfirst\0""wait\0""once\0"
+-              "ctrlaltdel\0""shutdown\0""restart\0";
++      parser_t *parser = config_open2("/etc/inittab", fopen_for_read);
+-      parser_t *parser = config_open2(INITTAB, fopen_for_read);
+-      /* No inittab file -- set up some default behavior */
+-      if (parser == NULL) {
++      if (parser == NULL)
++#endif
++      {
++              /* No inittab file -- set up some default behavior */
+               /* Reboot on Ctrl-Alt-Del */
+               new_init_action(CTRLALTDEL, "reboot", "");
+               /* Umount all filesystems on halt/reboot */
+@@ -699,11 +698,17 @@
+               new_init_action(SYSINIT, INIT_SCRIPT, "");
+               return;
+       }
++
++#if ENABLE_FEATURE_USE_INITTAB
+       /* optional_tty:ignored_runlevel:action:command
+        * Delims are not to be collapsed and need exactly 4 tokens
+        */
+       while (config_read(parser, token, 4, 0, "#:",
+                               PARSE_NORMAL & ~(PARSE_TRIM | PARSE_COLLAPSE))) {
++              /* order must correspond to SYSINIT..RESTART constants */
++              static const char actions[] ALIGN1 =
++                      "sysinit\0""respawn\0""askfirst\0""wait\0""once\0"
++                      "ctrlaltdel\0""shutdown\0""restart\0";
+               int action;
+               char *tty = token[0];
+@@ -727,6 +732,7 @@
+                               parser->lineno);
+       }
+       config_close(parser);
++#endif
+ }
+ #if ENABLE_FEATURE_USE_INITTAB
diff --git a/recipes/busybox/busybox-1.13.2/busybox-1.13.2-mdev.patch b/recipes/busybox/busybox-1.13.2/busybox-1.13.2-mdev.patch
new file mode 100644 (file)
index 0000000..bd17f99
--- /dev/null
@@ -0,0 +1,39 @@
+--- busybox-1.13.2/testsuite/mdev.tests        Sun Nov  9 18:28:19 2008
++++ busybox-1.13.2-mdev/testsuite/mdev.tests   Mon Jan 12 08:59:15 2009
+@@ -111,6 +111,22 @@
+ # continuing to use directory structure from prev test
+ rm -rf mdev.testdir/dev/*
++echo "sda 0:0 644 =block/ @echo @echo TEST" >mdev.testdir/etc/mdev.conf
++testing "mdev move and command" \
++      "env - PATH=$PATH ACTION=add DEVPATH=/block/sda chroot mdev.testdir /mdev 2>&1;
++      ls -lnR mdev.testdir/dev | $FILTER_LS2" \
++"\
++@echo TEST
++mdev.testdir/dev:
++drwxr-xr-x 2 0 0 block
++
++mdev.testdir/dev/block:
++brw-r--r-- 1 0 0 sda
++" \
++      "" ""
++
++# continuing to use directory structure from prev test
++rm -rf mdev.testdir/dev/*
+ echo "@8,0 :1 644" >mdev.testdir/etc/mdev.conf
+ testing "mdev #maj,min and no explicit uid" \
+       "env - PATH=$PATH ACTION=add DEVPATH=/block/sda chroot mdev.testdir /mdev 2>&1;
+--- busybox-1.13.2/util-linux/mdev.c   Sun Nov  9 18:28:22 2008
++++ busybox-1.13.2-mdev/util-linux/mdev.c      Mon Jan 12 08:59:15 2009
+@@ -179,8 +179,9 @@
+                       unsigned i, n;
+ #endif
+                       char *a = val;
+-                      s = strchr(val, ' ');
+-                      val = (s && s[1]) ? s+1 : NULL;
++                      s = strchrnul(val, ' ');
++                      val = (s[0] && s[1]) ? s+1 : NULL;
++                      s[0] = '\0';
+ #if ENABLE_FEATURE_MDEV_RENAME_REGEXP
+                       /* substitute %1..9 with off[1..9], if any */
+                       n = 0;
diff --git a/recipes/busybox/busybox-1.13.2/busybox-1.13.2-modprobe.patch b/recipes/busybox/busybox-1.13.2/busybox-1.13.2-modprobe.patch
new file mode 100644 (file)
index 0000000..8fd7dc4
--- /dev/null
@@ -0,0 +1,99 @@
+--- busybox-1.13.2/modutils/modutils-24.c      Sat Nov 29 07:48:56 2008
++++ busybox-1.13.2-modprobe/modutils/modutils-24.c     Sun Feb  1 00:08:26 2009
+@@ -2150,7 +2150,7 @@
+       sec->name = name;
+       sec->idx = newidx;
+       if (size)
+-              sec->contents = xmalloc(size);
++              sec->contents = xzalloc(size);
+       obj_insert_section_load_order(f, sec);
+@@ -2165,7 +2165,7 @@
+       int newidx = f->header.e_shnum++;
+       struct obj_section *sec;
+-      f->sections = xrealloc(f->sections, (newidx + 1) * sizeof(sec));
++      f->sections = xrealloc_vector(f->sections, 2, newidx);
+       f->sections[newidx] = sec = arch_new_section();
+       sec->header.sh_type = SHT_PROGBITS;
+@@ -2175,7 +2175,7 @@
+       sec->name = name;
+       sec->idx = newidx;
+       if (size)
+-              sec->contents = xmalloc(size);
++              sec->contents = xzalloc(size);
+       sec->load_next = f->load_order;
+       f->load_order = sec;
+@@ -2571,8 +2571,7 @@
+       /* Collect the modules' symbols.  */
+       if (nmod) {
+-              ext_modules = modules = xmalloc(nmod * sizeof(*modules));
+-              memset(modules, 0, nmod * sizeof(*modules));
++              ext_modules = modules = xzalloc(nmod * sizeof(*modules));
+               for (i = 0, mn = module_names, m = modules;
+                               i < nmod; ++i, ++m, mn += strlen(mn) + 1) {
+                       struct new_module_info info;
+@@ -2652,13 +2651,14 @@
+ }
+-static void  new_create_this_module(struct obj_file *f, const char *m_name)
++static void new_create_this_module(struct obj_file *f, const char *m_name)
+ {
+       struct obj_section *sec;
+       sec = obj_create_alloced_section_first(f, ".this", tgt_sizeof_long,
+                       sizeof(struct new_module));
+-      memset(sec->contents, 0, sizeof(struct new_module));
++      /* done by obj_create_alloced_section_first: */
++      /*memset(sec->contents, 0, sizeof(struct new_module));*/
+       obj_add_symbol(f, SPFX "__this_module", -1,
+                       ELF_ST_INFO(STB_LOCAL, STT_OBJECT), sec->idx, 0,
+@@ -2965,9 +2965,9 @@
+               if (i == f->header.e_shnum) {
+                       struct obj_section *sec;
++                      f->header.e_shnum++;
+                       f->sections = xrealloc_vector(f->sections, 2, i);
+                       f->sections[i] = sec = arch_new_section();
+-                      f->header.e_shnum = i + 1;
+                       sec->header.sh_type = SHT_PROGBITS;
+                       sec->header.sh_flags = SHF_WRITE | SHF_ALLOC;
+@@ -3006,12 +3006,9 @@
+       for (i = 0; i < f->header.e_shnum; ++i) {
+               struct obj_section *s = f->sections[i];
+               if (s->header.sh_type == SHT_NOBITS) {
++                      s->contents = NULL;
+                       if (s->header.sh_size != 0)
+-                              s->contents = memset(xmalloc(s->header.sh_size),
+-                                              0, s->header.sh_size);
+-                      else
+-                              s->contents = NULL;
+-
++                              s->contents = xzalloc(s->header.sh_size);
+                       s->header.sh_type = SHT_PROGBITS;
+               }
+       }
+@@ -3275,14 +3272,13 @@
+                       case SHT_SYMTAB:
+                       case SHT_STRTAB:
+                       case SHT_RELM:
++                              sec->contents = NULL;
+                               if (sec->header.sh_size > 0) {
+-                                      sec->contents = xmalloc(sec->header.sh_size);
++                                      sec->contents = xzalloc(sec->header.sh_size);
+                                       fseek(fp, sec->header.sh_offset, SEEK_SET);
+                                       if (fread(sec->contents, sec->header.sh_size, 1, fp) != 1) {
+                                               bb_perror_msg_and_die("error reading ELF section data");
+                                       }
+-                              } else {
+-                                      sec->contents = NULL;
+                               }
+                               break;
diff --git a/recipes/busybox/busybox-1.13.2/busybox-1.13.2-tar.patch b/recipes/busybox/busybox-1.13.2/busybox-1.13.2-tar.patch
new file mode 100644 (file)
index 0000000..3a59081
--- /dev/null
@@ -0,0 +1,11 @@
+--- busybox-1.13.2/archival/tar.c      Sun Nov  9 18:28:02 2008
++++ busybox-1.13.2-tar/archival/tar.c  Tue Jan 20 03:52:04 2009
+@@ -591,8 +591,6 @@
+       struct TarBallInfo tbInfo;
+       tbInfo.hlInfoHead = NULL;
+-
+-      fchmod(tar_fd, 0644);
+       tbInfo.tarFd = tar_fd;
+       tbInfo.verboseFlag = verboseFlag;
index cc2cb2b..d3e7f9a 100644 (file)
@@ -3,11 +3,11 @@ PR = "r16"
 
 SRC_URI = "\
   http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
-  http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-depmod.patch;patch=1 \
-  http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-init.patch;patch=1 \
-  http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-mdev.patch;patch=1 \
-  http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-modprobe.patch;patch=1 \
-  http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-tar.patch;patch=1 \
+  file://busybox-1.13.2-depmod.patch;patch=1 \
+  file://busybox-1.13.2-init.patch;patch=1 \
+  file://busybox-1.13.2-mdev.patch;patch=1 \
+  file://busybox-1.13.2-modprobe.patch;patch=1 \
+  file://busybox-1.13.2-tar.patch;patch=1 \
   \
   file://udhcpscript.patch;patch=1 \
   file://udhcpc-fix-nfsroot.patch;patch=1 \