2016-01-05 00:05:18 +08:00
|
|
|
/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
|
2003-04-12 08:14:16 +08:00
|
|
|
This file is part of the GNU C Library.
|
|
|
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
|
|
|
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2.1 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
|
|
|
|
Lesser General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2012-02-10 07:18:22 +08:00
|
|
|
License along with the GNU C Library; if not, see
|
|
|
|
<http://www.gnu.org/licenses/>. */
|
2003-04-12 08:14:16 +08:00
|
|
|
|
|
|
|
#include "pthreadP.h"
|
|
|
|
|
|
|
|
|
|
|
|
void
|
Convert miscellaneous function definitions to prototype style.
This patch converts various miscellaneous functions definitions in
glibc, found with grep and not covered by my previous scripted
conversions, from old-style K&R to prototype-style. These changes
were made manually. This is not necessarily exhaustive as formatting
variants may have prevented my grep from finding some such
definitions.
Regarding the changes to files from GMP, they may originally have been
omitted when removing __STDC__ conditionals because of the files
coming from another package, but (a) GMP no longer has __STDC__
conditionals there anyway and (b) we don't try to keep these files
verbatim in sync with GMP (and there are licensing differences), so
making the change to them in glibc seems reasonable.
Tested for x86_64 and x86 (testsuite - this patch affects files
containing assertions).
* debug/fortify_fail.c (__fortify_fail): Convert to
prototype-style function definition. Use internal_function.
* libio/genops.c (save_for_backup): Convert to prototype-style
function definition.
* libio/wgenops.c (save_for_wbackup): Likewise.
* login/grantpt.c (grantpt): Likewise.
* login/ptsname.c (ptsname): Likewise.
(__ptsname_r): Likewise.
* login/unlockpt.c (unlockpt): Likewise.
* mach/msgserver.c (__mach_msg_server): Likewise.
* misc/efgcvt.c (__APPEND (FUNC_PREFIX, fcvt)): Likewise.
(__APPEND (FUNC_PREFIX, ecvt)): Likewise.
(__APPEND (FUNC_PREFIX, gcvt)): Likewise.
* misc/efgcvt_r.c (__APPEND (FUNC_PREFIX, fcvt_r)): Likewise.
(__APPEND (FUNC_PREFIX, ecvt_r)): Likewise.
* nptl/cleanup_compat.c (_pthread_cleanup_push): Likewise.
* nptl/cleanup_defer_compat.c (_pthread_cleanup_push_defer):
Likewise.
* nptl/libc_pthread_init.c (__libc_pthread_init): Likewise. Use
internal_function.
* nptl/pthread_atfork.c (__pthread_atfork): Convert to
prototype-style function definition.
* nptl/pthread_create.c (__pthread_create_2_1): Likewise.
[SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1)]
(__pthread_create_2_0): Likewise.
* nptl/pthread_key_create.c (__pthread_key_create): Likewise.
* nptl/register-atfork.c (__register_atfork): Likewise.
* posix/glob.c (glob): Likewise.
* posix/regcomp.c (re_comp): Likewise.
* posix/regexec.c (re_exec): Likewise.
* stdlib/add_n.c [__STDC__]: Make code unconditional.
[!__STDC__]: Remove conditional code.
* stdlib/cmp.c [__STDC__]: Make code unconditional.
[!__STDC__]: Remove conditional code.
* stdlib/divmod_1.c [__STDC__]: Make code unconditional.
[!__STDC__]: Remove conditional code.
* stdlib/divrem.c [__STDC__]: Make code unconditional.
[!__STDC__]: Remove conditional code.
* stdlib/lshift.c [__STDC__]: Make code unconditional.
[!__STDC__]: Remove conditional code.
* stdlib/mod_1.c [__STDC__]: Make code unconditional.
[!__STDC__]: Remove conditional code.
* stdlib/mul.c [__STDC__]: Make code unconditional.
[!__STDC__]: Remove conditional code.
* stdlib/mul_n.c [__STDC__]: Make code unconditional.
[!__STDC__]: Remove conditional code.
* stdlib/rshift.c [__STDC__]: Make code unconditional.
[!__STDC__]: Remove conditional code.
* stdlib/strtod.c (INTERNAL (STRTOF)): Convert to prototype-style
function definition.
(STRTOF): Likewise.
* stdlib/strtod_l.c (__STRTOF): Likewise.
* stdlib/strtol.c (INTERNAL (strtol)): Likewise.
* stdlib/strtol_l.c (INTERNAL (__strtol_l)): Likewise.
(__strtol_l): Likewise.
* stdlib/sub_n.c [__STDC__]: Make code unconditional.
[!__STDC__]: Remove conditional code.
* string/memrchr.c (MEMRCHR): Convert to prototype-style function
definition.
* string/strcasecmp.c (LOCALE_PARAM_DECL): Remove macro.
[USE_IN_EXTENDED_LOCALE_MODEL] (LOCALE_PARAM): Include argument
type.
(__strcasecmp): Convert to prototype-style function definition.
* string/strncase.c (LOCALE_PARAM_DECL): Remove macro.
[USE_IN_EXTENDED_LOCALE_MODEL] (LOCALE_PARAM): Include argument
type.
(__strncasecmp): Convert to prototype-style function definition.
* sunrpc/pm_getport.c (__libc_rpc_getport): Likewise.
* sunrpc/xdr.c (xdr_union): Likewise.
* sunrpc/xdr_array.c (xdr_array): Likewise.
* sunrpc/xdr_ref.c (xdr_reference): Likewise.
* sysdeps/m68k/m680x0/fpu/s_atan.c (__CONCATX(__,FUNC)): Likewise.
* sysdeps/m68k/m680x0/fpu/s_isinf.c (__CONCATX(__,FUNC)):
Likewise.
* sysdeps/m68k/m680x0/fpu/s_scalbn.c (__CONCATX(__scalbn,suffix):
Likewise.
* sysdeps/m68k/m680x0/fpu/s_sincos.c (CONCATX(__,FUNC)): Likewise.
* sysdeps/unix/sysv/linux/i386/scandir64.c (__old_scandir64):
Likewise.
* time/strftime_l.c (LOCALE_PARAM_DECL): Remove macro.
(LOCALE_PARAM_PROTO): Likewise.
[_LIBC && USE_IN_EXTENDED_LOCALE_MODEL] (LOCALE_PARAM): Include
argument type.
(ut_argument_spec): Remove macro.
(ut_argument_spec_iso): Rename to ut_argument_spec.
(memcpy_lowcase): Use LOCALE_PARAM in declaration. Convert to
prototype-style function definition.
(memcpy_uppcase): Likewise.
(__strftime_internal): Likewise.
(my_strftime): Likewise.
* time/strptime_l.c (LOCALE_PARAM_PROTO): Remove macro.
(LOCALE_PARAM_DECL): Likewise.
[_LIBC] (LOCALE_PARAM): Include argument type.
(__strptime_internal): Convert to prototype-style function
definition.
(strptime): Likewise.
* wcsmbs/wcscasecmp.c (LOCALE_PARAM_DECL): Remove macro.
[USE_IN_EXTENDED_LOCALE_MODEL] (LOCALE_PARAM): Include argument
type.
(__wcscasecmp): Convert to prototype-style function definition.
* wcsmbs/wcsncase.c (LOCALE_PARAM_DECL): Remove macro.
[USE_IN_EXTENDED_LOCALE_MODEL] (LOCALE_PARAM): Include argument
type.
(__wcsncasecmp): Convert to prototype-style function definition.
2015-10-21 05:27:22 +08:00
|
|
|
_pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
|
|
|
|
void (*routine) (void *), void *arg)
|
2003-04-12 08:14:16 +08:00
|
|
|
{
|
|
|
|
struct pthread *self = THREAD_SELF;
|
|
|
|
|
|
|
|
buffer->__routine = routine;
|
|
|
|
buffer->__arg = arg;
|
|
|
|
buffer->__prev = THREAD_GETMEM (self, cleanup);
|
|
|
|
|
|
|
|
int cancelhandling = THREAD_GETMEM (self, cancelhandling);
|
|
|
|
|
|
|
|
/* Disable asynchronous cancellation for now. */
|
2014-02-10 21:45:42 +08:00
|
|
|
if (__glibc_unlikely (cancelhandling & CANCELTYPE_BITMASK))
|
2003-04-12 08:14:16 +08:00
|
|
|
while (1)
|
|
|
|
{
|
|
|
|
int curval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
|
|
|
|
cancelhandling
|
|
|
|
& ~CANCELTYPE_BITMASK,
|
|
|
|
cancelhandling);
|
2014-02-10 21:45:42 +08:00
|
|
|
if (__glibc_likely (curval == cancelhandling))
|
2003-04-12 08:14:16 +08:00
|
|
|
/* Successfully replaced the value. */
|
|
|
|
break;
|
|
|
|
|
|
|
|
/* Prepare for the next round. */
|
|
|
|
cancelhandling = curval;
|
|
|
|
}
|
|
|
|
|
|
|
|
buffer->__canceltype = (cancelhandling & CANCELTYPE_BITMASK
|
|
|
|
? PTHREAD_CANCEL_ASYNCHRONOUS
|
|
|
|
: PTHREAD_CANCEL_DEFERRED);
|
|
|
|
|
|
|
|
THREAD_SETMEM (self, cleanup, buffer);
|
|
|
|
}
|
|
|
|
strong_alias (_pthread_cleanup_push_defer, __pthread_cleanup_push_defer)
|
|
|
|
|
|
|
|
|
|
|
|
void
|
2015-10-20 05:23:47 +08:00
|
|
|
_pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
|
|
|
|
int execute)
|
2003-04-12 08:14:16 +08:00
|
|
|
{
|
|
|
|
struct pthread *self = THREAD_SELF;
|
|
|
|
|
|
|
|
THREAD_SETMEM (self, cleanup, buffer->__prev);
|
|
|
|
|
|
|
|
int cancelhandling;
|
|
|
|
if (__builtin_expect (buffer->__canceltype != PTHREAD_CANCEL_DEFERRED, 0)
|
|
|
|
&& ((cancelhandling = THREAD_GETMEM (self, cancelhandling))
|
|
|
|
& CANCELTYPE_BITMASK) == 0)
|
|
|
|
{
|
|
|
|
while (1)
|
|
|
|
{
|
|
|
|
int curval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
|
|
|
|
cancelhandling
|
|
|
|
| CANCELTYPE_BITMASK,
|
|
|
|
cancelhandling);
|
2014-02-10 21:45:42 +08:00
|
|
|
if (__glibc_likely (curval == cancelhandling))
|
2003-04-12 08:14:16 +08:00
|
|
|
/* Successfully replaced the value. */
|
|
|
|
break;
|
|
|
|
|
|
|
|
/* Prepare for the next round. */
|
|
|
|
cancelhandling = curval;
|
|
|
|
}
|
|
|
|
|
|
|
|
CANCELLATION_P (self);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* If necessary call the cleanup routine after we removed the
|
|
|
|
current cleanup block from the list. */
|
|
|
|
if (execute)
|
|
|
|
buffer->__routine (buffer->__arg);
|
|
|
|
}
|
|
|
|
strong_alias (_pthread_cleanup_pop_restore, __pthread_cleanup_pop_restore)
|