]> sourceware.org Git - glibc.git/blame - string/string.h
Update.
[glibc.git] / string / string.h
CommitLineData
002e2dc4 1/* Copyright (C) 1991,92,93,95,96,97,98,99, 2000 Free Software Foundation, Inc.
ba1ffaa1 2 This file is part of the GNU C Library.
28f540f4 3
ba1ffaa1
UD
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public License as
6 published by the Free Software Foundation; either version 2 of the
7 License, or (at your option) any later version.
28f540f4 8
ba1ffaa1
UD
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
28f540f4 13
ba1ffaa1
UD
14 You should have received a copy of the GNU Library General Public
15 License along with the GNU C Library; see the file COPYING.LIB. If not,
16 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA. */
28f540f4
RM
18
19/*
ba1ffaa1 20 * ISO C Standard: 4.11 STRING HANDLING <string.h>
28f540f4
RM
21 */
22
23#ifndef _STRING_H
28f540f4 24#define _STRING_H 1
5107cf1d 25
28f540f4
RM
26#include <features.h>
27
28__BEGIN_DECLS
29
30/* Get size_t and NULL from <stddef.h>. */
31#define __need_size_t
32#define __need_NULL
33#include <stddef.h>
34
35
36/* Copy N bytes of SRC to DEST. */
c1422e5b
UD
37extern void *memcpy (void *__restrict __dest,
38 __const void *__restrict __src, size_t __n) __THROW;
28f540f4
RM
39/* Copy N bytes of SRC to DEST, guaranteeing
40 correct behavior for overlapping strings. */
c1422e5b
UD
41extern void *memmove (void *__dest, __const void *__src, size_t __n)
42 __THROW;
28f540f4
RM
43
44/* Copy no more than N bytes of SRC to DEST, stopping when C is found.
45 Return the position in DEST one byte past where C was copied,
46 or NULL if C was not found in the first N bytes of SRC. */
377a515b 47#if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN
c1422e5b
UD
48extern void *memccpy (void *__dest, __const void *__src, int __c, size_t __n)
49 __THROW;
28f540f4
RM
50#endif /* SVID. */
51
52
53/* Set N bytes of S to C. */
c1422e5b 54extern void *memset (void *__s, int __c, size_t __n) __THROW;
28f540f4
RM
55
56/* Compare N bytes of S1 and S2. */
c1422e5b 57extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
ca5a4c3c 58 __THROW __attribute_pure__;
28f540f4
RM
59
60/* Search N bytes of S for C. */
ca5a4c3c
AJ
61extern void *memchr (__const void *__s, int __c, size_t __n)
62 __THROW __attribute_pure__;
28f540f4 63
482eec0d
UD
64#ifdef __USE_GNU
65/* Search in S for C. This is similar to `memchr' but there is no
66 length limit. */
ca5a4c3c 67extern void *rawmemchr (__const void *__s, int __c) __THROW __attribute_pure__;
ca747856
RM
68
69/* Search N bytes of S for the final occurrence of C. */
ca5a4c3c
AJ
70extern void *memrchr (__const void *__s, int __c, size_t __n)
71 __THROW __attribute_pure__;
482eec0d
UD
72#endif
73
28f540f4
RM
74
75/* Copy SRC to DEST. */
c1422e5b
UD
76extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
77 __THROW;
28f540f4 78/* Copy no more than N characters of SRC to DEST. */
c1422e5b
UD
79extern char *strncpy (char *__restrict __dest,
80 __const char *__restrict __src, size_t __n) __THROW;
28f540f4
RM
81
82/* Append SRC onto DEST. */
c1422e5b
UD
83extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
84 __THROW;
28f540f4 85/* Append no more than N characters from SRC onto DEST. */
c1422e5b
UD
86extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
87 size_t __n) __THROW;
28f540f4
RM
88
89/* Compare S1 and S2. */
ca5a4c3c
AJ
90extern int strcmp (__const char *__s1, __const char *__s2)
91 __THROW __attribute_pure__;
28f540f4 92/* Compare N characters of S1 and S2. */
c1422e5b 93extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
ca5a4c3c 94 __THROW __attribute_pure__;
28f540f4
RM
95
96/* Compare the collated forms of S1 and S2. */
ca5a4c3c
AJ
97extern int strcoll (__const char *__s1, __const char *__s2)
98 __THROW __attribute_pure__;
28f540f4 99/* Put a transformation of SRC into no more than N bytes of DEST. */
c1422e5b
UD
100extern size_t strxfrm (char *__restrict __dest,
101 __const char *__restrict __src, size_t __n) __THROW;
28f540f4 102
c84142e8
UD
103#ifdef __USE_GNU
104/* The following functions are equivalent to the both above but they
105 take the locale they use for the collation as an extra argument.
106 This is not standardsized but something like will come. */
107# include <xlocale.h>
108
109/* Compare the collated forms of S1 and S2 using rules from L. */
c1422e5b 110extern int __strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
ca5a4c3c 111 __THROW __attribute_pure__;
c84142e8 112/* Put a transformation of SRC into no more than N bytes of DEST. */
c1422e5b
UD
113extern size_t __strxfrm_l (char *__dest, __const char *__src, size_t __n,
114 __locale_t __l) __THROW;
c84142e8
UD
115#endif
116
377a515b 117#if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
28f540f4 118/* Duplicate S, returning an identical malloc'd string. */
e9e9b245 119extern char *strdup (__const char *__s) __THROW __attribute_malloc__;
28f540f4
RM
120#endif
121
6dbe2837
RM
122/* Return a malloc'd copy of at most N bytes of STRING. The
123 resultant string is terminated even if no null terminator
124 appears before STRING[N]. */
377a515b 125#if defined __USE_GNU
e9e9b245
UD
126extern char *strndup (__const char *__string, size_t __n)
127 __THROW __attribute_malloc__;
6d52618b 128#endif
6dbe2837 129
377a515b 130#if defined __USE_GNU && defined __GNUC__
036cc82f 131/* Duplicate S, returning an identical alloca'd string. */
3996f34b 132# define strdupa(s) \
036cc82f
RM
133 (__extension__ \
134 ({ \
135 __const char *__old = (s); \
136 size_t __len = strlen (__old) + 1; \
137 char *__new = __builtin_alloca (__len); \
3996f34b 138 (char *) memcpy (__new, __old, __len); \
036cc82f
RM
139 }))
140
6dbe2837 141/* Return an alloca'd copy of at most N bytes of string. */
3996f34b 142# define strndupa(s, n) \
036cc82f
RM
143 (__extension__ \
144 ({ \
145 __const char *__old = (s); \
146 size_t __len = strnlen (__old, (n)); \
147 char *__new = __builtin_alloca (__len + 1); \
148 __new[__len] = '\0'; \
3996f34b 149 (char *) memcpy (__new, __old, __len); \
036cc82f 150 }))
02ac66c5
RM
151#endif
152
28f540f4 153/* Find the first occurrence of C in S. */
ca5a4c3c 154extern char *strchr (__const char *__s, int __c) __THROW __attribute_pure__;
28f540f4 155/* Find the last occurrence of C in S. */
ca5a4c3c 156extern char *strrchr (__const char *__s, int __c) __THROW __attribute_pure__;
28f540f4 157
c4563d2d
UD
158#ifdef __USE_GNU
159/* This funciton is similar to `strchr'. But it returns a pointer to
160 the closing NUL byte in case C is not found in S. */
ca5a4c3c 161extern char *strchrnul (__const char *__s, int __c) __THROW __attribute_pure__;
c4563d2d
UD
162#endif
163
28f540f4
RM
164/* Return the length of the initial segment of S which
165 consists entirely of characters not in REJECT. */
ca5a4c3c
AJ
166extern size_t strcspn (__const char *__s, __const char *__reject)
167 __THROW __attribute_pure__;
28f540f4
RM
168/* Return the length of the initial segment of S which
169 consists entirely of characters in ACCEPT. */
ca5a4c3c
AJ
170extern size_t strspn (__const char *__s, __const char *__accept)
171 __THROW __attribute_pure__;
6d52618b 172/* Find the first occurrence in S of any character in ACCEPT. */
ca5a4c3c
AJ
173extern char *strpbrk (__const char *__s, __const char *__accept)
174 __THROW __attribute_pure__;
6d52618b 175/* Find the first occurrence of NEEDLE in HAYSTACK. */
ca5a4c3c
AJ
176extern char *strstr (__const char *__haystack, __const char *__needle)
177 __THROW __attribute_pure__;
f4017d20
UD
178
179#ifdef __USE_GNU
180/* Similar to `strstr' but this function ignores the case of both strings. */
c1422e5b 181extern char *__strcasestr (__const char *__haystack, __const char *__needle)
ca5a4c3c 182 __THROW __attribute_pure__;
c1422e5b 183extern char *strcasestr (__const char *__haystack, __const char *__needle)
ca5a4c3c 184 __THROW __attribute_pure__;
f4017d20
UD
185#endif
186
28f540f4 187/* Divide S into tokens separated by characters in DELIM. */
c1422e5b
UD
188extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
189 __THROW;
28f540f4 190
59dd8641
RM
191/* Divide S into tokens separated by characters in DELIM. Information
192 passed between calls are stored in SAVE_PTR. */
c1422e5b
UD
193extern char *__strtok_r (char *__restrict __s,
194 __const char *__restrict __delim,
195 char **__restrict __save_ptr) __THROW;
89a9e37b 196#if defined __USE_POSIX || defined __USE_MISC
c1422e5b
UD
197extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
198 char **__restrict __save_ptr) __THROW;
9d187dd4 199#endif
59dd8641 200
9d187dd4 201#ifdef __USE_GNU
6d52618b 202/* Find the first occurrence of NEEDLE in HAYSTACK.
28f540f4
RM
203 NEEDLE is NEEDLELEN bytes long;
204 HAYSTACK is HAYSTACKLEN bytes long. */
c1422e5b 205extern void *memmem (__const void *__haystack, size_t __haystacklen,
ca5a4c3c
AJ
206 __const void *__needle, size_t __needlelen)
207 __THROW __attribute_pure__;
9a0a462c
UD
208
209/* Copy N bytes of SRC to DEST, return pointer to bytes after the
210 last written byte. */
c1422e5b
UD
211extern void *__mempcpy (void *__restrict __dest,
212 __const void *__restrict __src, size_t __n) __THROW;
213extern void *mempcpy (void *__restrict __dest,
214 __const void *__restrict __src, size_t __n) __THROW;
28f540f4
RM
215#endif
216
8d71c7b0 217
28f540f4 218/* Return the length of S. */
ca5a4c3c 219extern size_t strlen (__const char *__s) __THROW __attribute_pure__;
28f540f4 220
8d71c7b0
RM
221#ifdef __USE_GNU
222/* Find the length of STRING, but scan at most MAXLEN characters.
223 If no '\0' terminator is found in that many characters, return MAXLEN. */
ca5a4c3c
AJ
224extern size_t strnlen (__const char *__string, size_t __maxlen)
225 __THROW __attribute_pure__;
8d71c7b0
RM
226#endif
227
228
60478656 229/* Return a string describing the meaning of the `errno' code in ERRNUM. */
c1422e5b 230extern char *strerror (int __errnum) __THROW;
19361cb7 231#ifdef __USE_MISC
60478656
RM
232/* Reentrant version of `strerror'. If a temporary buffer is required, at
233 most BUFLEN bytes of BUF will be used. */
c1422e5b
UD
234extern char *__strerror_r (int __errnum, char *__buf, size_t __buflen) __THROW;
235extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) __THROW;
60478656 236#endif
28f540f4 237
61eb22d3
UD
238/* We define this function always since `bzero' is sometimes needed when
239 the namespace rules does not allow this. */
c1422e5b 240extern void __bzero (void *__s, size_t __n) __THROW;
61eb22d3 241
002e2dc4 242#if defined __USE_BSD
28f540f4 243/* Copy N bytes of SRC to DEST (like memmove, but args reversed). */
c1422e5b 244extern void bcopy (__const void *__src, void *__dest, size_t __n) __THROW;
28f540f4
RM
245
246/* Set N bytes of S to 0. */
c1422e5b 247extern void bzero (void *__s, size_t __n) __THROW;
28f540f4
RM
248
249/* Compare N bytes of S1 and S2 (same as memcmp). */
ca5a4c3c
AJ
250extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
251 __THROW __attribute_pure__;
28f540f4 252
2c6fe0bd 253/* Find the first occurrence of C in S (same as strchr). */
ca5a4c3c 254extern char *index (__const char *__s, int __c) __THROW __attribute_pure__;
2c6fe0bd
UD
255
256/* Find the last occurrence of C in S (same as strrchr). */
ca5a4c3c 257extern char *rindex (__const char *__s, int __c) __THROW __attribute_pure__;
2c6fe0bd 258
28f540f4
RM
259/* Return the position of the first bit set in I, or 0 if none are set.
260 The least-significant bit is position 1, the most-significant 32. */
c1422e5b
UD
261extern int __ffs (int __i) __THROW __attribute__ ((const));
262extern int ffs (int __i) __THROW __attribute__ ((const));
bdd421cc
UD
263
264/* The following two functions are non-standard but necessary for non-32 bit
265 platforms. */
266# ifdef __USE_GNU
c1422e5b 267extern int ffsl (long int __l) __THROW __attribute__ ((const));
bdd421cc 268# ifdef __GNUC__
c1422e5b
UD
269__extension__ extern int ffsll (long long int __ll)
270 __THROW __attribute__ ((const));
bdd421cc
UD
271# endif
272# endif
28f540f4
RM
273
274/* Compare S1 and S2, ignoring case. */
ca5a4c3c
AJ
275extern int __strcasecmp (__const char *__s1, __const char *__s2)
276 __THROW __attribute_pure__;
277extern int strcasecmp (__const char *__s1, __const char *__s2)
278 __THROW __attribute_pure__;
28f540f4 279
6e86a7c2 280/* Compare no more than N chars of S1 and S2, ignoring case. */
c1422e5b 281extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
ca5a4c3c 282 __THROW __attribute_pure__;
002e2dc4 283#endif /* Use BSD. */
6e86a7c2 284
0501d603
UD
285#ifdef __USE_GNU
286/* Again versions of a few functions which use the given locale instead
287 of the global one. */
c1422e5b 288extern int __strcasecmp_l (__const char *__s1, __const char *__s2,
ca5a4c3c 289 __locale_t __loc) __THROW __attribute_pure__;
0501d603 290
c1422e5b 291extern int __strncasecmp_l (__const char *__s1, __const char *__s2,
ca5a4c3c
AJ
292 size_t __n, __locale_t __loc)
293 __THROW __attribute_pure__;
0501d603
UD
294#endif
295
2c6fe0bd 296#ifdef __USE_BSD
28f540f4
RM
297/* Return the next DELIM-delimited token from *STRINGP,
298 terminating it with a '\0', and update *STRINGP to point past it. */
c1422e5b
UD
299extern char *strsep (char **__restrict __stringp,
300 __const char *__restrict __delim) __THROW;
28f540f4
RM
301#endif
302
28f540f4 303#ifdef __USE_GNU
1f205a47 304/* Compare S1 and S2 as strings holding name & indices/version numbers. */
ca5a4c3c
AJ
305extern int strverscmp (__const char *__s1, __const char *__s2)
306 __THROW __attribute_pure__;
1f205a47 307
28f540f4 308/* Return a string describing the meaning of the signal number in SIG. */
c1422e5b 309extern char *strsignal (int __sig) __THROW;
28f540f4
RM
310
311/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */
c1422e5b
UD
312extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
313 __THROW;
314extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
315 __THROW;
28f540f4
RM
316
317/* Copy no more than N characters of SRC to DEST, returning the address of
318 the last character written into DEST. */
c1422e5b
UD
319extern char *__stpncpy (char *__restrict __dest,
320 __const char *__restrict __src, size_t __n) __THROW;
321extern char *stpncpy (char *__restrict __dest,
322 __const char *__restrict __src, size_t __n) __THROW;
28f540f4 323
28f540f4 324/* Sautee STRING briskly. */
c1422e5b 325extern char *strfry (char *__string) __THROW;
28f540f4
RM
326
327/* Frobnicate N bytes of S. */
c1422e5b 328extern void *memfrob (void *__s, size_t __n) __THROW;
28f540f4 329
92f1da4d 330# ifndef basename
dd33e89f
UD
331/* Return the file name within directory of FILENAME. We don't
332 declare the function if the `basename' macro is available (defined
333 in <libgen.h>) which makes the XPG version of this function
334 available. */
c1422e5b 335extern char *basename (__const char *__filename) __THROW;
92f1da4d 336# endif
84724245
RM
337#endif
338
55c14926 339
847a35a0 340#if defined __GNUC__ && __GNUC__ >= 2
cc60175e 341# if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && !defined __cplusplus
9a0a462c
UD
342/* When using GNU CC we provide some optimized versions of selected
343 functions from this header. There are two kinds of optimizations:
344
61952351
UD
345 - machine-dependent optimizations, most probably using inline
346 assembler code; these might be quite expensive since the code
347 size can increase significantly.
9a0a462c
UD
348 These optimizations are not used unless the symbol
349 __USE_STRING_INLINES
61952351 350 is defined before including this header.
9a0a462c
UD
351
352 - machine-independent optimizations which do not increase the
353 code size significantly and which optimize mainly situations
354 where one or more arguments are compile-time constants.
355 These optimizations are used always when the compiler is
61952351 356 taught to optimize.
9a0a462c 357
61eb22d3
UD
358 One can inhibit all optimizations by defining __NO_STRING_INLINES. */
359
360/* Get the machine-dependent optimizations (if any). */
847a35a0 361# include <bits/string.h>
9a0a462c
UD
362
363/* These are generic optimizations which do not add too much inline code. */
847a35a0
UD
364# include <bits/string2.h>
365# endif
92f1da4d
UD
366#endif
367
28f540f4
RM
368__END_DECLS
369
370#endif /* string.h */
This page took 0.155814 seconds and 5 git commands to generate.