source: branches/libc-0.6/src/emx/include/argz.h

Last change on this file was 2199, checked in by bird, 20 years ago

Updated argz.h because of bustage caused by new cdefs.h (THROW).

  • Property cvs2svn:cvs-rev set to 1.4
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 7.2 KB
Line 
1/* Routines for dealing with '\0' separated arg vectors.
2 Copyright (C) 1995,96,97,98,99,2000,2004 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, write to the Free
17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18 02111-1307 USA. */
19
20/** @file
21 * GLIBC v2.3.x CVS
22 */
23
24#ifndef _ARGZ_H
25#define _ARGZ_H 1
26
27#include <features.h>
28
29#define __need_error_t
30#include <errno.h>
31#include <string.h> /* Need size_t, and strchr is called below. */
32
33#ifndef __const
34# define __const const
35#endif
36
37#ifndef __error_t_defined
38typedef int error_t;
39#endif
40
41
42__BEGIN_DECLS
43
44/* Make a '\0' separated arg vector from a unix argv vector, returning it in
45 ARGZ, and the total length in LEN. If a memory allocation error occurs,
46 ENOMEM is returned, otherwise 0. The result can be destroyed using free. */
47extern error_t __argz_create (char *__const __argv[], char **__restrict __argz,
48 size_t *__restrict __len) __THROW;
49extern error_t argz_create (char *__const __argv[], char **__restrict __argz,
50 size_t *__restrict __len) __THROW;
51
52/* Make a '\0' separated arg vector from a SEP separated list in
53 STRING, returning it in ARGZ, and the total length in LEN. If a
54 memory allocation error occurs, ENOMEM is returned, otherwise 0.
55 The result can be destroyed using free. */
56extern error_t __argz_create_sep (__const char *__restrict __string,
57 int __sep, char **__restrict __argz,
58 size_t *__restrict __len) __THROW;
59extern error_t argz_create_sep (__const char *__restrict __string,
60 int __sep, char **__restrict __argz,
61 size_t *__restrict __len) __THROW;
62
63/* Returns the number of strings in ARGZ. */
64extern size_t __argz_count (__const char *__argz, size_t __len)
65 __THROW __attribute_pure__;
66extern size_t argz_count (__const char *__argz, size_t __len)
67 __THROW __attribute_pure__;
68
69/* Puts pointers to each string in ARGZ into ARGV, which must be large enough
70 to hold them all. */
71extern void __argz_extract (__const char *__restrict __argz, size_t __len,
72 char **__restrict __argv) __THROW;
73extern void argz_extract (__const char *__restrict __argz, size_t __len,
74 char **__restrict __argv) __THROW;
75
76/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
77 except the last into the character SEP. */
78extern void __argz_stringify (char *__argz, size_t __len, int __sep) __THROW;
79extern void argz_stringify (char *__argz, size_t __len, int __sep) __THROW;
80
81/* Append BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN. */
82extern error_t __argz_append (char **__restrict __argz,
83 size_t *__restrict __argz_len,
84 __const char *__restrict __buf, size_t _buf_len)
85 __THROW;
86extern error_t argz_append (char **__restrict __argz,
87 size_t *__restrict __argz_len,
88 __const char *__restrict __buf, size_t __buf_len)
89 __THROW;
90
91/* Append STR to the argz vector in ARGZ & ARGZ_LEN. */
92extern error_t __argz_add (char **__restrict __argz,
93 size_t *__restrict __argz_len,
94 __const char *__restrict __str) __THROW;
95extern error_t argz_add (char **__restrict __argz,
96 size_t *__restrict __argz_len,
97 __const char *__restrict __str) __THROW;
98
99/* Append SEP separated list in STRING to the argz vector in ARGZ &
100 ARGZ_LEN. */
101extern error_t __argz_add_sep (char **__restrict __argz,
102 size_t *__restrict __argz_len,
103 __const char *__restrict __string, int __delim)
104 __THROW;
105extern error_t argz_add_sep (char **__restrict __argz,
106 size_t *__restrict __argz_len,
107 __const char *__restrict __string, int __delim)
108 __THROW;
109
110/* Delete ENTRY from ARGZ & ARGZ_LEN, if it appears there. */
111extern void __argz_delete (char **__restrict __argz,
112 size_t *__restrict __argz_len,
113 char *__restrict __entry) __THROW;
114extern void argz_delete (char **__restrict __argz,
115 size_t *__restrict __argz_len,
116 char *__restrict __entry) __THROW;
117
118/* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an
119 existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end.
120 Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN,
121 ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ. If BEFORE is not
122 in ARGZ, EINVAL is returned, else if memory can't be allocated for the new
123 ARGZ, ENOMEM is returned, else 0. */
124extern error_t __argz_insert (char **__restrict __argz,
125 size_t *__restrict __argz_len,
126 char *__restrict __before,
127 __const char *__restrict __entry) __THROW;
128extern error_t argz_insert (char **__restrict __argz,
129 size_t *__restrict __argz_len,
130 char *__restrict __before,
131 __const char *__restrict __entry) __THROW;
132
133/* Replace any occurrences of the string STR in ARGZ with WITH, reallocating
134 ARGZ as necessary. If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be
135 incremented by number of replacements performed. */
136extern error_t __argz_replace (char **__restrict __argz,
137 size_t *__restrict __argz_len,
138 __const char *__restrict __str,
139 __const char *__restrict __with,
140 unsigned int *__restrict __replace_count);
141extern error_t argz_replace (char **__restrict __argz,
142 size_t *__restrict __argz_len,
143 __const char *__restrict __str,
144 __const char *__restrict __with,
145 unsigned int *__restrict __replace_count);
146
147
148/* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there
149 are no more. If entry is NULL, then the first entry is returned. This
150 behavior allows two convenient iteration styles:
151
152 char *entry = 0;
153 while ((entry = argz_next (argz, argz_len, entry)))
154 ...;
155
156 or
157
158 char *entry;
159 for (entry = argz; entry; entry = argz_next (argz, argz_len, entry))
160 ...;
161*/
162extern char *__argz_next (__const char *__restrict __argz, size_t __argz_len,
163 __const char *__restrict __entry) __THROW;
164extern char *argz_next (__const char *__restrict __argz, size_t __argz_len,
165 __const char *__restrict __entry) __THROW;
166
167#ifdef __USE_EXTERN_INLINES
168extern inline char *
169__NTH (__argz_next (__const char *__argz, size_t __argz_len,
170 __const char *__entry))
171{
172 if (__entry)
173 {
174 if (__entry < __argz + __argz_len)
175 __entry = strchr (__entry, '\0') + 1;
176
177 return __entry >= __argz + __argz_len ? (char *) NULL : (char *) __entry;
178 }
179 else
180 return __argz_len > 0 ? (char *) __argz : 0;
181}
182extern inline char *
183__NTH (argz_next (__const char *__argz, size_t __argz_len,
184 __const char *__entry))
185{
186 return __argz_next (__argz, __argz_len, __entry);
187}
188#endif /* Use extern inlines. */
189
190__END_DECLS
191
192#endif /* argz.h */
Note: See TracBrowser for help on using the repository browser.