update from main archive 970120 libc-970121
authordrepper <drepper>
Tue, 21 Jan 1997 06:09:53 +0000 (06:09 +0000)
committerdrepper <drepper>
Tue, 21 Jan 1997 06:09:53 +0000 (06:09 +0000)
25 files changed:
sysdeps/stub/sysv_signal.c [new file with mode: 0644]
sysdeps/unix/bsd/bsd4.4/sockaddrcom.h
sysdeps/unix/sysv/linux/Dist
sysdeps/unix/sysv/linux/alpha/Dist
sysdeps/unix/sysv/linux/net/if_arp.h
sysdeps/unix/sysv/linux/net/ppp_defs.h
sysdeps/unix/sysv/linux/net/route.h
sysdeps/unix/sysv/linux/sparc/Dist [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/Makefile [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/brk.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/profil-counter.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sigaction.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/socket.S [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/syscall.S [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sysdep.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sys/msq_buf.h
sysdeps/unix/sysv/linux/sys/shm_buf.h
time/asctime.c
time/dysize.c
time/gmtime.c
time/offtime.c
time/strptime.c
time/timegm.c
time/tzset.c

diff --git a/sysdeps/stub/sysv_signal.c b/sysdeps/stub/sysv_signal.c
new file mode 100644 (file)
index 0000000..4d3e15a
--- /dev/null
@@ -0,0 +1,42 @@
+/* Copyright (C) 1991, 1992, 1996, 1997 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 <errno.h>
+#include <signal.h>
+
+/* Set the handler for the signal SIG to HANDLER,
+   returning the old handler, or SIG_ERR on error.  */
+__sighandler_t
+__sysv_signal (sig, handler)
+     int sig;
+     __sighandler_t handler;
+{
+  /* Check signal extents to protect __sigismember.  */
+  if (handler == SIG_ERR || sig < 1 || sig >= NSIG)
+    {
+      __set_errno (EINVAL);
+      return SIG_ERR;
+    }
+
+  __set_errno (ENOSYS);
+
+  return SIG_ERR;
+}
+weak_alias (__sysv_signal, sysv_signal)
+
+stub_warning (sysv_signal)
index a99573c..87da37d 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition of `struct sockaddr_*' common members.  4.4 BSD version.
-   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 1997 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
 #define _SOCKADDRCOM_H 1
 
 
+/* POSIX.1g specifies this type name for the `sa_family' member.  */
+typedef unsigned char sa_family_t;
+
 /* This macro is used to declare the initial common members
    of the data types used for socket addresses, `struct sockaddr',
    `struct sockaddr_in', `struct sockaddr_un', etc.  */
 
 #define        __SOCKADDR_COMMON(sa_prefix)    \
   unsigned char sa_prefix##len;                \
-  unsigned char sa_prefix##family
+  sa_family_t sa_prefix##family
 
 #define __SOCKADDR_COMMON_SIZE (2 * sizeof (unsigned char))
 
index 766d96a..b96d1df 100644 (file)
@@ -1,4 +1,5 @@
 init-first.h
+kernel_sigaction.h
 kernel_termios.h
 llseek.c
 siglist.h
index a15f181..368b490 100644 (file)
@@ -6,3 +6,4 @@ clone.S
 sys/io.h
 kernel_termios.h
 sys/acct.h
+sys/procfs.h
index a25f1b4..ae0e799 100644 (file)
@@ -1 +1,146 @@
-#include <linux/if_arp.h>
+/* Definitions for Address Resolution Protocol.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   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.  */
+
+/* Based on the 4.4BSD and Linux version of this file.  */
+
+#ifndef _NET_IF_ARP_H
+
+#define _NET_IF_ARP_H 1
+#include <sys/cdefs.h>
+
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+/* This structure defines an ethernet arp header.  */
+
+/* ARP protocol opcodes. */
+#define        ARPOP_REQUEST   1               /* ARP request.  */
+#define        ARPOP_REPLY     2               /* ARP reply.  */
+#define        ARPOP_RREQUEST  3               /* RARP request.  */
+#define        ARPOP_RREPLY    4               /* RARP reply.  */
+
+/* See RFC 826 for protocol description.  ARP packets are variable
+   in size; the arphdr structure defines the fixed-length portion.
+   Protocol type values are the same as those for 10 Mb/s Ethernet.
+   It is followed by the variable-sized fields ar_sha, arp_spa,
+   arp_tha and arp_tpa in that order, according to the lengths
+   specified.  Field names used correspond to RFC 826.  */
+
+struct arphdr
+  {
+    unsigned short int ar_hrd;         /* Format of hardware address.  */
+    unsigned short int ar_pro;         /* Format of protocol address.  */
+    unsigned char ar_hln;              /* Length of hardware address.  */
+    unsigned char ar_pln;              /* Length of protocol address.  */
+    unsigned short int ar_op;          /* ARP opcode (command).  */
+#if 0
+    /* Ethernet looks like this : This bit is variable sized
+       however...  */
+    unsigned char __ar_sha[ETH_ALEN];  /* Sender hardware address.  */
+    unsigned char __ar_sip[4];         /* Sender IP address.  */
+    unsigned char __ar_tha[ETH_ALEN];  /* Target hardware address.  */
+    unsigned char __ar_tip[4];         /* Target IP address.  */
+#endif
+  };
+
+
+/* ARP protocol HARDWARE identifiers. */
+#define ARPHRD_NETROM  0               /* From KA9Q: NET/ROM pseudo. */
+#define ARPHRD_ETHER   1               /* Ethernet 10Mbps.  */
+#define        ARPHRD_EETHER   2               /* Experimental Ethernet.  */
+#define        ARPHRD_AX25     3               /* AX.25 Level 2.  */
+#define        ARPHRD_PRONET   4               /* PROnet token ring.  */
+#define        ARPHRD_CHAOS    5               /* Chaosnet.  */
+#define        ARPHRD_IEEE802  6               /* IEEE 802.2 Ethernet/TR/TB.  */
+#define        ARPHRD_ARCNET   7               /* ARCnet.  */
+#define        ARPHRD_APPLETLK 8               /* APPLEtalk.  */
+#define ARPHRD_DLCI    15              /* Frame Relay DLCI.  */
+#define ARPHRD_METRICOM        23              /* Metricom STRIP (new IANA id).  */
+
+/* Dummy types for non ARP hardware */
+#define ARPHRD_SLIP    256
+#define ARPHRD_CSLIP   257
+#define ARPHRD_SLIP6   258
+#define ARPHRD_CSLIP6  259
+#define ARPHRD_RSRVD   260             /* Notional KISS type.  */
+#define ARPHRD_ADAPT   264
+#define ARPHRD_ROSE    270
+#define ARPHRD_X25     271             /* CCITT X.25.  */
+#define ARPHRD_PPP     512
+
+#define ARPHRD_TUNNEL  768             /* IPIP tunnel.  */
+#define ARPHRD_TUNNEL6 769             /* IPIP6 tunnel.  */
+#define ARPHRD_FRAD    770             /* Frame Relay Access Device.  */
+#define ARPHRD_SKIP    771             /* SKIP vif.  */
+#define ARPHRD_LOOPBACK        772             /* Loopback device.  */
+#define ARPHRD_LOCALTLK 773            /* Localtalk device.  */
+#define ARPHRD_FDDI    774             /* Fiber Distributed Data Interface. */
+#define ARPHRD_BIF      775             /* AP1000 BIF.  */
+#define ARPHRD_SIT     776             /* sit0 device - IPv6-in-IPv4.  */
+
+
+/* ARP ioctl request.  */
+struct arpreq
+  {
+    struct sockaddr arp_pa;            /* Protocol address.  */
+    struct sockaddr arp_ha;            /* Hardware address.  */
+    int arp_flags;                     /* Flags.  */
+    struct sockaddr arp_netmask;       /* Netmask (only for proxy arps).  */
+    char arp_dev[16];
+  };
+
+struct arpreq_old
+  {
+    struct sockaddr arp_pa;            /* Protocol address.  */
+    struct sockaddr arp_ha;            /* Hardware address.  */
+    int arp_flags;                     /* Flags.  */
+    struct sockaddr arp_netmask;       /* Netmask (only for proxy arps).  */
+  };
+
+/* ARP Flag values.  */
+#define ATF_COM                0x02            /* Completed entry (ha valid).  */
+#define        ATF_PERM        0x04            /* Permanent entry.  */
+#define        ATF_PUBL        0x08            /* Publish entry.  */
+#define        ATF_USETRAILERS 0x10            /* Has requested trailers.  */
+#define ATF_NETMASK     0x20            /* Want to use a netmask (only
+                                          for proxy entries).  */
+#define ATF_DONTPUB    0x40            /* Don't answer this addresses.  */
+#define ATF_MAGIC      0x80            /* Automatically added entry.  */
+
+
+/* Support for the user space arp daemon, arpd.  */
+#define ARPD_UPDATE    0x01
+#define ARPD_LOOKUP    0x02
+#define ARPD_FLUSH     0x03
+
+struct arpd_request
+  {
+    unsigned short int req;            /* Request type.  */
+    u_int32_t ip;                      /* IP address of entry.  */
+    unsigned long int dev;             /* Device entry is tied to.  */
+    unsigned long int stamp;
+    unsigned long int updated;
+    unsigned char ha[MAX_ADDR_LEN];    /* Hardware address.  */
+  };
+
+__END_DECLS
+
+#endif /* net/if_arp.h */
index e51dba7..21a33b2 100644 (file)
@@ -1 +1,3 @@
+#include <sys/types.h>
+typedef u_int32_t __u32;
 #include <linux/ppp_defs.h>
index a60df24..531b069 100644 (file)
@@ -1 +1,125 @@
-#include <linux/route.h>
+/* Copyright (C) 1997 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.  */
+
+/* Based on the 4.4BSD and Linux version of this file.  */
+
+#ifndef _NET_ROUTE_H
+
+#define _NET_ROUTE_H   1
+#include <features.h>
+
+#include <sys/socket.h>
+#include <sys/types.h>
+
+
+/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */
+struct rtentry
+  {
+    unsigned long int rt_pad1;
+    struct sockaddr rt_dst;            /* Target address.  */
+    struct sockaddr rt_gateway;                /* Gateway addr (RTF_GATEWAY).  */
+    struct sockaddr rt_genmask;                /* Target network mask (IP).  */
+    unsigned short int rt_flags;
+    short int rt_pad2;
+    unsigned long int rt_pad3;
+    unsigned char rt_tos;
+    unsigned char rt_class;
+    short int rt_pad4;
+    short int rt_metric;               /* +1 for binary compatibility!  */
+    char *rt_dev;                      /* Forcing the device at add.  */
+    unsigned long int rt_mtu;          /* Per route MTU/Window.  */
+    unsigned long int rt_window;       /* Window clamping.  */
+    unsigned short int rt_irtt;                /* Initial RTT.  */
+  };
+/* Compatibility hack.  */
+#define rt_mss rt_mtu
+
+
+#define        RTF_UP          0x0001          /* Route usable.  */
+#define        RTF_GATEWAY     0x0002          /* Destination is a gateway.  */
+
+#define        RTF_HOST        0x0004          /* Host entry (net otherwise).  */
+#define RTF_REINSTATE  0x0008          /* Reinstate route after timeout.  */
+#define        RTF_DYNAMIC     0x0010          /* Created dyn. (by redirect).  */
+#define        RTF_MODIFIED    0x0020          /* Modified dyn. (by redirect).  */
+#define RTF_MTU                0x0040          /* Specific MTU for this route.  */
+#define RTF_MSS                RTF_MTU         /* Compatibility.  */
+#define RTF_WINDOW     0x0080          /* Per route window clamping.  */
+#define RTF_IRTT       0x0100          /* Initial round trip time.  */
+#define RTF_REJECT     0x0200          /* Reject route.  */
+#define        RTF_STATIC      0x0400          /* Manually injected route.  */
+#define        RTF_XRESOLVE    0x0800          /* External resolver.  */
+#define RTF_NOFORWARD   0x1000         /* Forwarding inhibited.  */
+#define RTF_THROW      0x2000          /* Go to next class.  */
+#define RTF_NOPMTUDISC  0x4000         /* Do not send packets with DF.  */
+
+/* Bad idea. IPv6 should not use broken IPv4 interface.  */
+
+#define RTF_ADDRCONF   0x0800          /* Announced on link prefix.  */
+#define RTF_INVALID    0x1000
+#define RTF_DCACHE     0x2000
+#define RTF_DEFAULT    0x4000          /* Route is a default route.  */
+#define RTF_NEXTHOP    0x8000          /* Non gateway route with nexthop.  */
+
+
+#define RTF_MAGIC      0x10000         /* Route added/deleted authomatically,
+                                          when interface changes its state. */
+
+#define RTCF_VALVE     0x00200000
+#define RTCF_MASQ      0x00400000
+#define RTCF_NAT       0x00800000
+#define RTCF_DOREDIRECT 0x01000000
+#define RTCF_LOG       0x02000000
+#define RTCF_DIRECTSRC 0x04000000
+
+#define RTF_LOCAL      0x80000000
+#define RTF_INTERFACE  0x40000000
+#define RTF_MULTICAST  0x20000000
+#define RTF_BROADCAST  0x10000000
+#define RTF_NAT                0x08000000
+
+#define RTF_ADDRCLASSMASK      0xF8000000
+#define RT_ADDRCLASS(flags)    ((__u_int32_t) flags >> 23)
+
+#define RT_TOS(tos)            ((tos) & IPTOS_TOS_MASK)
+
+#define RT_LOCALADDR(flags)    ((flags & RTF_ADDRCLASSMASK) \
+                                == (RTF_LOCAL|RTF_INTERFACE))
+
+#define RT_CLASS_UNSPEC                0
+#define RT_CLASS_DEFAULT       253
+
+#define RT_CLASS_MAIN          254
+#define RT_CLASS_LOCAL         255
+#define RT_CLASS_MAX           255
+
+
+#define RTMSG_ACK              NLMSG_ACK
+#define RTMSG_OVERRUN          NLMSG_OVERRUN
+
+#define RTMSG_NEWDEVICE                0x11
+#define RTMSG_DELDEVICE                0x12
+#define RTMSG_NEWROUTE         0x21
+#define RTMSG_DELROUTE         0x22
+#define RTMSG_NEWRULE          0x31
+#define RTMSG_DELRULE          0x32
+#define RTMSG_CONTROL          0x40
+
+#define RTMSG_AR_FAILED                0x51    /* Address Resolution failed.  */
+
+#endif /* net/route.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/Dist b/sysdeps/unix/sysv/linux/sparc/Dist
new file mode 100644 (file)
index 0000000..6134c60
--- /dev/null
@@ -0,0 +1,2 @@
+__sigtrampoline.S
+clone.S
diff --git a/sysdeps/unix/sysv/linux/sparc/Makefile b/sysdeps/unix/sysv/linux/sparc/Makefile
new file mode 100644 (file)
index 0000000..629e6b3
--- /dev/null
@@ -0,0 +1,3 @@
+ifeq ($(subdir),signal)
+sysdep_routines += __sigtrampoline
+endif
diff --git a/sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S b/sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S
new file mode 100644 (file)
index 0000000..d0fe760
--- /dev/null
@@ -0,0 +1,142 @@
+/* Userland trampoline code for sigaction on Linux/SPARC        */
+/* (C) 1996, 1997 Free Software Foundation, Inc.                */
+/* This file is part of the GNU C Library.                      */
+/* Contributed by Miguel de Icaza (miguel@gnu.ai.mit.edu)       */
+/* Many thanks go to David Miller for explaining all this to me */
+/* miguel@nuclecu.unam.mx                                       */
+/* Sources:     David Miller, 4.4BSD/SPARC code                */
+
+#include <sysdep.h>
+
+/* For REGWIN_SZ */
+#include <asm/ptrace.h>
+#include <asm/psr.h>
+
+/* The C compiler frame size */
+#define CCFSZ  96
+
+       .text
+
+ENTRY(____sparc_signal_trampoline)
+       .global SYMBOL_NAME(____sig_table)
+
+       /* Make room for 32 %f registers + %fsr
+         * this is 132 bytes + alignement = 136
+         * 96 is the C frame size
+         */
+       save    %sp,-136-CCFSZ,%sp
+
+       /* save regular registers */
+       mov     %g2,%l2
+       mov     %g3,%l3
+       mov     %g4,%l4
+       mov     %g5,%l5
+       mov     %g6,%l6
+       mov     %g7,%l7
+
+       /* save fpu registers */
+       ld      [%fp+64+16+20],%l0      /* load the psr from sigcontext */
+       sethi   %hi(PSR_EF),%l1
+       andcc   %l0,%l1,%l0             /* is floating point enabled?   */
+       be      1f
+       rd      %y,%l1                  /* save y anyways */
+
+       /* save fpu registers */
+       st      %fsr, [%sp + CCFSZ + 0]
+        std     %f0, [%sp + CCFSZ + 8]
+        std     %f2, [%sp + CCFSZ + 16]
+        std     %f4, [%sp + CCFSZ + 24]
+        std     %f6, [%sp + CCFSZ + 32]
+        std     %f8, [%sp + CCFSZ + 40]
+        std     %f10, [%sp + CCFSZ + 48]
+        std     %f12, [%sp + CCFSZ + 56]
+        std     %f14, [%sp + CCFSZ + 64]
+        std     %f16, [%sp + CCFSZ + 72]
+        std     %f18, [%sp + CCFSZ + 80]
+        std     %f20, [%sp + CCFSZ + 88]
+        std     %f22, [%sp + CCFSZ + 96]
+        std     %f24, [%sp + CCFSZ + 104]
+        std     %f26, [%sp + CCFSZ + 112]
+        std     %f28, [%sp + CCFSZ + 120]
+        std     %f30, [%sp + CCFSZ + 128]
+
+1:
+       /* Load signal number */
+       ld      [%fp + REGWIN_SZ],%o0
+       mov     %fp,%o1
+       mov     0xfea,%o2
+
+       /* Sanity check */
+       cmp     %o0,33
+       bl      1f
+       or      %g0,%g0,%g1     /*Call sys_setup */
+       t       0x10
+1:
+#ifdef __PIC__
+       /* Save return address */
+       mov     %o7,%o4
+___sxx:
+       call    ___syy
+       nop
+___syy:
+       sethi   %hi(_GLOBAL_OFFSET_TABLE_-(___sxx-.)),%o5
+       or      %o5,%lo(_GLOBAL_OFFSET_TABLE_-(___sxx-.)),%o5
+       add     %o7,%o5,%o5
+       /* restore return address */
+       mov     %o4,%o7
+       mov     %o5,%o4
+       /* o4 has the GOT pointer */
+#endif
+       sethi   %hi(SYMBOL_NAME(____sig_table)),%o5
+       or      %o5,%lo(SYMBOL_NAME(____sig_table)),%o5
+#ifdef __PIC__
+       add     %o5,%o4,%o4
+       ld      [%o4],%o5
+#endif
+       sll     %o0,2,%o4
+       add     %o5,%o4,%o4
+       ld      [%o4],%o4
+       ld      [%fp + REGWIN_SZ + 4],%o1         /* Load subcode */
+       ld      [%fp + REGWIN_SZ + 8],%o2         /* pointer to sigcontext */
+       call    %o4
+       ld      [%fp + REGWIN_SZ + 12],%o3        /* Address where signal ocurred */
+
+       /* handler returned, restore state */
+       tst     %l0
+       be      1f
+       wr      %l1,%g0,%y
+
+       /* fpu restoration */
+       ld      [%sp + CCFSZ + 0], %fsr
+        ldd     [%sp + CCFSZ + 8], %f0
+        ldd     [%sp + CCFSZ + 16], %f2
+        ldd     [%sp + CCFSZ + 24], %f4
+        ldd     [%sp + CCFSZ + 32], %f6
+        ldd     [%sp + CCFSZ + 40], %f8
+        ldd     [%sp + CCFSZ + 48], %f10
+        ldd     [%sp + CCFSZ + 56], %f12
+        ldd     [%sp + CCFSZ + 64], %f14
+        ldd     [%sp + CCFSZ + 72], %f16
+        ldd     [%sp + CCFSZ + 80], %f18
+        ldd     [%sp + CCFSZ + 88], %f20
+        ldd     [%sp + CCFSZ + 96], %f22
+        ldd     [%sp + CCFSZ + 104], %f24
+        ldd     [%sp + CCFSZ + 112], %f26
+        ldd     [%sp + CCFSZ + 120], %f28
+        ldd     [%sp + CCFSZ + 128], %f30
+
+1:
+       mov     %l2,%g2
+       mov     %l3,%g3
+       mov     %l4,%g4
+       mov     %l5,%g5
+       mov     %l6,%g6
+       mov     %l7,%g7
+
+       /* call sigreturn */
+       restore %g0,SYS_sigreturn,%g1    /* register back and set syscall */
+       add     %sp,64+16,%o0
+       t       0x10
+       /* if we return, sysreturn failed */
+       mov     SYS_exit,%g1
+       t       0x10
diff --git a/sysdeps/unix/sysv/linux/sparc/brk.c b/sysdeps/unix/sysv/linux/sparc/brk.c
new file mode 100644 (file)
index 0000000..13bcb04
--- /dev/null
@@ -0,0 +1,56 @@
+/* brk system call for Linux/SPARC.
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx)
+
+   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 <errno.h>
+#include <unistd.h>
+#include <sysdep.h>
+
+/* This must be initialized data because commons can't have aliases.  */
+void *__curbrk = 0;
+
+/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt
+   to work around different old braindamage in the old Linux ELF dynamic
+   linker.  */
+weak_alias (__curbrk, ___brk_addr)
+
+int
+__brk (void *addr)
+{
+  void *newbrk, *scratch;
+
+  asm ("mov %1, %%g1\n\t"
+       "mov %2, %%o0\n\t"
+       "t 0x10\n\t"
+       "mov %%o0, %0\n\t"
+       : "=r" (newbrk)
+       : "0" (SYS_brk), "r" (addr)
+       : "g1", "o0");
+
+  __curbrk = newbrk;
+
+  if (newbrk < addr)
+    {
+      __set_errno (ENOMEM);
+      return -1;
+    }
+
+  return 0;
+}
+weak_alias (__brk, brk)
diff --git a/sysdeps/unix/sysv/linux/sparc/profil-counter.h b/sysdeps/unix/sysv/linux/sparc/profil-counter.h
new file mode 100644 (file)
index 0000000..1998c34
--- /dev/null
@@ -0,0 +1,35 @@
+/* Low-level statistical profiling support function.  Linux/SPARC version.
+   Copyright (C) 1997 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 <sigcontext.h>
+
+void
+profil_counter (int signo, __siginfo_t si)
+{
+  extern int __sparc_old_signals;
+
+  if (__sparc_old_signals)
+    {
+      struct sigcontext_struct *s = (void *) &si;
+
+      profil_count ((void *) s->sigc_pc);
+    }
+  else
+    profil_count ((void *) si.si_regs.pc);
+}
diff --git a/sysdeps/unix/sysv/linux/sparc/sigaction.c b/sysdeps/unix/sysv/linux/sparc/sigaction.c
new file mode 100644 (file)
index 0000000..e7bda77
--- /dev/null
@@ -0,0 +1,127 @@
+/* POSIX.1 sigaction call for Linux/SPARC.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx), 1997.
+
+   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 <syscall.h>
+#include <sys/signal.h>
+#include <errno.h>
+
+/* The kernel will deliver signals in the old way if the signal
+   number is a positive number.  The kernel will deliver a signal
+   with the new stack layout if the signal number is a negative number.
+
+   Our sigaction code takes care of selecting the type of kernel we are
+   using at runtime.  */
+
+extern void ____sparc_signal_trampoline (int);
+long ____sig_table [NSIG];
+
+int
+__trampoline_sigaction (int sig, struct sigaction *new, struct sigaction *old)
+{
+  int ret;
+  int need_to_hide_trick = 0;
+  __sighandler_t old_sh;
+
+  if (new)
+    {
+      if (new->sa_handler != SIG_DFL && new->sa_handler != SIG_IGN)
+       {
+         old_sh = ____sig_table[sig];
+         ____sig_table[sig] = (long int) new->sa_handler;
+         new->sa_handler = ____sparc_signal_trampoline;
+         need_to_hide_trick = 1;
+       }
+    }
+  __asm__("or %%g0,%0,%%g1\n\t"
+         "or %%g0,%1,%%o0\n\t"
+         "or %%g0,%2,%%o1\n\t"
+         "or %%g0,%3,%%o2\n\t"
+         "t  0x10\n\t"
+         "bcc 1f\n\t"
+         "or %%o0, %%g0, %0\n\t"
+         "sub %%g0, %%o0, %0\n\t"
+         "1:"
+         : "=r" (ret), "=r" ((long int) sig), "=r" ((long int) new),
+           "=r" ((long int) old)
+         : "0" (SYS_sigaction), "1" (sig), "2" (new), "3" (old)
+         : "g1", "o0", "o1", "o2");
+
+  if (ret >= 0)
+    {
+      if (old && old->sa_handler == ____sparc_signal_trampoline)
+       {
+         if (need_to_hide_trick)
+           old->sa_handler = old_sh;
+         else
+           old->sa_handler = ____sig_table[sig];
+       }
+      if (need_to_hide_trick)
+       new->sa_handler = ____sig_table[sig];
+      return 0;
+    }
+  __set_errno (-ret);
+  return -1;
+}
+
+int
+__new_sigaction (int sig, struct sigaction *new, struct sigaction *old)
+{
+  int ret;
+
+  sig = -sig;
+
+  __asm__("or %%g0,%0,%%g1\n\t"
+         "or %%g0,%1,%%o0\n\t"
+         "or %%g0,%2,%%o1\n\t"
+         "or %%g0,%3,%%o2\n\t"
+         "t  0x10\n\t"
+         "bcc 1f\n\t"
+         "or %%o0, %%g0, %0\n\t"
+         "sub %%g0,%%o0,%0\n\t"
+         "1:"
+         : "=r" (ret), "=r" ((long int) sig), "=r" ((long int) new),
+           "=r" ((long int) old)
+         : "0" (SYS_sigaction), "1" (sig), "2" (new), "3" (old)
+         : "g1", "o0", "o1", "o2");
+  if (ret >= 0)
+    return 0;
+  __set_errno (-ret);
+  return -1;
+}
+
+int
+__sigaction (int sig, struct sigaction *new, struct sigaction *old)
+{
+  static (*sigact_routine) (int, struct sigaction *, struct sigaction *);
+  int ret;
+  struct sigaction sa;
+
+  if (sigact_routine)
+    return (*sigact_routine) (sig, new, old);
+
+  ret = __new_sigaction (1, NULL, &sa);
+  if (ret == -1)
+    sigact_routine = __trampoline_sigaction;
+  else
+    sigact_routine = __new_sigaction;
+
+  return __sigaction (sig, new, old);
+}
+weak_alias (__sigaction, sigaction);
diff --git a/sysdeps/unix/sysv/linux/sparc/socket.S b/sysdeps/unix/sysv/linux/sparc/socket.S
new file mode 100644 (file)
index 0000000..f807520
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, 1997.
+
+   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 <sysdep.h>
+#include <sys/socketcall.h>
+
+#define P(a, b) P2(a, b)
+#define P2(a, b) a##b
+
+       .text
+/* The socket-oriented system calls are handled unusally in Linux.
+   They are all gated through the single `socketcall' system call number.
+   `socketcall' takes two arguments: the first is the subcode, specifying
+   which socket function is being called; and the second is a pointer to
+   the arguments to the specific function.
+
+   The .S files for the other calls just #define socket and #include this.  */
+
+.globl P(__,socket)
+ENTRY (P(__,socket))
+       mov SYS_ify(socketcall), %g1    /* System call number */
+
+       /* Use ## so `socket' is a separate token that might be #define'd.  */
+       mov P(SOCKOP_,socket), %o0      /* Subcode is first arg to syscall.  */
+       mov %i0,%o1                     /* args pointer is second arg to syscall */
+
+       t 0x10
+       bcc,a   1
+       nop
+       save %sp,96,%sp
+       call __errno_location
+       nop
+       st %i0,[%o0]
+       restore
+       retl
+       mov -1,%o0
+1:
+       ret
+
+PSEUDO_END (P(__,socket))
+
+weak_alias (P(__,socket), socket)
diff --git a/sysdeps/unix/sysv/linux/sparc/syscall.S b/sysdeps/unix/sysv/linux/sparc/syscall.S
new file mode 100644 (file)
index 0000000..4166e42
--- /dev/null
@@ -0,0 +1,30 @@
+/* Copyright (C) 1991, 1992, 1997 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.  */
+
+#define DONT_LOAD_G1
+#include <sysdep.h>
+ENTRY (__libc_syscall)
+       or      %o0,%g0,%g1
+       or      %o1,%g0,%o0
+       or      %o2,%g0,%o1
+       or      %o3,%g0,%o2
+       or      %o4,%g0,%o3
+       or      %o5,%g0,%o4
+PSEUDO_NOENT(__libc_syscall, syscall, 5)
+       ret
+SYSCALL__POST(syscall,5)
diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sysdep.h
new file mode 100644 (file)
index 0000000..0251a1f
--- /dev/null
@@ -0,0 +1,57 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, January 1997.
+
+   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.  */
+
+#ifndef _LINUX_SPARC_SYSDEP_H
+#define _LINUX_SPARC_SYSDEP_H 1
+
+#include <sysdeps/unix/sparc/sysdep.h>
+
+#undef SYS_ify
+#define SYS_ify(syscall_name) __NR_##syscall_name
+
+#ifdef ASSEMBLER
+
+#ifdef DONT_LOAD_G1
+# define LOADSYSCALL(x)
+#else
+# define LOADSYSCALL(x) mov SYS_##n, %g1
+#endif
+
+/* Linux/SPARC uses a different trap number and uses __errno_location always */
+#undef PSEUDO
+
+#define PSEUDO(name, syscall_name, args) \
+       .text;                                                                \
+       ENTRY(name);                                                          \
+       LOADSYSCALL(syscall_name);                                            \
+       ta 0x10;                                                              \
+       bcc,a 1f;                                                             \
+       nop;                                                                  \
+       save %sp,96,%sp;                                                      \
+       call __errno_location;                                                \
+       nop;                                                                  \
+       st %i0,[%o0];                                                         \
+       restore;                                                              \
+       retl;                                                                 \
+       mov -1,%o0;                                                           \
+1:
+
+#endif /* ASSEMBLER */
+
+#endif /* linux/sparc/sysdep.h */
index e885bd9..0abc10f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
 
@@ -46,8 +46,8 @@ struct msqid_ds
   unsigned short int __msg_cbytes;/* current number of bytes on queue */
   unsigned short int msg_qnum; /* number of messages currently on queue */
   unsigned short int msg_qbytes;/* max number of bytes allowed on queue */
-  __pid_t msg_lspid;           /* pid of last msgsnd() */
-  __pid_t msg_lrpid;           /* pid of last msgrcv() */
+  int msg_lspid;               /* pid of last msgsnd() */
+  int msg_lrpid;               /* pid of last msgrcv() */
 };
 
 #ifdef __USE_MISC
index f6d8537..642b7bd 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
 
@@ -48,8 +48,8 @@ struct shmid_ds
   __time_t shm_atime;                  /* time of last shmat() */
   __time_t shm_dtime;                  /* time of last shmdt() */
   __time_t shm_ctime;                  /* time of last change by shmctl() */
-  __pid_t shm_cpid;                    /* pid of creator */
-  __pid_t shm_lpid;                    /* pid of last shmop */
+  int shm_cpid;                                /* pid of creator */
+  int shm_lpid;                                /* pid of last shmop */
   unsigned short int shm_nattch;       /* number of current attaches */
   unsigned short int __shm_npages;     /* size of segment (pages) */
   unsigned long int *__shm_pages;      /* array of ptrs to frames -> SHMMAX */
index 25bc9de..82e9f72 100644 (file)
@@ -1,20 +1,20 @@
-/* Copyright (C) 1991, 1993, 1995, 1996 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+/* Copyright (C) 1991, 1993, 1995, 1996, 1997 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 "../locale/localeinfo.h"
 #include <errno.h>
index 1f8f624..a53ec7b 100644 (file)
@@ -1,20 +1,20 @@
-/* Copyright (C) 1994 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+/* Copyright (C) 1994, 1997 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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 <time.h>
 
index 364b4c9..f9627e7 100644 (file)
@@ -1,20 +1,20 @@
-/* Copyright (C) 1991, 1993, 1995, 1996 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+/* Copyright (C) 1991, 1993, 1995, 1996, 1997 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 <stddef.h>
 #include <time.h>
index 4e062df..1469029 100644 (file)
@@ -1,26 +1,25 @@
-/* Copyright (C) 1991, 1993 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+/* Copyright (C) 1991, 1993, 1997 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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 <ansidecl.h>
 #include <time.h>
 
 /* Defined in mktime.c.  */
-extern CONST unsigned short int __mon_yday[2][13];
+extern const unsigned short int __mon_yday[2][13];
 
 #define        SECS_PER_HOUR   (60 * 60)
 #define        SECS_PER_DAY    (SECS_PER_HOUR * 24)
@@ -29,11 +28,13 @@ extern CONST unsigned short int __mon_yday[2][13];
    offset OFFSET seconds east of UTC,
    and store year, yday, mon, mday, wday, hour, min, sec into *TP.  */
 void
-DEFUN(__offtime, (t, offset, tp),
-      CONST time_t *t AND long int offset AND struct tm *tp)
+__offtime (t, offset, tp)
+     const time_t *t;
+     long int offset;
+     struct tm *tp;
 {
   register long int days, rem, y;
-  register CONST unsigned short int *ip;
+  register const unsigned short int *ip;
 
   days = *t / SECS_PER_DAY;
   rem = *t % SECS_PER_DAY;
@@ -58,7 +59,7 @@ DEFUN(__offtime, (t, offset, tp),
     tp->tm_wday += 7;
   y = 1970;
 
-# define LEAPS_THRU_END_OF(y) ((y) / 4 - (y) / 100 + (y) / 400)
+#define LEAPS_THRU_END_OF(y) ((y) / 4 - (y) / 100 + (y) / 400)
 
   while (days < 0 || days >= (__isleap (y) ? 366 : 365))
     {
index ce3f4e3..3340b43 100644 (file)
@@ -129,7 +129,7 @@ localtime_r (t, tp)
 #endif
 #define recursive(new_fmt) \
   (*(new_fmt) != '\0'                                                        \
-   || strptime_internal (rp, (new_fmt), tm, decided) != NULL)
+   && strptime_internal (rp, (new_fmt), tm, decided) != NULL)
 
 
 #ifdef _LIBC
index 4dd87f4..288065a 100644 (file)
@@ -1,20 +1,20 @@
-/* Copyright (C) 1994 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+/* Copyright (C) 1994, 1997 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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 <time.h>
 
index 8d8be34..87dc6d6 100644 (file)
@@ -229,41 +229,41 @@ __tzset_internal (always)
 
          tz += l;
        }
+
+      /* Figure out the DST offset from GMT.  */
+      if (*tz == '-' || *tz == '+')
+       tz_rules[1].offset = *tz++ == '-' ? 1L : -1L;
+      else
+       tz_rules[1].offset = -1L;
+
+      switch (sscanf (tz, "%hu:%hu:%hu", &hh, &mm, &ss))
+       {
+       default:
+         /* Default to one hour later than standard time.  */
+         tz_rules[1].offset = tz_rules[0].offset + (60 * 60);
+         break;
+
+       case 1:
+         mm = 0;
+       case 2:
+         ss = 0;
+       case 3:
+         tz_rules[1].offset *= (min (ss, 59) + (min (mm, 59) * 60) +
+                                (min (hh, 23) * (60 * 60)));
+         break;
+       }
+      for (l = 0; l < 3; ++l)
+       {
+         while (isdigit (*tz))
+           ++tz;
+         if (l < 2 && *tz == ':')
+           ++tz;
+       }
     }
   else
     /* There is no DST.  */
     tz_rules[1].name = tz_rules[0].name;
 
-  /* Figure out the DST offset from GMT.  */
-  if (*tz == '-' || *tz == '+')
-    tz_rules[1].offset = *tz++ == '-' ? 1L : -1L;
-  else
-    tz_rules[1].offset = -1L;
-
-  switch (sscanf (tz, "%hu:%hu:%hu", &hh, &mm, &ss))
-    {
-    default:
-      /* Default to one hour later than standard time.  */
-      tz_rules[1].offset = tz_rules[0].offset + (60 * 60);
-      break;
-
-    case 1:
-      mm = 0;
-    case 2:
-      ss = 0;
-    case 3:
-      tz_rules[1].offset *= (min (ss, 59) + (min (mm, 59) * 60) +
-                            (min (hh, 23) * (60 * 60)));
-      break;
-    }
-  for (l = 0; l < 3; ++l)
-    {
-      while (isdigit (*tz))
-       ++tz;
-      if (l < 2 && *tz == ':')
-       ++tz;
-    }
-
  done_names:
 
   if (*tz == '\0' || (tz[0] == ',' && tz[1] == '\0'))