summaryrefslogtreecommitdiffstats
path: root/man3p/lsearch.3p
diff options
context:
space:
mode:
Diffstat (limited to 'man3p/lsearch.3p')
-rw-r--r--man3p/lsearch.3p141
1 files changed, 141 insertions, 0 deletions
diff --git a/man3p/lsearch.3p b/man3p/lsearch.3p
new file mode 100644
index 000000000..223edd09b
--- /dev/null
+++ b/man3p/lsearch.3p
@@ -0,0 +1,141 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "LSEARCH" P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" lsearch
+.SH NAME
+lsearch, lfind \- linear search and update
+.SH SYNOPSIS
+.LP
+\fB#include <search.h>
+.br
+.sp
+void *lsearch(const void *\fP\fIkey\fP\fB, void *\fP\fIbase\fP\fB,
+size_t *\fP\fInelp\fP\fB, size_t\fP
+\fIwidth\fP\fB,
+.br
+\ \ \ \ \ \ int (*\fP\fIcompar\fP\fB)(const void *, const void *));
+.br
+void *lfind(const void *\fP\fIkey\fP\fB, const void *\fP\fIbase\fP\fB,
+size_t *\fP\fInelp\fP\fB,
+.br
+\ \ \ \ \ \ size_t width, int (*\fP\fIcompar\fP\fB)(const void *,
+const void *)); \fP
+\fB
+.br
+\fP
+.SH DESCRIPTION
+.LP
+The \fIlsearch\fP() function shall linearly search the table and return
+a pointer into the table for the matching entry. If the
+entry does not occur, it shall be added at the end of the table. The
+\fIkey\fP argument points to the entry to be sought in the
+table. The \fIbase\fP argument points to the first element in the
+table. The \fIwidth\fP argument is the size of an element in
+bytes. The \fInelp\fP argument points to an integer containing the
+current number of elements in the table. The integer to which
+\fInelp\fP points shall be incremented if the entry is added to the
+table. The \fIcompar\fP argument points to a comparison
+function which the application shall supply (for example, \fIstrcmp\fP()).
+It is called
+with two arguments that point to the elements being compared. The
+application shall ensure that the function returns 0 if the
+elements are equal, and non-zero otherwise.
+.LP
+The \fIlfind\fP() function shall be equivalent to \fIlsearch\fP(),
+except that if the entry is not found, it is not added to
+the table. Instead, a null pointer is returned.
+.SH RETURN VALUE
+.LP
+If the searched for entry is found, both \fIlsearch\fP() and \fIlfind\fP()
+shall return a pointer to it. Otherwise,
+\fIlfind\fP() shall return a null pointer and \fIlsearch\fP() shall
+return a pointer to the newly added element.
+.LP
+Both functions shall return a null pointer in case of error.
+.SH ERRORS
+.LP
+No errors are defined.
+.LP
+\fIThe following sections are informative.\fP
+.SH EXAMPLES
+.SS Storing Strings in a Table
+.LP
+This fragment reads in less than or equal to TABSIZE strings of length
+less than or equal to ELSIZE and stores them in a table,
+eliminating duplicates.
+.sp
+.RS
+.nf
+
+\fB#include <stdio.h>
+#include <string.h>
+#include <search.h>
+.sp
+
+#define TABSIZE 50
+#define ELSIZE 120
+.sp
+
+\&...
+ char line[ELSIZE], tab[TABSIZE][ELSIZE];
+ size_t nel = 0;
+ ...
+ while (fgets(line, ELSIZE, stdin) != NULL && nel < TABSIZE)
+ (void) lsearch(line, tab, &nel,
+ ELSIZE, (int (*)(const void *, const void *)) strcmp);
+ ...
+\fP
+.fi
+.RE
+.SS Finding a Matching Entry
+.LP
+The following example finds any line that reads \fB"This is a test."\fP
+\&.
+.sp
+.RS
+.nf
+
+\fB#include <search.h>
+#include <string.h>
+\&...
+char line[ELSIZE], tab[TABSIZE][ELSIZE];
+size_t nel = 0;
+char *findline;
+void *entry;
+.sp
+
+findline = "This is a test.\\n";
+.sp
+
+entry = lfind(findline, tab, &nel, ELSIZE, (
+ int (*)(const void *, const void *)) strcmp);
+\fP
+.fi
+.RE
+.SH APPLICATION USAGE
+.LP
+The comparison function need not compare every byte, so arbitrary
+data may be contained in the elements in addition to the
+values being compared.
+.LP
+Undefined results can occur if there is not enough room in the table
+to add a new item.
+.SH RATIONALE
+.LP
+None.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+\fIhcreate\fP() , \fItsearch\fP() , the Base Definitions volume of
+IEEE\ Std\ 1003.1-2001, \fI<search.h>\fP
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group. In the
+event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .