what's new
Andreas Jaeger
aj@arthur.rhein-neckar.de
Sun Jun 13 07:32:00 GMT 1999
>>>>> Ulrich Drepper writes:
> I just want to share this with you
> drepper@myware glibc-devel-19990607$ libio/tst_wprintf
> Hello world!
Congratulations!
> I.e., I have wide character streams (at least output) working now. I
> hope to check all the code in next week but want to merge all needed
> changes since 2.1. into the release branch first. If somebody has the
> time to produce this patch I'd appreciate this. I'll probably not
> have the time since wide char stream input is waiting for me to debug
> it. Let me know when you have time (shouldn't take long).
I'm appending a patch. I ask the port maintainers to check that I
didn't miss one of their important patches since I've only added
everything that's looked important to me;-).
Please note that I did not check the patches (i.e. if they compile).
I ask others with faster machines to do so.
Andreas
1999-06-12 Ulrich Drepper <drepper@cygnus.com>
* locale/lc-time.c: Add free_mem function to free if necessary
statically allocated memory.
1999-06-10 Jakub Jelinek <jj@ultra.linux.cz>
* sysdeps/libm-ieee754/s_truncl.c: Subtract exponent
bias from the raw exponent.
1999-06-11 Ulrich Drepper <drepper@cygnus.com>
* inet/arpa/tftp.h: Move attribute declaration in right position.
1999-06-11 Ulrich Drepper <drepper@cygnus.com>
* resolv/nss_dns/dns-host.c (getanswer_r): Correctly track usage
of user-provided buffer.
1999-06-10 Ulrich Drepper <drepper@cygnus.com>
* stdio-common/printf-parse.h (parse_one_spec): Add support for a
and A format.
* shadow/fgetspent_r.c (__fgetspent_r): Set errno to ENOENT for
returning after last entry.
* pwd/fgetpwent_r.c (__fgetpwent_r): Likewise.
1999-06-09 Ulrich Drepper <drepper@cygnus.com>
* pwd/fgetpwent_r.c: Set errno in the correct way.
* shadow/fgetspent_r.c: Likewise.
* pwd/fgetpwent.c: Handle long lines correctly. Little
optimizations. Free static buffer when debugging memory handling.
* shadow/fgetspent.c: Likewise.
* grp/fgetgrent.c: Little optimization in loop.
1999-06-09 Jakub Jelinek <jj@ultra.linux.cz>
* stdlib/longlong.h: gas changed sethi handling when without
%hi(). Fix assembly.
1999-06-08 Ulrich Drepper <drepper@cygnus.com>
* misc/daemon.c: Call fork.
* grp/fgetgrent.c (buffer): Make file local variable.
(free_mem): New function. Call for malloc debugging.
1999-06-08 Ulrich Drepper <drepper@cygnus.com>
* ctype/ctype.h: Protect __tobody code by __extension__.
1999-06-13 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/if_index.c: Replace SIOG* with SIOCG*.
1999-06-07 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/sys/sysmacros.h (makedev): Handle signed
parameters.
1999-06-06 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/i386/sigaction.c: Correct restorer
function handling.
* sysdeps/unix/sysv/linux/i386/sigaction.c (SA_RESTORER): New #define.
1999-06-06 Andi Kleen <ak@muc.de>
* sysdeps/unix/sysv/linux/i386/sigaction.c (__sigaction): Set
SA_RESTORER flag.
1999-06-05 Philip Blundell <philb@gnu.org>
* sysdeps/arm/dl-machine.h (elf_machine_load_address): Fix
problems with GOT addressing.
1999-06-02 Jakub Jelinek <jj@ultra.linux.cz>
* stdlib/longlong.h: Define UDIV_TIME on sparc64.
1999-06-01 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/net/if_arp.h (ARPHRD_DDCMP): Add it
(from Linux 2.3.4).
1999-05-30 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* manual/stdio.texi: Fix some typos.
1999-05-29 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* manual/stdio.texi (Formatted Output Functions): Mention
semantics of snprintf in glibc 2.0.
Reported by Ben Pfaff <pfaffben@msu.edu>.
1999-05-27 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* malloc/malloc.h: Properly handle future GCC versions.
1999-05-25 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/posix/getcwd.c (__getcwd): Fix potential memory leaks.
============================================================
Index: locale/lc-time.c
--- locale/lc-time.c 1997/06/21 01:23:14 1.4
+++ locale/lc-time.c 1999/06/13 14:22:13
@@ -1,5 +1,5 @@
/* Define current locale data for LC_TIME category.
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1999 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
@@ -174,3 +174,16 @@
return result;
}
+
+
+/* Free all resources if necessary. */
+static void __attribute__ ((unused))
+free_mem (void)
+{
+ if (eras != NULL)
+ free (eras);
+ if (alt_digits != NULL)
+ free (alt_digits);
+}
+
+text_set_element (__libc_subfreeres, free_mem);
============================================================
Index: sysdeps/libm-ieee754/s_truncl.c
--- sysdeps/libm-ieee754/s_truncl.c 1997/03/22 15:58:30 1.1
+++ sysdeps/libm-ieee754/s_truncl.c 1999/06/13 14:22:13
@@ -1,5 +1,5 @@
/* Truncate argument to nearest integral value not larger than the argument.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -32,7 +32,7 @@
GET_LDOUBLE_WORDS (se, i0, i1, x);
sx = se & 0x8000;
- j0 = se & 0x7fff;
+ j0 = (se & 0x7fff) - 0x3fff;
if (j0 < 31)
{
if (j0 < 0)
============================================================
Index: inet/arpa/tftp.h
--- inet/arpa/tftp.h 1999/05/17 16:47:48 1.6
+++ inet/arpa/tftp.h 1999/06/13 14:22:14
@@ -56,7 +52,7 @@
unsigned short tu_block; /* block # */
short tu_code; /* error code */
char tu_stuff[1]; /* request packet stuff */
- } th_u __attribute__ ((__packed__));
+ } __attribute__ ((__packed__)) th_u;
char th_data[1]; /* data or error string */
} __attribute__ ((__packed__));
============================================================
Index: resolv/nss_dns/dns-host.c
--- resolv/nss_dns/dns-host.c 1999/02/06 23:57:37 1.14
+++ resolv/nss_dns/dns-host.c 1999/06/13 14:22:16
@@ -323,6 +323,15 @@
int (*name_ok) __P ((const char *));
u_char packtmp[NS_MAXCDNAME];
+ if (linebuflen < 0)
+ {
+ /* The buffer is too small. */
+ too_small:
+ *errnop = ERANGE;
+ *h_errnop = NETDB_INTERNAL;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
tname = qname;
result->h_name = NULL;
end_of_message = answer->buf + anslen;
@@ -358,11 +367,7 @@
if (n != -1 && __ns_name_ntop (packtmp, bp, linebuflen) == -1)
{
if (errno == EMSGSIZE)
- {
- *errnop = ERANGE;
- *h_errnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
+ goto too_small;
n = -1;
}
@@ -393,6 +398,8 @@
result->h_name = bp;
bp += n;
linebuflen -= n;
+ if (linebuflen < 0)
+ goto too_small;
/* The qname can be abbreviated, but h_name is now absolute. */
qname = result->h_name;
}
@@ -606,6 +613,7 @@
linebuflen -= nn;
}
+ linebuflen -= sizeof (align) - ((u_long) bp % sizeof (align));
bp += sizeof (align) - ((u_long) bp % sizeof (align));
if (n >= linebuflen)
============================================================
Index: stdio-common/printf-parse.h
--- stdio-common/printf-parse.h 1998/07/31 11:12:46 1.12
+++ stdio-common/printf-parse.h 1999/06/13 14:22:17
@@ -1,5 +1,5 @@
/* Internal header for parsing printf format strings.
- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
This file is part of th GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -358,6 +358,8 @@
case L'f':
case L'g':
case L'G':
+ case L'a':
+ case L'A':
if (spec->info.is_long_double)
spec->data_arg_type = PA_DOUBLE|PA_FLAG_LONG_DOUBLE;
else
============================================================
Index: shadow/fgetspent_r.c
--- shadow/fgetspent_r.c 1998/08/08 19:45:56 1.10
+++ shadow/fgetspent_r.c 1999/06/13 14:22:17
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998, 1999 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
@@ -53,13 +53,15 @@
{
funlockfile (stream);
*result = NULL;
+ __set_errno (ENOENT);
return errno;
}
if (p == NULL || buffer[buflen - 1] != '\xff')
{
funlockfile (stream);
*result = NULL;
- return errno = ERANGE;
+ __set_errno (ERANGE);
+ return errno;
}
/* Skip leading blanks. */
============================================================
Index: shadow/fgetspent.c
--- shadow/fgetspent.c 1997/06/21 01:28:10 1.5
+++ shadow/fgetspent.c 1999/06/13 14:22:17
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1999 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
@@ -19,6 +19,7 @@
#include <errno.h>
#include <bits/libc-lock.h>
#include <shadow.h>
+#include <stdio.h>
#include <stdlib.h>
@@ -28,16 +29,21 @@
/* We need to protect the dynamic buffer handling. */
__libc_lock_define_initialized (static, lock);
+static char *buffer;
+
/* Read one shadow entry from the given stream. */
struct spwd *
fgetspent (FILE *stream)
{
- static char *buffer;
static size_t buffer_size;
static struct spwd resbuf;
+ fpos_t pos;
struct spwd *result;
int save;
+ if (fgetpos (stream, &pos) != 0)
+ return NULL;
+
/* Get lock. */
__libc_lock_lock (lock);
@@ -49,8 +55,8 @@
}
while (buffer != NULL
- && __fgetspent_r (stream, &resbuf, buffer, buffer_size, &result) != 0
- && errno == ERANGE)
+ && (__fgetspent_r (stream, &resbuf, buffer, buffer_size, &result)
+ == ERANGE))
{
char *new_buf;
buffer_size += BUFLEN_SPWD;
@@ -64,6 +70,10 @@
__set_errno (save);
}
buffer = new_buf;
+
+ /* Reset the stream. */
+ if (fsetpos (stream, &pos) != 0)
+ buffer = NULL;
}
if (buffer == NULL)
@@ -76,3 +86,14 @@
return result;
}
+
+
+/* Free all resources if necessary. */
+static void __attribute__ ((unused))
+free_mem (void)
+{
+ if (buffer != NULL)
+ free (buffer);
+}
+
+text_set_element (__libc_subfreeres, free_mem);
============================================================
Index: pwd/fgetpwent_r.c
--- pwd/fgetpwent_r.c 1998/08/08 19:44:22 1.10
+++ pwd/fgetpwent_r.c 1999/06/13 14:22:17
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1996, 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1996, 1997, 1998, 1999 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
@@ -86,13 +86,15 @@
{
funlockfile (stream);
*result = NULL;
+ __set_errno (ENOENT);
return errno;
}
if (p == NULL || buffer[buflen - 1] != '\xff')
{
funlockfile (stream);
*result = NULL;
- return errno = ERANGE;
+ __set_errno (ERANGE);
+ return errno;
}
/* Skip leading blanks. */
============================================================
Index: grp/fgetgrent.c
--- grp/fgetgrent.c 1999/06/07 20:18:31 1.10.2.1
+++ grp/fgetgrent.c 1999/06/13 14:22:17
@@ -26,11 +26,12 @@
/* We need to protect the dynamic buffer handling. */
__libc_lock_define_initialized (static, lock);
+static char *buffer;
+
/* Read one entry from the given stream. */
struct group *
fgetgrent (FILE *stream)
{
- static char *buffer;
static size_t buffer_size;
static struct group resbuf;
fpos_t pos;
@@ -85,3 +86,14 @@
return result;
}
+
+
+/* Free all resources if necessary. */
+static void __attribute__ ((unused))
+free_mem (void)
+{
+ if (buffer != NULL)
+ free (buffer);
+}
+
+text_set_element (__libc_subfreeres, free_mem);
============================================================
Index: stdlib/longlong.h
--- stdlib/longlong.h 1999/05/25 16:50:26 1.11.2.1
+++ stdlib/longlong.h 1999/06/13 14:22:18
@@ -1220,7 +1220,7 @@
srlx %7,32,%5
mulx %3,%5,%3
mulx %2,%5,%5
- sethi 0x80000000,%2
+ sethi %%hi(0x80000000),%2
addcc %4,%3,%4
srlx %4,32,%4
add %2,%2,%2
@@ -1237,6 +1237,7 @@
: "cc"); \
} while (0)
#define UMUL_TIME 96
+#define UDIV_TIME 230
#endif /* __sparc_v9__ */
#if defined (__vax__) && W_TYPE_SIZE == 32
============================================================
Index: misc/daemon.c
--- misc/daemon.c 1998/07/16 10:57:08 1.2
+++ misc/daemon.c 1999/06/13 14:22:18
@@ -45,7 +45,7 @@
{
int fd;
- switch (__fork()) {
+ switch (fork()) {
case -1:
return (-1);
case 0:
============================================================
Index: ctype/ctype.h
--- ctype/ctype.h 1999/05/24 16:20:49 1.28
+++ ctype/ctype.h 1999/06/13 14:22:19
@@ -165,20 +165,21 @@
#if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
# define __tobody(c, f, a) \
- ({ int __res; \
- if (sizeof (c) > 1) \
- { \
- if (__builtin_constant_p (c)) \
- { \
- int __c = (c); \
- __res = __c < -128 || __c > 255 ? __c : a[__c]; \
- } \
- else \
- __res = f (c); \
- } \
- else \
- __res = a[(int) (c)]; \
- __res; })
+ (__extension__ \
+ ({ int __res; \
+ if (sizeof (c) > 1) \
+ { \
+ if (__builtin_constant_p (c)) \
+ { \
+ int __c = (c); \
+ __res = __c < -128 || __c > 255 ? __c : a[__c]; \
+ } \
+ else \
+ __res = f (c); \
+ } \
+ else \
+ __res = a[(int) (c)]; \
+ __res; }))
# define tolower(c) __tobody (c, tolower, __ctype_tolower)
# define toupper(c) __tobody (c, toupper, __ctype_toupper)
============================================================
Index: sysdeps/unix/sysv/linux/if_index.c
--- sysdeps/unix/sysv/linux/if_index.c 1999/04/28 23:04:24 1.14
+++ sysdeps/unix/sysv/linux/if_index.c 1999/06/13 14:22:19
@@ -27,7 +27,7 @@
#include <bits/libc-lock.h>
/* Try to get a socket to talk to the kernel. */
-#if defined SIOGIFINDEX || defined SIOGIFNAME
+#if defined SIOCGIFINDEX || defined SIOCGIFNAME
static int
internal_function
opensock (void)
@@ -71,7 +71,7 @@
unsigned int
if_nametoindex (const char *ifname)
{
-#ifndef SIOGIFINDEX
+#ifndef SIOCGIFINDEX
__set_errno (ENOSYS);
return 0;
#else
@@ -82,7 +82,7 @@
return 0;
strncpy (ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
- if (__ioctl (fd, SIOGIFINDEX, &ifr) < 0)
+ if (__ioctl (fd, SIOCGIFINDEX, &ifr) < 0)
{
int saved_errno = errno;
__close (fd);
@@ -111,7 +111,7 @@
struct if_nameindex *
if_nameindex (void)
{
-#ifndef SIOGIFINDEX
+#ifndef SIOCGIFINDEX
__set_errno (ENOSYS);
return NULL;
#else
@@ -172,7 +172,7 @@
struct ifreq *ifr = &ifc.ifc_req[i];
idx[i].if_name = __strdup (ifr->ifr_name);
if (idx[i].if_name == NULL
- || __ioctl (fd, SIOGIFINDEX, ifr) < 0)
+ || __ioctl (fd, SIOCGIFINDEX, ifr) < 0)
{
int saved_errno = errno;
unsigned int j;
@@ -199,7 +199,7 @@
char *
if_indextoname (unsigned int ifindex, char *ifname)
{
-#ifndef SIOGIFINDEX
+#ifndef SIOCGIFINDEX
__set_errno (ENOSYS);
return NULL;
#else
@@ -207,14 +207,14 @@
struct if_nameindex *p;
char *result = NULL;
-#ifdef SIOGIFNAME
+#ifdef SIOCGIFNAME
/* We may be able to do the conversion directly, rather than searching a
list. This ioctl is not present in kernels before version 2.1.50. */
struct ifreq ifr;
int fd;
- static int siogifname_works_not;
+ static int siocgifname_works_not;
- if (!siogifname_works_not)
+ if (!siocgifname_works_not)
{
int serrno = errno;
@@ -224,10 +224,10 @@
return NULL;
ifr.ifr_ifindex = ifindex;
- if (__ioctl (fd, SIOGIFNAME, &ifr) < 0)
+ if (__ioctl (fd, SIOCGIFNAME, &ifr) < 0)
{
if (errno == EINVAL)
- siogifname_works_not = 1; /* Don't make the same mistake twice. */
+ siocgifname_works_not = 1; /* Don't make the same mistake twice. */
}
else
{
============================================================
Index: sysdeps/unix/sysv/linux/sys/sysmacros.h
--- sysdeps/unix/sysv/linux/sys/sysmacros.h 1999/01/21 14:28:43 1.7
+++ sysdeps/unix/sysv/linux/sys/sysmacros.h 1999/06/13 14:22:19
@@ -27,11 +27,13 @@
#if defined __GNUC__ && __GNUC__ >= 2
# define major(dev) ((int)(((dev) >> 8) & 0xff))
# define minor(dev) ((int)((dev) & 0xff))
-# define makedev(major, minor) (((major) << 8) | (minor))
+# define makedev(major, minor) ((((unsigned int) (major)) << 8) \
+ | ((unsigned int) (minor)))
#else
# define major(dev) (((dev).__val[0] >> 8) & 0xff)
# define minor(dev) ((dev).__val[0] & 0xff)
-# define makedev(major, minor) { (((major) << 8) | (minor)), 0 }
+# define makedev(major, minor) { ((((unsigned int) (major)) << 8) \
+ | ((unsigned int) (minor))), 0 }
#endif
#endif /* sys/sysmacros.h */
============================================================
Index: sysdeps/unix/sysv/linux/i386/sigaction.c
--- sysdeps/unix/sysv/linux/i386/sigaction.c 1998/10/31 10:28:07 1.15
+++ sysdeps/unix/sysv/linux/i386/sigaction.c 1999/06/13 14:22:19
@@ -1,5 +1,5 @@
/* POSIX.1 `sigaction' call for Linux/i386.
- Copyright (C) 1991, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1991, 95, 96, 97, 98, 99 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
@@ -30,6 +30,8 @@
translate it here. */
#include <kernel_sigaction.h>
+/* We do not globally define the SA_RESTORER flag so do it here. */
+#define SA_RESTORER 0x04000000
extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *,
struct kernel_sigaction *, size_t);
@@ -38,6 +40,8 @@
functions which have RT equivalents. */
int __libc_missing_rt_sigs;
+static void restore_rt (void) asm ("__restore_rt");
+static void restore (void) asm ("__restore");
/* If ACT is not NULL, change the action for SIG to *ACT.
If OACT is not NULL, put the old action for SIG in *OACT. */
@@ -58,10 +62,10 @@
{
kact.k_sa_handler = act->sa_handler;
memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
- kact.sa_flags = act->sa_flags;
+ kact.sa_flags = act->sa_flags | SA_RESTORER;
- kact.sa_restorer = ((act->sa_flags & SA_NOMASK)
- ? &&restore_nomask : &&restore);
+ kact.sa_restorer = ((act->sa_flags & SA_SIGINFO)
+ ? &restore_rt : &restore);
}
/* XXX The size argument hopefully will have to be changed to the
@@ -90,10 +94,9 @@
{
k_newact.k_sa_handler = act->sa_handler;
k_newact.sa_mask = act->sa_mask.__val[0];
- k_newact.sa_flags = act->sa_flags;
+ k_newact.sa_flags = act->sa_flags | SA_RESTORER;
- k_newact.sa_restorer = ((act->sa_flags & SA_NOMASK)
- ? &&restore_nomask : &&restore);
+ k_newact.sa_restorer = &restore;
}
asm volatile ("pushl %%ebx\n"
@@ -119,41 +122,33 @@
}
return 0;
-
- restore:
- asm (
-#ifdef PIC
- " pushl %%ebx\n"
- " call 0f\n"
- "0: popl %%ebx\n"
- " addl $_GLOBAL_OFFSET_TABLE_+[.-0b], %%ebx\n"
- " addl $8, %%esp\n"
- " call __sigsetmask@PLT\n"
- " addl $8, %%esp\n"
- " popl %%ebx\n"
-#else
- " addl $4, %%esp\n"
- " call __sigsetmask\n"
- " addl $4, %%esp\n"
-#endif
- " popl %%eax\n"
- " popl %%ecx\n"
- " popl %%edx\n"
- " popf\n"
- " ret"
- : : );
-
- restore_nomask:
- asm (" addl $4, %%esp\n"
- " popl %%eax\n"
- " popl %%ecx\n"
- " popl %%edx\n"
- " popf\n"
- " ret"
- : : );
-
- /* NOTREACHED */
- return -1;
}
weak_alias (__sigaction, sigaction)
+
+#define RESTORE(name, syscall) RESTORE2 (name, syscall)
+#define RESTORE2(name, syscall) \
+asm \
+ ( \
+ ".align 16\n" \
+ "__" #name ":\n" \
+ " movl $" #syscall ", %eax\n" \
+ " int $0x80" \
+ );
+
+/* The return code for realtime-signals. */
+RESTORE (restore_rt, __NR_rt_sigreturn)
+
+/* For the boring old signals. */
+# undef RESTORE2
+# define RESTORE2(name, syscall) \
+asm \
+ ( \
+ ".align 8\n" \
+ "__" #name ":\n" \
+ " popl %eax\n" \
+ " movl $" #syscall ", %eax\n" \
+ " int $0x80" \
+ );
+
+RESTORE (restore, __NR_sigreturn)
============================================================
Index: sysdeps/arm/dl-machine.h
--- sysdeps/arm/dl-machine.h 1999/03/02 08:06:57 1.12
+++ sysdeps/arm/dl-machine.h 1999/06/13 14:22:20
@@ -52,22 +52,14 @@
/* Return the run-time load address of the shared object. */
-// patb
static inline Elf32_Addr __attribute__ ((unused))
elf_machine_load_address (void)
{
- Elf32_Addr addr;
- asm (" ldr ip,.L1
- ldr r3,.L3
- add r3, r3, sl
- ldr ip,[sl, ip]
- sub ip, r3, ip
- b .L2
- .L1: .word _dl_start(GOT)
- .L3: .word _dl_start(GOTOFF)
- .L2: mov %0, ip"
- : "=r" (addr) : : "ip", "r3");
- return addr;
+ extern void __dl_start asm ("_dl_start");
+ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start;
+ Elf32_Addr pcrel_addr;
+ asm ("adr %0, _dl_start" : "=r" (pcrel_addr));
+ return pcrel_addr - got_addr;
}
============================================================
Index: manual/stdio.texi
--- manual/stdio.texi 1999/03/10 16:04:31 1.97
+++ manual/stdio.texi 1999/06/13 14:22:27
@@ -1616,6 +1616,12 @@
@end smallexample
In practice, it is often easier just to use @code{asprintf}, below.
+
+@strong{Attention:} In the GNU C library version 2.0 the return value
+is the number of characters stored, not including the terminating null.
+If this value equals @code{@var{size} - 1}, then there was not enough
+space in @var{s} for all the output. This change was necessary with
+the adoption of snprintf by ISO C9x.
@end deftypefun
@node Dynamic Output
@@ -2205,7 +2211,7 @@
Now let's look at how to define the handler and arginfo functions
which are passed as arguments to @code{register_printf_function}.
-@strong{Compatibility Note:} The interface change in the GNU libc
+@strong{Compatibility Note:} The interface changed in the GNU libc
version 2.0. Previously the third argument was of type
@code{va_list *}.
@@ -4347,7 +4353,7 @@
produced no output since the class with the numeric value @code{6} is
not defined. Although a class with numeric value @code{5} is also not
defined by default, the call the @code{addseverity} introduces it and
-the second call to @code{fmtmsg} produces the above outout.
+the second call to @code{fmtmsg} produces the above output.
When we change the environment of the program to contain
@code{SEV_LEVEL=XXX,6,NOTE} when running it we get a different result:
============================================================
Index: sysdeps/unix/sysv/linux/net/if_arp.h
--- sysdeps/unix/sysv/linux/net/if_arp.h 1999/03/29 00:54:14 1.9
+++ sysdeps/unix/sysv/linux/net/if_arp.h 1999/06/13 14:22:27
@@ -92,6 +92,7 @@
#define ARPHRD_PPP 512
#define ARPHRD_HDLC 513 /* (Cisco) HDLC. */
#define ARPHRD_LAPB 516 /* LAPB. */
+#define ARPHRD_DDCMP 517 /* Digital's DDCMP. */
#define ARPHRD_TUNNEL 768 /* IPIP tunnel. */
#define ARPHRD_TUNNEL6 769 /* IPIP6 tunnel. */
============================================================
Index: malloc/malloc.h
--- malloc/malloc.h 1999/05/23 13:01:33 1.11
+++ malloc/malloc.h 1999/06/13 14:22:28
@@ -60,7 +60,7 @@
/* GCC can always grok prototypes. For C++ programs we add throw()
to help it optimize the function calls. But this works only with
gcc 2.8.x and egcs. */
-# if defined __cplusplus && __GNUC_MINOR__ >= 8
+# if defined __cplusplus && (__GNUC__ >= 3 || __GNUC_MINOR__ >= 8)
# define __THROW throw ()
# else
# define __THROW
============================================================
Index: sysdeps/posix/getcwd.c
--- sysdeps/posix/getcwd.c 1998/10/18 15:34:15 1.34
+++ sysdeps/posix/getcwd.c 1999/06/13 14:22:28
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,93,94,95,96,97,98 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,93,94,95,96,97,98,99 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
@@ -211,8 +211,9 @@
= "../../../../../../../../../../../../../../../../../../../../../../../\
../../../../../../../../../../../../../../../../../../../../../../../../../../\
../../../../../../../../../../../../../../../../../../../../../../../../../..";
- const char *dotp, *dotlist;
- size_t dotsize;
+ const char *dotp = &dots[sizeof (dots)];
+ const char *dotlist = dots;
+ size_t dotsize = sizeof (dots) - 1;
dev_t rootdev, thisdev;
ino_t rootino, thisino;
char *path;
@@ -244,18 +245,15 @@
*--pathp = '\0';
if (__lstat (".", &st) < 0)
- return NULL;
+ goto lose2;
thisdev = st.st_dev;
thisino = st.st_ino;
if (__lstat ("/", &st) < 0)
- return NULL;
+ goto lose2;
rootdev = st.st_dev;
rootino = st.st_ino;
- dotsize = sizeof (dots) - 1;
- dotp = &dots[sizeof (dots)];
- dotlist = dots;
while (!(thisdev == rootdev && thisino == rootino))
{
register DIR *dirstream;
@@ -273,7 +271,7 @@
{
new = malloc (dotsize * 2 + 1);
if (new == NULL)
- return NULL;
+ goto lose;
#ifdef HAVE_MEMPCPY
dotp = mempcpy (new, dots, dotsize);
#else
@@ -375,7 +373,6 @@
if (tmp == NULL)
{
(void) __closedir (dirstream);
- free (path);
__set_errno (ENOMEM);/* closedir might have changed it.*/
goto lose;
}
@@ -412,6 +409,9 @@
lose:
if (dotlist != dots)
free ((__ptr_t) dotlist);
+ lose2:
+ if (buf == NULL)
+ free (path);
return NULL;
}
--
Andreas Jaeger aj@arthur.rhein-neckar.de jaeger@informatik.uni-kl.de
for pgp-key finger ajaeger@aixd1.rhrk.uni-kl.de
More information about the Libc-hacker
mailing list