about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog33
-rw-r--r--iconv/iconv_prog.c28
-rw-r--r--include/sys/mman.h10
-rw-r--r--localedata/ChangeLog4
-rw-r--r--localedata/Makefile2
-rw-r--r--manual/charset.texi8
-rw-r--r--manual/install.texi33
-rw-r--r--misc/sys/mman.h11
-rw-r--r--stdlib/exit.c3
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  <hjl@gnu.org>
+
+	* stdlib/exit.c (exit): Run funtions only if
+	__exit_funcs->idx > 0.
+
+1999-11-25  Ulrich Drepper  <drepper@cygnus.com>
+
+	* manual/charset.texi (iconv Examples): Add iconv call to flush
+	state.  Reported by Andrew Clausen <clausen@alphalink.com.au>.
+
+1999-11-25  Andreas Jaeger  <aj@suse.de>
+
+	* manual/install.texi (Running make install): Better describe
+	update from libc5.
+	Patch by Michael Deutschmann <michael@talamasca.wkpowerlink.com>.
+
+1999-11-25  Andreas Jaeger  <aj@suse.de>
+
+	* include/sys/mman.h: Remove K&R compatibility.
+
+1999-11-15  Andreas Jaeger  <aj@suse.de>
+
+	* misc/sys/mman.h: Use __REDIRECT for mmap, correct prototype to
+	use __off64_t.
+
+1999-11-25  Ulrich Drepper  <drepper@cygnus.com>
+
+	* 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  <schwab@suse.de>
 
 	* 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  <drepper@cygnus.com>
+
+	* Makefile: Don't run tests for now.
+
 1999-11-23  Ulrich Drepper  <drepper@cygnus.com>
 
 	* 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;