mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-17 16:31:07 +00:00
Update.
1998-04-11 09:33 Ulrich Drepper <drepper@cygnus.com> * Makeconfig (rtobjdir): New variable. (rpath-link): Add rtobjdir and thread directory, if available. * test-skeleton.c: Add support to remove temporary files. Always define test_dir. Improve message about expected signal. * rt/Makefile (tests): Add tst-aio. Add rules for tst-aio to be linked with librt and thread library. * rt/aio_misc.c: Correct fundamental bugs. * rt/aio_suspend.c: Correct bug in test for available request. Initialize conditional variable. * rt/lio_listio.c: Initialize conditional variable. * rt/lio_listio64.c: Likewise. * rt/tst-aio.c: New file. * sysdeps/libm-ieee754/s_signgam.c: Undo last change. * sysdeps/libm-ieee754/w_gamma.c: Likewise. Adopt for ISO C 9x. * sysdeps/libm-ieee754/w_gammaf.c: Likewise. * sysdeps/libm-ieee754/w_gammal.c: Likewise. * sysdeps/libm-ieee754/w_lgamma.c: Likewise. * sysdeps/libm-ieee754/w_lgammaf.c: Likewise. * sysdeps/libm-ieee754/w_lgammal.c: Likewise. 1998-04-11 14:49 Mark Kettenis <kettenis@landau.phys.uva.nl> * posix/regex.c [_LIBC] (__re_syntax_options): Initialize to 0. * elf/dl-load.c (open_path): Use correct name for test whether directory in load path exists. * sysdeps/libm-ieee754/s_expm1.c: Remove variable one. * sysdeps/libm-ieee754/e_pow.c: Fix typo. Patches by Tom Rini <trini@kernel.crashing.org>. * wcsmbs/wcstof_l.c: Declare ____wcstoull_l_internal. * wcsmbs/wcstod_l.c: Likewise. * wcsmbs/wcstold_l.c: Likewise.
This commit is contained in:
parent
e7993f207c
commit
b9337b6a58
40
ChangeLog
40
ChangeLog
@ -1,5 +1,45 @@
|
|||||||
|
1998-04-11 09:33 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* Makeconfig (rtobjdir): New variable.
|
||||||
|
(rpath-link): Add rtobjdir and thread directory, if available.
|
||||||
|
|
||||||
|
* test-skeleton.c: Add support to remove temporary files.
|
||||||
|
Always define test_dir. Improve message about expected signal.
|
||||||
|
|
||||||
|
* rt/Makefile (tests): Add tst-aio.
|
||||||
|
Add rules for tst-aio to be linked with librt and thread library.
|
||||||
|
* rt/aio_misc.c: Correct fundamental bugs.
|
||||||
|
* rt/aio_suspend.c: Correct bug in test for available request.
|
||||||
|
Initialize conditional variable.
|
||||||
|
* rt/lio_listio.c: Initialize conditional variable.
|
||||||
|
* rt/lio_listio64.c: Likewise.
|
||||||
|
* rt/tst-aio.c: New file.
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/s_signgam.c: Undo last change.
|
||||||
|
* sysdeps/libm-ieee754/w_gamma.c: Likewise. Adopt for ISO C 9x.
|
||||||
|
* sysdeps/libm-ieee754/w_gammaf.c: Likewise.
|
||||||
|
* sysdeps/libm-ieee754/w_gammal.c: Likewise.
|
||||||
|
* sysdeps/libm-ieee754/w_lgamma.c: Likewise.
|
||||||
|
* sysdeps/libm-ieee754/w_lgammaf.c: Likewise.
|
||||||
|
* sysdeps/libm-ieee754/w_lgammal.c: Likewise.
|
||||||
|
|
||||||
|
1998-04-11 14:49 Mark Kettenis <kettenis@landau.phys.uva.nl>
|
||||||
|
|
||||||
|
* posix/regex.c [_LIBC] (__re_syntax_options): Initialize to 0.
|
||||||
|
|
||||||
1998-04-10 Ulrich Drepper <drepper@cygnus.com>
|
1998-04-10 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* elf/dl-load.c (open_path): Use correct name for test whether
|
||||||
|
directory in load path exists.
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/s_expm1.c: Remove variable one.
|
||||||
|
* sysdeps/libm-ieee754/e_pow.c: Fix typo.
|
||||||
|
Patches by Tom Rini <trini@kernel.crashing.org>.
|
||||||
|
|
||||||
|
* wcsmbs/wcstof_l.c: Declare ____wcstoull_l_internal.
|
||||||
|
* wcsmbs/wcstod_l.c: Likewise.
|
||||||
|
* wcsmbs/wcstold_l.c: Likewise.
|
||||||
|
|
||||||
* include/byteswap.h: New file.
|
* include/byteswap.h: New file.
|
||||||
|
|
||||||
* malloc/mtrace.c (mtrace): Use smaller output buffer to reduce
|
* malloc/mtrace.c (mtrace): Use smaller output buffer to reduce
|
||||||
|
@ -413,12 +413,13 @@ else
|
|||||||
default-rpath = $(libdir)
|
default-rpath = $(libdir)
|
||||||
endif
|
endif
|
||||||
# This is how to find at build-time things that will be installed there.
|
# This is how to find at build-time things that will be installed there.
|
||||||
rpath-link = $(common-objdir):$(mathobjdir):$(elfobjdir):$(nssobjdir):$(nisobjdir):$(dbobjdir)
|
rpath-link = $(common-objdir):$(mathobjdir):$(elfobjdir):$(nssobjdir):$(nisobjdir):$(dbobjdir):$(rtobjdir)
|
||||||
mathobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)math)
|
mathobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)math)
|
||||||
elfobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)elf)
|
elfobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)elf)
|
||||||
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
|
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
|
||||||
nisobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nis)
|
nisobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nis)
|
||||||
dbobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)db2)
|
dbobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)db2)
|
||||||
|
rtobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)rt)
|
||||||
else
|
else
|
||||||
link-libc = $(common-objpfx)libc.a $(gnulib) $(common-objpfx)libc.a
|
link-libc = $(common-objpfx)libc.a $(gnulib) $(common-objpfx)libc.a
|
||||||
endif
|
endif
|
||||||
@ -750,6 +751,7 @@ ifneq (,$(findstring linuxthreads,$(add-ons)))
|
|||||||
shared-thread-library = $(common-objpfx)linuxthreads/libpthread.so
|
shared-thread-library = $(common-objpfx)linuxthreads/libpthread.so
|
||||||
static-thread-library = $(common-objpfx)linuxthreads/libpthread.a
|
static-thread-library = $(common-objpfx)linuxthreads/libpthread.a
|
||||||
have-thread-library = yes
|
have-thread-library = yes
|
||||||
|
rpath-link := $(rpath-link):$(common-objpfx)linuxthreads
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endif # Makeconfig not yet included
|
endif # Makeconfig not yet included
|
||||||
|
@ -919,7 +919,8 @@ open_path (const char *name, size_t namelen, int preloaded,
|
|||||||
test whether there is any directory at all. */
|
test whether there is any directory at all. */
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
buf[this_dir->dirnamelen + capstr[cnt].len] = '\0';
|
buf[this_dir->dirnamelen
|
||||||
|
+ MAX (capstr[cnt].len - 1, 0)] = '\0';
|
||||||
|
|
||||||
if (__xstat (_STAT_VER, buf, &st) != 0
|
if (__xstat (_STAT_VER, buf, &st) != 0
|
||||||
|| ! S_ISDIR (st.st_mode))
|
|| ! S_ISDIR (st.st_mode))
|
||||||
|
@ -244,7 +244,7 @@ mtrace ()
|
|||||||
if (mallstream != NULL)
|
if (mallstream != NULL)
|
||||||
{
|
{
|
||||||
/* Be sure it doesn't malloc its buffer! */
|
/* Be sure it doesn't malloc its buffer! */
|
||||||
setvbuf (mallstream, malloc_trace_buffer, TRACE_BUFFER_SIZE);
|
setbuffer (mallstream, malloc_trace_buffer, TRACE_BUFFER_SIZE);
|
||||||
fprintf (mallstream, "= Start\n");
|
fprintf (mallstream, "= Start\n");
|
||||||
tr_old_free_hook = __free_hook;
|
tr_old_free_hook = __free_hook;
|
||||||
__free_hook = tr_freehook;
|
__free_hook = tr_freehook;
|
||||||
|
10
math/math.h
10
math/math.h
@ -200,8 +200,14 @@ enum
|
|||||||
|
|
||||||
#ifdef __USE_MISC
|
#ifdef __USE_MISC
|
||||||
/* Support for various different standard error handling behaviors. */
|
/* Support for various different standard error handling behaviors. */
|
||||||
|
typedef enum
|
||||||
typedef enum { _IEEE_ = -1, _SVID_, _XOPEN_, _POSIX_ } _LIB_VERSION_TYPE;
|
{
|
||||||
|
_IEEE_ = -1, /* According to IEEE 754/IEEE 854. */
|
||||||
|
_SVID_, /* According to System V, release 4. */
|
||||||
|
_XOPEN_, /* Nowadays also Unix98. */
|
||||||
|
_POSIX_,
|
||||||
|
_ISOC_ /* Actually this is ISO C 9X. */
|
||||||
|
} _LIB_VERSION_TYPE;
|
||||||
|
|
||||||
/* This variable can be changed at run-time to any of the values above to
|
/* This variable can be changed at run-time to any of the values above to
|
||||||
affect floating point error handling behavior (it may also be necessary
|
affect floating point error handling behavior (it may also be necessary
|
||||||
|
@ -966,13 +966,13 @@ 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. */
|
||||||
/* This has no initializer because initialized variables in Emacs
|
|
||||||
become read-only after dumping. */
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
reg_syntax_t __re_syntax_options;
|
reg_syntax_t __re_syntax_options = 0;
|
||||||
weak_alias (__re_syntax_options, re_syntax_options)
|
weak_alias (__re_syntax_options, re_syntax_options)
|
||||||
# define re_syntax_options __re_syntax_options
|
# define re_syntax_options __re_syntax_options
|
||||||
#else
|
#else
|
||||||
|
/* This has no initializer because initialized variables in Emacs
|
||||||
|
become read-only after dumping. */
|
||||||
reg_syntax_t re_syntax_options;
|
reg_syntax_t re_syntax_options;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -30,6 +30,8 @@ librt-routines := aio_cancel aio_error aio_fsync aio_misc aio_read \
|
|||||||
|
|
||||||
librt-map := librt.map
|
librt-map := librt.map
|
||||||
|
|
||||||
|
tests := tst-aio
|
||||||
|
|
||||||
# Make sure that everything is distributed independent of configuration.
|
# Make sure that everything is distributed independent of configuration.
|
||||||
distribute := aio_misc.h $(librt-routines:=.c) $(librt-map)
|
distribute := aio_misc.h $(librt-routines:=.c) $(librt-map)
|
||||||
|
|
||||||
@ -48,3 +50,5 @@ include ../Rules
|
|||||||
# This ensures they will load libc.so for needed symbols if loaded by
|
# This ensures they will load libc.so for needed symbols if loaded by
|
||||||
# a statically-linked program that hasn't already loaded it.
|
# a statically-linked program that hasn't already loaded it.
|
||||||
$(objpfx)librt.so: $(common-objpfx)libc.so $(shared-thread-library)
|
$(objpfx)librt.so: $(common-objpfx)libc.so $(shared-thread-library)
|
||||||
|
|
||||||
|
$(objpfx)tst-aio: $(objpfx)librt.so $(shared-thread-library)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Handle general operations.
|
/* Handle general operations.
|
||||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
Copyright (C) 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@cygnus.com>, 1997.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
#include "aio_misc.h"
|
#include "aio_misc.h"
|
||||||
|
|
||||||
|
|
||||||
/* Pool of request list entries. */
|
/* Pool of request list entries. */
|
||||||
static struct requestlist **pool;
|
static struct requestlist **pool;
|
||||||
|
|
||||||
@ -273,7 +272,7 @@ __aio_enqueue_request (aiocb_union *aiocbp, int operation)
|
|||||||
/* The current file descriptor is worked on. It makes no sense
|
/* The current file descriptor is worked on. It makes no sense
|
||||||
to start another thread since this new thread would fight
|
to start another thread since this new thread would fight
|
||||||
with the running thread for the resources. But we also cannot
|
with the running thread for the resources. But we also cannot
|
||||||
say that the thread processing this desriptor shall imeediately
|
say that the thread processing this desriptor shall immediately
|
||||||
after finishing the current job process this request if there
|
after finishing the current job process this request if there
|
||||||
are other threads in the running queue which have a higher
|
are other threads in the running queue which have a higher
|
||||||
priority. */
|
priority. */
|
||||||
@ -392,14 +391,18 @@ handle_fildes_io (void *arg)
|
|||||||
pthread_t self = pthread_self ();
|
pthread_t self = pthread_self ();
|
||||||
struct sched_param param;
|
struct sched_param param;
|
||||||
struct requestlist *runp = (struct requestlist *) arg;
|
struct requestlist *runp = (struct requestlist *) arg;
|
||||||
aiocb_union *aiocbp = runp->aiocbp;
|
aiocb_union *aiocbp;
|
||||||
int policy;
|
int policy;
|
||||||
int fildes = runp->aiocbp->aiocb.aio_fildes;
|
int fildes;
|
||||||
|
|
||||||
pthread_getschedparam (self, &policy, ¶m);
|
pthread_getschedparam (self, &policy, ¶m);
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
/* Update our variables. */
|
||||||
|
aiocbp = runp->aiocbp;
|
||||||
|
fildes = aiocbp->aiocb.aio_fildes;
|
||||||
|
|
||||||
/* Change the priority to the requested value (if necessary). */
|
/* Change the priority to the requested value (if necessary). */
|
||||||
if (aiocbp->aiocb.__abs_prio != param.sched_priority
|
if (aiocbp->aiocb.__abs_prio != param.sched_priority
|
||||||
|| aiocbp->aiocb.__policy != policy)
|
|| aiocbp->aiocb.__policy != policy)
|
||||||
@ -467,8 +470,8 @@ handle_fildes_io (void *arg)
|
|||||||
/* Now dequeue the current request. */
|
/* Now dequeue the current request. */
|
||||||
if (runp->next_prio == NULL)
|
if (runp->next_prio == NULL)
|
||||||
{
|
{
|
||||||
/* No outstanding request for this descriptor. Process the
|
/* No outstanding request for this descriptor. Remove this
|
||||||
runlist if necessary. */
|
descriptor from the list. */
|
||||||
if (runp->next_fd != NULL)
|
if (runp->next_fd != NULL)
|
||||||
runp->next_fd->last_fd = runp->last_fd;
|
runp->next_fd->last_fd = runp->last_fd;
|
||||||
if (runp->last_fd != NULL)
|
if (runp->last_fd != NULL)
|
||||||
@ -488,15 +491,12 @@ handle_fildes_io (void *arg)
|
|||||||
/* Free the old element. */
|
/* Free the old element. */
|
||||||
__aio_free_request (runp);
|
__aio_free_request (runp);
|
||||||
|
|
||||||
runp = freelist;
|
runp = runlist;
|
||||||
if (runp != NULL)
|
if (runp != NULL)
|
||||||
{
|
{
|
||||||
/* We must not run requests which are not marked `running'. */
|
/* We must not run requests which are not marked `running'. */
|
||||||
if (runp->running == yes)
|
if (runp->running == yes)
|
||||||
{
|
runlist = runp->next_run;
|
||||||
freelist = runp->next_run;
|
|
||||||
runp->running = allocated;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct requestlist *old;
|
struct requestlist *old;
|
||||||
@ -516,6 +516,8 @@ handle_fildes_io (void *arg)
|
|||||||
/* If no request to work on we will stop the thread. */
|
/* If no request to work on we will stop the thread. */
|
||||||
if (runp == NULL)
|
if (runp == NULL)
|
||||||
--nthreads;
|
--nthreads;
|
||||||
|
else
|
||||||
|
runp->running = allocated;
|
||||||
|
|
||||||
/* Release the mutex. */
|
/* Release the mutex. */
|
||||||
pthread_mutex_unlock (&__aio_requests_mutex);
|
pthread_mutex_unlock (&__aio_requests_mutex);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Suspend until termination of a requests.
|
/* Suspend until termination of a requests.
|
||||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
Copyright (C) 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@cygnus.com>, 1997.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
@ -40,24 +40,17 @@ aio_suspend (list, nent, timeout)
|
|||||||
int nent;
|
int nent;
|
||||||
const struct timespec *timeout;
|
const struct timespec *timeout;
|
||||||
{
|
{
|
||||||
pthread_cond_t cond;
|
|
||||||
struct waitlist waitlist[nent];
|
struct waitlist waitlist[nent];
|
||||||
struct requestlist *requestlist[nent];
|
struct requestlist *requestlist[nent];
|
||||||
|
pthread_cond_t cond;
|
||||||
int cnt;
|
int cnt;
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
int dummy;
|
||||||
|
int none = 1;
|
||||||
|
|
||||||
/* Request the mutex. */
|
/* Request the mutex. */
|
||||||
pthread_mutex_lock (&__aio_requests_mutex);
|
pthread_mutex_lock (&__aio_requests_mutex);
|
||||||
|
|
||||||
/* First look whether there is already a terminated request. */
|
|
||||||
for (cnt = 0; cnt < nent; ++cnt)
|
|
||||||
if (list[cnt] != NULL && list[cnt]->__error_code != EINPROGRESS)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (cnt == nent)
|
|
||||||
{
|
|
||||||
int oldstate;
|
|
||||||
|
|
||||||
/* There is not yet a finished request. Signal the request that
|
/* There is not yet a finished request. Signal the request that
|
||||||
we are working for it. */
|
we are working for it. */
|
||||||
for (cnt = 0; cnt < nent; ++cnt)
|
for (cnt = 0; cnt < nent; ++cnt)
|
||||||
@ -69,12 +62,21 @@ aio_suspend (list, nent, timeout)
|
|||||||
{
|
{
|
||||||
waitlist[cnt].cond = &cond;
|
waitlist[cnt].cond = &cond;
|
||||||
waitlist[cnt].next = requestlist[cnt]->waiting;
|
waitlist[cnt].next = requestlist[cnt]->waiting;
|
||||||
waitlist[cnt].counterp = NULL;
|
waitlist[cnt].counterp = &dummy;
|
||||||
waitlist[cnt].sigevp = NULL;
|
waitlist[cnt].sigevp = NULL;
|
||||||
requestlist[cnt]->waiting = &waitlist[cnt];
|
requestlist[cnt]->waiting = &waitlist[cnt];
|
||||||
|
none = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If there is a not finished request wait for it. */
|
||||||
|
if (!none)
|
||||||
|
{
|
||||||
|
int oldstate;
|
||||||
|
|
||||||
|
/* Initialize the conditional variable. */
|
||||||
|
pthread_cond_init (&cond, NULL);
|
||||||
|
|
||||||
/* Since `pthread_cond_wait'/`pthread_cond_timedwait' are cancelation
|
/* Since `pthread_cond_wait'/`pthread_cond_timedwait' are cancelation
|
||||||
points we must be careful. We added entries to the waiting lists
|
points we must be careful. We added entries to the waiting lists
|
||||||
which we must remove. So defer cancelation for now. */
|
which we must remove. So defer cancelation for now. */
|
||||||
@ -87,7 +89,7 @@ aio_suspend (list, nent, timeout)
|
|||||||
timeout);
|
timeout);
|
||||||
|
|
||||||
/* Now remove the entry in the waiting list for all requests
|
/* Now remove the entry in the waiting list for all requests
|
||||||
which didn't terminate */
|
which didn't terminate. */
|
||||||
for (cnt = 0; cnt < nent; ++cnt)
|
for (cnt = 0; cnt < nent; ++cnt)
|
||||||
if (list[cnt] != NULL && list[cnt]->__error_code == EINPROGRESS
|
if (list[cnt] != NULL && list[cnt]->__error_code == EINPROGRESS
|
||||||
&& requestlist[cnt] != NULL)
|
&& requestlist[cnt] != NULL)
|
||||||
@ -107,6 +109,11 @@ aio_suspend (list, nent, timeout)
|
|||||||
/* Now it's time to restore the cancelation state. */
|
/* Now it's time to restore the cancelation state. */
|
||||||
pthread_setcancelstate (oldstate, NULL);
|
pthread_setcancelstate (oldstate, NULL);
|
||||||
|
|
||||||
|
/* Release the conditional variable. */
|
||||||
|
if (pthread_cond_destroy (&cond) != 0)
|
||||||
|
/* This must never happen. */
|
||||||
|
abort ();
|
||||||
|
|
||||||
if (result != 0)
|
if (result != 0)
|
||||||
{
|
{
|
||||||
/* An error occurred. Possibly it's EINTR. We have to translate
|
/* An error occurred. Possibly it's EINTR. We have to translate
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Enqueue and list of read or write requests.
|
/* Enqueue and list of read or write requests.
|
||||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
Copyright (C) 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@cygnus.com>, 1997.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
@ -86,6 +86,9 @@ lio_listio (mode, list, nent, sig)
|
|||||||
struct waitlist waitlist[nent];
|
struct waitlist waitlist[nent];
|
||||||
int oldstate;
|
int oldstate;
|
||||||
|
|
||||||
|
/* Initialize the conditional variable. */
|
||||||
|
pthread_cond_init (&cond, NULL);
|
||||||
|
|
||||||
total = 0;
|
total = 0;
|
||||||
for (cnt = 0; cnt < nent; ++cnt)
|
for (cnt = 0; cnt < nent; ++cnt)
|
||||||
if (list[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP
|
if (list[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP
|
||||||
@ -110,6 +113,11 @@ lio_listio (mode, list, nent, sig)
|
|||||||
|
|
||||||
/* Now it's time to restore the cancelation state. */
|
/* Now it's time to restore the cancelation state. */
|
||||||
pthread_setcancelstate (oldstate, NULL);
|
pthread_setcancelstate (oldstate, NULL);
|
||||||
|
|
||||||
|
/* Release the conditional variable. */
|
||||||
|
if (pthread_cond_destroy (&cond) != 0)
|
||||||
|
/* This must never happen. */
|
||||||
|
abort ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Enqueue and list of read or write requests, 64bit offset version.
|
/* Enqueue and list of read or write requests, 64bit offset version.
|
||||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
Copyright (C) 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@cygnus.com>, 1997.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
@ -86,6 +86,9 @@ lio_listio64 (mode, list, nent, sig)
|
|||||||
struct waitlist waitlist[nent];
|
struct waitlist waitlist[nent];
|
||||||
int oldstate;
|
int oldstate;
|
||||||
|
|
||||||
|
/* Initialize the conditional variable. */
|
||||||
|
pthread_cond_init (&cond, NULL);
|
||||||
|
|
||||||
total = 0;
|
total = 0;
|
||||||
for (cnt = 0; cnt < nent; ++cnt)
|
for (cnt = 0; cnt < nent; ++cnt)
|
||||||
if (list[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP
|
if (list[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP
|
||||||
@ -109,6 +112,11 @@ lio_listio64 (mode, list, nent, sig)
|
|||||||
|
|
||||||
/* Now it's time to restore the cancelation state. */
|
/* Now it's time to restore the cancelation state. */
|
||||||
pthread_setcancelstate (oldstate, NULL);
|
pthread_setcancelstate (oldstate, NULL);
|
||||||
|
|
||||||
|
/* Release the conditional variable. */
|
||||||
|
if (pthread_cond_destroy (&cond) != 0)
|
||||||
|
/* This must never happen. */
|
||||||
|
abort ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
142
rt/tst-aio.c
Normal file
142
rt/tst-aio.c
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
/* Tests for AIO in librt.
|
||||||
|
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 <aio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <error.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* prototype for our test function. */
|
||||||
|
extern int do_test (int argc, char *argv[]);
|
||||||
|
|
||||||
|
|
||||||
|
/* We might need a bit longer timeout. */
|
||||||
|
#define TIMEOUT 20 /* sec */
|
||||||
|
|
||||||
|
/* This defines the `main' function and some more. */
|
||||||
|
#include <test-skeleton.c>
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
test_file (const void *buf, size_t size, int fd, const char *msg)
|
||||||
|
{
|
||||||
|
struct stat st;
|
||||||
|
char tmp[size];
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
if (fstat (fd, &st) < 0)
|
||||||
|
{
|
||||||
|
error (0, errno, "%s: failed stat", msg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (st.st_size != size)
|
||||||
|
{
|
||||||
|
error (0, errno, "%s: wrong size: %lu, should be %lu",
|
||||||
|
msg, (unsigned long int) st.st_size, (unsigned long int) size);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pread (fd, tmp, size, 0) != size)
|
||||||
|
{
|
||||||
|
error (0, errno, "%s: failed stat", msg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (memcmp (buf, tmp, size) != 0)
|
||||||
|
{
|
||||||
|
error (0, errno, "%s: failed comparison", msg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ftruncate (fd, 0) < 0)
|
||||||
|
{
|
||||||
|
error (0, errno, "%s: failed truncate", msg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
do_test (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
char name_len;
|
||||||
|
struct aiocb cbs[10];
|
||||||
|
struct aiocb *cbp[10];
|
||||||
|
char buf[1000];
|
||||||
|
size_t cnt;
|
||||||
|
int fd;
|
||||||
|
int result = 0;
|
||||||
|
int go_on;
|
||||||
|
|
||||||
|
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. */
|
||||||
|
for (cnt = 0; cnt < 10; ++cnt)
|
||||||
|
{
|
||||||
|
cbs[cnt].aio_fildes = fd;
|
||||||
|
cbs[cnt].aio_reqprio = 0;
|
||||||
|
cbs[cnt].aio_buf = memset (&buf[cnt * 100], '0' + cnt, 100);
|
||||||
|
cbs[cnt].aio_nbytes = 100;
|
||||||
|
cbs[cnt].aio_offset = cnt * 100;
|
||||||
|
cbs[cnt].aio_sigevent.sigev_notify = SIGEV_NONE;
|
||||||
|
|
||||||
|
cbp[cnt] = &cbs[cnt];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* First a simple test. */
|
||||||
|
for (cnt = 10; cnt > 0; )
|
||||||
|
aio_write (cbp[--cnt]);
|
||||||
|
/* Wait 'til the results are there. */
|
||||||
|
do
|
||||||
|
{
|
||||||
|
aio_suspend ((const struct aiocb *const *) cbp, 10, NULL);
|
||||||
|
go_on = 0;
|
||||||
|
for (cnt = 0; cnt < 10; ++cnt)
|
||||||
|
if (cbp[cnt] != NULL && aio_error (cbp[cnt]) == EINPROGRESS)
|
||||||
|
go_on = 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (cbp[cnt] != NULL)
|
||||||
|
printf ("request %d finished\n", cnt);
|
||||||
|
cbp[cnt] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (go_on);
|
||||||
|
/* Test this. */
|
||||||
|
result |= test_file (buf, sizeof (buf), fd, "aio_write");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
@ -266,7 +266,7 @@ C[] = {
|
|||||||
r2 = C[8]+s2*C[9]; s24=s22*s22;
|
r2 = C[8]+s2*C[9]; s24=s22*s22;
|
||||||
r3 = C[6]+s2*C[7]; s26=s24*s22;
|
r3 = C[6]+s2*C[7]; s26=s24*s22;
|
||||||
r = r3*s22 + r2*s24 + r1*s26;
|
r = r3*s22 + r2*s24 + r1*s26;
|
||||||
#endfi
|
#endif
|
||||||
r += s_l*(s_h+s);
|
r += s_l*(s_h+s);
|
||||||
s2 = s_h*s_h;
|
s2 = s_h*s_h;
|
||||||
t_h = 3.0+s2+r;
|
t_h = 3.0+s2+r;
|
||||||
|
@ -120,7 +120,6 @@ static const double
|
|||||||
#else
|
#else
|
||||||
static double
|
static double
|
||||||
#endif
|
#endif
|
||||||
one = 1.0,
|
|
||||||
huge = 1.0e+300,
|
huge = 1.0e+300,
|
||||||
tiny = 1.0e-300,
|
tiny = 1.0e-300,
|
||||||
o_threshold = 7.09782712893383973096e+02,/* 0x40862E42, 0xFEFA39EF */
|
o_threshold = 7.09782712893383973096e+02,/* 0x40862E42, 0xFEFA39EF */
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "math_private.h"
|
#include "math_private.h"
|
||||||
int __signgam = 0;
|
int signgam;
|
||||||
weak_alias (__signgam, signgam)
|
|
||||||
|
@ -22,8 +22,6 @@ static char rcsid[] = "$NetBSD: w_gamma.c,v 1.7 1995/11/20 22:06:43 jtc Exp $";
|
|||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "math_private.h"
|
#include "math_private.h"
|
||||||
|
|
||||||
extern int __signgam;
|
|
||||||
|
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
double __gamma(double x)
|
double __gamma(double x)
|
||||||
#else
|
#else
|
||||||
@ -34,7 +32,7 @@ extern int __signgam;
|
|||||||
double y;
|
double y;
|
||||||
#ifndef _IEEE_LIBM
|
#ifndef _IEEE_LIBM
|
||||||
if (_LIB_VERSION == _SVID_)
|
if (_LIB_VERSION == _SVID_)
|
||||||
y = __ieee754_lgamma_r(x,&__signgam);
|
y = __ieee754_lgamma_r(x,&signgam);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
@ -20,8 +20,6 @@ static char rcsid[] = "$NetBSD: w_gammaf.c,v 1.4 1995/11/20 22:06:48 jtc Exp $";
|
|||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "math_private.h"
|
#include "math_private.h"
|
||||||
|
|
||||||
extern int __signgam;
|
|
||||||
|
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
float __gammaf(float x)
|
float __gammaf(float x)
|
||||||
#else
|
#else
|
||||||
@ -32,7 +30,7 @@ extern int __signgam;
|
|||||||
float y;
|
float y;
|
||||||
#ifndef _IEEE_LIBM
|
#ifndef _IEEE_LIBM
|
||||||
if (_LIB_VERSION == _SVID_)
|
if (_LIB_VERSION == _SVID_)
|
||||||
y = __ieee754_lgammaf_r(x,&__signgam);
|
y = __ieee754_lgammaf_r(x,&signgam);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
@ -25,8 +25,6 @@ static char rcsid[] = "$NetBSD: $";
|
|||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "math_private.h"
|
#include "math_private.h"
|
||||||
|
|
||||||
extern int __signgam;
|
|
||||||
|
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
long double __gammal(long double x)
|
long double __gammal(long double x)
|
||||||
#else
|
#else
|
||||||
@ -37,7 +35,7 @@ extern int __signgam;
|
|||||||
long double y;
|
long double y;
|
||||||
#ifndef _IEEE_LIBM
|
#ifndef _IEEE_LIBM
|
||||||
if (_LIB_VERSION == _SVID_)
|
if (_LIB_VERSION == _SVID_)
|
||||||
y = __ieee754_lgammal_r(x,&__signgam);
|
y = __ieee754_lgammal_r(x,&signgam);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
@ -23,8 +23,6 @@ static char rcsid[] = "$NetBSD: w_lgamma.c,v 1.6 1995/05/10 20:49:24 jtc Exp $";
|
|||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "math_private.h"
|
#include "math_private.h"
|
||||||
|
|
||||||
extern int __signgam;
|
|
||||||
|
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
double __lgamma(double x)
|
double __lgamma(double x)
|
||||||
#else
|
#else
|
||||||
@ -33,10 +31,14 @@ extern int __signgam;
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef _IEEE_LIBM
|
#ifdef _IEEE_LIBM
|
||||||
return __ieee754_lgamma_r(x,&__signgam);
|
return __ieee754_lgamma_r(x,&signgam);
|
||||||
#else
|
#else
|
||||||
double y;
|
double y;
|
||||||
y = __ieee754_lgamma_r(x,&__signgam);
|
int local_signgam;
|
||||||
|
y = __ieee754_lgamma_r(x,&local_signgam);
|
||||||
|
if (_LIB_VERSION != _ISOC_)
|
||||||
|
/* ISO C 9x does not define the global variable. */
|
||||||
|
signgam = local_signgam;
|
||||||
if(_LIB_VERSION == _IEEE_) return y;
|
if(_LIB_VERSION == _IEEE_) return y;
|
||||||
if(!__finite(y)&&__finite(x)) {
|
if(!__finite(y)&&__finite(x)) {
|
||||||
if(__floor(x)==x&&x<=0.0)
|
if(__floor(x)==x&&x<=0.0)
|
||||||
|
@ -20,8 +20,6 @@ static char rcsid[] = "$NetBSD: w_lgammaf.c,v 1.3 1995/05/10 20:49:30 jtc Exp $"
|
|||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "math_private.h"
|
#include "math_private.h"
|
||||||
|
|
||||||
extern int __signgam;
|
|
||||||
|
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
float __lgammaf(float x)
|
float __lgammaf(float x)
|
||||||
#else
|
#else
|
||||||
@ -30,10 +28,14 @@ extern int __signgam;
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef _IEEE_LIBM
|
#ifdef _IEEE_LIBM
|
||||||
return __ieee754_lgammaf_r(x,&__signgam);
|
return __ieee754_lgammaf_r(x,&signgam);
|
||||||
#else
|
#else
|
||||||
float y;
|
float y;
|
||||||
y = __ieee754_lgammaf_r(x,&__signgam);
|
int local_signgam;
|
||||||
|
y = __ieee754_lgammaf_r(x,&local_signgam);
|
||||||
|
if (_LIB_VERSION != _ISOC_)
|
||||||
|
/* ISO C 9x does not define the global variable. */
|
||||||
|
signgam = local_signgam;
|
||||||
if(_LIB_VERSION == _IEEE_) return y;
|
if(_LIB_VERSION == _IEEE_) return y;
|
||||||
if(!__finitef(y)&&__finitef(x)) {
|
if(!__finitef(y)&&__finitef(x)) {
|
||||||
if(__floorf(x)==x&&x<=(float)0.0)
|
if(__floorf(x)==x&&x<=(float)0.0)
|
||||||
|
@ -27,8 +27,6 @@ static char rcsid[] = "$NetBSD: $";
|
|||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "math_private.h"
|
#include "math_private.h"
|
||||||
|
|
||||||
extern int __signgam;
|
|
||||||
|
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
long double __lgammal(long double x)
|
long double __lgammal(long double x)
|
||||||
#else
|
#else
|
||||||
@ -37,10 +35,14 @@ extern int __signgam;
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef _IEEE_LIBM
|
#ifdef _IEEE_LIBM
|
||||||
return __ieee754_lgammal_r(x,&__signgam);
|
return __ieee754_lgammal_r(x,&signgam);
|
||||||
#else
|
#else
|
||||||
long double y;
|
long double y;
|
||||||
y = __ieee754_lgammal_r(x,&__signgam);
|
int local_signgam;
|
||||||
|
y = __ieee754_lgammal_r(x,&local_signgam);
|
||||||
|
if (_LIB_VERSION != _ISOC_)
|
||||||
|
/* ISO C 9x does not define the global variable. */
|
||||||
|
signgam = local_signgam;
|
||||||
if(_LIB_VERSION == _IEEE_) return y;
|
if(_LIB_VERSION == _IEEE_) return y;
|
||||||
if(!__finitel(y)&&__finitel(x)) {
|
if(!__finitel(y)&&__finitel(x)) {
|
||||||
if(__floorl(x)==x&&x<=0.0)
|
if(__floorl(x)==x&&x<=0.0)
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
|
#include <search.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -52,6 +53,39 @@ static int pid;
|
|||||||
/* Directory to place temporary files in. */
|
/* Directory to place temporary files in. */
|
||||||
static const char *test_dir;
|
static const char *test_dir;
|
||||||
|
|
||||||
|
/* List of temporary files. */
|
||||||
|
struct name_list
|
||||||
|
{
|
||||||
|
struct qelem q;
|
||||||
|
const char *name;
|
||||||
|
} *name_list;
|
||||||
|
|
||||||
|
/* Add temporary files in list. */
|
||||||
|
void
|
||||||
|
add_temp_file (const char *name)
|
||||||
|
{
|
||||||
|
struct name_list *newp = (struct name_list *) calloc (sizeof (*newp), 1);
|
||||||
|
if (newp != NULL)
|
||||||
|
{
|
||||||
|
newp->name = name;
|
||||||
|
if (name_list == NULL)
|
||||||
|
name_list = (struct name_list *) &newp->q;
|
||||||
|
else
|
||||||
|
insque (newp, name_list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Delete all temporary files. */
|
||||||
|
void
|
||||||
|
delete_temp_files (void)
|
||||||
|
{
|
||||||
|
while (name_list != NULL)
|
||||||
|
{
|
||||||
|
remove (name_list->name);
|
||||||
|
name_list = (struct name_list *) name_list->q.q_forw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Timeout handler. We kill the child and exit with an error. */
|
/* Timeout handler. We kill the child and exit with an error. */
|
||||||
void
|
void
|
||||||
timeout_handler (int sig __attribute__ ((unused)))
|
timeout_handler (int sig __attribute__ ((unused)))
|
||||||
@ -114,11 +148,20 @@ main (int argc, char *argv[])
|
|||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
test_dir = getenv ("TMPDIR");
|
||||||
|
if (test_dir == NULL || test_dir[0] == '\0')
|
||||||
|
test_dir = "/tmp";
|
||||||
|
}
|
||||||
|
|
||||||
/* 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
|
||||||
@ -166,8 +209,12 @@ main (int argc, char *argv[])
|
|||||||
#endif
|
#endif
|
||||||
if (WTERMSIG (status) != EXPECTED_SIGNAL)
|
if (WTERMSIG (status) != EXPECTED_SIGNAL)
|
||||||
{
|
{
|
||||||
|
if (EXPECTED_SIGNAL != 0)
|
||||||
fprintf (stderr, "Incorrect signal from child: got `%s', need `%s'\n",
|
fprintf (stderr, "Incorrect signal from child: got `%s', need `%s'\n",
|
||||||
strsignal (WTERMSIG (status)), strsignal (EXPECTED_SIGNAL));
|
strsignal (WTERMSIG (status)), strsignal (EXPECTED_SIGNAL));
|
||||||
|
else
|
||||||
|
fprintf (stderr, "Incorrect signal from child: got `%s'\n",
|
||||||
|
strsignal (WTERMSIG (status)));
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Convert string representing a number to integer value, using given locale.
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
Copyright (C) 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@cygnus.com>, 1997.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
@ -26,5 +26,8 @@
|
|||||||
|
|
||||||
extern double ____wcstod_l_internal (const wchar_t *, wchar_t **, int,
|
extern double ____wcstod_l_internal (const wchar_t *, wchar_t **, int,
|
||||||
__locale_t);
|
__locale_t);
|
||||||
|
extern unsigned long long int ____wcstoull_l_internal (const wchar_t *,
|
||||||
|
wchar_t **, int, int,
|
||||||
|
__locale_t);
|
||||||
|
|
||||||
#include <wcstod.c>
|
#include <wcstod.c>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Convert string representing a number to integer value, using given locale.
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
Copyright (C) 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@cygnus.com>, 1997.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
@ -26,5 +26,8 @@
|
|||||||
|
|
||||||
extern float ____wcstof_l_internal (const wchar_t *, wchar_t **, int,
|
extern float ____wcstof_l_internal (const wchar_t *, wchar_t **, int,
|
||||||
__locale_t);
|
__locale_t);
|
||||||
|
extern unsigned long long int ____wcstoull_l_internal (const wchar_t *,
|
||||||
|
wchar_t **, int, int,
|
||||||
|
__locale_t);
|
||||||
|
|
||||||
#include <wcstof.c>
|
#include <wcstof.c>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Convert string representing a number to integer value, using given locale.
|
/* Convert string representing a number to integer value, using given locale.
|
||||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
Copyright (C) 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@cygnus.com>, 1997.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
@ -26,5 +26,8 @@
|
|||||||
|
|
||||||
extern long double ____wcstold_l_internal (const wchar_t *, wchar_t **, int,
|
extern long double ____wcstold_l_internal (const wchar_t *, wchar_t **, int,
|
||||||
__locale_t);
|
__locale_t);
|
||||||
|
extern unsigned long long int ____wcstoull_l_internal (const wchar_t *,
|
||||||
|
wchar_t **, int, int,
|
||||||
|
__locale_t);
|
||||||
|
|
||||||
#include <wcstold.c>
|
#include <wcstold.c>
|
||||||
|
Loading…
Reference in New Issue
Block a user