summaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>1997-08-20 04:28:15 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>1997-08-20 04:28:15 +0000
commit4d7aa9f4498f493443d518663e0172c7a5762170 (patch)
tree09ec4655a08481162993b50e5319b7b1b91119b5 /lib/libc
parenta580a8f59a7c9e806c451338ab4682371970c185 (diff)
Update from lite2.
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/string/strsep.376
-rw-r--r--lib/libc/string/strsep.c21
2 files changed, 61 insertions, 36 deletions
diff --git a/lib/libc/string/strsep.3 b/lib/libc/string/strsep.3
index 0cae3e0f1bb..471e693ecc9 100644
--- a/lib/libc/string/strsep.3
+++ b/lib/libc/string/strsep.3
@@ -1,8 +1,11 @@
-.\" Copyright (c) 1990, 1991 The Regents of the University of California.
-.\" All rights reserved.
+.\" $OpenBSD: strsep.3,v 1.3 1997/08/20 04:28:13 millert Exp $
+.\"
+.\" Copyright (c) 1990, 1991, 1993
+.\" The Regents of the University of California. All rights reserved.
.\"
.\" This code is derived from software contributed to Berkeley by
.\" Chris Torek.
+.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
@@ -31,9 +34,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $OpenBSD: strsep.3,v 1.2 1996/08/19 08:34:24 tholo Exp $
+.\" @(#)strsep.3 8.1 (Berkeley) 6/9/93
.\"
-.Dd April 19, 1991
+.Dd June 9, 1993
.Dt STRSEP 3
.Os
.Sh NAME
@@ -46,23 +49,29 @@
.Sh DESCRIPTION
The
.Fn strsep
-locates in the null-terminated string at
-.Fa *stringp
-the first occurrence of any character in
-.Fa delim
-and replaces this with a
-.Ql \e0 ,
-records the location of the immediate following character in
+function locates, in the string referenced by
.Fa *stringp ,
-then returns the original value of
+the first occurrence of any character in the string
+.Fa delim
+(or the terminating
+.Ql \e0
+character) and replaces it with a
+.Ql \e0 .
+The location of the next character after the delimiter character
+(or NULL, if the end of the string was reached) is stored in
.Fa *stringp .
-If no delimiter characters are found,
-.Fn strsep
-sets
+The original value of
+.Fa *stringp
+is returned.
+.Pp
+An ``empty'' field, i.e. one caused by two adjacent delimiter characters,
+can be detected by comparing the location referenced by the pointer returned
+in
.Fa *stringp
to
-.Dv NULL ;
-if
+.Ql \e0 .
+.Pp
+If
.Fa *stringp
is initially
.Dv NULL ,
@@ -72,20 +81,29 @@ returns
.Sh EXAMPLES
The following uses
.Fn strsep
-to parse strings containing runs of white space,
-making up an argument vector:
+to parse a string, containing tokens delimited by white space, into an
+argument vector:
.Bd -literal -offset indent
-char inputstring[100];
-char **argv[51], **ap = argv, *p, *val;
-/* set up inputstring */
-for (p = inputstring; p != NULL; ) {
- while ((val = strsep(&p, " \et")) != NULL && *val == '\e0');
- *ap++ = val;
-}
-*ap = 0;
+char **ap, *argv[10], *inputstring;
+
+for (ap = argv; (*ap = strsep(&inputstring, " \et")) != NULL;)
+ if (**ap != '\e0')
+ ++ap;
.Ed
.Sh HISTORY
The
.Fn strsep
-function is
-.Ud .
+function
+is intended as a replacement for the
+.Fn strtok
+function.
+While the
+.Fn strtok
+function should be preferred for portability reasons (it conforms to
+.St -ansiC )
+it is unable to handle empty fields, i.e. detect fields delimited by
+two adjacent delimiter characters, or to be used for more than a single
+string at a time.
+The
+.Fn strsep
+function first appeared in 4.4BSD.
diff --git a/lib/libc/string/strsep.c b/lib/libc/string/strsep.c
index 09f187b62d8..b69b715fc5f 100644
--- a/lib/libc/string/strsep.c
+++ b/lib/libc/string/strsep.c
@@ -1,6 +1,8 @@
+/* $OpenBSD: strsep.c,v 1.3 1997/08/20 04:28:14 millert Exp $ */
+
/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -31,14 +33,19 @@
* SUCH DAMAGE.
*/
+#include <string.h>
+#include <stdio.h>
+
#if defined(LIBC_SCCS) && !defined(lint)
-static char *rcsid = "$OpenBSD: strsep.c,v 1.2 1996/08/19 08:34:24 tholo Exp $";
+#if 0
+static char sccsid[] = "@(#)strsep.c 8.1 (Berkeley) 6/4/93";
+#else
+static char *rcsid = "$OpenBSD: strsep.c,v 1.3 1997/08/20 04:28:14 millert Exp $";
+#endif
#endif /* LIBC_SCCS and not lint */
-#include <string.h>
-
/*
- * Get next token from string *stringp, where tokens are nonempty
+ * Get next token from string *stringp, where tokens are possibly-empty
* strings separated by characters from delim.
*
* Writes NULs into the string at *stringp to end tokens.
@@ -46,7 +53,7 @@ static char *rcsid = "$OpenBSD: strsep.c,v 1.2 1996/08/19 08:34:24 tholo Exp $";
* On return, *stringp points past the last NUL written (if there might
* be further tokens), or is NULL (if there are definitely no more tokens).
*
- * If *stringp is NULL, strtoken returns NULL.
+ * If *stringp is NULL, strsep returns NULL.
*/
char *
strsep(stringp, delim)