mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-17 13:00:43 +08:00
Fri Aug 25 12:12:42 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/mmap.c: Fix inverted test of MAP_FIXED. * stdio/vfscanf.c (number): Allow field width to inhibit first digit after base detection. * stdio/vfprintf.c (vfprintf: %s): Never search past the limit specified by the precision. * grp/grpread.c (__grpscan): New function. * grp/grp.h (__grpscan): Declare it. * grp/getgrgid.c: Use __grpscan. * grp/getgrnam.c: Likewise. * pwd/pwdread.c (__pwdscan): New function. * pwd/pwd.h (__pwdscan): Declare it. * pwd/getpwnam.c: Use __pwdscan. * pwd/getpwuid.c: Likewise. Thu Aug 24 16:29:40 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu> * sysdeps/mach/hurd/mmap.c: Treat (FLAGS & MAP_TYPE) == 0 like MAP_FILE. * hurd/thread-cancel.c: Return EINTR when called on self. * sysdeps/i386/elf/start.S (data_start): Define as weak alias for __data_start.
This commit is contained in:
parent
3cf595e562
commit
7752137a6a
28
ChangeLog
28
ChangeLog
@ -1,3 +1,31 @@
|
||||
Fri Aug 25 12:12:42 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* sysdeps/mach/hurd/mmap.c: Fix inverted test of MAP_FIXED.
|
||||
|
||||
* stdio/vfscanf.c (number): Allow field width to inhibit first
|
||||
digit after base detection.
|
||||
|
||||
* stdio/vfprintf.c (vfprintf: %s): Never search past the limit
|
||||
specified by the precision.
|
||||
|
||||
* grp/grpread.c (__grpscan): New function.
|
||||
* grp/grp.h (__grpscan): Declare it.
|
||||
* grp/getgrgid.c: Use __grpscan.
|
||||
* grp/getgrnam.c: Likewise.
|
||||
* pwd/pwdread.c (__pwdscan): New function.
|
||||
* pwd/pwd.h (__pwdscan): Declare it.
|
||||
* pwd/getpwnam.c: Use __pwdscan.
|
||||
* pwd/getpwuid.c: Likewise.
|
||||
|
||||
Thu Aug 24 16:29:40 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* sysdeps/mach/hurd/mmap.c: Treat (FLAGS & MAP_TYPE) == 0 like
|
||||
MAP_FILE.
|
||||
|
||||
* hurd/thread-cancel.c: Return EINTR when called on self.
|
||||
* sysdeps/i386/elf/start.S (data_start): Define as weak alias for
|
||||
__data_start.
|
||||
|
||||
Tue Aug 22 16:49:12 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* inet/netdb.h: Moved to resolv.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1995 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
|
||||
@ -24,27 +24,13 @@ Cambridge, MA 02139, USA. */
|
||||
|
||||
/* Search for an entry with a matching group ID. */
|
||||
struct group *
|
||||
DEFUN(getgrgid, (gid), register gid_t gid)
|
||||
DEFUN(getgrgid, (gid), gid_t gid)
|
||||
{
|
||||
static PTR info = NULL;
|
||||
register FILE *stream;
|
||||
register struct group *g;
|
||||
|
||||
if (info == NULL)
|
||||
int match (struct group *p)
|
||||
{
|
||||
info = __grpalloc();
|
||||
if (info == NULL)
|
||||
return NULL;
|
||||
return p->gr_gid == gid;
|
||||
}
|
||||
static void *info;
|
||||
|
||||
stream = __grpopen();
|
||||
if (stream == NULL)
|
||||
return NULL;
|
||||
|
||||
while ((g = __grpread(stream, info)) != NULL)
|
||||
if (g->gr_gid == (gid_t) gid)
|
||||
break;
|
||||
|
||||
(void) fclose(stream);
|
||||
return g;
|
||||
return __grpscan (&info, &match);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1995 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
|
||||
@ -24,27 +24,13 @@ Cambridge, MA 02139, USA. */
|
||||
|
||||
/* Search for an entry with a matching name. */
|
||||
struct group *
|
||||
DEFUN(getgrnam, (name), register CONST char *name)
|
||||
DEFUN(getgrnam, (name), const char *name)
|
||||
{
|
||||
static PTR info = NULL;
|
||||
register FILE *stream;
|
||||
register struct group *g;
|
||||
|
||||
if (info == NULL)
|
||||
int match (struct group *p)
|
||||
{
|
||||
info = __grpalloc();
|
||||
if (info == NULL)
|
||||
return NULL;
|
||||
return ! strcmp (name, p->gr_name);
|
||||
}
|
||||
static void *info;
|
||||
|
||||
stream = __grpopen();
|
||||
if (stream == NULL)
|
||||
return NULL;
|
||||
|
||||
while ((g = __grpread(stream, info)) != NULL)
|
||||
if (!strcmp(g->gr_name, name))
|
||||
break;
|
||||
|
||||
(void) fclose(stream);
|
||||
return g;
|
||||
return __grpscan (&info, &match);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1992, 1995 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
|
||||
@ -55,6 +55,11 @@ extern struct group *__grpread __P ((FILE * __stream, __ptr_t __g));
|
||||
|
||||
/* Return a chunk of memory containing pre-initialized data for __grpread. */
|
||||
extern __ptr_t __grpalloc __P ((void));
|
||||
|
||||
/* Scan the group file, filling in G, until SELECTOR returns nonzero for an
|
||||
entry. Return the `struct group' of G if successful, NULL on failure. */
|
||||
extern struct group *__grpscan __P ((__ptr_t *__p,
|
||||
int (*__selector) (struct group *)));
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1992, 1995 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
|
||||
@ -133,3 +133,34 @@ DEFUN(__grpread, (stream, g), FILE *stream AND PTR CONST g)
|
||||
|
||||
return &info->g;
|
||||
}
|
||||
|
||||
|
||||
struct group *
|
||||
__grpscan (void **info, int (*selector) (struct group *))
|
||||
{
|
||||
FILE *stream;
|
||||
struct group *p;
|
||||
|
||||
if (*info == NULL)
|
||||
{
|
||||
*info = __grpalloc ();
|
||||
if (info == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
stream = __grpopen ();
|
||||
if (stream == NULL)
|
||||
return NULL;
|
||||
|
||||
p = NULL;
|
||||
while (! feof (stream))
|
||||
{
|
||||
p = __grpread (stream, *info);
|
||||
if (p && (*selector) (p))
|
||||
break;
|
||||
p = NULL;
|
||||
}
|
||||
|
||||
(void) fclose (stream);
|
||||
return p;
|
||||
}
|
||||
|
@ -42,6 +42,8 @@ hurd_thread_cancel (thread_t thread)
|
||||
|
||||
if (! ss)
|
||||
return EINVAL;
|
||||
if (ss == _hurd_self_sigstate ())
|
||||
return EINTR; /* Bozo. */
|
||||
|
||||
__spin_lock (&ss->lock);
|
||||
assert (! ss->critical_section);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1995 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
|
||||
@ -24,27 +24,13 @@ Cambridge, MA 02139, USA. */
|
||||
|
||||
/* Search for an entry with a matching name. */
|
||||
struct passwd *
|
||||
DEFUN(getpwnam, (name), register CONST char *name)
|
||||
DEFUN(getpwnam, (name), const char *name)
|
||||
{
|
||||
static PTR info = NULL;
|
||||
register FILE *stream;
|
||||
register struct passwd *p;
|
||||
|
||||
if (info == NULL)
|
||||
int match (struct passwd *p)
|
||||
{
|
||||
info = __pwdalloc();
|
||||
if (info == NULL)
|
||||
return(NULL);
|
||||
return ! strcmp (name, p->pw_name);
|
||||
}
|
||||
static void *info;
|
||||
|
||||
stream = __pwdopen();
|
||||
if (stream == NULL)
|
||||
return(NULL);
|
||||
|
||||
while ((p = __pwdread(stream, info)) != NULL)
|
||||
if (!strcmp(p->pw_name, name))
|
||||
break;
|
||||
|
||||
(void) fclose(stream);
|
||||
return(p);
|
||||
return __pwdscan (&info, &match);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1995 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
|
||||
@ -24,27 +24,13 @@ Cambridge, MA 02139, USA. */
|
||||
|
||||
/* Search for an entry with a matching uid. */
|
||||
struct passwd *
|
||||
DEFUN(getpwuid, (uid), register uid_t uid)
|
||||
DEFUN(getpwuid, (uid), uid_t uid)
|
||||
{
|
||||
static PTR info;
|
||||
register FILE *stream;
|
||||
register struct passwd *p;
|
||||
|
||||
if (info == NULL)
|
||||
int match (struct passwd *p)
|
||||
{
|
||||
info = __pwdalloc();
|
||||
if (info == NULL)
|
||||
return(NULL);
|
||||
return p->pw_uid == uid;
|
||||
}
|
||||
static void *info;
|
||||
|
||||
stream = __pwdopen();
|
||||
if (stream == NULL)
|
||||
return(NULL);
|
||||
|
||||
while ((p = __pwdread(stream, info)) != NULL)
|
||||
if (p->pw_uid == uid)
|
||||
break;
|
||||
|
||||
(void) fclose(stream);
|
||||
return(p);
|
||||
return __pwdscan (&info, &match);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1992, 1995 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
|
||||
@ -58,6 +58,12 @@ extern struct passwd *__pwdread __P ((FILE * __stream, __ptr_t __p));
|
||||
|
||||
/* Return a chunk of memory containing pre-initialized data for __pwdread. */
|
||||
extern __ptr_t __pwdalloc __P ((void));
|
||||
|
||||
/* Scan the password file, filling in P, until SELECTOR returns nonzero for
|
||||
an entry. Return the `struct passwd' of P if successful, NULL on
|
||||
failure. */
|
||||
extern struct passwd *__pwdscan __P ((__ptr_t *__p,
|
||||
int (*__selector) (struct passwd *)));
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1992, 1995 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
|
||||
@ -114,3 +114,34 @@ DEFUN(__pwdread, (stream, p), FILE *stream AND PTR CONST p)
|
||||
|
||||
return &info->p;
|
||||
}
|
||||
|
||||
|
||||
struct passwd *
|
||||
__pwdscan (void **info, int (*selector) (struct passwd *))
|
||||
{
|
||||
FILE *stream;
|
||||
struct passwd *p;
|
||||
|
||||
if (*info == NULL)
|
||||
{
|
||||
*info = __pwdalloc ();
|
||||
if (info == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
stream = __pwdopen ();
|
||||
if (stream == NULL)
|
||||
return NULL;
|
||||
|
||||
p = NULL;
|
||||
while (! feof (stream))
|
||||
{
|
||||
p = __pwdread (stream, *info);
|
||||
if (p && (*selector) (p))
|
||||
break;
|
||||
p = NULL;
|
||||
}
|
||||
|
||||
(void) fclose (stream);
|
||||
return p;
|
||||
}
|
||||
|
@ -533,21 +533,16 @@ vfprintf (s, format, ap)
|
||||
}
|
||||
else if (specs[cnt].info.prec != -1)
|
||||
{
|
||||
/* Search for the end of the string, but don't search
|
||||
past the length specified by the precision. */
|
||||
const char *end = memchr (str, '\0', specs[cnt].info.prec);
|
||||
if (end)
|
||||
len = end - str;
|
||||
else
|
||||
len = strlen (str);
|
||||
}
|
||||
else
|
||||
{
|
||||
len = strlen (str);
|
||||
|
||||
if (specs[cnt].info.prec != -1
|
||||
&& (size_t) specs[cnt].info.prec < len)
|
||||
/* Limit the length to the precision. */
|
||||
len = specs[cnt].info.prec;
|
||||
}
|
||||
else
|
||||
len = strlen (str);
|
||||
|
||||
specs[cnt].info.width -= len;
|
||||
|
||||
|
@ -422,7 +422,7 @@ DEFUN(__vfscanf, (s, format, arg),
|
||||
base = 10;
|
||||
|
||||
/* Read the number into WORK. */
|
||||
do
|
||||
while (width != 0 && c != EOF)
|
||||
{
|
||||
if (base == 16 ? !isxdigit(c) :
|
||||
(!isdigit(c) || c - '0' >= base))
|
||||
@ -430,11 +430,12 @@ DEFUN(__vfscanf, (s, format, arg),
|
||||
*w++ = c;
|
||||
if (width > 0)
|
||||
--width;
|
||||
} while (inchar() != EOF && width != 0);
|
||||
(void) inchar ();
|
||||
}
|
||||
|
||||
if (w == work ||
|
||||
(w - work == 1 && (work[0] == '+' || work[0] == '-')))
|
||||
/* There was on number. */
|
||||
/* There was no number. */
|
||||
conv_error();
|
||||
|
||||
/* Convert the number. */
|
||||
|
@ -90,3 +90,5 @@ nofini:
|
||||
.globl __data_start
|
||||
__data_start:
|
||||
.long 0
|
||||
.weak data_start
|
||||
data_start = __data_start
|
||||
|
@ -57,6 +57,7 @@ __mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
|
||||
break;
|
||||
|
||||
case MAP_FILE:
|
||||
case 0: /* Allow, e.g., just MAP_SHARED. */
|
||||
{
|
||||
mach_port_t robj, wobj;
|
||||
if (err = HURD_DPORT_USE (fd, __io_map (port, &robj, &wobj)))
|
||||
@ -91,7 +92,7 @@ __mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
|
||||
mapaddr = (vm_address_t) addr;
|
||||
err = __vm_map (__mach_task_self (),
|
||||
&mapaddr, (vm_size_t) len, (vm_address_t) 0,
|
||||
flags & MAP_FIXED,
|
||||
! (flags & MAP_FIXED),
|
||||
memobj, (vm_offset_t) offset,
|
||||
flags & (MAP_COPY|MAP_PRIVATE),
|
||||
vmprot, VM_PROT_ALL,
|
||||
|
Loading…
Reference in New Issue
Block a user