| This patch was adopted from |
| http://git.yoctoproject.org/cgit.cgi/poky/plain/meta/recipes-core/util-linux/util-linux/util-linux-native.patch |
| |
| 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> |
| |
| --- a/configure.ac 2013-09-05 15:31:11.460864363 -0500 |
| +++ b/configure.ac 2013-09-05 15:31:21.590981268 -0500 |
| @@ -323,6 +323,7 @@ |
| llseek \ |
| lseek64 \ |
| mempcpy \ |
| + mkostemp \ |
| nanosleep \ |
| personality \ |
| posix_fadvise \ |
| --- a/include/c.h 2013-07-30 03:39:26.200738180 -0500 |
| +++ b/include/c.h 2013-09-05 15:31:21.590981268 -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) |
| --- a/lib/randutils.c 2013-06-13 02:46:10.408650519 -0500 |
| +++ b/lib/randutils.c 2013-09-05 15:31:21.650099925 -0500 |
| @@ -16,6 +16,7 @@ |
| #include <sys/syscall.h> |
| |
| #include "randutils.h" |
| +#include "c.h" |
| |
| #ifdef HAVE_TLS |
| #define THREAD_LOCAL static __thread |
| --- a/lib/wholedisk.c 2013-06-13 02:46:10.411650545 -0500 |
| +++ b/lib/wholedisk.c 2013-09-05 15:31:21.650099925 -0500 |
| @@ -10,6 +10,7 @@ |
| |
| #include "blkdev.h" |
| #include "wholedisk.h" |
| +#include "c.h" |
| |
| int is_whole_disk_fd(int fd, const char *name) |
| { |
| --- a/fdisks/fdisksunlabel.c 2013-07-30 03:39:26.197738150 -0500 |
| +++ b/fdisks/fdisksunlabel.c 2013-09-05 15:31:21.650099925 -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) |