summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog31
-rw-r--r--Makefile2
-rw-r--r--hurd/Makefile1
-rw-r--r--libio/fileops.c4
-rw-r--r--manual/Makefile2
-rw-r--r--string/strcoll.c6
-rw-r--r--string/strxfrm.c10
-rw-r--r--sysdeps/mach/hurd/Makefile3
-rw-r--r--sysdeps/posix/tempname.c90
-rw-r--r--sysdeps/unix/sysv/linux/alpha/getrusage.S6
-rw-r--r--sysdeps/unix/sysv/linux/i386/Dist4
11 files changed, 94 insertions, 65 deletions
diff --git a/ChangeLog b/ChangeLog
index 60c678ee4d..a6b2ae3054 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,32 @@
+1998-07-22 Ulrich Drepper <drepper@cygnus.com>
+
+ * Makefile (headers2_0): Add sigstack.h.
+
+ * sysdeps/unix/sysv/linux/alpha/getrusage.S: Also define __getrusage.
+
+1998-07-22 11:43 Ulrich Drepper <drepper@cygnus.com>
+
+ * libio/fileops.c (_IO_file_sync): Don't lock stream here.
+ Reported by Thorsten Kukuk.
+
+ * string/strcoll.c: Correct problem with empty strings.
+ * string/strxfrm.c: Likewise.
+ Reported by vbzoli@hbrt.hu [PR libc/719].
+
+1998-07-21 18:40 Zack Weinberg <zack@rabi.phys.columbia.edu>
+
+ * sysdeps/posix/tempname.c: Use the random-name generator
+ already used by mktemp/mkstemp. Honor TMPDIR.
+
+1998-07-21 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * hurd/Makefile (routines): Remove cthreads.
+ * sysdeps/mach/hurd/Makefile (sysdep_routines): Add cthreads.
+
+ * sysdeps/unix/sysv/linux/i386/Dist: Add missing files.
+
+ * manual/Makefile (distribute): Add summary.texi.
+
1998-07-20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h: Fix typo.
@@ -9,7 +38,7 @@
* configure.in: Move test for available port after machine
variable is defined.
-1998-07-21 16:08 -0400 Zack Weinberg <zack@rabi.phys.columbia.edu>
+1998-07-21 16:08 Zack Weinberg <zack@rabi.phys.columbia.edu>
* sysdeps/unix/sysv/linux/sendmsg.c: If passing a SCM_CREDS
message, copy the buffer and resize it to what the kernel
diff --git a/Makefile b/Makefile
index 431652c038..030d66029c 100644
--- a/Makefile
+++ b/Makefile
@@ -306,7 +306,7 @@ headers2_0 := __math.h bytesex.h confname.h direntry.h elfclass.h \
utmpbits.h utsnamelen.h waitflags.h waitstatus.h \
xopen_lim.h gnu/types.h sys/ipc_buf.h \
sys/kernel_termios.h sys/msq_buf.h sys/sem_buf.h \
- sys/shm_buf.h sys/socketcall.h
+ sys/shm_buf.h sys/socketcall.h sigstack.h
.PHONY: remove-old-headers
remove-old-headers:
diff --git a/hurd/Makefile b/hurd/Makefile
index 40440adc07..441c66c78c 100644
--- a/hurd/Makefile
+++ b/hurd/Makefile
@@ -42,7 +42,6 @@ routines = hurdstartup hurdinit \
hurdid hurdlookup hurdpid hurdrlimit hurdprio hurdexec \
get-host set-host \
path-lookup \
- cthreads \
setauth \
pid2task task2pid \
getuids setuids getumask fchroot \
diff --git a/libio/fileops.c b/libio/fileops.c
index 82e521af6b..0192531c18 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -434,8 +434,6 @@ _IO_file_sync (fp)
_IO_size_t delta;
int retval = 0;
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
/* char* ptr = cur_ptr(); */
if (fp->_IO_write_ptr > fp->_IO_write_base)
if (_IO_do_flush(fp)) return EOF;
@@ -460,8 +458,6 @@ _IO_file_sync (fp)
fp->_offset = _IO_pos_BAD;
/* FIXME: Cleanup - can this be shared? */
/* setg(base(), ptr, ptr); */
- _IO_funlockfile (fp);
- _IO_cleanup_region_end (0);
return retval;
}
diff --git a/manual/Makefile b/manual/Makefile
index 47656c6c7f..2314c0c93d 100644
--- a/manual/Makefile
+++ b/manual/Makefile
@@ -111,7 +111,7 @@ doc-only-dist = Makefile COPYING.LIB
distribute = $(minimal-dist) $(examples) texis stdio-fp.c \
libc.info* libc.?? libc.??s texinfo.tex stamp-summary \
xtract-typefun.awk dir-add.texinfo dir-add.info dir \
- chapters.texi top-menu.texi
+ chapters.texi top-menu.texi summary.texi
export distribute := $(distribute)
tar-it = tar chovf $@ $^
diff --git a/string/strcoll.c b/string/strcoll.c
index cc39820fcf..8457ef8df1 100644
--- a/string/strcoll.c
+++ b/string/strcoll.c
@@ -82,6 +82,12 @@ STRCOLL (s1, s2, l)
if (collate_nrules == 0)
return STRCMP (s1, s2);
+ /* Handle empty strings as a special case. */
+ if (*s1 == '\0')
+ return *s2 == '\0' ? 0 : -1;
+ else if (*s2 == '\0')
+ return 1;
+
/* Get full information about the strings. This means we get
information for all passes in a special data structure. */
get_string (s1, s1forw, s1backw);
diff --git a/string/strxfrm.c b/string/strxfrm.c
index 8222adf435..795e8e4a73 100644
--- a/string/strxfrm.c
+++ b/string/strxfrm.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
@@ -184,6 +184,14 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l)
return STRLEN (src);
}
+ /* Handle an empty string as a special case. */
+ if (*src == '\0')
+ {
+ if (n != 0)
+ *dest = '\0';
+ return 1;
+ }
+
/* Get full information about the string. This means we get
information for all passes in a special data structure. */
get_string (src, forw, backw);
diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile
index f4251024b1..c4282d1754 100644
--- a/sysdeps/mach/hurd/Makefile
+++ b/sysdeps/mach/hurd/Makefile
@@ -126,5 +126,8 @@ ifeq (elf,$(subdir))
$(objpfx)librtld.os: $(rpcuserlibs:.so=_pic.a)
endif
+ifeq (hurd, $(subdir))
+sysdep_routines += cthreads
+endif
endif # in-Makerules
diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c
index 291817c9ef..82e0243132 100644
--- a/sysdeps/posix/tempname.c
+++ b/sysdeps/posix/tempname.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,93,94,95,96,97,98 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
@@ -16,15 +16,17 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <errno.h>
#include <stddef.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
+#include <sys/time.h>
#ifdef USE_IN_LIBIO
# include "libioP.h"
@@ -87,14 +89,11 @@ __stdio_gen_tempname (char *buf, size_t bufsize, const char *dir,
{
int saverrno = errno;
static const char tmpdir[] = P_tmpdir;
- static size_t indices[2];
- size_t *idx;
-#if 0
- static pid_t oldpid = (pid_t) 0;
-#endif
- pid_t pid = __getpid();
- register size_t len, plen, dlen;
- int wrapped;
+ size_t plen, dlen, len;
+ char *XXXXXX;
+ static uint64_t value;
+ struct timeval tv;
+ int count;
if (dir_search)
{
@@ -132,56 +131,37 @@ __stdio_gen_tempname (char *buf, size_t bufsize, const char *dir,
else
plen = 0;
- if (dir != tmpdir && !strcmp (dir, tmpdir))
- dir = tmpdir;
- idx = &indices[(plen == 0 && dir == tmpdir) ? 1 : 0];
-
-#if 0
- /* XXX Is this ever useful??? At least when using a thread package
- which uses different PIDs for the threads it is not helpful. */
- if (pid != oldpid)
- {
- oldpid = pid;
- indices[0] = indices[1] = 0;
- }
-#endif
-
- wrapped = 0; /* We have not yet wrapped around the index counter. */
- len = dlen + 1 + plen + 5 + 3;
- while (1)
- {
- size_t i;
+ len = __snprintf (buf, bufsize, "%.*s/%.*sXXXXXX",
+ (int) dlen, dir, (int) plen, pfx);
- if (*idx >= ((sizeof (letters) - 1) * (sizeof (letters) - 1) *
- (sizeof (letters) - 1)))
- {
- if (wrapped)
- /* We really wrapped around this call. Can't believe it
- but nevertheless stop the endless loop. */
- break;
+ if (len < dlen + plen + 7)
+ {
+ __set_errno (EINVAL);
+ return NULL;
+ }
- indices[0] = indices[1] = 0;
- wrapped = 1;
- }
-
- i = (*idx)++;
+ XXXXXX = &buf[dlen + plen + 1];
- /* Construct a file name and see if it already exists.
+ /* Get some more or less random data. */
+ __gettimeofday (&tv, NULL);
+ value += ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ __getpid ();
- We use a single counter in *IDX to cycle each of three
- character positions through each of 62 possible letters. */
+ for (count = 0; count < TMP_MAX; value += 7777, ++count)
+ {
+ uint64_t v = value;
- if (__snprintf (buf, bufsize, "%.*s/%.*s%.5d%c%c%c",
- (int) dlen, dir, (int) plen,
- pfx, pid % 100000,
- letters[i % (sizeof (letters) - 1)],
- letters[(i / (sizeof (letters) - 1))
- % (sizeof (letters) - 1)],
- letters[(i / ((sizeof (letters) - 1) *
- (sizeof (letters) - 1)))
- % (sizeof (letters) - 1)]
- ) != (int) len)
- return NULL;
+ /* Fill in the random bits. */
+ XXXXXX[0] = letters[v % 62];
+ v /= 62;
+ XXXXXX[1] = letters[v % 62];
+ v /= 62;
+ XXXXXX[2] = letters[v % 62];
+ v /= 62;
+ XXXXXX[3] = letters[v % 62];
+ v /= 62;
+ XXXXXX[4] = letters[v % 62];
+ v /= 62;
+ XXXXXX[5] = letters[v % 62];
if (streamptr != NULL)
{
diff --git a/sysdeps/unix/sysv/linux/alpha/getrusage.S b/sysdeps/unix/sysv/linux/alpha/getrusage.S
index fbbe6f7931..83cfc9e4e3 100644
--- a/sysdeps/unix/sysv/linux/alpha/getrusage.S
+++ b/sysdeps/unix/sysv/linux/alpha/getrusage.S
@@ -35,7 +35,7 @@
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
#define GETRUSAGE __getrusage_tv64
#else
-#define GETRUSAGE getrusage
+#define GETRUSAGE __getrusage
#endif
LEAF(GETRUSAGE, 16)
@@ -131,5 +131,9 @@ $error:
END(GETRUSAGE)
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+strong_alias(__getrusage_tv64, ____getrusage_tv64)
+default_symbol_version (____getrusage_tv64, __getrusage, GLIBC_2.1)
default_symbol_version (__getrusage_tv64, getrusage, GLIBC_2.1)
+#else
+weak_alias(__getrusage, getrusage)
#endif
diff --git a/sysdeps/unix/sysv/linux/i386/Dist b/sysdeps/unix/sysv/linux/i386/Dist
index 75955fcc15..980b3a22c9 100644
--- a/sysdeps/unix/sysv/linux/i386/Dist
+++ b/sysdeps/unix/sysv/linux/i386/Dist
@@ -4,3 +4,7 @@ s_pwrite64.S
s_pread64.S
sys/perm.h
sys/vm86.h
+sys/elf.h
+sys/procfs.h
+sys/reg.h
+sys/user.h