Skip to content

Commit a719972

Browse files
folkertdevtgross35
authored andcommitted
add qsort_r for unix, and qsort and qsort_s for windows
(backport <#4677>) (cherry picked from commit ab36ccb)
1 parent fc46e55 commit a719972

File tree

12 files changed

+80
-0
lines changed

12 files changed

+80
-0
lines changed

libc-test/semver/apple.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2231,6 +2231,7 @@ ptrace
22312231
pututxline
22322232
pwritev
22332233
qsort
2234+
qsort_r
22342235
querylocale
22352236
quotactl
22362237
radvisory

libc-test/semver/freebsd.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2247,6 +2247,7 @@ ptsname_r
22472247
pututxline
22482248
pwritev
22492249
qsort
2250+
qsort_r
22502251
querylocale
22512252
rallocx
22522253
rand

libc-test/semver/netbsd.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1536,6 +1536,7 @@ ptrace_siginfo
15361536
pututxline
15371537
pwritev
15381538
qsort
1539+
qsort_r
15391540
rand
15401541
readdir_r
15411542
readlinkat

libc-test/semver/windows.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,8 @@ putchar
275275
putenv
276276
putenv_s
277277
puts
278+
qsort
279+
qsort_s
278280
raise
279281
rand
280282
read

src/unix/bsd/apple/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6157,6 +6157,14 @@ extern "C" {
61576157
search_path: *const c_char,
61586158
argv: *const *mut c_char,
61596159
) -> c_int;
6160+
6161+
pub fn qsort_r(
6162+
base: *mut c_void,
6163+
num: size_t,
6164+
size: size_t,
6165+
arg: *mut c_void,
6166+
compar: Option<unsafe extern "C" fn(*mut c_void, *const c_void, *const c_void) -> c_int>,
6167+
);
61606168
}
61616169

61626170
#[allow(deprecated)]

src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,18 @@ extern "C" {
424424
// in FreeBSD 12
425425
pub fn dirname(path: *const c_char) -> *mut c_char;
426426
pub fn basename(path: *const c_char) -> *mut c_char;
427+
428+
// Argument order of the function pointer changed in FreeBSD 14. From 14 onwards the signature
429+
// matches the POSIX specification by having the third argument be a mutable pointer, on
430+
// earlier versions the first argument is the mutable pointer.
431+
#[link_name = "qsort_r@FBSD_1.0"]
432+
pub fn qsort_r(
433+
base: *mut c_void,
434+
num: size_t,
435+
size: size_t,
436+
arg: *mut c_void,
437+
compar: Option<unsafe extern "C" fn(*mut c_void, *const c_void, *const c_void) -> c_int>,
438+
);
427439
}
428440

429441
cfg_if! {

src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,15 @@ extern "C" {
468468

469469
pub fn dirname(path: *mut c_char) -> *mut c_char;
470470
pub fn basename(path: *mut c_char) -> *mut c_char;
471+
472+
#[link_name = "qsort_r@FBSD_1.0"]
473+
pub fn qsort_r(
474+
base: *mut c_void,
475+
num: size_t,
476+
size: size_t,
477+
arg: *mut c_void,
478+
compar: Option<unsafe extern "C" fn(*mut c_void, *const c_void, *const c_void) -> c_int>,
479+
);
471480
}
472481

473482
cfg_if! {

src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,15 @@ extern "C" {
507507

508508
pub fn dirname(path: *mut c_char) -> *mut c_char;
509509
pub fn basename(path: *mut c_char) -> *mut c_char;
510+
511+
#[link_name = "qsort_r@FBSD_1.0"]
512+
pub fn qsort_r(
513+
base: *mut c_void,
514+
num: size_t,
515+
size: size_t,
516+
arg: *mut c_void,
517+
compar: Option<unsafe extern "C" fn(*mut c_void, *const c_void, *const c_void) -> c_int>,
518+
);
510519
}
511520

512521
#[link(name = "kvm")]

src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,14 @@ extern "C" {
509509

510510
pub fn dirname(path: *mut c_char) -> *mut c_char;
511511
pub fn basename(path: *mut c_char) -> *mut c_char;
512+
513+
pub fn qsort_r(
514+
base: *mut c_void,
515+
num: size_t,
516+
size: size_t,
517+
compar: Option<unsafe extern "C" fn(*const c_void, *const c_void, *mut c_void) -> c_int>,
518+
arg: *mut c_void,
519+
);
512520
}
513521

514522
#[link(name = "kvm")]

src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,14 @@ extern "C" {
511511

512512
pub fn dirname(path: *mut c_char) -> *mut c_char;
513513
pub fn basename(path: *mut c_char) -> *mut c_char;
514+
515+
pub fn qsort_r(
516+
base: *mut c_void,
517+
num: size_t,
518+
size: size_t,
519+
compar: Option<unsafe extern "C" fn(*const c_void, *const c_void, *mut c_void) -> c_int>,
520+
arg: *mut c_void,
521+
);
514522
}
515523

516524
#[link(name = "kvm")]

0 commit comments

Comments
 (0)