+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.
+
1998-03-18 14:25 Ulrich Drepper <drepper@cygnus.com>
* string/bits/string2.h: Add optimization for strdup.
a local mirror first.
You always should try to use the latest official release. Older
-versions may not have all the features GNU libc requires. On most
-supported platforms (for powerpc see question ?powerpc), 2.7.2.3 is
-the earliest version that works at all.
+versions may not have all the features GNU libc requires. The current
+releases of egcs (1.0.2) and GNU CC (2.8.1) should work with the GNU C
+library (for powerpc see question ?powerpc).
?? When I try to compile glibc I get only error messages.
What's wrong?
releases are known to have bugs that prevent a successful compilation.
{ZW} As of release 2.1 a linker supporting symbol versions is
-required. For Linux, get binutils-2.8.1.0.17 or later. Other systems
+required. For Linux, get binutils-2.8.1.0.23 or later. Other systems
may have native linker support, but it's moot right now, because glibc
has not been ported to them.
?? How can I compile gcc 2.7.2.1 from the gcc source code using
glibc 2.x?
-{AJ} There's only correct support for glibc 2.0.x in gcc 2.7.2.3
-or later. You should get at least gcc 2.7.2.3. All previous versions
-had problems with glibc support.
+{AJ} There's only correct support for glibc 2.0.x in gcc 2.7.2.3 or
+later. But you should get at least gcc 2.8.1 or egcs 1.0.2 (or later
+versions) instead.
?? The `gencat' utility cannot process the catalog sources which
were used on my Linux libc5 based system. Why?
?? What do I need for C++ development?
-{HJ,AJ} You need either egcs 1.0.1 or gcc-2.8.1 with libstdc++
+{HJ,AJ} You need either egcs 1.0.2 or gcc-2.8.1 with libstdc++
2.8.1 (or more recent versions). libg++ 2.7.2 (and the Linux Versions
2.7.2.x) doesn't work very well with the GNU C library due to vtable thunks.
If you're upgrading from glibc 2.0.x to 2.1 you have to recompile
libc.dvi libc.info: $(chapters) summary.texi $(chapters-incl)
libc.dvi: texinfo.tex
+%.info: %.texinfo
+ $(MAKEINFO) $<
+
+%.dvi: %.texinfo
+ $(TEXI2DVI) $<
+
# Generate the summary from the Texinfo source files for each chapter.
summary.texi: stamp-summary ;
stamp-summary: summary.awk $(chapters) $(chapters-incl)
# Generate a file which can be added to the `dir' content to provide direct
# access to the documentation of the function, variables, and other
# definitions.
-dir-add.texi: xtract-typefun.awk $(chapters) $(chapters-incl)
+dir-add.texinfo: xtract-typefun.awk $(chapters) $(chapters-incl)
(echo "@dircategory GNU C library functions"; \
echo "@direntry"; \
$(GAWK) -f $^ | sort; \
@end table
@end deftp
+Another possibility to check for and guard against bugs in the use of
+@code{malloc}, @code{realloc} and @code{free} is to set the environment
+variable @code{MALLOC_CHECK_}. When @code{MALLOC_CHECK_} is set, a
+special (less efficient) implementation is used which is designed to be
+tolerant against simple errors, such as double calls of @code{free} with
+the same argument, or overruns of a single byte (off-by-one bugs). Not
+all such errors can be proteced against, however, and memory leaks can
+result. If @code{MALLOC_CHECK_} is set to @code{0}, any detected heap
+corruption is silently ignored; if set to @code{1}, a diagnostic is
+printed on @code{stderr}; if set to @code{2}, @code{abort} is called
+immediately. This can be useful because otherwise a crash may happen
+much later, and the true cause for the problem is then very hard to
+track down.
+
@node Hooks for Malloc
@subsection Storage Allocation Hooks
@cindex allocation hooks, for @code{malloc}
? (((__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 *
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
return __retval;
}
# ifdef __USE_BSD
-# define strsep(s, reject) __strsep (s, reject)
+# define strsep(s, reject) __strsep ((s), (reject))
# endif
#endif
# 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)
#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. */
-/* Copyright (C) 1991, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
char *memcpy ();
#endif
+#undef __strdup
+#undef strdup
+
#ifndef weak_alias
# define __strdup strdup
#endif
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
char *malloc ();
#endif
+#undef __strndup
+#undef strndup
+
#ifndef weak_alias
# define __strndup strndup
#endif
#include <string.h>
+#undef __strsep
#undef strsep
char *
if (*begin == ch)
end = begin;
else
- end = strchr (begin, delim[0]);
+ end = strchr (begin + 1, ch);
}
}
else
# northamerica.
distribute += $(tzfiles) leapseconds pacificnew simplebackw
+generated := $(addprefix z.,$(tzfiles))
install-sbin := zic zdump
generated-dirs = testdata