1997-09-16 23:48  Ulrich Drepper  <drepper@cygnus.com>

	* libio/fileops.c: Define __set_errno if necessary.
	* libio/libioP.h: Don't use __BEGIN_DECLS/__END_DECLS, expand macros.

1997-09-16 22:03  Ulrich Drepper  <drepper@cygnus.com>

	* string/Makefile (headers): Instead bits/string2.h.
	Reported by David S. Miller <davem@jenolan.rutgers.edu>.

1997-09-16 13:31  David S. Miller  <davem@tanya.rutgers.edu>

	* sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h: New file.

1997-09-16 17:42  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/generic/bits/select.h (__FD_ZERO): Declare __arr variable
	as of type __fdset *.
	* sysdeps/i386/bits/select.h: Likewise.
	Reported by David S. Miller <davem@jenolan.rutgers.edu>.

1997-09-16 04:32  Ulrich Drepper  <drepper@cygnus.com>

	* hesiod/hesiod.c: Don't use and define cistrcmp.  We have
	strcasecmp.
	(hesiod_init): Use of HES_DOMAIN need not be protected by
	__secure_getenv.
	(hesiod_to_bind): Avoid using strcat and extra strlen calls, use
	stpcpy.

	* string/Makefile (noinl-tester-ENV): New variable to make
	strerror test pass.
	(CFLAGS-noinl-tester): Make sure we test the correct functions.

	* sysdeps/stub/atomicity.h: Fix typo.
	Zack Weinberg <zack@rabi.phys.columbia.edu> told me this twice.

	* manual/string.texi: Document strnlen and mempcpy.
	Tell a bit more about the locale dependence of strcasecmp and
	strncasecmp.

	* sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Remove ptrace.
	* sysdeps/unix/sysv/linux/sys/ptrace.h (ptrace): Change return
	value type to long int.
	* sysdeps/unix/sysv/linux/ptrace.c: Likewise.  Adopt local variable
	types.
	* sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S: Fix typo.
	Patches by David S. Miller <davem@jenolan.rutgers.edu>.
This commit is contained in:
Ulrich Drepper 1997-09-16 21:51:15 +00:00
parent 61eb22d3a8
commit 4547c1a410
15 changed files with 190 additions and 36 deletions

View File

@ -1,3 +1,52 @@
1997-09-16 23:48 Ulrich Drepper <drepper@cygnus.com>
* libio/fileops.c: Define __set_errno if necessary.
* libio/libioP.h: Don't use __BEGIN_DECLS/__END_DECLS, expand macros.
1997-09-16 22:03 Ulrich Drepper <drepper@cygnus.com>
* string/Makefile (headers): Instead bits/string2.h.
Reported by David S. Miller <davem@jenolan.rutgers.edu>.
1997-09-16 13:31 David S. Miller <davem@tanya.rutgers.edu>
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h: New file.
1997-09-16 17:42 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/generic/bits/select.h (__FD_ZERO): Declare __arr variable
as of type __fdset *.
* sysdeps/i386/bits/select.h: Likewise.
Reported by David S. Miller <davem@jenolan.rutgers.edu>.
1997-09-16 04:32 Ulrich Drepper <drepper@cygnus.com>
* hesiod/hesiod.c: Don't use and define cistrcmp. We have
strcasecmp.
(hesiod_init): Use of HES_DOMAIN need not be protected by
__secure_getenv.
(hesiod_to_bind): Avoid using strcat and extra strlen calls, use
stpcpy.
* string/Makefile (noinl-tester-ENV): New variable to make
strerror test pass.
(CFLAGS-noinl-tester): Make sure we test the correct functions.
* sysdeps/stub/atomicity.h: Fix typo.
Zack Weinberg <zack@rabi.phys.columbia.edu> told me this twice.
* manual/string.texi: Document strnlen and mempcpy.
Tell a bit more about the locale dependence of strcasecmp and
strncasecmp.
* sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Remove ptrace.
* sysdeps/unix/sysv/linux/sys/ptrace.h (ptrace): Change return
value type to long int.
* sysdeps/unix/sysv/linux/ptrace.c: Likewise. Adopt local variable
types.
* sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S: Fix typo.
Patches by David S. Miller <davem@jenolan.rutgers.edu>.
1997-09-16 02:14 Ulrich Drepper <drepper@cygnus.com>
Implementation of Hesiod NSS module by Mark Kettenis.

