summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog49
-rw-r--r--bits/select.h4
-rw-r--r--hesiod/hesiod.c35
-rw-r--r--libio/fileops.c3
-rw-r--r--libio/libioP.h8
-rw-r--r--manual/string.texi57
-rw-r--r--string/Makefile5
-rw-r--r--sysdeps/generic/bits/select.h4
-rw-r--r--sysdeps/i386/bits/select.h4
-rw-r--r--sysdeps/stub/atomicity.h2
-rw-r--r--sysdeps/unix/sysv/linux/ptrace.c6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h42
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list3
-rw-r--r--sysdeps/unix/sysv/linux/sys/ptrace.h2
15 files changed, 190 insertions, 36 deletions
diff --git a/ChangeLog b/ChangeLog
index 26deea6b3d..4dca6d8b91 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/bits/select.h b/bits/select.h
index 8487e21bb3..0da0acbee8 100644
--- a/bits/select.h
+++ b/bits/select.h
@@ -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)
diff --git a/hesiod/hesiod.c b/hesiod/hesiod.c
index 8e95dfb393..076b6e7dbc 100644
--- a/hesiod/hesiod.c
+++ b/hesiod/hesiod.c
@@ -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
diff --git a/libio/fileops.c b/libio/fileops.c
index 001794d05a..22feb74fdd 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -37,6 +37,9 @@
#ifndef errno
extern int errno;
#endif
+#ifndef __set_errno
+# define __set_errno(Val) errno = (Val)
+#endif
#ifdef _LIBC
diff --git a/libio/libioP.h b/libio/libioP.h
index 1880e0bbde..66acb93bf4 100644
--- a/libio/libioP.h
+++ b/libio/libioP.h
@@ -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! */
diff --git a/manual/string.texi b/manual/string.texi
index 48aaaf0965..d6c09b8df9 100644
--- a/manual/string.texi
+++ b/manual/string.texi
@@ -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
@@ -224,6 +244,33 @@ memcpy (new, old, arraysize * sizeof (struct foo));
@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})
@code{memmove} copies the @var{size} bytes at @var{from} into the
@@ -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
diff --git a/string/Makefile b/string/Makefile
index dbc41be0be..b0200e5d4f 100644
--- a/string/Makefile
+++ b/string/Makefile
@@ -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
diff --git a/sysdeps/generic/bits/select.h b/sysdeps/generic/bits/select.h
index 8487e21bb3..0da0acbee8 100644
--- a/sysdeps/generic/bits/select.h
+++ b/sysdeps/generic/bits/select.h
@@ -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)
diff --git a/sysdeps/i386/bits/select.h b/sysdeps/i386/bits/select.h
index 34d2b0b27a..f2107e9ab7 100644
--- a/sysdeps/i386/bits/select.h
+++ b/sysdeps/i386/bits/select.h
@@ -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)
diff --git a/sysdeps/stub/atomicity.h b/sysdeps/stub/atomicity.h
index e9edc83a8d..887ce73384 100644
--- a/sysdeps/stub/atomicity.h
+++ b/sysdeps/stub/atomicity.h
@@ -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.
diff --git a/sysdeps/unix/sysv/linux/ptrace.c b/sysdeps/unix/sysv/linux/ptrace.c
index b50234d2a1..1c60931926 100644
--- a/sysdeps/unix/sysv/linux/ptrace.c
+++ b/sysdeps/unix/sysv/linux/ptrace.c
@@ -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;
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h
new file mode 100644
index 0000000000..9027eca2ac
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h
@@ -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 */
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S
index bcc134e09c..d63762cb15 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S
@@ -44,5 +44,5 @@ ENTRY(longjmp)
END(longjmp)
strong_alias(longjmp, __longjmp)
-eak_alias(longjmp, _longjmp)
+weak_alias(longjmp, _longjmp)
weak_alias(longjmp, siglongjmp)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
index 66ba470994..e5425e9a29 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
@@ -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
diff --git a/sysdeps/unix/sysv/linux/sys/ptrace.h b/sysdeps/unix/sysv/linux/sys/ptrace.h
index eda8b8c00f..7cde2f0a86 100644
--- a/sysdeps/unix/sysv/linux/sys/ptrace.h
+++ b/sysdeps/unix/sysv/linux/sys/ptrace.h
@@ -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