[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[commits] r6632 - in /fsf/trunk/libc: ./ elf/ libio/ login/ malloc/ misc/ nptl/ nptl/sysdeps/powerpc/ nptl/sysdeps/unix/sysv/linux/ ns...



Author: eglibc
Date: Sun Jul 27 00:07:45 2008
New Revision: 6632

Log:
Import glibc-mainline for 2008-07-27

Added:
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/bits/utmp.h
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/bits/utmpx.h
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutent.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutid.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutline.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutmp.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutxent.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutxid.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutxline.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/login.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/login32.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/pututxline.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/updwtmp.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/updwtmpx.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp-compat.h
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp-convert.h
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.h
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx-convert.h
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.h
Modified:
    fsf/trunk/libc/ChangeLog
    fsf/trunk/libc/Makeconfig
    fsf/trunk/libc/Versions.def
    fsf/trunk/libc/elf/Makefile
    fsf/trunk/libc/elf/dl-load.c
    fsf/trunk/libc/elf/dl-object.c
    fsf/trunk/libc/libio/fileops.c
    fsf/trunk/libc/login/utmp_file.c
    fsf/trunk/libc/malloc/mtrace.c
    fsf/trunk/libc/misc/syslog.c
    fsf/trunk/libc/nptl/ChangeLog
    fsf/trunk/libc/nptl/sysdeps/powerpc/tcb-offsets.sym
    fsf/trunk/libc/nptl/sysdeps/unix/sysv/linux/mq_notify.c
    fsf/trunk/libc/nscd/Makefile
    fsf/trunk/libc/scripts/gen-as-const.awk
    fsf/trunk/libc/stdio-common/printf_fp.c
    fsf/trunk/libc/sunrpc/clnt_udp.c
    fsf/trunk/libc/sunrpc/key_call.c
    fsf/trunk/libc/sysdeps/sparc/Makefile
    fsf/trunk/libc/sysdeps/unix/sysv/linux/dl-origin.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
    fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/Versions

Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Sun Jul 27 00:07:45 2008
@@ -1,3 +1,81 @@
+2008-07-26  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #6771]
+	* libio/fileops.c (_IO_new_file_attach): Preserve errno around
+	success call of _IO_SEEKOFF or calls which failed because the
+	descriptor is for a pipe.
+
+	* sunrpc/key_call.c (getkeyserv_handle): Use FD_CLOEXEC instead of
+	magic number.
+
+	* misc/syslog.c (openlog_internal): Use SOCK_CLOEXEC if possible.
+
+	* malloc/mtrace.c (mtrace): Use 'e' flag in fopen call.  Drop
+	F_SETFD use if we know fopen set the flag.
+
+	* login/utmp_file.c (setutent_file): Minor optimization in case
+	O_CLOEXEC is available.
+
+2008-07-24  Tom "spot" Callaway  <tcallawa@xxxxxxxxxx>
+
+	* Makeconfig: Define pie-ccflag and PIE-ccflag variables.
+	* elf/Makefile: Use pie-ccflag variable.
+	* nscd/Makefile: Likewise.
+	* sysdeps/sparc/Makefile: Set $(pie-ccflag) to -fPIE.
+
+2008-07-21  Andreas Krebbel  <krebbel1@xxxxxxxxxx>
+
+	[BZ #6724]
+	* Versions.def: Add GLIBC_2.9 version tag for libutil.
+	* sysdeps/unix/sysv/linux/s390/bits/utmp.h: Copy of
+	gnu/bits/utmp.h.  Check for __WORDSIZE_COMPAT32 removed.
+	* sysdeps/unix/sysv/linux/s390/bits/utmpx.h: Copy of
+	gnu/bits/utmpx.h.  Check for __WORDSIZE_COMPAT32 removed.
+	* sysdeps/unix/sysv/linux/s390/s390-32/Makefile: Add new files
+	utmp32, utmpx32 and login32.
+	* sysdeps/unix/sysv/linux/s390/s390-32/Versions: Add 2.9
+	versions of struct utmp functions to libc and libutil.
+	* sysdeps/unix/sysv/linux/s390/s390-32/utmp-compat.h: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/getutent.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/getutid.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/getutline.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/getutmp.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/getutxent.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/getutxid.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/getutxline.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/login.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/login32.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/pututxline.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/updwtmp.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/updwtmpx.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/utmp-convert.h: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/utmp32.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/utmp32.h: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/utmpx-convert.h: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.h: New file.
+
+2008-07-26  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* scripts/gen-as-const.awk: Generate more widely usable code by
+	using 64-bit arithmetic.
+
+	* stdio-common/printf_fp.c (___printf_fp): Give wide outout code
+	the same treatment as narrow output code in last patch.
+
+	* sunrpc/clnt_udp.c (__libc_clntudp_bufcreate): Namespace cleanup.
+
+	[BZ #6763]
+	* elf/dl-load.c (local_strdup): Remove inline.
+	(_dl_map_object_from_fd): Don't allocate l_symbolic_searchlist.r_list.
+	* elf/dl-object.c (_dl_new_object): Allocate symbolic searchlist as
+	part of the object.
+
+	* sysdeps/unix/sysv/linux/dl-origin.c: Add const to avoid warning.
+
 2008-07-25  Ulrich Drepper  <drepper@xxxxxxxxxx>
 
 	* sysdeps/unix/sysv/linux/kernel-features.h: IA-64 and SPARC have

Modified: fsf/trunk/libc/Makeconfig
==============================================================================
--- fsf/trunk/libc/Makeconfig (original)
+++ fsf/trunk/libc/Makeconfig Sun Jul 27 00:07:45 2008
@@ -712,6 +712,10 @@
 # This one should always stay like this unless there is a very good reason.
 PIC-ccflag = -fPIC
 endif
+# This can be changed by a sysdep makefile
+pie-ccflag = -fpie
+# This one should always stay like this unless there is a very good reason.
+PIE-ccflag = -fPIE
 ifeq (yes,$(build-profile))
 # Under --enable-profile, we will build a static library of profiled objects.
 # The profiled object files are named foo.op.

Modified: fsf/trunk/libc/Versions.def
==============================================================================
--- fsf/trunk/libc/Versions.def (original)
+++ fsf/trunk/libc/Versions.def Sun Jul 27 00:07:45 2008
@@ -106,6 +106,7 @@
 }
 libutil {
   GLIBC_2.0
+  GLIBC_2.9
 }
 ld {
   GLIBC_2.0

Modified: fsf/trunk/libc/elf/Makefile
==============================================================================
--- fsf/trunk/libc/elf/Makefile (original)
+++ fsf/trunk/libc/elf/Makefile Sun Jul 27 00:07:45 2008
@@ -800,7 +800,7 @@
 	cmp $@ tst-array5-static.exp > /dev/null
 
 ifeq (yesyes,$(have-fpie)$(build-shared))
-CFLAGS-tst-pie1.c += -fpie
+CFLAGS-tst-pie1.c += $(pie-ccflag)
 
 $(objpfx)tst-pie1.out: $(objpfx)tst-pie1
 	$(elf-objpfx)$(rtld-installed-name) \

Modified: fsf/trunk/libc/elf/dl-load.c
==============================================================================
--- fsf/trunk/libc/elf/dl-load.c (original)
+++ fsf/trunk/libc/elf/dl-load.c Sun Jul 27 00:07:45 2008
@@ -163,7 +163,7 @@
 
 
 /* Local version of `strdup' function.  */
-static inline char *
+static char *
 local_strdup (const char *s)
 {
   size_t len = strlen (s) + 1;
@@ -1470,15 +1470,6 @@
     {
       /* Create an appropriate searchlist.  It contains only this map.
 	 This is the definition of DT_SYMBOLIC in SysVr4.  */
-      l->l_symbolic_searchlist.r_list =
-	(struct link_map **) malloc (sizeof (struct link_map *));
-
-      if (l->l_symbolic_searchlist.r_list == NULL)
-	{
-	  errstring = N_("cannot create searchlist");
-	  goto call_lose_errno;
-	}
-
       l->l_symbolic_searchlist.r_list[0] = l;
       l->l_symbolic_searchlist.r_nlist = 1;
 

Modified: fsf/trunk/libc/elf/dl-object.c
==============================================================================
--- fsf/trunk/libc/elf/dl-object.c (original)
+++ fsf/trunk/libc/elf/dl-object.c Sun Jul 27 00:07:45 2008
@@ -1,5 +1,5 @@
 /* Storage management for the chain of loaded shared objects.
-   Copyright (C) 1995-2002, 2004, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1995-2002,2004,2006,2007,2008 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
@@ -50,13 +50,17 @@
 #endif
 
   new = (struct link_map *) calloc (sizeof (*new) + audit_space
+				    + sizeof (struct link_map *)
 				    + sizeof (*newname) + libname_len, 1);
   if (new == NULL)
     return NULL;
 
   new->l_real = new;
-  new->l_libname = newname = (struct libname_list *) ((char *) (new + 1)
-						      + audit_space);
+  new->l_symbolic_searchlist.r_list = (struct link_map **) ((char *) (new + 1)
+							    + audit_space);
+
+  new->l_libname = newname
+    = (struct libname_list *) (new->l_symbolic_searchlist.r_list + 1);
   newname->name = (char *) memcpy (newname + 1, libname, libname_len);
   /* newname->next = NULL;	We use calloc therefore not necessary.  */
   newname->dont_free = 1;

Modified: fsf/trunk/libc/libio/fileops.c
==============================================================================
--- fsf/trunk/libc/libio/fileops.c (original)
+++ fsf/trunk/libc/libio/fileops.c Sun Jul 27 00:07:45 2008
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1995, 1997-2005, 2006, 2007
+/* Copyright (C) 1993, 1995, 1997-2005, 2006, 2007, 2008
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Per Bothner <bothner@xxxxxxxxxx>.
@@ -428,9 +428,11 @@
   /* Get the current position of the file. */
   /* We have to do that since that may be junk. */
   fp->_offset = _IO_pos_BAD;
+  int save_errno = errno;
   if (_IO_SEEKOFF (fp, (_IO_off64_t)0, _IO_seek_cur, _IOS_INPUT|_IOS_OUTPUT)
       == _IO_pos_BAD && errno != ESPIPE)
     return NULL;
+  __set_errno (save_errno);
   return fp;
 }
 INTDEF2(_IO_new_file_attach, _IO_file_attach)

Modified: fsf/trunk/libc/login/utmp_file.c
==============================================================================
--- fsf/trunk/libc/login/utmp_file.c (original)
+++ fsf/trunk/libc/login/utmp_file.c Sun Jul 27 00:07:45 2008
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-2002, 2003, 2004, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2004, 2007, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>
    and Paul Janzen <pcj@xxxxxxxxxxxx>, 1996.
@@ -167,10 +167,11 @@
 # ifdef O_CLOEXEC
 	      if (__have_o_cloexec == 0)
 		__have_o_cloexec = (result & FD_CLOEXEC) ? 1 : -1;
+
+	      if (__have_o_cloexec < 0)
 # endif
-
-	      result = fcntl_not_cancel (file_fd, F_SETFD,
-					 result | FD_CLOEXEC);
+		result = fcntl_not_cancel (file_fd, F_SETFD,
+					   result | FD_CLOEXEC);
 	    }
 
 	  if (result == -1)

Modified: fsf/trunk/libc/malloc/mtrace.c
==============================================================================
--- fsf/trunk/libc/malloc/mtrace.c (original)
+++ fsf/trunk/libc/malloc/mtrace.c Sun Jul 27 00:07:45 2008
@@ -1,5 +1,5 @@
 /* More debugging hooks for `malloc'.
-   Copyright (C) 1991-1994,1996-2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1991-1994,1996-2004, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 		 Written April 2, 1991 by John Gilmore of Cygnus Support.
 		 Based on mcheck.c by Mike Haertel.
@@ -34,13 +34,13 @@
 
 #include <stdio-common/_itoa.h>
 
-#ifdef _LIBC
-# include <libc-internal.h>
-
-# include <libio/iolibio.h>
-# define setvbuf(s, b, f, l) INTUSE(_IO_setvbuf) (s, b, f, l)
-# define fwrite(buf, size, count, fp) _IO_fwrite (buf, size, count, fp)
-#endif
+#include <libc-internal.h>
+
+#include <libio/iolibio.h>
+#define setvbuf(s, b, f, l) INTUSE(_IO_setvbuf) (s, b, f, l)
+#define fwrite(buf, size, count, fp) _IO_fwrite (buf, size, count, fp)
+
+#include <kernel-features.h>
 
 #ifndef attribute_hidden
 # define attribute_hidden
@@ -315,9 +315,10 @@
       if (mtb == NULL)
 	return;
 
-      mallstream = fopen (mallfile != NULL ? mallfile : "/dev/null", "wc");
+      mallstream = fopen (mallfile != NULL ? mallfile : "/dev/null", "wce");
       if (mallstream != NULL)
 	{
+#ifndef __ASSUME_O_CLOEXEC
 	  /* Make sure we close the file descriptor on exec.  */
 	  int flags = __fcntl (fileno (mallstream), F_GETFD, 0);
 	  if (flags >= 0)
@@ -325,6 +326,7 @@
 	      flags |= FD_CLOEXEC;
 	      __fcntl (fileno (mallstream), F_SETFD, flags);
 	    }
+#endif
 	  /* Be sure it doesn't malloc its buffer!  */
 	  malloc_trace_buffer = mtb;
 	  setvbuf (mallstream, malloc_trace_buffer, _IOFBF, TRACE_BUFFER_SIZE);

Modified: fsf/trunk/libc/misc/syslog.c
==============================================================================
--- fsf/trunk/libc/misc/syslog.c (original)
+++ fsf/trunk/libc/misc/syslog.c Sun Jul 27 00:07:45 2008
@@ -348,10 +348,35 @@
 			(void)strncpy(SyslogAddr.sun_path, _PATH_LOG,
 				      sizeof(SyslogAddr.sun_path));
 			if (LogStat & LOG_NDELAY) {
-				if ((LogFile = __socket(AF_UNIX, LogType, 0))
-				    == -1)
+#ifdef SOCK_CLOEXEC
+# ifndef __ASSUME_SOCK_CLOEXEC
+				if (__have_sock_cloexec >= 0) {
+# endif
+					LogFile = __socket(AF_UNIX,
+							   LogType
+							   | SOCK_CLOEXEC, 0);
+# ifndef __ASSUME_SOCK_CLOEXEC
+					if (__have_sock_cloexec == 0)
+						__have_sock_cloexec
+						  = (LogFile != -1
+						     || errno != EINVAL);
+#endif
+				}
+#endif
+#ifndef __ASSUME_SOCK_CLOEXEC
+# ifdef SOCK_CLOEXEC
+				if (__have_sock_cloexec < 0)
+# endif
+				  LogFile = __socket(AF_UNIX, LogType, 0);
+#endif
+				if (LogFile == -1)
 					return;
-				(void)__fcntl(LogFile, F_SETFD, 1);
+#ifndef __ASSUME_SOCK_CLOEXEC
+# ifdef SOCK_CLOEXEC
+				if (__have_sock_cloexec < 0)
+# endif
+					__fcntl(LogFile, F_SETFD, FD_CLOEXEC);
+#endif
 			}
 		}
 		if (LogFile != -1 && !connected)

Modified: fsf/trunk/libc/nptl/ChangeLog
==============================================================================
--- fsf/trunk/libc/nptl/ChangeLog (original)
+++ fsf/trunk/libc/nptl/ChangeLog Sun Jul 27 00:07:45 2008
@@ -1,3 +1,9 @@
+2008-04-28  Hiroki Kaminaga  <kaminaga@xxxxxxxxxxxxx>
+
+	[BZ #6740]
+	* sysdeps/powerpc/tcb-offsets.sym (PRIVATE_FUTEX_OFFSET): Guard symbol
+	definition with #ifndef __ASSUME_PRIVATE_FUTEX.
+
 2008-07-25  Ulrich Drepper  <drepper@xxxxxxxxxx>
 
 	* sysdeps/unix/sysv/linux/mq_notify.c (init_mq_netlink): Use

Modified: fsf/trunk/libc/nptl/sysdeps/powerpc/tcb-offsets.sym
==============================================================================
--- fsf/trunk/libc/nptl/sysdeps/powerpc/tcb-offsets.sym (original)
+++ fsf/trunk/libc/nptl/sysdeps/powerpc/tcb-offsets.sym Sun Jul 27 00:07:45 2008
@@ -15,4 +15,6 @@
 PID				thread_offsetof (pid)
 TID				thread_offsetof (tid)
 POINTER_GUARD			(offsetof (tcbhead_t, pointer_guard) - TLS_TCB_OFFSET - sizeof (tcbhead_t))
+#ifndef __ASSUME_PRIVATE_FUTEX
 PRIVATE_FUTEX_OFFSET		thread_offsetof (header.private_futex)
+#endif

Modified: fsf/trunk/libc/nptl/sysdeps/unix/sysv/linux/mq_notify.c
==============================================================================
--- fsf/trunk/libc/nptl/sysdeps/unix/sysv/linux/mq_notify.c (original)
+++ fsf/trunk/libc/nptl/sysdeps/unix/sysv/linux/mq_notify.c Sun Jul 27 00:07:45 2008
@@ -169,7 +169,7 @@
   if (netlink_socket == -1)
     {
       /* Just a normal netlink socket, not bound.  */
-      if (have_sock_cloexec)
+      if (have_sock_cloexec >= 0)
 	{
 	  netlink_socket = socket (AF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, 0);
 #if defined SOCK_CLOEXEC && !defined __ASSUME_SOCK_CLOEXEC

Modified: fsf/trunk/libc/nscd/Makefile
==============================================================================
--- fsf/trunk/libc/nscd/Makefile (original)
+++ fsf/trunk/libc/nscd/Makefile Sun Jul 27 00:07:45 2008
@@ -90,7 +90,7 @@
 
 nscd-cflags = -DIS_IN_nscd=1 -D_FORTIFY_SOURCE=2
 ifeq (yesyes,$(have-fpie)$(build-shared))
-nscd-cflags += -fpie
+nscd-cflags += $(pie-ccflag)
 endif
 ifeq (yes,$(have-ssp))
 nscd-cflags += -fstack-protector

Modified: fsf/trunk/libc/scripts/gen-as-const.awk
==============================================================================
--- fsf/trunk/libc/scripts/gen-as-const.awk (original)
+++ fsf/trunk/libc/scripts/gen-as-const.awk Sun Jul 27 00:07:45 2008
@@ -14,12 +14,14 @@
 
 NF >= 1 && !started {
   if (test) {
+    print "\n#include <inttypes.h>";
     print "\n#include <stdio.h>";
+    print "\n#define U(n) UINT64_C (n)";
     print "\nstatic int do_test (void)\n{\n  int bad = 0, good = 0;\n";
     print "#define TEST(name, source, expr) \\\n" \
-      "  if (asconst_##name != (expr)) { ++bad;" \
-      " fprintf (stderr, \"%s: %s is %ld but %s is %ld\\n\"," \
-      " source, #name, (long int) asconst_##name, #expr, (long int) (expr));" \
+      "  if (U (asconst_##name) != (uint64_t) (expr)) { ++bad;" \
+      " fprintf (stderr, \"%s: %s is %\" PRId64 \" but %s is %\"PRId64 \"\\n\"," \
+      " source, #name, U (asconst_##name), #expr, (uint64_t) (expr));" \
       " } else ++good;\n";
   }
   else

Modified: fsf/trunk/libc/stdio-common/printf_fp.c
==============================================================================
--- fsf/trunk/libc/stdio-common/printf_fp.c (original)
+++ fsf/trunk/libc/stdio-common/printf_fp.c Sun Jul 27 00:07:45 2008
@@ -1204,6 +1204,10 @@
 #ifdef COMPILE_WPRINTF
 	  wstartp = _i18n_number_rewrite (wstartp, wcp,
 					  wbuffer + wbuffer_to_alloc);
+	  wcp = wbuffer + wbuffer_to_alloc;
+	  assert ((uintptr_t) wbuffer <= (uintptr_t) wstartp);
+	  assert ((uintptr_t) wstartp
+		  < (uintptr_t) wbuffer + wbuffer_to_alloc);
 #else
 	  tmpptr = _i18n_number_rewrite (tmpptr, cp, buffer_end);
 	  cp = buffer_end;

Modified: fsf/trunk/libc/sunrpc/clnt_udp.c
==============================================================================
--- fsf/trunk/libc/sunrpc/clnt_udp.c (original)
+++ fsf/trunk/libc/sunrpc/clnt_udp.c Sun Jul 27 00:07:45 2008
@@ -202,7 +202,7 @@
 	  *sockp = __socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 # ifdef SOCK_CLOEXEC
 	  if (flags & SOCK_CLOEXEC)
-	    fcntl (*sockp, F_SETFD, FD_CLOEXEC);
+	    __fcntl (*sockp, F_SETFD, FD_CLOEXEC);
 # endif
 	}
 #endif

Modified: fsf/trunk/libc/sunrpc/key_call.c
==============================================================================
--- fsf/trunk/libc/sunrpc/key_call.c (original)
+++ fsf/trunk/libc/sunrpc/key_call.c Sun Jul 27 00:07:45 2008
@@ -462,7 +462,7 @@
   clnt_control (kcp->client, CLSET_RETRY_TIMEOUT,
 		(char *)&wait_time);
   if (clnt_control (kcp->client, CLGET_FD, (char *)&fd))
-    __fcntl (fd, F_SETFD, 1);  /* make it "close on exec" */
+    __fcntl (fd, F_SETFD, FD_CLOEXEC);  /* make it "close on exec" */
 
   return kcp->client;
 }

Modified: fsf/trunk/libc/sysdeps/sparc/Makefile
==============================================================================
--- fsf/trunk/libc/sysdeps/sparc/Makefile (original)
+++ fsf/trunk/libc/sysdeps/sparc/Makefile Sun Jul 27 00:07:45 2008
@@ -1,5 +1,7 @@
 # The Sparc `long double' is a distinct type we support.
 long-double-fcts = yes
+
+pie-ccflag = -fPIE
 
 ifeq ($(subdir),gmon)
 sysdep_routines += sparc-mcount

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/dl-origin.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/dl-origin.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/dl-origin.c Sun Jul 27 00:07:45 2008
@@ -38,7 +38,7 @@
 #ifndef __ASSUME_AT_EXECFN
   char linkval[PATH_MAX];
 #endif
-  char *str;
+  const char *str;
   char *result = (char *) -1l;
   int len;
 

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/bits/utmp.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/bits/utmp.h (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/bits/utmp.h Sun Jul 27 00:07:45 2008
@@ -1,0 +1,125 @@
+/* The `struct utmp' type, describing entries in the utmp file.  GNU version.
+   Copyright (C) 1993, 1996, 1997, 1998, 1999, 2002, 2008
+   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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _UTMP_H
+# error "Never include <bits/utmp.h> directly; use <utmp.h> instead."
+#endif
+
+#include <paths.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <bits/wordsize.h>
+
+
+#define UT_LINESIZE	32
+#define UT_NAMESIZE	32
+#define UT_HOSTSIZE	256
+
+
+/* The structure describing an entry in the database of
+   previous logins.  */
+struct lastlog
+  {
+#if __WORDSIZE == 32
+    int64_t ll_time;
+#else
+    __time_t ll_time;
+#endif
+    char ll_line[UT_LINESIZE];
+    char ll_host[UT_HOSTSIZE];
+  };
+
+
+/* The structure describing the status of a terminated process.  This
+   type is used in `struct utmp' below.  */
+struct exit_status
+  {
+    short int e_termination;	/* Process termination status.  */
+    short int e_exit;		/* Process exit status.  */
+  };
+
+
+/* The structure describing an entry in the user accounting database.  */
+struct utmp
+{
+  short int ut_type;		/* Type of login.  */
+  pid_t ut_pid;			/* Process ID of login process.  */
+  char ut_line[UT_LINESIZE];	/* Devicename.  */
+  char ut_id[4];		/* Inittab ID.  */
+  char ut_user[UT_NAMESIZE];	/* Username.  */
+  char ut_host[UT_HOSTSIZE];	/* Hostname for remote login.  */
+  struct exit_status ut_exit;	/* Exit status of a process marked
+				   as DEAD_PROCESS.  */
+/* The ut_session and ut_tv fields must be the same size when compiled
+   32- and 64-bit.  This allows data files and shared memory to be
+   shared between 32- and 64-bit applications.  */
+#if __WORDSIZE == 32
+  int64_t ut_session;		/* Session ID, used for windowing.  */
+  struct
+  {
+    int64_t tv_sec;		/* Seconds.  */
+    int64_t tv_usec;		/* Microseconds.  */
+  } ut_tv;			/* Time entry was made.  */
+#else
+  long int ut_session;		/* Session ID, used for windowing.  */
+  struct timeval ut_tv;		/* Time entry was made.  */
+#endif
+
+  int32_t ut_addr_v6[4];	/* Internet address of remote host.  */
+  char __unused[20];		/* Reserved for future use.  */
+};
+
+/* Backwards compatibility hacks.  */
+#define ut_name		ut_user
+#ifndef _NO_UT_TIME
+/* We have a problem here: `ut_time' is also used otherwise.  Define
+   _NO_UT_TIME if the compiler complains.  */
+# define ut_time	ut_tv.tv_sec
+#endif
+#define ut_xtime	ut_tv.tv_sec
+#define ut_addr		ut_addr_v6[0]
+
+
+/* Values for the `ut_type' field of a `struct utmp'.  */
+#define EMPTY		0	/* No valid user accounting information.  */
+
+#define RUN_LVL		1	/* The system's runlevel.  */
+#define BOOT_TIME	2	/* Time of system boot.  */
+#define NEW_TIME	3	/* Time after system clock changed.  */
+#define OLD_TIME	4	/* Time when system clock changed.  */
+
+#define INIT_PROCESS	5	/* Process spawned by the init process.  */
+#define LOGIN_PROCESS	6	/* Session leader of a logged in user.  */
+#define USER_PROCESS	7	/* Normal process.  */
+#define DEAD_PROCESS	8	/* Terminated process.  */
+
+#define ACCOUNTING	9
+
+/* Old Linux name for the EMPTY type.  */
+#define UT_UNKNOWN	EMPTY
+
+
+/* Tell the user that we have a modern system with UT_HOST, UT_PID,
+   UT_TYPE, UT_ID and UT_TV fields.  */
+#define _HAVE_UT_TYPE	1
+#define _HAVE_UT_PID	1
+#define _HAVE_UT_ID	1
+#define _HAVE_UT_TV	1
+#define _HAVE_UT_HOST	1

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/bits/utmpx.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/bits/utmpx.h (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/bits/utmpx.h Sun Jul 27 00:07:45 2008
@@ -1,0 +1,104 @@
+/* Structures and definitions for the user accounting database.  GNU version.
+   Copyright (C) 1997, 1998, 2000, 2001, 2002, 2008
+   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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _UTMPX_H
+# error "Never include <bits/utmpx.h> directly; use <utmpx.h> instead."
+#endif
+
+#include <bits/types.h>
+#include <sys/time.h>
+#include <bits/wordsize.h>
+
+
+#ifdef __USE_GNU
+# include <paths.h>
+# define _PATH_UTMPX	_PATH_UTMP
+# define _PATH_WTMPX	_PATH_WTMP
+#endif
+
+
+#define __UT_LINESIZE	32
+#define __UT_NAMESIZE	32
+#define __UT_HOSTSIZE	256
+
+
+/* The structure describing the status of a terminated process.  This
+   type is used in `struct utmpx' below.  */
+struct __exit_status
+  {
+#ifdef __USE_GNU
+    short int e_termination;	/* Process termination status.  */
+    short int e_exit;		/* Process exit status.  */
+#else
+    short int __e_termination;	/* Process termination status.  */
+    short int __e_exit;		/* Process exit status.  */
+#endif
+  };
+
+
+/* The structure describing an entry in the user accounting database.  */
+struct utmpx
+{
+  short int ut_type;		/* Type of login.  */
+  __pid_t ut_pid;		/* Process ID of login process.  */
+  char ut_line[__UT_LINESIZE];	/* Devicename.  */
+  char ut_id[4];		/* Inittab ID. */
+  char ut_user[__UT_NAMESIZE];	/* Username.  */
+  char ut_host[__UT_HOSTSIZE];	/* Hostname for remote login.  */
+  struct __exit_status ut_exit;	/* Exit status of a process marked
+				   as DEAD_PROCESS.  */
+
+/* The fields ut_session and ut_tv must be the same size when compiled
+   32- and 64-bit.  This allows files and shared memory to be shared
+   between 32- and 64-bit applications.  */
+#if __WORDSIZE == 32
+  __int64_t ut_session;		/* Session ID, used for windowing.  */
+  struct
+  {
+    __int64_t tv_sec;		/* Seconds.  */
+    __int64_t tv_usec;		/* Microseconds.  */
+  } ut_tv;			/* Time entry was made.  */
+#else
+  long int ut_session;		/* Session ID, used for windowing.  */
+  struct timeval ut_tv;		/* Time entry was made.  */
+#endif
+  __int32_t ut_addr_v6[4];	/* Internet address of remote host.  */
+  char __unused[20];		/* Reserved for future use.  */
+};
+
+
+/* Values for the `ut_type' field of a `struct utmpx'.  */
+#define EMPTY		0	/* No valid user accounting information.  */
+
+#ifdef __USE_GNU
+# define RUN_LVL	1	/* The system's runlevel.  */
+#endif
+#define BOOT_TIME	2	/* Time of system boot.  */
+#define NEW_TIME	3	/* Time after system clock changed.  */
+#define OLD_TIME	4	/* Time when system clock changed.  */
+
+#define INIT_PROCESS	5	/* Process spawned by the init process.  */
+#define LOGIN_PROCESS	6	/* Session leader of a logged in user.  */
+#define USER_PROCESS	7	/* Normal process.  */
+#define DEAD_PROCESS	8	/* Terminated process.  */
+
+#ifdef __USE_GNU
+# define ACCOUNTING	9	/* System accounting.  */
+#endif

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
==============================================================================
Binary files - no diff available.

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/Versions
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/Versions (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/Versions Sun Jul 27 00:07:45 2008
@@ -26,4 +26,27 @@
   GLIBC_2.3.3 {
     posix_fadvise64; posix_fallocate64;
   }
+  GLIBC_2.9 {
+    getutent;
+    getutid;
+    getutline;
+    pututline;
+    updwtmp;
+    getutent_r;
+    getutid_r;
+    getutline_r;
+    getutxent;
+    getutxid;
+    getutxline;
+    pututxline;
+    updwtmpx;
+    getutmp;
+    getutmpx;
+  }
 }
+
+libutil {
+  GLIBC_2.9 {
+    login;
+  }
+}

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutent.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutent.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutent.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,29 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <stdlib.h>
+#include <utmp.h>
+
+#include "utmp-compat.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#include "login/getutent.c"
+
+default_symbol_version (__getutent, getutent, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,35 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <bits/libc-lock.h>
+#include <stdlib.h>
+#include <utmp.h>
+
+#include "utmp-compat.h"
+#include "utmp-private.h"
+
+weak_alias (__setutent, setutent)
+weak_alias (__endutent, endutent)
+
+#undef weak_alias
+#define weak_alias(n,a)
+#include "login/getutent_r.c"
+
+default_symbol_version (__getutent_r, getutent_r, UTMP_COMPAT_BASE);
+default_symbol_version (__pututline, pututline, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutid.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutid.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutid.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,29 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <stdlib.h>
+#include <utmp.h>
+
+#include "utmp-compat.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#include "login/getutid.c"
+
+default_symbol_version (__getutid, getutid, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,32 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <bits/libc-lock.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <utmp.h>
+
+#include "utmp-compat.h"
+#include "utmp-private.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#include "login/getutid_r.c"
+
+default_symbol_version (__getutid_r, getutid_r, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutline.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutline.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutline.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,29 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <stdlib.h>
+#include <utmp.h>
+
+#include "utmp-compat.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#include "login/getutline.c"
+
+default_symbol_version (__getutline, getutline, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,31 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <errno.h>
+#include <bits/libc-lock.h>
+#include <utmp.h>
+
+#include "utmp-compat.h"
+#include "utmp-private.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#include "login/getutline_r.c"
+
+default_symbol_version (__getutline_r, getutline_r, UTMP_COMPAT_BASE);;

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutmp.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutmp.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutmp.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,38 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <string.h>
+#include <utmp.h>
+/* This is an ugly hack but we must not see the getutmpx declaration.  */
+#define getutmpx XXXgetutmpx
+#include <utmpx.h>
+#undef getutmpx
+
+#include "utmp-compat.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#define getutmp __getutmp
+#define getutmpx __getutmpx
+#include "sysdeps/gnu/getutmp.c"
+#undef getutmp
+#undef getutmpx
+
+default_symbol_version (__getutmp, getutmp, UTMP_COMPAT_BASE);
+default_symbol_version (__getutmpx, getutmpx, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutxent.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutxent.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutxent.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,31 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <utmp.h>
+#include <utmpx.h>
+
+#include "utmp-compat.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#define getutxent __getutxent
+#include "login/getutxent.c"
+#undef getutxent
+
+default_symbol_version (__getutxent, getutxent, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutxid.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutxid.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutxid.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,31 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <utmp.h>
+#include <utmpx.h>
+
+#include "utmp-compat.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#define getutxid __getutxid
+#include "login/getutxid.c"
+#undef getutxid
+
+default_symbol_version (__getutxid, getutxid, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutxline.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutxline.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/getutxline.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,31 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <utmp.h>
+#include <utmpx.h>
+
+#include "utmp-compat.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#define getutxline __getutxline
+#include "login/getutxline.c"
+#undef getutxline
+
+default_symbol_version (__getutxline, getutxline, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/login.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/login.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/login.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,36 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <assert.h>
+#include <errno.h>
+#include <limits.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <utmp.h>
+
+#include "utmp-compat.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#define login __login
+#include "login/login.c"
+#undef login
+
+default_symbol_version (__login, login, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/login32.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/login32.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/login32.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,37 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <sys/types.h>
+#include <utmp.h>
+#include <libc-symbols.h>
+
+#include "utmp32.h"
+#include "utmp-convert.h"
+
+/* Write the given entry into utmp and wtmp.  */
+void
+login32 (const struct utmp32 *entry)
+{
+  struct utmp in64;
+
+  utmp_convert32to64 (entry, &in64);
+  login (&in64);
+}
+
+symbol_version (login32, login, GLIBC_2.0);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/pututxline.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/pututxline.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/pututxline.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,31 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <utmp.h>
+#include <utmpx.h>
+
+#include "utmp-compat.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#define pututxline __pututxline
+#include "login/pututxline.c"
+#undef pututxline
+
+default_symbol_version (__pututxline, pututxline, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/updwtmp.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/updwtmp.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/updwtmp.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,29 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <utmp.h>
+
+#include "utmp-compat.h"
+#include "utmp-private.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#include "sysdeps/gnu/updwtmp.c"
+
+default_symbol_version (__updwtmp, updwtmp, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/updwtmpx.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/updwtmpx.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/updwtmpx.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,31 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <utmp.h>
+#include <utmpx.h>
+
+#include "utmp-compat.h"
+
+#undef weak_alias
+#define weak_alias(n,a)
+#define updwtmpx __updwtmpx
+#include "login/updwtmpx.c"
+#undef updwtmpx
+
+default_symbol_version (__updwtmpx, updwtmpx, UTMP_COMPAT_BASE);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp-compat.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp-compat.h (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp-compat.h Sun Jul 27 00:07:45 2008
@@ -1,0 +1,22 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* This macro defines the glibc version tag at which the 64 bit struct
+   utmp functions have been added to the 32 bit glibc.  */
+#define UTMP_COMPAT_BASE GLIBC_2.9

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp-convert.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp-convert.h (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp-convert.h Sun Jul 27 00:07:45 2008
@@ -1,0 +1,17 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,185 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <sys/types.h>
+#include <utmp.h>
+#include <errno.h>
+#include <libc-symbols.h>
+
+#include "utmp32.h"
+#include "utmp-convert.h"
+
+/* Allocate a static buffer to be returned to the caller.  As well as
+   with the existing version of these functions the caller has to be
+   aware that the contents of this buffer will change with subsequent
+   calls.  */
+#define ALLOCATE_UTMP32_OUT(OUT)			\
+  static struct utmp32 *OUT = NULL;			\
+  							\
+  if (OUT == NULL)					\
+    {							\
+      OUT = malloc (sizeof (struct utmp32));		\
+      if (OUT == NULL)					\
+	return NULL;					\
+    }
+
+/* Perform a lookup for a utmp entry matching FIELD using function
+   FUNC.  FIELD is converted to a 64 bit utmp and the result is
+   converted back to 32 bit utmp.  */
+#define ACCESS_UTMP_ENTRY(FUNC, FIELD)			\
+  struct utmp in64;					\
+  struct utmp *out64;					\
+  ALLOCATE_UTMP32_OUT (out32);				\
+							\
+  utmp_convert32to64 (FIELD, &in64);			\
+  out64 = FUNC (&in64);					\
+							\
+  if (out64 == NULL)					\
+    return NULL;					\
+							\
+  utmp_convert64to32 (out64, out32);			\
+							\
+  return out32;
+
+/* Search forward from the current point in the utmp file until the
+   next entry with a ut_type matching ID->ut_type.  */
+struct utmp32 *
+getutid32 (const struct utmp32 *id)
+{
+  ACCESS_UTMP_ENTRY (getutid, id)
+}
+symbol_version (getutid32, getutid, GLIBC_2.0);
+
+/* Search forward from the current point in the utmp file until the
+   next entry with a ut_line matching LINE->ut_line.  */
+struct utmp32 *
+getutline32 (const struct utmp32 *line)
+{
+  ACCESS_UTMP_ENTRY (getutline, line)
+}
+symbol_version (getutline32, getutline, GLIBC_2.0);
+
+/* Write out entry pointed to by UTMP_PTR into the utmp file.  */
+struct utmp32 *
+pututline32 (const struct utmp32 *utmp_ptr)
+{
+  ACCESS_UTMP_ENTRY (pututline, utmp_ptr)
+}
+symbol_version (pututline32, pututline, GLIBC_2.0);
+
+/* Read next entry from a utmp-like file.  */
+struct utmp32 *
+getutent32 (void)
+{
+  struct utmp *out64;
+  ALLOCATE_UTMP32_OUT (out32);
+
+  out64 = getutent ();
+  if (!out64)
+    return NULL;
+
+  utmp_convert64to32 (out64, out32);
+  return out32;
+}
+symbol_version (getutent32, getutent, GLIBC_2.0);
+
+/* Reentrant versions of the file for handling utmp files.  */
+
+int
+getutent32_r (struct utmp32 *buffer, struct utmp32 **result)
+{
+  struct utmp out64;
+  struct utmp *out64p;
+  int ret;
+
+  ret = getutent_r (&out64, &out64p);
+  if (ret == -1)
+    {
+      *result = NULL;
+      return -1;
+    }
+
+  utmp_convert64to32 (out64p, buffer);
+  *result = buffer;
+
+  return 0;
+}
+symbol_version (getutent32_r, getutent_r, GLIBC_2.0);
+
+int
+getutid32_r (const struct utmp32 *id, struct utmp32 *buffer,
+	       struct utmp32 **result)
+{
+  struct utmp in64;
+  struct utmp out64;
+  struct utmp *out64p;
+  int ret;
+
+  utmp_convert32to64 (id, &in64);
+
+  ret = getutid_r (&in64, &out64, &out64p);
+  if (ret == -1)
+    {
+      *result = NULL;
+      return -1;
+    }
+
+  utmp_convert64to32 (out64p, buffer);
+  *result = buffer;
+
+  return 0;
+}
+symbol_version (getutid32_r, getutid_r, GLIBC_2.0);
+
+int
+getutline32_r (const struct utmp32 *line,
+		 struct utmp32 *buffer, struct utmp32 **result)
+{
+  struct utmp in64;
+  struct utmp out64;
+  struct utmp *out64p;
+  int ret;
+
+  utmp_convert32to64 (line, &in64);
+
+  ret = getutline_r (&in64, &out64, &out64p);
+  if (ret == -1)
+    {
+      *result = NULL;
+      return -1;
+    }
+
+  utmp_convert64to32 (out64p, buffer);
+  *result = buffer;
+
+  return 0;
+
+}
+symbol_version (getutline32_r, getutline_r, GLIBC_2.0);
+
+/* Append entry UTMP to the wtmp-like file WTMP_FILE.  */
+void
+updwtmp32 (const char *wtmp_file, const struct utmp32 *utmp)
+{
+  struct utmp in32;
+
+  utmp_convert32to64 (utmp, &in32);
+  updwtmp (wtmp_file, &in32);
+}
+symbol_version (updwtmp32, updwtmp, GLIBC_2.0);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.h (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.h Sun Jul 27 00:07:45 2008
@@ -1,0 +1,53 @@
+/* The `struct utmp' type, describing entries in the utmp file.  GNU version.
+   Copyright (C) 1993, 1996, 1997, 1998, 1999, 2002, 2008
+   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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _UTMP32_H
+#define _UTMP32_H 1
+
+#include <paths.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <bits/wordsize.h>
+#include <utmp.h>
+
+/* The structure describing an entry in the user accounting database.  */
+struct utmp32
+{
+  short int ut_type;		/* Type of login.  */
+  pid_t ut_pid;			/* Process ID of login process.  */
+  char ut_line[UT_LINESIZE];	/* Devicename.  */
+  char ut_id[4];		/* Inittab ID.  */
+  char ut_user[UT_NAMESIZE];	/* Username.  */
+  char ut_host[UT_HOSTSIZE];	/* Hostname for remote login.  */
+  struct exit_status ut_exit;	/* Exit status of a process marked
+				   as DEAD_PROCESS.  */
+  int32_t ut_session;		/* Session ID, used for windowing.  */
+  struct
+  {
+    int32_t tv_sec;		/* Seconds.  */
+    int32_t tv_usec;		/* Microseconds.  */
+  } ut_tv;			/* Time entry was made.  */
+
+  int32_t ut_addr_v6[4];	/* Internet address of remote host.  */
+  char __unused[20];		/* Reserved for future use.  */
+};
+
+
+#endif  /* utmp32.h  */

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx-convert.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx-convert.h (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx-convert.h Sun Jul 27 00:07:45 2008
@@ -1,0 +1,86 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+
+/* This file provides functions converting between the 32 and 64 bit
+   struct utmp variants.  */
+
+#ifndef _UTMPX_CONVERT_H
+#define _UTMPX_CONVERT_H 1
+
+#include <string.h>
+#include "utmpx32.h"
+
+/* Convert the 64 bit struct utmpx value in FROM to the 32 bit version
+   returned in TO.  */
+static inline void
+utmpx_convert64to32 (const struct utmpx *from, struct utmpx32 *to)
+{
+#if _HAVE_UT_TYPE - 0
+  to->ut_type = from->ut_type;
+#endif
+#if _HAVE_UT_PID - 0
+  to->ut_pid = from->ut_pid;
+#endif
+  memcpy (to->ut_line, from->ut_line, __UT_LINESIZE);
+  memcpy (to->ut_user, from->ut_user, __UT_NAMESIZE);
+#if _HAVE_UT_ID - 0
+  memcpy (to->ut_id, from->ut_id, 4);
+#endif
+#if _HAVE_UT_HOST - 0
+  memcpy (to->ut_host, from->ut_host, __UT_HOSTSIZE);
+#endif
+  to->ut_exit = from->ut_exit;
+  to->ut_session = (int32_t) from->ut_session;
+#if _HAVE_UT_TV - 0
+  to->ut_tv.tv_sec = (int32_t) from->ut_tv.tv_sec;
+  to->ut_tv.tv_usec = (int32_t) from->ut_tv.tv_usec;
+#endif
+  memcpy (to->ut_addr_v6, from->ut_addr_v6, 4 * 4);
+}
+
+/* Convert the 32 bit struct utmpx value in FROM to the 64 bit version
+   returned in TO.  */
+static inline void
+utmpx_convert32to64 (const struct utmpx32 *from, struct utmpx *to)
+{
+#if _HAVE_UT_TYPE - 0
+  to->ut_type = from->ut_type;
+#endif
+#if _HAVE_UT_PID - 0
+  to->ut_pid = from->ut_pid;
+#endif
+  memcpy (to->ut_line, from->ut_line, __UT_LINESIZE);
+  memcpy (to->ut_user, from->ut_user, __UT_NAMESIZE);
+#if _HAVE_UT_ID - 0
+  memcpy (to->ut_id, from->ut_id, 4);
+#endif
+#if _HAVE_UT_HOST - 0
+  memcpy (to->ut_host, from->ut_host, __UT_HOSTSIZE);
+#endif
+  to->ut_exit = from->ut_exit;
+  to->ut_session = (int64_t) from->ut_session;
+#if _HAVE_UT_TV - 0
+  to->ut_tv.tv_sec = (int64_t) from->ut_tv.tv_sec;
+  to->ut_tv.tv_usec = (int64_t) from->ut_tv.tv_usec;
+#endif
+  memcpy (to->ut_addr_v6, from->ut_addr_v6, 4 * 4);
+}
+
+#endif /* utmpx-convert.h */

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.c (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.c Sun Jul 27 00:07:45 2008
@@ -1,0 +1,140 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel <Andreas.Krebbel@xxxxxxxxxx>.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <sys/types.h>
+#include <utmp.h>
+#include <errno.h>
+#include <libc-symbols.h>
+
+#include "utmp32.h"
+#include "utmp-convert.h"
+
+#include "utmpx32.h"
+#include "utmpx-convert.h"
+
+/* Allocate a static buffer to be returned to the caller.  As well as
+   with the existing version of these functions the caller has to be
+   aware that the contents of this buffer will change with subsequent
+   calls.  */
+#define ALLOCATE_UTMPX32_OUT(OUT)			\
+  static struct utmpx32 *OUT = NULL;			\
+  							\
+  if (OUT == NULL)					\
+    {							\
+      OUT = malloc (sizeof (struct utmpx32));		\
+      if (OUT == NULL)					\
+	return NULL;					\
+    }
+
+/* Perform a lookup for a utmpx entry matching FIELD using function
+   FUNC.  FIELD is converted to a 64 bit utmpx and the result is
+   converted back to 32 bit utmpx.  */
+#define ACCESS_UTMPX_ENTRY(FUNC, FIELD)			\
+  struct utmpx in64;					\
+  struct utmpx *out64;					\
+  ALLOCATE_UTMPX32_OUT (out32);				\
+							\
+  utmpx_convert32to64 (FIELD, &in64);			\
+  out64 = FUNC (&in64);					\
+							\
+  if (out64 == NULL)					\
+    return NULL;					\
+							\
+  utmpx_convert64to32 (out64, out32);			\
+							\
+  return out32;
+
+
+/* Get the next entry from the user accounting database.  */
+struct utmpx32 *
+getutxent32 (void)
+{
+  struct utmpx *out64;
+  ALLOCATE_UTMPX32_OUT (out32);
+
+  out64 = getutxent ();
+  if (!out64)
+    return NULL;
+
+  utmpx_convert64to32 (out64, out32);
+  return out32;
+
+}
+symbol_version (getutxent32, getutxent, GLIBC_2.1);
+
+/* Get the user accounting database entry corresponding to ID.  */
+struct utmpx32 *
+getutxid32 (const struct utmpx32 *id)
+{
+  ACCESS_UTMPX_ENTRY (getutxid, id);
+}
+symbol_version (getutxid32, getutxid, GLIBC_2.1);
+
+/* Get the user accounting database entry corresponding to LINE.  */
+struct utmpx32 *
+getutxline32 (const struct utmpx32 *line)
+{
+  ACCESS_UTMPX_ENTRY (getutxline, line);
+}
+symbol_version (getutxline32, getutxline, GLIBC_2.1);
+
+/* Write the entry UTMPX into the user accounting database.  */
+struct utmpx32 *
+pututxline32 (const struct utmpx32 *utmpx)
+{
+  ACCESS_UTMPX_ENTRY (pututxline, utmpx);
+}
+symbol_version (pututxline32, pututxline, GLIBC_2.1);
+
+/* Append entry UTMP to the wtmpx-like file WTMPX_FILE.  */
+void
+updwtmpx32 (const char *wtmpx_file, const struct utmpx32 *utmpx)
+{
+  struct utmpx in64;
+
+  utmpx_convert32to64 (utmpx, &in64);
+  updwtmpx (wtmpx_file, &in64);
+}
+symbol_version (updwtmpx32, updwtmpx, GLIBC_2.1);
+
+/* Copy the information in UTMPX to UTMP.  */
+void
+getutmp32 (const struct utmpx32 *utmpx, struct utmp32 *utmp)
+{
+  struct utmpx in64;
+  struct utmp out64;
+
+  utmpx_convert32to64 (utmpx, &in64);
+  getutmp (&in64, &out64);
+  utmp_convert64to32 (&out64, utmp);
+}
+symbol_version (getutmp32, getutmp, GLIBC_2.1.1);
+
+/* Copy the information in UTMP to UTMPX.  */
+void
+getutmpx32 (const struct utmp32 *utmp, struct utmpx32 *utmpx)
+{
+  struct utmp in64;
+  struct utmpx out64;
+
+  utmp_convert32to64 (utmp, &in64);
+  getutmpx (&in64, &out64);
+  utmpx_convert64to32 (&out64, utmpx);
+}
+symbol_version (getutmpx32, getutmpx, GLIBC_2.1.1);

Added: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.h (added)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.h Sun Jul 27 00:07:45 2008
@@ -1,0 +1,52 @@
+/* The `struct utmp' type, describing entries in the utmp file.  GNU version.
+   Copyright (C) 1993, 1996, 1997, 1998, 1999, 2002, 2008
+   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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _UTMPX32_H
+#define _UTMPX32_H 1
+
+#include <paths.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <bits/wordsize.h>
+#include <utmpx.h>
+
+/* The structure describing an entry in the user accounting database.  */
+struct utmpx32
+{
+  short int ut_type;		/* Type of login.  */
+  __pid_t ut_pid;		/* Process ID of login process.  */
+  char ut_line[__UT_LINESIZE];	/* Devicename.  */
+  char ut_id[4];		/* Inittab ID. */
+  char ut_user[__UT_NAMESIZE];	/* Username.  */
+  char ut_host[__UT_HOSTSIZE];	/* Hostname for remote login.  */
+  struct __exit_status ut_exit;	/* Exit status of a process marked
+				   as DEAD_PROCESS.  */
+  __int64_t ut_session;		/* Session ID, used for windowing.  */
+  struct
+  {
+    __int64_t tv_sec;		/* Seconds.  */
+    __int64_t tv_usec;		/* Microseconds.  */
+  } ut_tv;			/* Time entry was made.  */
+
+  __int32_t ut_addr_v6[4];	/* Internet address of remote host.  */
+  char __unused[20];		/* Reserved for future use.  */
+};
+
+#endif /* utmpx32.h */