1 | .\" Copyright (c) 1990, 1991, 1993 |
---|
2 | .\" The Regents of the University of California. All rights reserved. |
---|
3 | .\" |
---|
4 | .\" Redistribution and use in source and binary forms, with or without |
---|
5 | .\" modification, are permitted provided that the following conditions |
---|
6 | .\" are met: |
---|
7 | .\" 1. Redistributions of source code must retain the above copyright |
---|
8 | .\" notice, this list of conditions and the following disclaimer. |
---|
9 | .\" 2. Redistributions in binary form must reproduce the above copyright |
---|
10 | .\" notice, this list of conditions and the following disclaimer in the |
---|
11 | .\" documentation and/or other materials provided with the distribution. |
---|
12 | .\" 3. All advertising materials mentioning features or use of this software |
---|
13 | .\" must display the following acknowledgement: |
---|
14 | .\" This product includes software developed by the University of |
---|
15 | .\" California, Berkeley and its contributors. |
---|
16 | .\" 4. Neither the name of the University nor the names of its contributors |
---|
17 | .\" may be used to endorse or promote products derived from this software |
---|
18 | .\" without specific prior written permission. |
---|
19 | .\" |
---|
20 | .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
---|
21 | .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
---|
22 | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
---|
23 | .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
---|
24 | .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
---|
25 | .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
---|
26 | .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
---|
27 | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
---|
28 | .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
---|
29 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
---|
30 | .\" SUCH DAMAGE. |
---|
31 | .\" |
---|
32 | .\" @(#)getsubopt.3 8.1 (Berkeley) 6/9/93 |
---|
33 | .\" $FreeBSD: src/lib/libc/stdlib/getsubopt.3,v 1.9 2001/09/07 14:46:35 asmodai Exp $ |
---|
34 | .\" |
---|
35 | .Dd June 9, 1993 |
---|
36 | .Dt GETSUBOPT 3 |
---|
37 | .Os |
---|
38 | .Sh NAME |
---|
39 | .Nm getsubopt |
---|
40 | .Nd get sub options from an argument |
---|
41 | .Sh LIBRARY |
---|
42 | .Lb libc |
---|
43 | .Sh SYNOPSIS |
---|
44 | .In unistd.h |
---|
45 | .Vt extern char *suboptarg ; |
---|
46 | .Ft int |
---|
47 | .Fn getsubopt "char **optionp" "char * const *tokens" "char **valuep" |
---|
48 | .Sh DESCRIPTION |
---|
49 | The |
---|
50 | .Fn getsubopt |
---|
51 | function |
---|
52 | parses a string containing tokens delimited by one or more tab, space or |
---|
53 | comma |
---|
54 | .Pq Ql \&, |
---|
55 | characters. |
---|
56 | It is intended for use in parsing groups of option arguments provided |
---|
57 | as part of a utility command line. |
---|
58 | .Pp |
---|
59 | The argument |
---|
60 | .Fa optionp |
---|
61 | is a pointer to a pointer to the string. |
---|
62 | The argument |
---|
63 | .Fa tokens |
---|
64 | is a pointer to a |
---|
65 | .Dv NULL Ns -terminated |
---|
66 | array of pointers to strings. |
---|
67 | .Pp |
---|
68 | The |
---|
69 | .Fn getsubopt |
---|
70 | function |
---|
71 | returns the zero-based offset of the pointer in the |
---|
72 | .Fa tokens |
---|
73 | array referencing a string which matches the first token |
---|
74 | in the string, or, \-1 if the string contains no tokens or |
---|
75 | .Fa tokens |
---|
76 | does not contain a matching string. |
---|
77 | .Pp |
---|
78 | If the token is of the form ``name=value'', the location referenced by |
---|
79 | .Fa valuep |
---|
80 | will be set to point to the start of the ``value'' portion of the token. |
---|
81 | .Pp |
---|
82 | On return from |
---|
83 | .Fn getsubopt , |
---|
84 | .Fa optionp |
---|
85 | will be set to point to the start of the next token in the string, |
---|
86 | or the null at the end of the string if no more tokens are present. |
---|
87 | The external variable |
---|
88 | .Fa suboptarg |
---|
89 | will be set to point to the start of the current token, or |
---|
90 | .Dv NULL |
---|
91 | if no |
---|
92 | tokens were present. |
---|
93 | The argument |
---|
94 | .Fa valuep |
---|
95 | will be set to point to the ``value'' portion of the token, or |
---|
96 | .Dv NULL |
---|
97 | if no ``value'' portion was present. |
---|
98 | .Sh EXAMPLES |
---|
99 | .Bd -literal -compact |
---|
100 | char *tokens[] = { |
---|
101 | #define ONE 0 |
---|
102 | "one", |
---|
103 | #define TWO 1 |
---|
104 | "two", |
---|
105 | NULL |
---|
106 | }; |
---|
107 | |
---|
108 | \&... |
---|
109 | |
---|
110 | extern char *optarg, *suboptarg; |
---|
111 | char *options, *value; |
---|
112 | |
---|
113 | while ((ch = getopt(argc, argv, "ab:")) != \-1) { |
---|
114 | switch(ch) { |
---|
115 | case 'a': |
---|
116 | /* process ``a'' option */ |
---|
117 | break; |
---|
118 | case 'b': |
---|
119 | options = optarg; |
---|
120 | while (*options) { |
---|
121 | switch(getsubopt(&options, tokens, &value)) { |
---|
122 | case ONE: |
---|
123 | /* process ``one'' sub option */ |
---|
124 | break; |
---|
125 | case TWO: |
---|
126 | /* process ``two'' sub option */ |
---|
127 | if (!value) |
---|
128 | error("no value for two"); |
---|
129 | i = atoi(value); |
---|
130 | break; |
---|
131 | case \-1: |
---|
132 | if (suboptarg) |
---|
133 | error("illegal sub option %s", |
---|
134 | suboptarg); |
---|
135 | else |
---|
136 | error("missing sub option"); |
---|
137 | break; |
---|
138 | } |
---|
139 | break; |
---|
140 | } |
---|
141 | .Ed |
---|
142 | .Sh SEE ALSO |
---|
143 | .Xr getopt 3 , |
---|
144 | .Xr strsep 3 |
---|
145 | .Sh HISTORY |
---|
146 | The |
---|
147 | .Fn getsubopt |
---|
148 | function first appeared in |
---|
149 | .Bx 4.4 . |
---|