From c559a3ca84a0258e4773571ae73fa7bba4c927b0 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 25 Nov 1999 19:27:07 +0000 Subject: Update. 1999-11-25 H.J. Lu * stdlib/exit.c (exit): Run funtions only if __exit_funcs->idx > 0. 1999-11-25 Ulrich Drepper * manual/charset.texi (iconv Examples): Add iconv call to flush state. Reported by Andrew Clausen . 1999-11-25 Andreas Jaeger * manual/install.texi (Running make install): Better describe update from libc5. Patch by Michael Deutschmann . 1999-11-25 Andreas Jaeger * include/sys/mman.h: Remove K&R compatibility. 1999-11-15 Andreas Jaeger * misc/sys/mman.h: Use __REDIRECT for mmap, correct prototype to use __off64_t. 1999-11-25 Ulrich Drepper * iconv/iconv_prog.c (process_block): For stateful charsets write out byte sequence to get to initial state at the end of the file. which was reported to not work (which proofed to be wrong). --- ChangeLog | 33 +++++++++++++++++++++++++++++++-- iconv/iconv_prog.c | 28 ++++++++++++++++++++++++++-- include/sys/mman.h | 10 +++++----- localedata/ChangeLog | 4 ++++ localedata/Makefile | 2 +- manual/charset.texi | 8 +++++++- manual/install.texi | 33 ++++++++++++++++++++++----------- misc/sys/mman.h | 11 ++++++++--- stdlib/exit.c | 3 +-- 9 files changed, 105 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2253407581..0bd8ce7a60 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,33 @@ +1999-11-25 H.J. Lu + + * stdlib/exit.c (exit): Run funtions only if + __exit_funcs->idx > 0. + +1999-11-25 Ulrich Drepper + + * manual/charset.texi (iconv Examples): Add iconv call to flush + state. Reported by Andrew Clausen . + +1999-11-25 Andreas Jaeger + + * manual/install.texi (Running make install): Better describe + update from libc5. + Patch by Michael Deutschmann . + +1999-11-25 Andreas Jaeger + + * include/sys/mman.h: Remove K&R compatibility. + +1999-11-15 Andreas Jaeger + + * misc/sys/mman.h: Use __REDIRECT for mmap, correct prototype to + use __off64_t. + +1999-11-25 Ulrich Drepper + + * iconv/iconv_prog.c (process_block): For stateful charsets write + out byte sequence to get to initial state at the end of the file. + 1999-11-25 Andreas Schwab * Makeconfig: Include sys-dirs and sys-sorted earlier. @@ -21,8 +51,7 @@ * sysdeps/unix/sysv/linux/net/if_arp.h (ARPHRD_IEEE802_TR): Added. * string/stratcliff.c: Add one more strchr test for something - which was reported to not work - (which proofed to be wrong). + which was reported to not work (which proofed to be wrong). * iconv/skeleton.c: It's __is_last, not is_last. diff --git a/iconv/iconv_prog.c b/iconv/iconv_prog.c index efa9e24411..0144ac40ee 100644 --- a/iconv/iconv_prog.c +++ b/iconv/iconv_prog.c @@ -338,8 +338,32 @@ conversion stopped due to problem in writing the output")); } if (n != (size_t) -1) - /* Everything is processed. */ - break; + { + /* All the input test is processed. For state-dependent + character sets we have to flush the state now. */ + outptr = outbuf; + outlen = OUTBUF_SIZE; + n = iconv (cd, NULL, NULL, &outptr, &outlen); + + if (outptr != outbuf) + { + /* We have something to write out. */ + int errno_save = errno; + + if (fwrite (outbuf, 1, outptr - outbuf, output) < outptr - outbuf + || ferror (output)) + { + /* Error occurred while printing the result. */ + error (0, 0, _("\ +conversion stopped due to problem in writing the output")); + return -1; + } + + errno = errno_save; + } + + break; + } if (errno != E2BIG) { diff --git a/include/sys/mman.h b/include/sys/mman.h index a76c23688f..14e757892e 100644 --- a/include/sys/mman.h +++ b/include/sys/mman.h @@ -3,13 +3,13 @@ /* Now define the internal interfaces. */ extern void *__mmap (void *__addr, size_t __len, int __prot, - int __flags, int __fd, __off_t __offset) __THROW; + int __flags, int __fd, __off_t __offset); extern void *__mmap64 (void *__addr, size_t __len, int __prot, - int __flags, int __fd, __off64_t __offset) __THROW; -extern int __munmap (void *__addr, size_t __len) __THROW; -extern int __mprotect (void *__addr, size_t __len, int __prot) __THROW; + int __flags, int __fd, __off64_t __offset); +extern int __munmap (void *__addr, size_t __len); +extern int __mprotect (void *__addr, size_t __len, int __prot); /* This one is Linux specific. */ extern void *__mremap (void *__addr, size_t __old_len, - size_t __new_len, int __may_move) __THROW; + size_t __new_len, int __may_move); #endif diff --git a/localedata/ChangeLog b/localedata/ChangeLog index 4359b31d89..2d29f4035e 100644 --- a/localedata/ChangeLog +++ b/localedata/ChangeLog @@ -1,3 +1,7 @@ +1999-11-25 Ulrich Drepper + + * Makefile: Don't run tests for now. + 1999-11-23 Ulrich Drepper * locales/ko_KR: New file. diff --git a/localedata/Makefile b/localedata/Makefile index 6433e374ea..1189723988 100644 --- a/localedata/Makefile +++ b/localedata/Makefile @@ -72,7 +72,7 @@ $(inst_i18ndir)/repertoiremaps/%: repertoiremaps/% $(+force); $(do-install) ifeq (no,$(cross-compiling)) ifeq (yes,$(build-shared)) .PHONY: do-collate-test do-tst-fmon do-tst-locale do-tst-rpmatch do-tst-trans -tests: do-collate-test do-tst-fmon do-tst-locale do-tst-rpmatch do-tst-trans +#tests: do-collate-test do-tst-fmon do-tst-locale do-tst-rpmatch do-tst-trans do-collate-test: sort-test.sh $(objpfx)collate-test $(objpfx)xfrm-test \ $(test-input-data) $(SHELL) -e $< $(common-objpfx) $(test-input) diff --git a/manual/charset.texi b/manual/charset.texi index 7a5237edfb..76b189f5fc 100644 --- a/manual/charset.texi +++ b/manual/charset.texi @@ -1837,6 +1837,11 @@ file2wcs (int fd, const char *charset, wchar_t *outbuf, size_t avail) @r{characters in the @code{inbuf}. Put them back.} */ if (lseek (fd, -insize, SEEK_CUR) == -1) result = -1; + + /* @r{Now write out the byte sequence to get into the} + @r{initial state if this is necessary.} */ + iconv (cd, NULL, NULL, &wrptr, &avail); + break; @} insize += nread; @@ -1867,7 +1872,8 @@ file2wcs (int fd, const char *charset, wchar_t *outbuf, size_t avail) @} /* @r{Terminate the output string.} */ - *((wchar_t *) wrptr) = L'\0'; + if (avail >= sizeof (wchar_t)) + *((wchar_t *) wrptr) = L'\0'; if (iconv_close (cd) != 0) perror ("iconv_close"); diff --git a/manual/install.texi b/manual/install.texi index 992203a056..3f98b270aa 100644 --- a/manual/install.texi +++ b/manual/install.texi @@ -232,18 +232,29 @@ shut the system down to single-user mode first, and reboot afterward. This minimizes the risk of breaking things when the library changes out from underneath. +If you're upgrading from Linux libc5 or some other C library, you need to +replace the @file{/usr/include} with a fresh directory before installing it. +The new @file{/usr/include} should contain the Linux headers, but nothing else. + +You must first build the library (@samp{make}), optionally check it +(@samp{make check}), switch the include directories and then install +(@samp{make install}). The steps must be done in this order. Not moving +the directory before install will result in an unusable mixture of header +files from both libraries, but configuring, building, and checking the +library requires the ability to compile and run programs against the old +library. + If you are upgrading from a previous installation of glibc 2.0 or 2.1, -@samp{make install} will do the entire job. If you're upgrading from -Linux libc5 or some other C library, you need to rename the old -@file{/usr/include} directory before running @samp{make install}, -or you will end up with a mixture of header files from both -libraries, and you won't be able to compile anything. You may also need -to reconfigure GCC to work with the new library. The easiest way to do -that is to figure out the compiler switches to make it work again -(@samp{-Wl,--dynamic-linker=/lib/ld-linux.so.2} should work on Linux -systems) and use them to recompile gcc. You can also edit the specs -file (@file{/usr/lib/gcc-lib/@var{TARGET}/@var{VERSION}/specs}), but -that is a bit of a black art. +@samp{make install} will do the entire job. You do not need to remove +the old includes -- if you want to do so anyway you must then follow the +order given above. + +You may also need to reconfigure GCC to work with the new library. The +easiest way to do that is to figure out the compiler switches to make it +work again (@samp{-Wl,--dynamic-linker=/lib/ld-linux.so.2} should work on +Linux systems) and use them to recompile gcc. You can also edit the specs +file (@file{/usr/lib/gcc-lib/@var{TARGET}/@var{VERSION}/specs}), but that +is a bit of a black art. You can install glibc somewhere other than where you configured it to go by setting the @code{install_root} variable on the command line for diff --git a/misc/sys/mman.h b/misc/sys/mman.h index cddb451081..a39639c995 100644 --- a/misc/sys/mman.h +++ b/misc/sys/mman.h @@ -44,9 +44,14 @@ __BEGIN_DECLS extern void *mmap (void *__addr, size_t __len, int __prot, int __flags, int __fd, __off_t __offset) __THROW; #else -extern void *mmap (void *__addr, size_t __len, int __prot, - int __flags, int __fd, __off_t __offset) __THROW - __asm__ ("mmap64"); +# ifdef __REDIRECT +extern void * __REDIRECT (mmap, + (void *__addr, size_t __len, int __prot, + int __flags, int __fd, __off64_t __offset) __THROW, + mmap64); +# else +# define mmap mmap64 +# endif #endif #ifdef __USE_LARGEFILE64 extern void *mmap64 (void *__addr, size_t __len, int __prot, diff --git a/stdlib/exit.c b/stdlib/exit.c index f44c519aa7..f63dc1fdec 100644 --- a/stdlib/exit.c +++ b/stdlib/exit.c @@ -41,7 +41,7 @@ exit (int status) { struct exit_function_list *old; - do + while (__exit_funcs->idx > 0) { const struct exit_function *const f = &__exit_funcs->fns[--__exit_funcs->idx]; @@ -58,7 +58,6 @@ exit (int status) break; } } - while (__exit_funcs->idx > 0); old = __exit_funcs; __exit_funcs = __exit_funcs->next; -- cgit v1.2.3