summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarel Zak <kzak@redhat.com>2014-04-04 16:02:35 +0200
committerKarel Zak <kzak@redhat.com>2014-04-23 11:55:08 +0200
commit9ae50bae04183ede08e69117b5800b780c031a4c (patch)
tree4815588d1c50ef7f52ddebcae82f057dd5b5d8f5
parente0a487090cc5ffb2e3931433db585c9dd3b795b5 (diff)
downloadutil-linux-9ae50bae04183ede08e69117b5800b780c031a4c.tar.gz
libfdisk: make qsort_r() optional
The function is no critical for fdisk functionality. The SUN label verification will check for less issues. All the verification code is optional ('v' fdisk command). Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r--configure.ac1
-rw-r--r--libfdisk/src/sun.c11
2 files changed, 9 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac
index 35a1f260e..5052605c1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -303,6 +303,7 @@ AC_CHECK_FUNCS([ \
personality \
posix_fadvise \
prctl \
+ qsort_r \
rpmatch \
scandirat \
setresgid \
diff --git a/libfdisk/src/sun.c b/libfdisk/src/sun.c
index e73c701fb..9f1d71524 100644
--- a/libfdisk/src/sun.c
+++ b/libfdisk/src/sun.c
@@ -361,6 +361,7 @@ static void fetch_sun(struct fdisk_context *cxt,
}
}
+#ifdef HAVE_QSORT_R
static int verify_sun_cmp(int *a, int *b, void *data)
{
unsigned int *verify_sun_starts = (unsigned int *) data;
@@ -373,20 +374,20 @@ static int verify_sun_cmp(int *a, int *b, void *data)
return 1;
return -1;
}
+#endif
static int sun_verify_disklabel(struct fdisk_context *cxt)
{
uint32_t starts[SUN_MAXPARTITIONS], lens[SUN_MAXPARTITIONS], start, stop;
uint32_t i,j,k,starto,endo;
+#ifdef HAVE_QSORT_R
int array[SUN_MAXPARTITIONS];
unsigned int *verify_sun_starts;
-
+#endif
assert(cxt);
assert(cxt->label);
assert(fdisk_is_disklabel(cxt, SUN));
- verify_sun_starts = starts;
-
fetch_sun(cxt, starts, lens, &start, &stop);
for (k = 0; k < 7; k++) {
@@ -421,12 +422,15 @@ static int sun_verify_disklabel(struct fdisk_context *cxt)
}
}
+#ifdef HAVE_QSORT_R
for (i = 0; i < SUN_MAXPARTITIONS; i++) {
if (lens[i])
array[i] = i;
else
array[i] = -1;
}
+ verify_sun_starts = starts;
+
qsort_r(array,ARRAY_SIZE(array),sizeof(array[0]),
(int (*)(const void *,const void *,void *)) verify_sun_cmp,
verify_sun_starts);
@@ -446,6 +450,7 @@ static int sun_verify_disklabel(struct fdisk_context *cxt)
start = (starts[array[i]] + lens[array[i]]);
if (start < stop)
fdisk_warnx(cxt, _("Unused gap - sectors %d-%d."), start, stop);
+#endif
return 0;
}