From da5b23e45c7e4dea2f3802ff5af5c81b08aba201 Mon Sep 17 00:00:00 2001 From: Mark Hatle Date: Fri, 31 May 2013 15:24:37 +0000 Subject: util-linux: Add support for older hosts 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 Signed-off-by: Saul Wold Signed-off-by: Richard Purdie --- .../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 (limited to 'meta/recipes-core/util-linux') 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 0000000000..9f34497cc3 --- /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 + +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 + + #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 5d9a8dc009..b85df21d00 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" -- cgit 1.2.3-korg