Update.
1998-04-14 16:34 Ulrich Drepper <drepper@cygnus.com> * test-skeleton.c: Provide hook for initializing code before the fork. * rt/tst-aio.c: Use PREPARE hook to make suer temp files are always removed. * libio/fcloseall.c (__fcloseall): Return return value of _IO_cleanup. * libio/genops.c (_IO_cleanup): Return return value of _IO_flush_all. * libio/libioP.h: Adopt _IO_cleanup prototype. * stdlib/Makefile (tests): Add test-canon2. * stdlib/test-canon2.c: New file. * stdlib/canonicalize.c (canonicalize): Allow RESOLVED parameter to be NULL. Use __lxstat, not __lstat. Correctly recognize long symlink sequences. (__realpath): Make real function which checks RESOLVED parameter for not being NULL. 1998-04-14 Ulrich Drepper <drepper@cygnus.com> * catgets/open_catalog.c (__open_catalog): Fix problems with reading non-files. Always close file. Reported by Cristian Gafton <gafton@redhat.com>. * elf/dl-minimal.c (__strtol_internal): Prevent overflow warnings. 1998-04-14 13:28 Ulrich Drepper <drepper@cygnus.com> * libc.map: Add various low-level I/O functions. 1998-04-14 10:35 Ulrich Drepper <drepper@cygnus.com> * string/Makefile (routines): Remove strerror_r. * string/strerror_r.c: Removed. * string/strerror.c: Call __strerror_r for doing the real work. * sysdeps/generic/_strerror.c: Rename function to __strerror_r and add weak alias strerror_r. * sysdeps/mach/_strerror.c: Likewise. * assert/assert-perr.c: Use __strerror_r instead of _strerror_internal. * elf/dl-error.c (_dl_signal_error): Likewise. * elf/dl-profile.c (_dl_start_profile): Likewise. * gmon/gmon.c (write_gmon): Likewise. * stdio-common/perror.c: Likewise. * stdio-common/vfprintf.c: Likewise. 1998-04-10 Mark Kettenis <kettenis@phys.uva.nl> * sysdeps/unix/sysv/linux/Makefile [$(subdir)=inet] (sysdep_headers): Add netatalk/at.h. 1998-04-12 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * manual/socket.texi, manual/creature.texi, manual/time.texi: Formatting fixes. 1998-04-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * posix/regex.c: Rename __re_syntax_options back to re_syntax_options, aliases do not work with global variables due to copy relocations. (regex_compile): Use syntax parameter instead of re_syntax_options. 1998-04-14 Andreas Jaeger <aj@arthur.rhein-neckar.de> * configure.in: Document that enable-force-install is default.
This commit is contained in:
parent
bbdc8261f8
commit
310b3460e0
@ -17,9 +17,9 @@ distinfo
|
|||||||
test-include
|
test-include
|
||||||
analysis
|
analysis
|
||||||
docs
|
docs
|
||||||
|
releases
|
||||||
|
|
||||||
crypt
|
crypt
|
||||||
linuxthreads
|
linuxthreads
|
||||||
secure_rpc
|
|
||||||
|
|
||||||
aio
|
aio
|
||||||
|
67
ChangeLog
67
ChangeLog
@ -1,3 +1,70 @@
|
|||||||
|
1998-04-14 16:34 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* test-skeleton.c: Provide hook for initializing code before the fork.
|
||||||
|
* rt/tst-aio.c: Use PREPARE hook to make suer temp files are always
|
||||||
|
removed.
|
||||||
|
|
||||||
|
* libio/fcloseall.c (__fcloseall): Return return value of _IO_cleanup.
|
||||||
|
* libio/genops.c (_IO_cleanup): Return return value of _IO_flush_all.
|
||||||
|
* libio/libioP.h: Adopt _IO_cleanup prototype.
|
||||||
|
|
||||||
|
* stdlib/Makefile (tests): Add test-canon2.
|
||||||
|
* stdlib/test-canon2.c: New file.
|
||||||
|
* stdlib/canonicalize.c (canonicalize): Allow RESOLVED parameter to
|
||||||
|
be NULL. Use __lxstat, not __lstat. Correctly recognize long
|
||||||
|
symlink sequences.
|
||||||
|
(__realpath): Make real function which checks RESOLVED parameter for
|
||||||
|
not being NULL.
|
||||||
|
|
||||||
|
1998-04-14 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* catgets/open_catalog.c (__open_catalog): Fix problems with
|
||||||
|
reading non-files. Always close file.
|
||||||
|
Reported by Cristian Gafton <gafton@redhat.com>.
|
||||||
|
|
||||||
|
* elf/dl-minimal.c (__strtol_internal): Prevent overflow warnings.
|
||||||
|
|
||||||
|
1998-04-14 13:28 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* libc.map: Add various low-level I/O functions.
|
||||||
|
|
||||||
|
1998-04-14 10:35 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* string/Makefile (routines): Remove strerror_r.
|
||||||
|
* string/strerror_r.c: Removed.
|
||||||
|
* string/strerror.c: Call __strerror_r for doing the real work.
|
||||||
|
* sysdeps/generic/_strerror.c: Rename function to __strerror_r and
|
||||||
|
add weak alias strerror_r.
|
||||||
|
* sysdeps/mach/_strerror.c: Likewise.
|
||||||
|
* assert/assert-perr.c: Use __strerror_r instead of _strerror_internal.
|
||||||
|
* elf/dl-error.c (_dl_signal_error): Likewise.
|
||||||
|
* elf/dl-profile.c (_dl_start_profile): Likewise.
|
||||||
|
* gmon/gmon.c (write_gmon): Likewise.
|
||||||
|
* stdio-common/perror.c: Likewise.
|
||||||
|
* stdio-common/vfprintf.c: Likewise.
|
||||||
|
|
||||||
|
1998-04-10 Mark Kettenis <kettenis@phys.uva.nl>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=inet]
|
||||||
|
(sysdep_headers): Add netatalk/at.h.
|
||||||
|
|
||||||
|
1998-04-12 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* manual/socket.texi, manual/creature.texi, manual/time.texi:
|
||||||
|
Formatting fixes.
|
||||||
|
|
||||||
|
1998-04-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* posix/regex.c: Rename __re_syntax_options back to
|
||||||
|
re_syntax_options, aliases do not work with global variables due
|
||||||
|
to copy relocations.
|
||||||
|
(regex_compile): Use syntax parameter instead of
|
||||||
|
re_syntax_options.
|
||||||
|
|
||||||
|
1998-04-14 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||||
|
|
||||||
|
* configure.in: Document that enable-force-install is default.
|
||||||
|
|
||||||
1998-04-13 Ulrich Drepper <drepper@cygnus.com>
|
1998-04-13 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* sysdeps/posix/mktemp.c: Increment `value' in a way which touches
|
* sysdeps/posix/mktemp.c: Increment `value' in a way which touches
|
||||||
|
2
FAQ.in
2
FAQ.in
@ -945,7 +945,7 @@ Also, make sure you have a suitably recent kernel. As of the 970401
|
|||||||
snapshot, according to Philip Blundell <Philip.Blundell@pobox.com>, the
|
snapshot, according to Philip Blundell <Philip.Blundell@pobox.com>, the
|
||||||
required kernel version is at least 2.1.30.
|
required kernel version is at least 2.1.30.
|
||||||
|
|
||||||
?? When I set the timezone I'm by setting the TZ environment variable
|
?? When I set the timezone by setting the TZ environment variable
|
||||||
to EST5EDT things go wrong since glibc computes the wrong time
|
to EST5EDT things go wrong since glibc computes the wrong time
|
||||||
from this information.
|
from this information.
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -22,10 +22,6 @@
|
|||||||
#include <sysdep.h>
|
#include <sysdep.h>
|
||||||
|
|
||||||
|
|
||||||
/* This is the internal function we use to generate the error string. */
|
|
||||||
extern char *_strerror_internal __P ((int, char *, size_t));
|
|
||||||
|
|
||||||
|
|
||||||
extern const char *__assert_program_name; /* In assert.c. */
|
extern const char *__assert_program_name; /* In assert.c. */
|
||||||
|
|
||||||
/* This function, when passed an error number, a filename, and a line
|
/* This function, when passed an error number, a filename, and a line
|
||||||
@ -53,7 +49,7 @@ __assert_perror_fail (int errnum,
|
|||||||
__assert_program_name ? ": " : "",
|
__assert_program_name ? ": " : "",
|
||||||
file, line,
|
file, line,
|
||||||
function ? function : "", function ? ": " : "",
|
function ? function : "", function ? ": " : "",
|
||||||
_strerror_internal (errnum, errbuf, sizeof errbuf));
|
__strerror_r (errnum, errbuf, sizeof errbuf));
|
||||||
(void) fflush (stderr);
|
(void) fflush (stderr);
|
||||||
|
|
||||||
abort ();
|
abort ();
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
|
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
|
||||||
|
|
||||||
@ -35,7 +35,7 @@
|
|||||||
void
|
void
|
||||||
__open_catalog (__nl_catd catalog)
|
__open_catalog (__nl_catd catalog)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd = -1;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
int swapping;
|
int swapping;
|
||||||
|
|
||||||
@ -169,7 +169,8 @@ __open_catalog (__nl_catd catalog)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fd < 0 || __fstat (fd, &st) < 0)
|
/* Avoid dealing with directories and block devices */
|
||||||
|
if (fd < 0 || __fstat (fd, &st) < 0 || !S_ISREG (st.st_mode))
|
||||||
{
|
{
|
||||||
catalog->status = nonexisting;
|
catalog->status = nonexisting;
|
||||||
goto unlock_return;
|
goto unlock_return;
|
||||||
@ -225,6 +226,7 @@ __open_catalog (__nl_catd catalog)
|
|||||||
|
|
||||||
/* We don't need the file anymore. */
|
/* We don't need the file anymore. */
|
||||||
__close (fd);
|
__close (fd);
|
||||||
|
fd = -1;
|
||||||
|
|
||||||
/* Determine whether the file is a catalog file and if yes whether
|
/* Determine whether the file is a catalog file and if yes whether
|
||||||
it is written using the correct byte order. Else we have to swap
|
it is written using the correct byte order. Else we have to swap
|
||||||
@ -271,5 +273,7 @@ __open_catalog (__nl_catd catalog)
|
|||||||
|
|
||||||
/* Release the lock again. */
|
/* Release the lock again. */
|
||||||
unlock_return:
|
unlock_return:
|
||||||
|
if (fd != -1)
|
||||||
|
__close (fd);
|
||||||
__libc_lock_unlock (catalog->lock);
|
__libc_lock_unlock (catalog->lock);
|
||||||
}
|
}
|
||||||
|
2
configure
vendored
2
configure
vendored
@ -63,7 +63,7 @@ ac_help="$ac_help
|
|||||||
ac_help="$ac_help
|
ac_help="$ac_help
|
||||||
--enable-static-nss build static NSS modules [default=no]"
|
--enable-static-nss build static NSS modules [default=no]"
|
||||||
ac_help="$ac_help
|
ac_help="$ac_help
|
||||||
--enable-force-install force installation of files from this package,
|
--disable-force-install don't force installation of files from this package,
|
||||||
even if they are older than the installed files"
|
even if they are older than the installed files"
|
||||||
|
|
||||||
# Initialize some variables set by options.
|
# Initialize some variables set by options.
|
||||||
|
@ -128,7 +128,7 @@ if test x"$static_nss" = xyes; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
AC_ARG_ENABLE(force-install,
|
AC_ARG_ENABLE(force-install,
|
||||||
[ --enable-force-install force installation of files from this package,
|
[ --disable-force-install don't force installation of files from this package,
|
||||||
even if they are older than the installed files],
|
even if they are older than the installed files],
|
||||||
force_install=$enableval, force_install=yes)
|
force_install=$enableval, force_install=yes)
|
||||||
AC_SUBST(force_install)
|
AC_SUBST(force_install)
|
||||||
|
@ -23,9 +23,6 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <elf/ldsodefs.h>
|
#include <elf/ldsodefs.h>
|
||||||
|
|
||||||
/* This is the internal function we use to generate the error string. */
|
|
||||||
extern char *_strerror_internal __P ((int, char *, size_t));
|
|
||||||
|
|
||||||
/* This structure communicates state between _dl_catch_error and
|
/* This structure communicates state between _dl_catch_error and
|
||||||
_dl_signal_error. */
|
_dl_signal_error. */
|
||||||
struct catch
|
struct catch
|
||||||
@ -89,7 +86,7 @@ _dl_signal_error (int errcode,
|
|||||||
objname ?: "", objname && *objname ? ": " : "",
|
objname ?: "", objname && *objname ? ": " : "",
|
||||||
errstring, errcode ? ": " : "",
|
errstring, errcode ? ": " : "",
|
||||||
(errcode
|
(errcode
|
||||||
? _strerror_internal (errcode, buffer, sizeof buffer)
|
? __strerror_r (errcode, buffer, sizeof buffer)
|
||||||
: ""), "\n", NULL);
|
: ""), "\n", NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@ longjmp (jmp_buf env, int val)
|
|||||||
in the whole error list. */
|
in the whole error list. */
|
||||||
|
|
||||||
char * weak_function
|
char * weak_function
|
||||||
_strerror_internal (int errnum, char *buf, size_t buflen)
|
__strerror_r (int errnum, char *buf, size_t buflen)
|
||||||
{
|
{
|
||||||
char *msg;
|
char *msg;
|
||||||
|
|
||||||
@ -205,11 +205,10 @@ __assert_perror_fail (int errnum,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This function is only used in eval.c. */
|
/* This function is only used in eval.c. */
|
||||||
long int
|
long int weak_function
|
||||||
weak_function
|
|
||||||
__strtol_internal (const char *nptr, char **endptr, int base, int group)
|
__strtol_internal (const char *nptr, char **endptr, int base, int group)
|
||||||
{
|
{
|
||||||
long int result = 0;
|
unsigned long int result = 0;
|
||||||
long int sign = 1;
|
long int sign = 1;
|
||||||
|
|
||||||
while (*nptr == ' ' || *nptr == '\t')
|
while (*nptr == ' ' || *nptr == '\t')
|
||||||
@ -246,10 +245,14 @@ __strtol_internal (const char *nptr, char **endptr, int base, int group)
|
|||||||
|
|
||||||
while (*nptr >= '0' && *nptr <= '9')
|
while (*nptr >= '0' && *nptr <= '9')
|
||||||
{
|
{
|
||||||
long int digval = *nptr - '0';
|
unsigned long int digval = *nptr - '0';
|
||||||
if (result > LONG_MAX / 10
|
if (result > LONG_MAX / 10
|
||||||
|| (result == (sign ? LONG_MAX : LONG_MAX + 1) / 10
|
|| (result == (sign
|
||||||
&& digval > (sign ? LONG_MAX : LONG_MAX + 1) % 10))
|
? (unsigned long int) LONG_MAX
|
||||||
|
: (unsigned long int) LONG_MAX + 1) / 10
|
||||||
|
&& digval > (sign
|
||||||
|
? (unsigned long int) LONG_MAX
|
||||||
|
: (unsigned long int) LONG_MAX + 1) % 10))
|
||||||
{
|
{
|
||||||
errno = ERANGE;
|
errno = ERANGE;
|
||||||
return LONG_MAX * sign;
|
return LONG_MAX * sign;
|
||||||
@ -258,21 +261,19 @@ __strtol_internal (const char *nptr, char **endptr, int base, int group)
|
|||||||
result += digval;
|
result += digval;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result * sign;
|
return (long int) result * sign;
|
||||||
}
|
}
|
||||||
|
|
||||||
long int
|
long int weak_function
|
||||||
weak_function
|
|
||||||
strtol (const char *nptr, char **endptr, int base)
|
strtol (const char *nptr, char **endptr, int base)
|
||||||
{
|
{
|
||||||
return __strtol_internal (nptr, endptr, base, 0);
|
return __strtol_internal (nptr, endptr, base, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long int
|
unsigned long int weak_function
|
||||||
weak_function
|
|
||||||
__strtoul_internal (const char *nptr, char **endptr, int base, int group)
|
__strtoul_internal (const char *nptr, char **endptr, int base, int group)
|
||||||
{
|
{
|
||||||
long int result = 0;
|
unsigned long int result = 0;
|
||||||
long int sign = 1;
|
long int sign = 1;
|
||||||
|
|
||||||
while (*nptr == ' ' || *nptr == '\t')
|
while (*nptr == ' ' || *nptr == '\t')
|
||||||
@ -309,7 +310,7 @@ __strtoul_internal (const char *nptr, char **endptr, int base, int group)
|
|||||||
|
|
||||||
while (*nptr >= '0' && *nptr <= '9')
|
while (*nptr >= '0' && *nptr <= '9')
|
||||||
{
|
{
|
||||||
long int digval = *nptr - '0';
|
unsigned long int digval = *nptr - '0';
|
||||||
if (result > LONG_MAX / 10
|
if (result > LONG_MAX / 10
|
||||||
|| (result == ULONG_MAX / 10 && digval > ULONG_MAX % 10))
|
|| (result == ULONG_MAX / 10 && digval > ULONG_MAX % 10))
|
||||||
{
|
{
|
||||||
@ -323,8 +324,7 @@ __strtoul_internal (const char *nptr, char **endptr, int base, int group)
|
|||||||
return result * sign;
|
return result * sign;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long int
|
unsigned long int weak_function
|
||||||
weak_function
|
|
||||||
strtoul (const char *nptr, char **endptr, int base)
|
strtoul (const char *nptr, char **endptr, int base)
|
||||||
{
|
{
|
||||||
return (unsigned long int) __strtoul_internal (nptr, endptr, base, 0);
|
return (unsigned long int) __strtoul_internal (nptr, endptr, base, 0);
|
||||||
|
@ -124,8 +124,6 @@ extern ssize_t __libc_write __P ((int __fd, __const __ptr_t __buf,
|
|||||||
data structures at the program start. To do this we'll simply visit all
|
data structures at the program start. To do this we'll simply visit all
|
||||||
entries in the call graph table and add it to the appropriate list. */
|
entries in the call graph table and add it to the appropriate list. */
|
||||||
|
|
||||||
extern char *_strerror_internal __P ((int, char *buf, size_t));
|
|
||||||
|
|
||||||
extern int __profile_frequency __P ((void));
|
extern int __profile_frequency __P ((void));
|
||||||
|
|
||||||
/* We define a special type to address the elements of the arc table.
|
/* We define a special type to address the elements of the arc table.
|
||||||
@ -271,7 +269,7 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
|
|||||||
/* We cannot write the profiling data so don't do anything. */
|
/* We cannot write the profiling data so don't do anything. */
|
||||||
char buf[400];
|
char buf[400];
|
||||||
_dl_sysdep_message (filename, ": cannot open file: ",
|
_dl_sysdep_message (filename, ": cannot open file: ",
|
||||||
_strerror_internal (errno, buf, sizeof buf),
|
__strerror_r (errno, buf, sizeof buf),
|
||||||
"\n", NULL);
|
"\n", NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -283,7 +281,7 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
|
|||||||
int errnum = errno;
|
int errnum = errno;
|
||||||
__close (fd);
|
__close (fd);
|
||||||
_dl_sysdep_message (filename, ": cannot stat file: ",
|
_dl_sysdep_message (filename, ": cannot stat file: ",
|
||||||
_strerror_internal (errnum, buf, sizeof buf),
|
__strerror_r (errnum, buf, sizeof buf),
|
||||||
"\n", NULL);
|
"\n", NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -305,7 +303,7 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
|
|||||||
errnum = errno;
|
errnum = errno;
|
||||||
__close (fd);
|
__close (fd);
|
||||||
_dl_sysdep_message (filename, ": cannot create file: ",
|
_dl_sysdep_message (filename, ": cannot create file: ",
|
||||||
_strerror_internal (errnum, buf, sizeof buf),
|
__strerror_r (errnum, buf, sizeof buf),
|
||||||
"\n", NULL);
|
"\n", NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -337,7 +335,7 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
|
|||||||
int errnum = errno;
|
int errnum = errno;
|
||||||
__close (fd);
|
__close (fd);
|
||||||
_dl_sysdep_message (filename, ": cannot map file: ",
|
_dl_sysdep_message (filename, ": cannot map file: ",
|
||||||
_strerror_internal (errnum, buf, sizeof buf),
|
__strerror_r (errnum, buf, sizeof buf),
|
||||||
"\n", NULL);
|
"\n", NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -46,8 +46,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
extern char *_strerror_internal __P ((int, char *buf, size_t));
|
|
||||||
|
|
||||||
extern int __profile_frequency __P ((void));
|
extern int __profile_frequency __P ((void));
|
||||||
|
|
||||||
struct __bb *__bb_head; /* Head of basic-block list or NULL. */
|
struct __bb *__bb_head; /* Head of basic-block list or NULL. */
|
||||||
@ -330,7 +328,7 @@ write_gmon (void)
|
|||||||
char buf[300];
|
char buf[300];
|
||||||
int errnum = errno;
|
int errnum = errno;
|
||||||
fprintf (stderr, "_mcleanup: gmon.out: %s\n",
|
fprintf (stderr, "_mcleanup: gmon.out: %s\n",
|
||||||
_strerror_internal (errnum, buf, sizeof buf));
|
__strerror_r (errnum, buf, sizeof buf));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
13
libc.map
13
libc.map
@ -146,7 +146,8 @@ GLIBC_2.0 {
|
|||||||
|
|
||||||
# b*
|
# b*
|
||||||
basename; bcmp; bcopy; bdflush; bind; bindresvport;
|
basename; bcmp; bcopy; bdflush; bind; bindresvport;
|
||||||
bindtextdomain; brk; bsd_signal; bsearch; btowc; bzero;
|
bindtextdomain; brk; bsd_signal; bsearch; btowc; bus_base; bus_base_sparse;
|
||||||
|
bzero;
|
||||||
|
|
||||||
# c*
|
# c*
|
||||||
cachectl; cacheflush; calloc; callrpc; canonicalize_file_name;
|
cachectl; cacheflush; calloc; callrpc; canonicalize_file_name;
|
||||||
@ -225,14 +226,14 @@ GLIBC_2.0 {
|
|||||||
globfree; gmtime; gmtime_r; group_member; gsignal; gtty;
|
globfree; gmtime; gmtime_r; group_member; gsignal; gtty;
|
||||||
|
|
||||||
# h*
|
# h*
|
||||||
hasmntopt; hcreate; hcreate_r; hdestroy; hdestroy_r; herror;
|
hae_shift; hasmntopt; hcreate; hcreate_r; hdestroy; hdestroy_r; herror;
|
||||||
hsearch; hsearch_r; hstrerror; htonl; htons;
|
hsearch; hsearch_r; hstrerror; htonl; htons;
|
||||||
|
|
||||||
# i*
|
# i*
|
||||||
index; inet_addr; inet_aton; inet_lnaof; inet_makeaddr;
|
inb; index; inet_addr; inet_aton; inet_lnaof; inet_makeaddr;
|
||||||
inet_netof; inet_network; inet_nsap_addr; inet_nsap_ntoa; inet_ntoa;
|
inet_netof; inet_network; inet_nsap_addr; inet_nsap_ntoa; inet_ntoa;
|
||||||
inet_ntop; inet_pton; init_module; initgroups; initstate; initstate_r;
|
inet_ntop; inet_pton; init_module; initgroups; initstate; initstate_r;
|
||||||
innetgr; insque; ioctl; ioperm; iopl; iruserok;
|
inl; innetgr; insque; inw; ioctl; ioperm; iopl; iruserok;
|
||||||
|
|
||||||
isalnum; isalpha; isascii; isatty; isblank; iscntrl; isdigit;
|
isalnum; isalpha; isascii; isatty; isblank; iscntrl; isdigit;
|
||||||
isfdtype; isgraph; isinf; isinff; isinfl; islower; isnan; isnanf;
|
isfdtype; isgraph; isinf; isinff; isinfl; islower; isnan; isnanf;
|
||||||
@ -275,7 +276,7 @@ GLIBC_2.0 {
|
|||||||
|
|
||||||
# o*
|
# o*
|
||||||
obstack_free; obstack_printf; obstack_vprintf; on_exit; open;
|
obstack_free; obstack_printf; obstack_vprintf; on_exit; open;
|
||||||
open_memstream; opendir; openlog;
|
open_memstream; opendir; openlog; outb; outl; outw;
|
||||||
|
|
||||||
# p*
|
# p*
|
||||||
parse_printf_format; pathconf; pause; pciconfig_read;
|
parse_printf_format; pathconf; pause; pciconfig_read;
|
||||||
@ -328,7 +329,7 @@ GLIBC_2.0 {
|
|||||||
semctl; semget; semop; send; sendmsg; sendto; setaliasent; setbuf;
|
semctl; semget; semop; send; sendmsg; sendto; setaliasent; setbuf;
|
||||||
setbuffer; setcontext;
|
setbuffer; setcontext;
|
||||||
setdomainname; setegid; setenv; seteuid; setfsent;
|
setdomainname; setegid; setenv; seteuid; setfsent;
|
||||||
setfsgid; setfsuid; setgid; setgrent; setgroups; sethostent;
|
setfsgid; setfsuid; setgid; setgrent; setgroups; sethae; sethostent;
|
||||||
sethostid; sethostname; setitimer; setjmp; setlinebuf; setlocale;
|
sethostid; sethostname; setitimer; setjmp; setlinebuf; setlocale;
|
||||||
setlogin; setlogmask; setmntent; setnetent; setnetgrent; setpgid;
|
setlogin; setlogmask; setmntent; setnetent; setnetgrent; setpgid;
|
||||||
setpgrp; setpriority; setprotoent; setpwent; setregid; setresgid;
|
setpgrp; setpriority; setprotoent; setpwent; setregid; setresgid;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU IO Library.
|
This file is part of the GNU IO Library.
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
This library is free software; you can redistribute it and/or
|
||||||
@ -30,8 +30,7 @@ int
|
|||||||
__fcloseall ()
|
__fcloseall ()
|
||||||
{
|
{
|
||||||
/* Close all streams. */
|
/* Close all streams. */
|
||||||
_IO_cleanup ();
|
return _IO_cleanup ();
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef weak_alias
|
#ifdef weak_alias
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1993, 1995, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU IO Library.
|
This file is part of the GNU IO Library.
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
This library is free software; you can redistribute it and/or
|
||||||
@ -714,10 +714,10 @@ _IO_unbuffer_all ()
|
|||||||
_IO_SETBUF (fp, NULL, 0);
|
_IO_SETBUF (fp, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
_IO_cleanup ()
|
_IO_cleanup ()
|
||||||
{
|
{
|
||||||
_IO_flush_all ();
|
int result = _IO_flush_all ();
|
||||||
|
|
||||||
/* We currently don't have a reliable mechanism for making sure that
|
/* We currently don't have a reliable mechanism for making sure that
|
||||||
C++ static destructors are executed in the correct order.
|
C++ static destructors are executed in the correct order.
|
||||||
@ -727,6 +727,8 @@ _IO_cleanup ()
|
|||||||
The following will make the standard streambufs be unbuffered,
|
The following will make the standard streambufs be unbuffered,
|
||||||
which forces any output from late destructors to be written out. */
|
which forces any output from late destructors to be written out. */
|
||||||
_IO_unbuffer_all ();
|
_IO_unbuffer_all ();
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -341,7 +341,7 @@ extern struct _IO_jump_t _IO_str_jumps;
|
|||||||
extern int _IO_do_write __P ((_IO_FILE *, const char *, _IO_size_t));
|
extern int _IO_do_write __P ((_IO_FILE *, const char *, _IO_size_t));
|
||||||
extern int _IO_old_do_write __P ((_IO_FILE *, const char *, _IO_size_t));
|
extern int _IO_old_do_write __P ((_IO_FILE *, const char *, _IO_size_t));
|
||||||
extern int _IO_flush_all __P ((void));
|
extern int _IO_flush_all __P ((void));
|
||||||
extern void _IO_cleanup __P ((void));
|
extern int _IO_cleanup __P ((void));
|
||||||
extern void _IO_flush_all_linebuffered __P ((void));
|
extern void _IO_flush_all_linebuffered __P ((void));
|
||||||
|
|
||||||
#define _IO_do_flush(_f) \
|
#define _IO_do_flush(_f) \
|
||||||
|
@ -131,7 +131,7 @@ This macro was introduced as part of the Large File Support extension (LFS).
|
|||||||
|
|
||||||
@comment (NONE)
|
@comment (NONE)
|
||||||
@comment X/Open
|
@comment X/Open
|
||||||
@defvar Macro _LARGEFILE64_SOURCE
|
@defvr Macro _LARGEFILE64_SOURCE
|
||||||
If you define this macro an additional set of function gets available
|
If you define this macro an additional set of function gets available
|
||||||
which enables to use on @w{32 bit} systems to use files of sizes beyond
|
which enables to use on @w{32 bit} systems to use files of sizes beyond
|
||||||
the usual limit of 2GB. This interface is not available if the system
|
the usual limit of 2GB. This interface is not available if the system
|
||||||
@ -147,11 +147,11 @@ vs. @code{off64_t} and @code{fseeko} vs. @code{fseeko64}.
|
|||||||
This macro was introduced as part of the Large File Support extension
|
This macro was introduced as part of the Large File Support extension
|
||||||
(LFS). It is a transition interface for the time @w{64 bit} offsets are
|
(LFS). It is a transition interface for the time @w{64 bit} offsets are
|
||||||
not generally used (see @code{_FILE_OFFSET_BITS}.
|
not generally used (see @code{_FILE_OFFSET_BITS}.
|
||||||
@end defvar
|
@end defvr
|
||||||
|
|
||||||
@comment (NONE)
|
@comment (NONE)
|
||||||
@comment X/Open
|
@comment X/Open
|
||||||
@defvar _FILE_OFFSET_BITS
|
@defvr _FILE_OFFSET_BITS
|
||||||
This macro lets decide which file system interface shall be used, one
|
This macro lets decide which file system interface shall be used, one
|
||||||
replacing the other. While @code{_LARGEFILE64_SOURCE} makes the @w{64
|
replacing the other. While @code{_LARGEFILE64_SOURCE} makes the @w{64
|
||||||
bit} interface available as an additional interface
|
bit} interface available as an additional interface
|
||||||
@ -175,7 +175,7 @@ since the @code{*64} functions are identical to the normal functions.
|
|||||||
|
|
||||||
This macro was introduced as part of the Large File Support extension
|
This macro was introduced as part of the Large File Support extension
|
||||||
(LFS).
|
(LFS).
|
||||||
@end defvar
|
@end defvr
|
||||||
|
|
||||||
@comment (none)
|
@comment (none)
|
||||||
@comment GNU
|
@comment GNU
|
||||||
|
@ -497,7 +497,7 @@ interface name, including its terminating zero byte.
|
|||||||
|
|
||||||
@comment net/if.h
|
@comment net/if.h
|
||||||
@comment IPv6 basic API
|
@comment IPv6 basic API
|
||||||
@deftypefun unsigned int if_nametoindex (const char *ifname)
|
@deftypefun {unsigned int} if_nametoindex (const char *ifname)
|
||||||
This function yields the interface index corresponding to a particular
|
This function yields the interface index corresponding to a particular
|
||||||
name. If no interface exists with the name given, it returns 0.
|
name. If no interface exists with the name given, it returns 0.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
@ -530,7 +530,7 @@ This is the null-terminated index name.
|
|||||||
|
|
||||||
@comment net/if.h
|
@comment net/if.h
|
||||||
@comment IPv6 basic API
|
@comment IPv6 basic API
|
||||||
@deftypefun struct if_nameindex *if_nameindex (void)
|
@deftypefun {struct if_nameindex *} if_nameindex (void)
|
||||||
This function returns an array of @code{if_nameindex} structures, one
|
This function returns an array of @code{if_nameindex} structures, one
|
||||||
for every interface that is present. The end of the list is indicated
|
for every interface that is present. The end of the list is indicated
|
||||||
by a structure with an interface of 0 and a null name pointer. If an
|
by a structure with an interface of 0 and a null name pointer. If an
|
||||||
@ -999,7 +999,7 @@ data, which can be accessed (via a union) in a variety of ways.
|
|||||||
|
|
||||||
@comment netinet/in.h
|
@comment netinet/in.h
|
||||||
@comment IPv6 basic API
|
@comment IPv6 basic API
|
||||||
@deftypevr Constant {struct in6_addr} in6addr_loopback.
|
@deftypevr Constant {struct in6_addr} in6addr_loopback
|
||||||
This constant is the IPv6 address @samp{::1}, the loopback address. See
|
This constant is the IPv6 address @samp{::1}, the loopback address. See
|
||||||
above for a description of what this means. The macro
|
above for a description of what this means. The macro
|
||||||
@code{IN6ADDR_LOOPBACK_INIT} is provided to allow you to initialise your
|
@code{IN6ADDR_LOOPBACK_INIT} is provided to allow you to initialise your
|
||||||
|
@ -1775,10 +1775,10 @@ operand must be less than @code{RLIM_NLIMITS}.
|
|||||||
|
|
||||||
@comment sys/resource.h
|
@comment sys/resource.h
|
||||||
@comment BSD
|
@comment BSD
|
||||||
@defvr Constant int RLIM_INFINITY
|
@deftypevr Constant int RLIM_INFINITY
|
||||||
This constant stands for a value of ``infinity'' when supplied as
|
This constant stands for a value of ``infinity'' when supplied as
|
||||||
the limit value in @code{setrlimit}.
|
the limit value in @code{setrlimit}.
|
||||||
@end defvr
|
@end deftypevr
|
||||||
|
|
||||||
@c ??? Someone want to finish these?
|
@c ??? Someone want to finish these?
|
||||||
Two historical functions for setting resource limits, @code{ulimit} and
|
Two historical functions for setting resource limits, @code{ulimit} and
|
||||||
|
@ -966,15 +966,9 @@ printchar (c)
|
|||||||
/* Set by `re_set_syntax' to the current regexp syntax to recognize. Can
|
/* Set by `re_set_syntax' to the current regexp syntax to recognize. Can
|
||||||
also be assigned to arbitrarily: each pattern buffer stores its own
|
also be assigned to arbitrarily: each pattern buffer stores its own
|
||||||
syntax, so it can be changed between regex compilations. */
|
syntax, so it can be changed between regex compilations. */
|
||||||
#ifdef _LIBC
|
|
||||||
reg_syntax_t __re_syntax_options = 0;
|
|
||||||
weak_alias (__re_syntax_options, re_syntax_options)
|
|
||||||
# define re_syntax_options __re_syntax_options
|
|
||||||
#else
|
|
||||||
/* This has no initializer because initialized variables in Emacs
|
/* This has no initializer because initialized variables in Emacs
|
||||||
become read-only after dumping. */
|
become read-only after dumping. */
|
||||||
reg_syntax_t re_syntax_options;
|
reg_syntax_t re_syntax_options;
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Specify the precise syntax of regexps for compilation. This provides
|
/* Specify the precise syntax of regexps for compilation. This provides
|
||||||
@ -2752,7 +2746,7 @@ regex_compile (pattern, size, syntax, bufp)
|
|||||||
|
|
||||||
|
|
||||||
case 'w':
|
case 'w':
|
||||||
if (re_syntax_options & RE_NO_GNU_OPS)
|
if (syntax & RE_NO_GNU_OPS)
|
||||||
goto normal_char;
|
goto normal_char;
|
||||||
laststart = b;
|
laststart = b;
|
||||||
BUF_PUSH (wordchar);
|
BUF_PUSH (wordchar);
|
||||||
@ -2760,7 +2754,7 @@ regex_compile (pattern, size, syntax, bufp)
|
|||||||
|
|
||||||
|
|
||||||
case 'W':
|
case 'W':
|
||||||
if (re_syntax_options & RE_NO_GNU_OPS)
|
if (syntax & RE_NO_GNU_OPS)
|
||||||
goto normal_char;
|
goto normal_char;
|
||||||
laststart = b;
|
laststart = b;
|
||||||
BUF_PUSH (notwordchar);
|
BUF_PUSH (notwordchar);
|
||||||
@ -2768,37 +2762,37 @@ regex_compile (pattern, size, syntax, bufp)
|
|||||||
|
|
||||||
|
|
||||||
case '<':
|
case '<':
|
||||||
if (re_syntax_options & RE_NO_GNU_OPS)
|
if (syntax & RE_NO_GNU_OPS)
|
||||||
goto normal_char;
|
goto normal_char;
|
||||||
BUF_PUSH (wordbeg);
|
BUF_PUSH (wordbeg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '>':
|
case '>':
|
||||||
if (re_syntax_options & RE_NO_GNU_OPS)
|
if (syntax & RE_NO_GNU_OPS)
|
||||||
goto normal_char;
|
goto normal_char;
|
||||||
BUF_PUSH (wordend);
|
BUF_PUSH (wordend);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'b':
|
case 'b':
|
||||||
if (re_syntax_options & RE_NO_GNU_OPS)
|
if (syntax & RE_NO_GNU_OPS)
|
||||||
goto normal_char;
|
goto normal_char;
|
||||||
BUF_PUSH (wordbound);
|
BUF_PUSH (wordbound);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'B':
|
case 'B':
|
||||||
if (re_syntax_options & RE_NO_GNU_OPS)
|
if (syntax & RE_NO_GNU_OPS)
|
||||||
goto normal_char;
|
goto normal_char;
|
||||||
BUF_PUSH (notwordbound);
|
BUF_PUSH (notwordbound);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '`':
|
case '`':
|
||||||
if (re_syntax_options & RE_NO_GNU_OPS)
|
if (syntax & RE_NO_GNU_OPS)
|
||||||
goto normal_char;
|
goto normal_char;
|
||||||
BUF_PUSH (begbuf);
|
BUF_PUSH (begbuf);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '\'':
|
case '\'':
|
||||||
if (re_syntax_options & RE_NO_GNU_OPS)
|
if (syntax & RE_NO_GNU_OPS)
|
||||||
goto normal_char;
|
goto normal_char;
|
||||||
BUF_PUSH (endbuf);
|
BUF_PUSH (endbuf);
|
||||||
break;
|
break;
|
||||||
|
41
rt/tst-aio.c
41
rt/tst-aio.c
@ -26,9 +26,12 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
|
||||||
/* prototype for our test function. */
|
/* Prototype for our test function. */
|
||||||
|
extern void do_prepare (int argc, char *argv[]);
|
||||||
extern int do_test (int argc, char *argv[]);
|
extern int do_test (int argc, char *argv[]);
|
||||||
|
|
||||||
|
/* We have a preparation function. */
|
||||||
|
#define PREPARE do_prepare
|
||||||
|
|
||||||
/* We might need a bit longer timeout. */
|
/* We might need a bit longer timeout. */
|
||||||
#define TIMEOUT 20 /* sec */
|
#define TIMEOUT 20 /* sec */
|
||||||
@ -37,6 +40,28 @@ extern int do_test (int argc, char *argv[]);
|
|||||||
#include <test-skeleton.c>
|
#include <test-skeleton.c>
|
||||||
|
|
||||||
|
|
||||||
|
/* These are for the temporary file we generate. */
|
||||||
|
char *name;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
void
|
||||||
|
do_prepare (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
char name_len;
|
||||||
|
|
||||||
|
name_len = strlen (test_dir);
|
||||||
|
name = malloc (name_len + sizeof ("/aioXXXXXX"));
|
||||||
|
mempcpy (mempcpy (name, test_dir, name_len),
|
||||||
|
"/aioXXXXXX", sizeof ("/aioXXXXXX"));
|
||||||
|
add_temp_file (name);
|
||||||
|
|
||||||
|
/* Open our test file. */
|
||||||
|
fd = mkstemp (name);
|
||||||
|
if (fd == -1)
|
||||||
|
error (EXIT_FAILURE, errno, "cannot open test file `%s'", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
test_file (const void *buf, size_t size, int fd, const char *msg)
|
test_file (const void *buf, size_t size, int fd, const char *msg)
|
||||||
{
|
{
|
||||||
@ -98,26 +123,12 @@ do_wait (struct aiocb **cbp, size_t nent)
|
|||||||
int
|
int
|
||||||
do_test (int argc, char *argv[])
|
do_test (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char *name;
|
|
||||||
char name_len;
|
|
||||||
struct aiocb cbs[10];
|
struct aiocb cbs[10];
|
||||||
struct aiocb *cbp[10];
|
struct aiocb *cbp[10];
|
||||||
char buf[1000];
|
char buf[1000];
|
||||||
size_t cnt;
|
size_t cnt;
|
||||||
int fd;
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
name_len = strlen (test_dir);
|
|
||||||
name = malloc (name_len + sizeof ("/aioXXXXXX"));
|
|
||||||
mempcpy (mempcpy (name, test_dir, name_len),
|
|
||||||
"/aioXXXXXX", sizeof ("/aioXXXXXX"));
|
|
||||||
add_temp_file (name);
|
|
||||||
|
|
||||||
/* Open our test file. */
|
|
||||||
fd = mkstemp (name);
|
|
||||||
if (fd == -1)
|
|
||||||
error (EXIT_FAILURE, errno, "cannot open test file `%s'", name);
|
|
||||||
|
|
||||||
/* Preparation. */
|
/* Preparation. */
|
||||||
for (cnt = 0; cnt < 10; ++cnt)
|
for (cnt = 0; cnt < 10; ++cnt)
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991, 1992, 1993, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1991, 1992, 1993, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -19,8 +19,6 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
extern char *_strerror_internal __P ((int, char *buf, size_t));
|
|
||||||
|
|
||||||
/* Print a line on stderr consisting of the text in S, a colon, a space,
|
/* Print a line on stderr consisting of the text in S, a colon, a space,
|
||||||
a message describing the meaning of the contents of `errno' and a newline.
|
a message describing the meaning of the contents of `errno' and a newline.
|
||||||
If S is NULL or "", the colon and space are omitted. */
|
If S is NULL or "", the colon and space are omitted. */
|
||||||
@ -37,5 +35,5 @@ perror (const char *s)
|
|||||||
colon = ": ";
|
colon = ": ";
|
||||||
|
|
||||||
(void) fprintf (stderr, "%s%s%s\n",
|
(void) fprintf (stderr, "%s%s%s\n",
|
||||||
s, colon, _strerror_internal (errnum, buf, sizeof buf));
|
s, colon, __strerror_r (errnum, buf, sizeof buf));
|
||||||
}
|
}
|
||||||
|
@ -966,12 +966,8 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
|||||||
\
|
\
|
||||||
LABEL (form_strerror): \
|
LABEL (form_strerror): \
|
||||||
/* Print description of error ERRNO. */ \
|
/* Print description of error ERRNO. */ \
|
||||||
{ \
|
string = \
|
||||||
extern char *_strerror_internal __P ((int, char *buf, size_t)); \
|
(char *) __strerror_r (save_errno, work_buffer, sizeof work_buffer); \
|
||||||
\
|
|
||||||
string = (char *) \
|
|
||||||
_strerror_internal (save_errno, work_buffer, sizeof work_buffer); \
|
|
||||||
} \
|
|
||||||
is_long = 0; /* This is no wide-char string. */ \
|
is_long = 0; /* This is no wide-char string. */ \
|
||||||
goto LABEL (print_string)
|
goto LABEL (print_string)
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ routines := \
|
|||||||
|
|
||||||
distribute := exit.h grouping.h abort-instr.h isomac.c
|
distribute := exit.h grouping.h abort-instr.h isomac.c
|
||||||
tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
|
tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
|
||||||
test-canon
|
test-canon test-canon2
|
||||||
|
|
||||||
|
|
||||||
# Several mpn functions from GNU MP are used by the strtod function.
|
# Several mpn functions from GNU MP are used by the strtod function.
|
||||||
|
@ -45,10 +45,12 @@ canonicalize (const char *name, char *resolved)
|
|||||||
long int path_max;
|
long int path_max;
|
||||||
int num_links = 0;
|
int num_links = 0;
|
||||||
|
|
||||||
if (name == NULL || resolved == NULL)
|
if (name == NULL)
|
||||||
{
|
{
|
||||||
/* As per Single Unix Specification V2 we must return an error if
|
/* As per Single Unix Specification V2 we must return an error if
|
||||||
either parameter is a null pointer. */
|
either parameter is a null pointer. We extend this to allow
|
||||||
|
the RESOLVED parameter be NULL in case the we are expected to
|
||||||
|
allocate the room for the return value. */
|
||||||
__set_errno (EINVAL);
|
__set_errno (EINVAL);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -133,7 +135,7 @@ canonicalize (const char *name, char *resolved)
|
|||||||
dest = __mempcpy (dest, start, end - start);
|
dest = __mempcpy (dest, start, end - start);
|
||||||
*dest = '\0';
|
*dest = '\0';
|
||||||
|
|
||||||
if (__lstat (rpath, &st) < 0)
|
if (__lxstat (_STAT_VER, rpath, &st) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (S_ISLNK (st.st_mode))
|
if (S_ISLNK (st.st_mode))
|
||||||
@ -174,8 +176,6 @@ canonicalize (const char *name, char *resolved)
|
|||||||
if (dest > rpath + 1)
|
if (dest > rpath + 1)
|
||||||
while ((--dest)[-1] != '/');
|
while ((--dest)[-1] != '/');
|
||||||
}
|
}
|
||||||
else
|
|
||||||
num_links = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dest > rpath + 1 && dest[-1] == '/')
|
if (dest > rpath + 1 && dest[-1] == '/')
|
||||||
@ -191,8 +191,20 @@ error:
|
|||||||
free (rpath);
|
free (rpath);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
strong_alias (canonicalize, __realpath)
|
|
||||||
weak_alias (canonicalize, realpath)
|
|
||||||
|
char *
|
||||||
|
__realpath (const char *name, char *resolved)
|
||||||
|
{
|
||||||
|
if (resolved == NULL)
|
||||||
|
{
|
||||||
|
__set_errno (EINVAL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return canonicalize (name, resolved);
|
||||||
|
}
|
||||||
|
weak_alias (__realpath, realpath)
|
||||||
|
|
||||||
|
|
||||||
char *
|
char *
|
||||||
|
74
stdlib/test-canon2.c
Normal file
74
stdlib/test-canon2.c
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/* Test for realpath/canonicalize function.
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* Prototype for our test function. */
|
||||||
|
extern void do_prepare (int argc, char *argv[]);
|
||||||
|
extern int do_test (int argc, char *argv[]);
|
||||||
|
|
||||||
|
/* We have a preparation function. */
|
||||||
|
#define PREPARE do_prepare
|
||||||
|
|
||||||
|
#include <test-skeleton.c>
|
||||||
|
|
||||||
|
/* Name of the temporary files we create. */
|
||||||
|
char *name1;
|
||||||
|
char *name2;
|
||||||
|
|
||||||
|
/* Preparation. */
|
||||||
|
void
|
||||||
|
do_prepare (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
char test_dir_len;
|
||||||
|
|
||||||
|
test_dir_len = strlen (test_dir);
|
||||||
|
|
||||||
|
/* Generate the circular symlinks. */
|
||||||
|
name1 = malloc (test_dir_len + sizeof ("/canonXXXXXX"));
|
||||||
|
mempcpy (mempcpy (name1, test_dir, test_dir_len),
|
||||||
|
"/canonXXXXXX", sizeof ("/canonXXXXXX"));
|
||||||
|
name2 = strdup (name1);
|
||||||
|
|
||||||
|
add_temp_file (mktemp (name1));
|
||||||
|
add_temp_file (mktemp (name2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Run the test. */
|
||||||
|
int
|
||||||
|
do_test (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
char *canon;
|
||||||
|
|
||||||
|
printf ("create symlinks from %s to %s and vice versa\n", name1, name2);
|
||||||
|
if (symlink (name1, name2) == -1
|
||||||
|
|| symlink (name2, name1) == -1)
|
||||||
|
/* We cannot test this. */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Call the function. This is equivalent the using `realpath' but the
|
||||||
|
function allocates the room for the result. */
|
||||||
|
errno = 0;
|
||||||
|
canon = canonicalize_file_name (name1);
|
||||||
|
|
||||||
|
return canon != NULL || errno != ELOOP;
|
||||||
|
}
|
@ -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.
|
# This file is part of the GNU C Library.
|
||||||
|
|
||||||
# The GNU C Library is free software; you can redistribute it and/or
|
# The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -27,7 +27,7 @@ headers := string.h strings.h memory.h endian.h bits/endian.h \
|
|||||||
|
|
||||||
routines := strcat strchr strcmp strcoll strcpy strcspn \
|
routines := strcat strchr strcmp strcoll strcpy strcspn \
|
||||||
strverscmp strdup strndup \
|
strverscmp strdup strndup \
|
||||||
strerror _strerror strerror_r strlen strnlen \
|
strerror _strerror strlen strnlen \
|
||||||
strncat strncmp strncpy \
|
strncat strncmp strncpy \
|
||||||
strrchr strpbrk strsignal strspn strstr strtok \
|
strrchr strpbrk strsignal strspn strstr strtok \
|
||||||
strtok_r strxfrm memchr memcmp memmove memset \
|
strtok_r strxfrm memchr memcmp memmove memset \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
|
/* Copyright (C) 1991, 93, 94, 95, 96, 98 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -19,8 +19,6 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
extern char *_strerror_internal __P ((int, char *, size_t));
|
|
||||||
|
|
||||||
/* Return a string describing the errno code in ERRNUM.
|
/* Return a string describing the errno code in ERRNUM.
|
||||||
The storage is good only until the next call to strerror.
|
The storage is good only until the next call to strerror.
|
||||||
Writing to the storage causes undefined behavior. */
|
Writing to the storage causes undefined behavior. */
|
||||||
@ -29,5 +27,5 @@ strerror (errnum)
|
|||||||
int errnum;
|
int errnum;
|
||||||
{
|
{
|
||||||
static char buf[1024];
|
static char buf[1024];
|
||||||
return _strerror_internal (errnum, buf, sizeof buf);
|
return __strerror_r (errnum, buf, sizeof buf);
|
||||||
}
|
}
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
/* Copyright (C) 1991, 93, 94, 95, 96, 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
|
|
||||||
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. */
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
extern char *_strerror_internal __P ((int, char *, size_t));
|
|
||||||
|
|
||||||
/* Return a string describing the errno code in ERRNUM. If a temporary
|
|
||||||
buffer is required, at most BUFLEN bytes of BUF will be used. */
|
|
||||||
char *
|
|
||||||
__strerror_r (int errnum, char *buf, size_t buflen)
|
|
||||||
{
|
|
||||||
return _strerror_internal (errnum, buf, buflen);
|
|
||||||
}
|
|
||||||
weak_alias (__strerror_r, strerror_r)
|
|
@ -23,8 +23,8 @@
|
|||||||
#include <stdio-common/_itoa.h>
|
#include <stdio-common/_itoa.h>
|
||||||
|
|
||||||
#ifndef HAVE_GNU_LD
|
#ifndef HAVE_GNU_LD
|
||||||
#define _sys_errlist sys_errlist
|
# define _sys_errlist sys_errlist
|
||||||
#define _sys_nerr sys_nerr
|
# define _sys_nerr sys_nerr
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* It is critical here that we always use the `dcgettext' function for
|
/* It is critical here that we always use the `dcgettext' function for
|
||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
/* Return a string describing the errno code in ERRNUM. */
|
/* Return a string describing the errno code in ERRNUM. */
|
||||||
char *
|
char *
|
||||||
_strerror_internal (int errnum, char *buf, size_t buflen)
|
__strerror_r (int errnum, char *buf, size_t buflen)
|
||||||
{
|
{
|
||||||
if (errnum < 0 || errnum >= _sys_nerr)
|
if (errnum < 0 || errnum >= _sys_nerr)
|
||||||
{
|
{
|
||||||
@ -67,3 +67,4 @@ _strerror_internal (int errnum, char *buf, size_t buflen)
|
|||||||
|
|
||||||
return (char *) _(_sys_errlist[errnum]);
|
return (char *) _(_sys_errlist[errnum]);
|
||||||
}
|
}
|
||||||
|
weak_alias (__strerror_r, strerror_r)
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
/* Return a string describing the errno code in ERRNUM. */
|
/* Return a string describing the errno code in ERRNUM. */
|
||||||
char *
|
char *
|
||||||
_strerror_internal (int errnum, char *buf, size_t buflen)
|
__strerror_r (int errnum, char *buf, size_t buflen)
|
||||||
{
|
{
|
||||||
int system;
|
int system;
|
||||||
int sub;
|
int sub;
|
||||||
@ -115,3 +115,4 @@ _strerror_internal (int errnum, char *buf, size_t buflen)
|
|||||||
|
|
||||||
return (char *) _(es->subsystem[sub].codes[code]);
|
return (char *) _(es->subsystem[sub].codes[code]);
|
||||||
}
|
}
|
||||||
|
weak_alias (__strerror_r, strerror_r)
|
||||||
|
@ -78,8 +78,8 @@ ifeq ($(subdir),inet)
|
|||||||
sysdep_headers += netinet/in_systm.h netinet/udp.h \
|
sysdep_headers += netinet/in_systm.h netinet/udp.h \
|
||||||
netinet/if_fddi.h netinet/if_tr.h netinet/igmp.h \
|
netinet/if_fddi.h netinet/if_tr.h netinet/igmp.h \
|
||||||
netinet/ip_fw.h netinet/ip_icmp.h netipx/ipx.h \
|
netinet/ip_fw.h netinet/ip_icmp.h netipx/ipx.h \
|
||||||
sys/socketvar.h netax25/ax25.h netrom/netrom.h \
|
sys/socketvar.h netash/ash.h netax25/ax25.h netatalk/at.h \
|
||||||
netrose/rose.h netpacket/packet.h netash/ash.h
|
netrom/netrom.h netpacket/packet.h netrose/rose.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(subdir),posix)
|
ifeq ($(subdir),posix)
|
||||||
|
@ -158,13 +158,18 @@ main (int argc, char *argv[])
|
|||||||
/* Make sure we see all message, even those on stdout. */
|
/* Make sure we see all message, even those on stdout. */
|
||||||
setvbuf (stdout, NULL, _IONBF, 0);
|
setvbuf (stdout, NULL, _IONBF, 0);
|
||||||
|
|
||||||
|
/* make sure temporary files are deleted. */
|
||||||
|
atexit (delete_temp_files);
|
||||||
|
|
||||||
|
/* Call the initializing function, if one is available. */
|
||||||
|
#ifdef PREPARE
|
||||||
|
PREPARE (argc, argv);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* If we are not expected to fork run the function immediately. */
|
/* If we are not expected to fork run the function immediately. */
|
||||||
if (direct)
|
if (direct)
|
||||||
return TEST_FUNCTION;
|
return TEST_FUNCTION;
|
||||||
|
|
||||||
/* make sure temporary files are deleted. */
|
|
||||||
atexit (delete_temp_files);
|
|
||||||
|
|
||||||
/* Set up the test environment:
|
/* Set up the test environment:
|
||||||
- prevent core dumps
|
- prevent core dumps
|
||||||
- set up the timer
|
- set up the timer
|
||||||
|
Loading…
x
Reference in New Issue
Block a user