bug in lfind() - man page doesn't match code (Sys5.2)
John Rogers
jr at foros1.UUCP
Thu Jun 28 03:00:45 AEST 1984
Subject: bug in lfind() - man page doesn't match code
Index: lfind() /usr/src/lib/libc/port/gen/lfind.c Sys5.2
Description:
The man page I have for "lfind" (a linear search routine,
documented in "lsearch(3C)") indicates that lfind will return a
NULL pointer if the datum is not found in the table. In
reality, it returns -1 cast to a pointer.
This only applies to System V Release 2; the first release
doesn't have lfind. It's possible that other versions of the
man page document lfind as returning -1; I only have the one
printed in "UNIX System V Release 2.0 Programmer Reference
Manual - DEC Processors".
Repeat-By:
Run the following program:
-----------------------------cut here------------------------------
#include <stdio.h>
extern char *lfind();
extern char *lsearch();
extern int strcmp();
main() {
char *ptr;
char table[100];
unsigned nel; /* Number of elements in table. */
(void) lsearch("foo", table, &nel, 4, strcmp);
(void) lsearch("bar", table, &nel, 4, strcmp);
ptr = lfind("xxx", table, &nel, 4, strcmp);
if (ptr == (char *)NULL)
(void) printf("This should print, but doesn't.\n");
else if (ptr == (char *)-1)
(void) printf("This shouldn't print, but does.\n");
}
------------------------cut here--------------------------------
Fix:
Make the following changes to lfind.c:
diff -rs lfind.c- lfind.c
13a14,16
> *
> * jr 840627 - Changed to match the documentation, i.e return NULL rather
> * than -1 if the element can't be found.
15a19,20
> #include <stdio.h>
>
32c37
< return (POINTER)(-1);
---
> return ( (POINTER) NULL );
--
JR (John Rogers)
...ihnp4!fortune!foros1!jr
also fortune!jr and proper!jr
More information about the Net.bugs.usg
mailing list