diff options
-rw-r--r-- | ChangeLog | 31 | ||||
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | hurd/Makefile | 1 | ||||
-rw-r--r-- | libio/fileops.c | 4 | ||||
-rw-r--r-- | manual/Makefile | 2 | ||||
-rw-r--r-- | string/strcoll.c | 6 | ||||
-rw-r--r-- | string/strxfrm.c | 10 | ||||
-rw-r--r-- | sysdeps/mach/hurd/Makefile | 3 | ||||
-rw-r--r-- | sysdeps/posix/tempname.c | 90 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/getrusage.S | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/Dist | 4 |
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 |