1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00
1998-03-18  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* manual/memory.texi (Heap Consistency Checking): Document
	MALLOC_CHECK_.  Based on a text by Wolfram Gloger.

1998-03-18 17:11  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* manual/Makefile: Add missing rules.

1998-03-18  Ulrich Drepper  <drepper@cygnus.com>

	* timezone/Makefile (generated): Define to remove all stamp files.

	* sysdeps/generic/strsep.c: Also undefine __strsep.

	* string/strdup.c: Undefine __strdup and strdup first.
	* string/strndup.c: Likewise.

	* string/bits/string2.h: Correct strtok_r and strsep.
	Add strndup optimization.

	* sysdeps/generic/strsep.c: Little optimization.
This commit is contained in:
Ulrich Drepper
1998-03-18 17:57:13 +00:00
parent 3116126871
commit 7551a1e510
9 changed files with 107 additions and 25 deletions

View File

@ -710,8 +710,8 @@ strnlen (__const char *__string, size_t __maxlen)
? (((__const unsigned char *) (sep))[0] != '\0' \
&& ((__const unsigned char *) (sep))[1] == '\0' \
? __strtok_r_1c (s, ((__const char *) (sep))[0], nextp) \
: strtok_r (s, sep, nextp)) \
: strtok_r (s, sep, nextp)))
: __strtok_r (s, sep, nextp)) \
: __strtok_r (s, sep, nextp)))
__STRING_INLINE char *__strtok_r_1c (char *__s, char __sep, char **__nextp);
__STRING_INLINE char *
@ -740,7 +740,7 @@ __strtok_r_1c (char *__s, char __sep, char **__nextp)
return __result;
}
# if defined __USE_POSIX || defined __USE_MISC
# define strtok_r(s, sep, nextp) __strtok_r (s, sep, nextp)
# define strtok_r(s, sep, nextp) __strtok_r ((s), (sep), (nextp))
# endif
#endif
@ -845,7 +845,7 @@ __strsep_g (char **__s, __const char *__reject)
return __retval;
}
# ifdef __USE_BSD
# define strsep(s, reject) __strsep (s, reject)
# define strsep(s, reject) __strsep ((s), (reject))
# endif
#endif
@ -857,15 +857,15 @@ __strsep_g (char **__s, __const char *__reject)
# include <stdlib.h>
# define __strdup(s) \
(__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s)
? (((__const unsigned char *) (s))[0] == '\0'
? return (char *) calloc (1, 1);
: ({ size_t len = strlen (s) + 1;
char *retval = (char *) malloc (len);
if (retval != NULL)
retval = (char *) memcpy (retval, s, len);
retval; }))
: strdup (s)))
(__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s) \
? (((__const unsigned char *) (s))[0] == '\0' \
? (char *) calloc (1, 1) \
: ({ size_t __len = strlen (s) + 1; \
char *__retval = (char *) malloc (__len); \
if (__retval != NULL) \
__retval = (char *) memcpy (__retval, s, __len); \
__retval; })) \
: __strdup (s)))
# if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
# define strdup(s) __strdup (s)
@ -873,6 +873,37 @@ __strsep_g (char **__s, __const char *__reject)
#endif
#if !defined _HAVE_STRING_ARCH_strndup && !defined __STRICT_ANSI__
/* We need the memory allocation functions. Including this header is
not allowed. */
# include <stdlib.h>
# define __strndup(s, n) \
(__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s) \
? (((__const unsigned char *) (s))[0] == '\0' \
? (char *) calloc (1, 1) \
: ({ size_t __len = strlen (s) + 1; \
size_t __n = (n); \
char *__retval; \
if (__n < __len) \
__len = __n; \
__retval = (char *) malloc (__len); \
if (__retval != NULL) \
{ \
__retval[__len - 1] = '\0'; \
__retval = (char *) memcpy (__retval, s, \
__len - 1); \
} \
__retval; })) \
: __strndup ((s), (n))))
# ifdef __GNU_SOURCE
# define strndup(s, n) __strndup ((s), (n))
# endif
#endif
#undef __STRING_INLINE
#endif /* No string inlines. */