summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 5ffb25f1a..70df7ff6a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -311,6 +311,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 6d68c7aa9..734f5cd7d 100644
--- a/libfdisk/src/sun.c
+++ b/libfdisk/src/sun.c
@@ -363,6 +363,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;
@@ -375,20 +376,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++) {
@@ -422,12 +423,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);
@@ -447,6 +451,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 %u-%u."), start, stop);
+#endif
return 0;
}