Patchwork util-linux: Add support for older hosts

login
register
mail settings
Submitter Mark Hatle
Date May 31, 2013, 3:24 p.m.
Message ID <1370013877-22361-1-git-send-email-mark.hatle@windriver.com>
Download mbox | patch
Permalink /patch/51007/
State Accepted
Commit da5b23e45c7e4dea2f3802ff5af5c81b08aba201
Headers show

Comments

Mark Hatle - May 31, 2013, 3:24 p.m.
Older hosts don't support some of the features required by
the latet util-linux.  Add workarounds or revert changes to older
versions to make it work.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 .../util-linux/util-linux/util-linux-native.patch  | 210 +++++++++++++++++++++
 meta/recipes-core/util-linux/util-linux_2.23.bb    |   6 +
 2 files changed, 216 insertions(+)
 create mode 100644 meta/recipes-core/util-linux/util-linux/util-linux-native.patch

Patch

diff --git a/meta/recipes-core/util-linux/util-linux/util-linux-native.patch b/meta/recipes-core/util-linux/util-linux/util-linux-native.patch
new file mode 100644
index 0000000..9f34497
--- /dev/null
+++ b/meta/recipes-core/util-linux/util-linux/util-linux-native.patch
@@ -0,0 +1,210 @@ 
+Support older hosts with latest util-linux-native
+
+mkostemp is not defined on older machines.  So we detect this and
+provide a define that uses mkstemp instead.
+
+O_CLOEXEC is not defined on older machines.  It is however defined
+in the 'c.h' header.  Fix up the users to include 'c.h'.
+
+fdisks/fdisksunlabel.c was modified to use qsort_r, however
+this is not defined on older hosts.  Revert:
+  commit c69bbca9c1f6645097bd20fe3a21f5a99a2a0698
+  fdisk: (sun): use ask API, remove global variable
+
+Upstream-status: Inappropriate [other]
+Patches revert upstream changes in order to support older
+machines.
+
+Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+
+diff -ur util-linux-2.23/configure.ac /home/lmhatle/util-linux-2.23-fixed/configure.ac
+--- util-linux-2.23/configure.ac	2013-05-29 14:44:35.147853585 -0500
++++ /home/lmhatle/util-linux-2.23-fixed/configure.ac	2013-05-30 14:56:15.050799650 -0500
+@@ -323,6 +323,7 @@
+ 	llseek \
+ 	lseek64 \
+ 	mempcpy \
++	mkostemp \
+ 	nanosleep \
+ 	personality \
+ 	posix_fadvise \
+diff -ur util-linux-2.23/include/c.h /home/lmhatle/util-linux-2.23-fixed/include/c.h
+--- util-linux-2.23/include/c.h	2013-04-12 04:25:46.852156874 -0500
++++ /home/lmhatle/util-linux-2.23-fixed/include/c.h	2013-05-30 14:56:11.310799488 -0500
+@@ -236,6 +236,13 @@
+ #endif
+ 
+ /*
++ * mkostemp replacement
++ */
++#ifndef HAVE_MKOSTEMP
++#define mkostemp(template, flags) mkstemp(template)
++#endif
++
++/*
+  * MAXHOSTNAMELEN replacement
+  */
+ static inline size_t get_hostname_max(void)
+diff -ur util-linux-2.23/lib/randutils.c /home/lmhatle/util-linux-2.23-fixed/lib/randutils.c
+--- util-linux-2.23/lib/randutils.c	2013-04-12 04:25:46.855156901 -0500
++++ /home/lmhatle/util-linux-2.23-fixed/lib/randutils.c	2013-05-30 14:55:26.622799644 -0500
+@@ -16,6 +16,7 @@
+ #include <sys/syscall.h>
+ 
+ #include "randutils.h"
++#include "c.h"
+ 
+ #ifdef HAVE_TLS
+ #define THREAD_LOCAL static __thread
+diff -ur util-linux-2.23/lib/wholedisk.c /home/lmhatle/util-linux-2.23-fixed/lib/wholedisk.c
+--- util-linux-2.23/lib/wholedisk.c	2013-04-12 04:25:46.855156901 -0500
++++ /home/lmhatle/util-linux-2.23-fixed/lib/wholedisk.c	2013-05-30 14:55:31.182799350 -0500
+@@ -10,6 +10,7 @@
+ 
+ #include "blkdev.h"
+ #include "wholedisk.h"
++#include "c.h"
+ 
+ int is_whole_disk_fd(int fd, const char *name)
+ {
+diff -ur util-linux-2.23/fdisks/fdisksunlabel.c /home/lmhatle/util-linux-2.23-fixed/fdisks/fdisksunlabel.c
+--- util-linux-2.23/fdisks/fdisksunlabel.c	2013-04-23 09:14:19.229015244 -0500
++++ /home/lmhatle/util-linux-2.23-fixed/fdisks/fdisksunlabel.c	2013-05-30 14:54:55.978799735 -0500
+@@ -383,10 +383,10 @@
+ 	}
+ }
+ 
+-static int verify_sun_cmp(int *a, int *b, void *data)
+-{
+-    unsigned int *verify_sun_starts = (unsigned int *) data;
++static unsigned int *verify_sun_starts;
+ 
++static int verify_sun_cmp(int *a, int *b)
++{
+     if (*a == -1)
+ 	    return 1;
+     if (*b == -1)
+@@ -401,7 +401,6 @@
+     uint32_t starts[SUN_MAXPARTITIONS], lens[SUN_MAXPARTITIONS], start, stop;
+     uint32_t i,j,k,starto,endo;
+     int array[SUN_MAXPARTITIONS];
+-    unsigned int *verify_sun_starts;
+ 
+     assert(cxt);
+     assert(cxt->label);
+@@ -442,16 +441,14 @@
+ 	    }
+ 	}
+     }
+-
+     for (i = 0; i < SUN_MAXPARTITIONS; i++) {
+         if (lens[i])
+             array[i] = i;
+         else
+             array[i] = -1;
+     }
+-    qsort_r(array,ARRAY_SIZE(array),sizeof(array[0]),
+-	  (int (*)(const void *,const void *,void *)) verify_sun_cmp,
+-	  verify_sun_starts);
++    qsort(array,ARRAY_SIZE(array),sizeof(array[0]),
++	  (int (*)(const void *,const void *)) verify_sun_cmp);
+ 
+     if (array[0] == -1) {
+ 	fdisk_info(cxt, _("No partitions defined"));
+@@ -468,6 +465,7 @@
+     start = (starts[array[i]] + lens[array[i]]);
+     if (start < stop)
+         fdisk_warnx(cxt, _("Unused gap - sectors %d-%d"), start, stop);
++
+     return 0;
+ }
+ 
+@@ -746,18 +744,12 @@
+ 	}
+ }
+ 
+-
+ void fdisk_sun_set_alt_cyl(struct fdisk_context *cxt)
+ {
+ 	struct sun_disklabel *sunlabel = self_disklabel(cxt);
+-	uintmax_t res;
+-	int rc = fdisk_ask_number(cxt, 0,			/* low */
+-			be16_to_cpu(sunlabel->acyl),		/* default */
+-			65535,					/* high */
+-			_("Number of alternate cylinders"),	/* query */
+-			&res);					/* result */
+-	if (!rc)
+-		sunlabel->acyl = cpu_to_be16(res);
++	sunlabel->acyl =
++		cpu_to_be16(read_int(cxt, 0, be16_to_cpu(sunlabel->acyl), 65535, 0,
++				_("Number of alternate cylinders")));
+ }
+ 
+ void fdisk_sun_set_ncyl(struct fdisk_context *cxt, int cyl)
+@@ -769,54 +761,33 @@
+ void fdisk_sun_set_xcyl(struct fdisk_context *cxt)
+ {
+ 	struct sun_disklabel *sunlabel = self_disklabel(cxt);
+-	uintmax_t res;
+-	int rc = fdisk_ask_number(cxt, 0,			/* low */
+-			be16_to_cpu(sunlabel->apc),		/* default */
+-			cxt->geom.sectors,			/* high */
+-			_("Extra sectors per cylinder"),	/* query */
+-			&res);					/* result */
+-	if (!rc)
+-		sunlabel->apc = cpu_to_be16(res);
++	sunlabel->apc =
++		cpu_to_be16(read_int(cxt, 0, be16_to_cpu(sunlabel->apc), cxt->geom.sectors, 0,
++				_("Extra sectors per cylinder")));
+ }
+ 
+ void fdisk_sun_set_ilfact(struct fdisk_context *cxt)
+ {
+ 	struct sun_disklabel *sunlabel = self_disklabel(cxt);
+-	uintmax_t res;
+-	int rc = fdisk_ask_number(cxt, 1,			/* low */
+-			be16_to_cpu(sunlabel->intrlv),		/* default */
+-			32,					/* high */
+-			_("Interleave factor"),	/* query */
+-			&res);					/* result */
+-	if (!rc)
+-		sunlabel->intrlv = cpu_to_be16(res);
++	sunlabel->intrlv =
++		cpu_to_be16(read_int(cxt, 1, be16_to_cpu(sunlabel->intrlv), 32, 0,
++				_("Interleave factor")));
+ }
+ 
+ void fdisk_sun_set_rspeed(struct fdisk_context *cxt)
+ {
+ 	struct sun_disklabel *sunlabel = self_disklabel(cxt);
+-	uintmax_t res;
+-	int rc = fdisk_ask_number(cxt, 1,			/* low */
+-			be16_to_cpu(sunlabel->rpm),		/* default */
+-			USHRT_MAX,				/* high */
+-			_("Rotation speed (rpm)"),		/* query */
+-			&res);					/* result */
+-	if (!rc)
+-		sunlabel->rpm = cpu_to_be16(res);
+-
++	sunlabel->rpm =
++		 cpu_to_be16(read_int(cxt, 1, be16_to_cpu(sunlabel->rpm), 100000, 0,
++				_("Rotation speed (rpm)")));
+ }
+ 
+ void fdisk_sun_set_pcylcount(struct fdisk_context *cxt)
+ {
+ 	struct sun_disklabel *sunlabel = self_disklabel(cxt);
+-	uintmax_t res;
+-	int rc = fdisk_ask_number(cxt, 0,			/* low */
+-			be16_to_cpu(sunlabel->pcyl),		/* default */
+-			USHRT_MAX,				/* high */
+-			_("Number of physical cylinders"),	/* query */
+-			&res);					/* result */
+-	if (!rc)
+-		sunlabel->pcyl = cpu_to_be16(res);
++	sunlabel->pcyl =
++		cpu_to_be16(read_int(cxt, 0, be16_to_cpu(sunlabel->pcyl), 65535, 0,
++				_("Number of physical cylinders")));
+ }
+ 
+ static int sun_write_disklabel(struct fdisk_context *cxt)
diff --git a/meta/recipes-core/util-linux/util-linux_2.23.bb b/meta/recipes-core/util-linux/util-linux_2.23.bb
index 5d9a8dc..b85df21 100644
--- a/meta/recipes-core/util-linux/util-linux_2.23.bb
+++ b/meta/recipes-core/util-linux/util-linux_2.23.bb
@@ -2,6 +2,11 @@  MAJOR_VERSION = "2.23"
 PR = "r0"
 require util-linux.inc
 
+# To support older hosts, we need to patch and/or revert
+# some upstream changes.  Only do this for native packages.
+OLDHOST = ""
+OLDHOST_class-native = "file://util-linux-native.patch"
+
 SRC_URI += "file://util-linux-ng-replace-siginterrupt.patch \
             file://util-linux-ng-2.16-mount_lock_path.patch \
             file://uclibc-__progname-conflict.patch \
@@ -9,6 +14,7 @@  SRC_URI += "file://util-linux-ng-replace-siginterrupt.patch \
             file://fix-configure.patch \
             file://0001-lib-loopdev-fix-loopcxt_check_size-to-work-with-blkd.patch \
             file://0001-losetup-use-warn_size-for-regular-files-only.patch \
+            ${OLDHOST} \
 "
 
 SRC_URI[md5sum] = "7bd10387f1aa00efaa4b07dfa13215bc"