View File

@ -17,7 +17,7 @@
Boston, MA 02111-1307, USA. */
#ifndef _SYS_SELECT_H
#error "Never use <bits/select.h> directly; include <sys/select.h> instead."
# error "Never use <bits/select.h> directly; include <sys/select.h> instead."
#endif
@ -26,7 +26,7 @@
#define __FD_ZERO(set) \
do { \
unsigned int __i; \
__fd_mask *__arr = (set); \
__fd_set *__arr = (set); \
for (__i = 0; __i < sizeof (__fd_set) / sizeof (__fd_mask); ++__i) \
__arr->fds_bits[__i] = '\0'; \
} while (0)

View File

@ -67,7 +67,11 @@ static const char rcsid[] = "$Id$";
static int read_config_file(struct hesiod_p *ctx, const char *filename);
static char **get_txt_records(struct hesiod_p *ctx, int class,
const char *name);
#ifdef _LIBC
# define cistrcmp(s1, s2) strcasecmp (s1, s2)
#else
static int cistrcmp(const char *s1, const char *s2);
#endif
/* This function is called to initialize a hesiod_p. */
int hesiod_init(void **context)
@ -85,7 +89,7 @@ int hesiod_init(void **context)
if (read_config_file(ctx, configname) >= 0)
{
/* The default rhs can be overridden by an environment variable. */
p = __secure_getenv("HES_DOMAIN");
p = getenv("HES_DOMAIN");
if (p)
{
if (ctx->rhs)
@ -133,11 +137,11 @@ void hesiod_end(void *context)
char *hesiod_to_bind(void *context, const char *name, const char *type)
{
struct hesiod_p *ctx = (struct hesiod_p *) context;
char bindname[MAXDNAME], *p, *ret, **rhs_list = NULL;
char bindname[MAXDNAME], *p, *endp, *ret, **rhs_list = NULL;
const char *rhs;
int len;
strcpy(bindname, name);
size_t len;
endp = stpcpy(bindname, name);
/* Find the right right hand side to use, possibly truncating bindname. */
p = strchr(bindname, '@');
@ -161,7 +165,7 @@ char *hesiod_to_bind(void *context, const char *name, const char *type)
rhs = ctx->rhs;
/* See if we have enough room. */
len = strlen(bindname) + 1 + strlen(type);
len = (endp - bindname) + 1 + strlen(type);
if (ctx->lhs)
len += strlen(ctx->lhs) + ((ctx->lhs[0] != '.') ? 1 : 0);
len += strlen(rhs) + ((rhs[0] != '.') ? 1 : 0);
@ -174,24 +178,23 @@ char *hesiod_to_bind(void *context, const char *name, const char *type)
}
/* Put together the rest of the domain. */
strcat(bindname, ".");
strcat(bindname, type);
endp = __stpcpy (__stpcpy (endp, "."), type);
if (ctx->lhs)
{
if (ctx->lhs[0] != '.')
strcat(bindname, ".");
strcat(bindname, ctx->lhs);
endp = __stpcpy (endp, ".");
endp = __stpcpy (endp, ctx->lhs);
}
if (rhs[0] != '.')
strcat(bindname, ".");
strcat(bindname, rhs);
endp = __stpcpy (endp, ".");
endp = __stpcpy (endp, rhs);
/* rhs_list is no longer needed, since we're done with rhs. */
if (rhs_list)
hesiod_free_list(context, rhs_list);
/* Make a copy of the result and return it to the caller. */
ret = malloc(strlen(bindname) + 1);
ret = malloc((endp - bindname) + 1);
if (!ret)
{
__set_errno (ENOMEM);
@ -277,7 +280,7 @@ static int read_config_file(struct hesiod_p *ctx, const char *filename)
while(*p != ' ' && *p != '\t' && *p != '=')
p++;
*p++ = 0;
while(isspace(*p) || *p == '=')
p++;
data = p;
@ -325,7 +328,7 @@ static int read_config_file(struct hesiod_p *ctx, const char *filename)
}
return 0;
}
}
/* Given a DNS class and a DNS name, do a lookup for TXT records, and
* return a list of them.
@ -459,6 +462,7 @@ static char **get_txt_records(struct hesiod_p *ctx, int qclass,
return list;
}
#ifndef _LIBC
static int cistrcmp(const char *s1, const char *s2)
{
while (*s1 && tolower(*s1) == tolower(*s2))
@ -468,3 +472,4 @@ static int cistrcmp(const char *s1, const char *s2)
}
return tolower(*s1) - tolower(*s2);
}
#endif

View File

@ -37,6 +37,9 @@
#ifndef errno
extern int errno;
#endif
#ifndef __set_errno
# define __set_errno(Val) errno = (Val)
#endif
#ifdef _LIBC

View File

@ -28,7 +28,9 @@
#include "iolibio.h"
__BEGIN_DECLS
#ifdef __cplusplus
extern "C" {
#endif
#define _IO_seek_set 0
#define _IO_seek_cur 1
@ -477,7 +479,9 @@ extern int _IO_vscanf __P ((const char *, _IO_va_list));
# define _IO_pos_0 ((_IO_fpos_t) 0)
#endif
__END_DECLS
#ifdef __cplusplus
}
#endif
#ifdef _IO_MTSAFE_IO
/* check following! */

