+1998-10-08 Paul Eggert <eggert@twinsun.com>
+
+ * time/mktime.c (my_mktime_localtime_r): Renamed from localtime_r.
+ Define also if HAVE_LOCALTIME_R && defined localtime_r, with
+ a body that merely expands localtime_r; this works around a
+ bug in Digital Unix 4.0A and 4.0D.
+
+1998-10-14 Ulrich Drepper <drepper@cygnus.com>
+
+ * sysdeps/unix/sysv/linux/powerpc/syscalls.list: Add s_ioctl.
+ * sysdeps/unix/sysv/linux/powerpc/tcgetattr.c: New file. Define
+ __ioctl to __syscall_ioctl and include Linux version of this file.
+ * sysdeps/unix/sysv/linux/powerpc/tcsetattr.c: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/ioctl.c: New file. Redirect
+ ioctl calls which handle struct termios.
+ Based on a patch by Dan Jacobowitz <drow@false.org>.
+
1998-10-14 Ulrich Drepper <drepper@cygnus.com>
* version.h (VERSION): Bump to 2.0.98.
-This directory contains the version 2.0.97 test release of the GNU C Library.
+This directory contains the version 2.0.98 test release of the GNU C Library.
Many bugs have been fixed since the last release.
Some bugs surely remain.
Because of the United States export restriction on DES implementations,
we are distributing this code separately from the rest of the C
library. There is an extra distribution tar file just for crypt; it is
-called `glibc-crypt-2.0.97.tar.gz'. You can just unpack the crypt
+called `glibc-crypt-2.0.98.tar.gz'. You can just unpack the crypt
distribution along with the rest of the C library and build; you can
also build the library without getting crypt. Users outside the USA
can get the crypt distribution via anonymous FTP from ftp.ifi.uio.no
--- /dev/null
+/* Copyright (C) 1998 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <stdarg.h>
+#include <termios.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+
+/* The user-visible size of struct termios has changed. Catch ioctl calls
+ using the new-style struct termios, and translate them to old-style. */
+
+extern int __syscall_ioctl (int fd, unsigned long int request, ...);
+
+int
+__ioctl (int fd, unsigned long int request, ...)
+{
+ void *arg;
+ va_list ap;
+ int result;
+
+ va_start (ap, request);
+ arg = va_arg (ap, void *);
+
+ switch (request)
+ {
+ case TCGETS:
+ result = tcgetattr (fd, (struct termios *) arg);
+ break;
+
+ case TCSETS:
+ result = tcsetattr (fd, TCSANOW, (struct termios *) arg);
+ break;
+
+ case TCSETSW:
+ result = tcsetattr (fd, TCSADRAIN, (struct termios *) arg);
+ break;
+
+ case TCSETSF:
+ result = tcsetattr (fd, TCSAFLUSH, (struct termios *) arg);
+ break;
+
+ default:
+ result = __syscall_ioctl (fd, request, arg);
+ break;
+ }
+
+ va_end (ap);
+
+ return result;
+}
+weak_alias (__ioctl, ioctl)
# File name Caller Syscall name # args Strong name Weak names
+s_ioctl ioctl ioctl 3 __syscall_ioctl
s_llseek llseek _llseek 5 __sys_llseek
s_chown chown chown 3 __syscall_chown
--- /dev/null
+/* We must use __syscall_ioctl since __ioctl does some extra work. */
+extern int __syscall_ioctl (int __fd, unsigned long int __request, ...);
+#define __ioctl __syscall_ioctl
+#include <sysdeps/unix/sysv/linux/tcgetattr.c>
--- /dev/null
+/* We must use __syscall_ioctl since __ioctl does some extra work. */
+extern int __syscall_ioctl (int __fd, unsigned long int __request, ...);
+#define __ioctl __syscall_ioctl
+#include <sysdeps/unix/sysv/linux/tcsetattr.c>
#ifdef _LIBC
# define localtime_r __localtime_r
#else
-# if ! HAVE_LOCALTIME_R && ! defined localtime_r
-/* Approximate localtime_r as best we can in its absence. */
-# define localtime_r my_mktime_localtime_r
-static struct tm *localtime_r __P ((const time_t *, struct tm *));
+# if HAVE_LOCALTIME_R == defined localtime_r
+/* Provide our own substitute for a missing or possibly broken localtime_r. */
+static struct tm *my_mktime_localtime_r __P ((const time_t *, struct tm *));
static struct tm *
-localtime_r (t, tp)
+my_mktime_localtime_r (t, tp)
const time_t *t;
struct tm *tp;
{
+# ifdef localtime_r
+ /* Digital Unix 4.0A and 4.0D have a macro localtime_r with the
+ standard meaning, along with an unwanted, nonstandard function
+ localtime_r. The placeholder function my_mktime_localtime_r
+ invokes the macro; use that instead of the system's bogus
+ localtime_r. */
+ return localtime_r (t, tp);
+# undef localtime_r
+# else /* ! defined (localtime_r) */
+ /* Approximate localtime_r as best we can in its absence. */
struct tm *l = localtime (t);
if (! l)
return 0;
*tp = *l;
return tp;
+# endif /* ! defined localtime_r */
}
-# endif /* ! HAVE_LOCALTIME_R && ! defined (localtime_r) */
+# define localtime_r my_mktime_localtime_r
+# endif /* HAVE_LOCALTIME_R == defined localtime_r */
#endif /* ! _LIBC */