Page MenuHomeFreeBSD

D19902.diff
No OneTemporary

D19902.diff

Index: head/lib/libc/stdlib/bsearch.3
===================================================================
--- head/lib/libc/stdlib/bsearch.3
+++ head/lib/libc/stdlib/bsearch.3
@@ -32,7 +32,7 @@
.\" @(#)bsearch.3 8.3 (Berkeley) 4/19/94
.\" $FreeBSD$
.\"
-.Dd May 15, 2019
+.Dd July 17, 2019
.Dt BSEARCH 3
.Os
.Sh NAME
@@ -93,26 +93,29 @@
#include <string.h>
struct person {
- char name[5];
- int age;
+ const char *name;
+ int age;
};
-int
-compare(const void *key, const void *array_member)
+static int
+compare(const void *a, const void *b)
{
- int age = (intptr_t) key;
- struct person person = *(struct person *) array_member;
+ const int *age;
+ const struct person *person;
- return (age - person.age);
+ age = a;
+ person = b;
+
+ return (*age - person->age);
}
int
-main()
+main(void)
{
struct person *friend;
-
+ int age;
/* Sorted array */
- struct person friends[6] = {
+ const struct person friends[] = {
{ "paul", 22 },
{ "anne", 25 },
{ "fred", 25 },
@@ -120,22 +123,28 @@
{ "mark", 35 },
{ "bill", 50 }
};
+ const size_t len = sizeof(friends) / sizeof(friends[0]);
- size_t array_size = sizeof(friends) / sizeof(struct person);
-
- friend = bsearch((void *)22, &friends, array_size, sizeof(struct person), compare);
+ age = 22;
+ friend = bsearch(&age, friends, len, sizeof(friends[0]), compare);
assert(strcmp(friend->name, "paul") == 0);
printf("name: %s\enage: %d\en", friend->name, friend->age);
- friend = bsearch((void *)25, &friends, array_size, sizeof(struct person), compare);
- assert(strcmp(friend->name, "fred") == 0 || strcmp(friend->name, "anne") == 0);
+ age = 25;
+ friend = bsearch(&age, friends, len, sizeof(friends[0]), compare);
+
+ /*
+ * For multiple elements with the same key, it is implementation
+ * defined which will be returned
+ */
+ assert(strcmp(friend->name, "fred") == 0 ||
+ strcmp(friend->name, "anne") == 0);
printf("name: %s\enage: %d\en", friend->name, friend->age);
- friend = bsearch((void *)30, &friends, array_size, sizeof(struct person), compare);
+ age = 30;
+ friend = bsearch(&age, friends, len, sizeof(friends[0]), compare);
assert(friend == NULL);
printf("friend aged 30 not found\en");
-
- return (EXIT_SUCCESS);
}
.Ed
.Sh SEE ALSO

File Metadata

Mime Type
text/plain
Expires
Mon, Nov 18, 12:24 AM (21 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14687546
Default Alt Text
D19902.diff (2 KB)

Event Timeline