View File

@ -168,6 +168,26 @@ strlen (string)
@end smallexample
@end deftypefun
@comment string.h
@comment GNU
@deftypefun size_t strnlen (const char *@var{s}, size_t @var{maxlen})
The @code{strnlen} function returns the length of the null-terminated
string @var{s} is this length is smaller than @var{maxlen}. Otherwise
it returns @var{maxlen}. Therefore this function is equivalent to
@code{(strlen (@var{s}) < n ? strlen (@var{s}) : @var{maxlen})} but it
is more efficent.
@smallexample
char string[32] = "hello, world";
strnlen (string, 32)
@result{} 12
strnlen (string, 5)
@result{} 5
@end smallexample
This function is a GNU extension.
@end deftypefun
@node Copying and Concatenation
@section Copying and Concatenation
@ -223,6 +243,33 @@ memcpy (new, old, arraysize * sizeof (struct foo));
@end smallexample
@end deftypefun
@comment string.h
@comment GNU
@deftypefun {void *} mempcpy (void *@var{to}, const void *@var{from}, size_t @var{size})
The @code{mempcpy} function is nearly identical to the @code{memcpy}
function. It copies @var{size} byts from the object beginning at
@code{from} into the object pointed to by @var{to}. But instead of
returning the value of @code{to} it returns a pointer to the byte
following the last written byte in the object beginning at @var{to}.
I.e., the value is @code{((void *) ((char *) @var{to} + @var{size}))}.
This function is useful in situations where a number of objects shall be
copied to consecutive memory positions.
@smallexample
void *
combine (void *o1, size_t s1, void *o2, size_t s2)
@{
void *result = malloc (s1 + s2);
if (result != NULL)
mempcpy (mempcpy (result, o1, s1), o2, s2);
return result;
@}
@end smallexample
This function is a GNU extension.
@end deftypefun
@comment string.h
@comment ISO
@deftypefun {void *} memmove (void *@var{to}, const void *@var{from}, size_t @var{size})
@ -565,8 +612,11 @@ is an initial substring of @var{s2}, then @var{s1} is considered to be
@comment string.h
@comment BSD
@deftypefun int strcasecmp (const char *@var{s1}, const char *@var{s2})
This function is like @code{strcmp}, except that differences in case
are ignored.
This function is like @code{strcmp}, except that differences in case are
ignored. How uppercase and lowercase character are related is
determined by the currently selected locale. In the standard @code{"C"}
locale the characters @"A and @"a do not match but in a locale which
regards this characters as parts of the alphabeth they do match.
@code{strcasecmp} is derived from BSD.
@end deftypefun
@ -575,7 +625,8 @@ are ignored.
@comment BSD
@deftypefun int strncasecmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n})
This function is like @code{strncmp}, except that differences in case
are ignored.
are ignored. Like for @code{strcasecmp} it is locale dependent how
uppercase and lowercase character are related.
@code{strncasecmp} is a GNU extension.
@end deftypefun

View File

