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