@ -22,7 +22,8 @@
subdir := string
headers := string.h strings.h memory.h endian.h bits/endian.h \
argz.h envz.h byteswap.h bits/byteswap.h bits/string.h
argz.h envz.h byteswap.h bits/byteswap.h bits/string.h \
bits/string2.h
routines := strcat strchr strcmp strcoll strcpy strcspn \
strverscmp strdup strndup \
@ -49,8 +50,10 @@ include ../Rules
tester-ENV = LANGUAGE=C
inl-tester-ENV = LANGUAGE=C
noinl-tester-ENV = LANGUAGE=C
CFLAGS-tester.c = -fno-builtin
CFLAGS-inl-tester.c = -fno-builtin
CFLAGS-noinl-tester.c = -fno-builtin
CFLAGS-tst-strlen.c = -fno-builtin
CFLAGS-stratcliff.c = -fno-builtin

View File

@ -17,7 +17,7 @@
Boston, MA 02111-1307, USA. */
#ifndef _SYS_SELECT_H
#error "Never use <bits/select.h> directly; include <sys/select.h> instead."
# error "Never use <bits/select.h> directly; include <sys/select.h> instead."
#endif
@ -26,7 +26,7 @@
#define __FD_ZERO(set) \
do { \
unsigned int __i; \
__fd_mask *__arr = (set); \
__fd_set *__arr = (set); \
for (__i = 0; __i < sizeof (__fd_set) / sizeof (__fd_mask); ++__i) \
__arr->fds_bits[__i] = '\0'; \
} while (0)

View File

@ -17,7 +17,7 @@
Boston, MA 02111-1307, USA. */
#ifndef _SYS_SELECT_H
#error "Never use <bits/select.h> directly; include <sys/select.h> instead."
# error "Never use <bits/select.h> directly; include <sys/select.h> instead."
#endif
@ -58,7 +58,7 @@
# define __FD_ZERO(set) \
do { \
unsigned int __i; \
__fd_mask *__arr = (set); \
__fd_set *__arr = (set); \
for (__i = 0; __i < sizeof (__fd_set) / sizeof (__fd_mask); ++__i) \
__arr->fds_bits[__i] = 0; \
} while (0)

View File

@ -1,4 +1,4 @@
/* Low-level functions for atomitc operations. Stub version.
/* Low-level functions for atomic operations. Stub version.
Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.

View File

@ -21,12 +21,12 @@
#include <sys/ptrace.h>
#include <stdarg.h>
extern int __syscall_ptrace (int, pid_t, void *, void *);
extern long int __syscall_ptrace (int, pid_t, void *, void *);
int
long int
ptrace (enum __ptrace_request request, ...)
{
int res, ret;
long int res, ret;
va_list ap;
pid_t pid;
void *addr, *data;

View File

@ -0,0 +1,42 @@
/* 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. */
/*
* Never include this file directly; use <sys/statfs.h> instead.
*/
#ifndef _BITS_STATFS_H
#define _BITS_STATFS_H
#include <bits/types.h> /* for __fsid_t */
struct statfs
{
long int f_type;
long int f_bsize;
long int f_blocks;
long int f_bfree;
long int f_bavail;
long int f_files;
long int f_ffree;
__fsid_t f_fsid;
long int f_namelen;
long int f_spare[6];
};
#endif /* bits/statfs.h */

View File

@ -44,5 +44,5 @@ ENTRY(longjmp)
END(longjmp)
strong_alias(longjmp, __longjmp)
eak_alias(longjmp, _longjmp)
weak_alias(longjmp, _longjmp)
weak_alias(longjmp, siglongjmp)

View File

@ -21,6 +21,3 @@ sendto - sendto 6 __sendto sendto
setsockopt - setsockopt 5 __setsockopt setsockopt
shutdown - shutdown 2 __shutdown shutdown
socketpair - socketpair 4 __socketpair socketpair
# Another broken Linux/i386 idea layed to rest
ptrace - ptrace 4 __ptrace ptrace

View File

@ -93,7 +93,7 @@ enum __ptrace_request
appear (those that are used for the particular request) as:
pid_t PID, void *ADDR, int DATA, void *ADDR2
after REQUEST. */
extern int ptrace __P ((enum __ptrace_request __request, ...));
extern long int ptrace __P ((enum __ptrace_request __request, ...));
__END_DECLS