2007-12-19 Jeff Johnston <jjohnstn@redhat.com>
* libc/string/strcasestr.c: Remove id macro. * libc/sys/linux/linuxthreads/attr.c: Fix up sched_priority field reference to be __sched_priority. * libc/sys/linux/linuxthreads/joinrace.c: Ditto. * libc/sys/linux/linuxthreads/manager.c: Ditto. * libc/sys/linux/stdlib/collate.c: Remove id macro. * libc/sys/linux/stdlib/collcmp.c: Ditto. * libc/sys/linux/stdlib/engine.c: Ditto. * libc/sys/linux/stdlib/fnmatch.c: Ditto. * libc/sys/linux/stdlib/glob.c: Ditto. * libc/sys/linux/stdlib/reallocf.c: Ditto. * libc/sys/linux/stdlib/regcomp.c: Ditto. * libc/sys/linux/stdlib/regerror.c: Ditto. * libc/sys/linux/stdlib/regexec.c: Ditto. * libc/sys/linux/stdlib/regfree.c: Ditto. * libc/sys/linux/sys/cdefs.h: Replace with latest version. * libc/sys/linux/include/argp.h: Ditto. * libc/sys/linux/sys/libc-lock.h: New file. * libc/sys/linux/sys/stdint.h: Ditto. * libc/sys/linux/include/sched.h: New file.
This commit is contained in:
parent
3cc8a378d1
commit
6af69de3d3
|
@ -1,3 +1,26 @@
|
|||
2007-12-19 Jeff Johnston <jjohnstn@redhat.com>
|
||||
|
||||
* libc/string/strcasestr.c: Remove id macro.
|
||||
* libc/sys/linux/linuxthreads/attr.c: Fix up sched_priority
|
||||
field reference to be __sched_priority.
|
||||
* libc/sys/linux/linuxthreads/joinrace.c: Ditto.
|
||||
* libc/sys/linux/linuxthreads/manager.c: Ditto.
|
||||
* libc/sys/linux/stdlib/collate.c: Remove id macro.
|
||||
* libc/sys/linux/stdlib/collcmp.c: Ditto.
|
||||
* libc/sys/linux/stdlib/engine.c: Ditto.
|
||||
* libc/sys/linux/stdlib/fnmatch.c: Ditto.
|
||||
* libc/sys/linux/stdlib/glob.c: Ditto.
|
||||
* libc/sys/linux/stdlib/reallocf.c: Ditto.
|
||||
* libc/sys/linux/stdlib/regcomp.c: Ditto.
|
||||
* libc/sys/linux/stdlib/regerror.c: Ditto.
|
||||
* libc/sys/linux/stdlib/regexec.c: Ditto.
|
||||
* libc/sys/linux/stdlib/regfree.c: Ditto.
|
||||
* libc/sys/linux/sys/cdefs.h: Replace with latest version.
|
||||
* libc/sys/linux/include/argp.h: Ditto.
|
||||
* libc/sys/linux/sys/libc-lock.h: New file.
|
||||
* libc/sys/linux/sys/stdint.h: Ditto.
|
||||
* libc/sys/linux/include/sched.h: New file.
|
||||
|
||||
2007-12-19 Dave Korn <dave.korn@artimi.com>
|
||||
Jeff Johnston <jjohnstn@redhhat.com>
|
||||
|
||||
|
|
|
@ -69,7 +69,6 @@ QUICKREF
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: /repoman/r/ncvs/src/lib/libc/string/strcasestr.c,v 1.4 2007/01/09 00:28:12 imp Exp $");
|
||||
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
|
|
|
@ -39,6 +39,14 @@ char *program_invocation_short_name;
|
|||
typedef int error_t;
|
||||
# define __error_t_defined
|
||||
#endif
|
||||
|
||||
#undef __THROW
|
||||
#define __THROW
|
||||
|
||||
#ifndef __NTH
|
||||
# define __NTH(fct) fct __THROW
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
/* Definitions for POSIX 1003.1b-1993 (aka POSIX.4) scheduling interface.
|
||||
Copyright (C) 1996,1997,1999,2001-2004,2007 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 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
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SCHED_H
|
||||
#define _SCHED_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
/* Get type definitions. */
|
||||
#include <bits/types.h>
|
||||
|
||||
#define __need_timespec
|
||||
#include <time.h>
|
||||
|
||||
/* Get system specific constant and data structure definitions. */
|
||||
#include <bits/sched.h>
|
||||
/* Define the real names for the elements of `struct sched_param'. */
|
||||
#define sched_priority __sched_priority
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Set scheduling parameters for a process. */
|
||||
extern int sched_setparam (__pid_t __pid, __const struct sched_param *__param)
|
||||
__THROW;
|
||||
|
||||
/* Retrieve scheduling parameters for a particular process. */
|
||||
extern int sched_getparam (__pid_t __pid, struct sched_param *__param) __THROW;
|
||||
|
||||
/* Set scheduling algorithm and/or parameters for a process. */
|
||||
extern int sched_setscheduler (__pid_t __pid, int __policy,
|
||||
__const struct sched_param *__param) __THROW;
|
||||
|
||||
/* Retrieve scheduling algorithm for a particular purpose. */
|
||||
extern int sched_getscheduler (__pid_t __pid) __THROW;
|
||||
|
||||
/* Yield the processor. */
|
||||
extern int sched_yield (void) __THROW;
|
||||
|
||||
/* Get maximum priority value for a scheduler. */
|
||||
extern int sched_get_priority_max (int __algorithm) __THROW;
|
||||
|
||||
/* Get minimum priority value for a scheduler. */
|
||||
extern int sched_get_priority_min (int __algorithm) __THROW;
|
||||
|
||||
/* Get the SCHED_RR interval for the named process. */
|
||||
extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW;
|
||||
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Access macros for `cpu_set'. */
|
||||
# define CPU_SETSIZE __CPU_SETSIZE
|
||||
# define CPU_SET(cpu, cpusetp) __CPU_SET (cpu, cpusetp)
|
||||
# define CPU_CLR(cpu, cpusetp) __CPU_CLR (cpu, cpusetp)
|
||||
# define CPU_ISSET(cpu, cpusetp) __CPU_ISSET (cpu, cpusetp)
|
||||
# define CPU_ZERO(cpusetp) __CPU_ZERO (cpusetp)
|
||||
# define CPU_COUNT(cpusetp) __CPU_COUNT (cpusetp)
|
||||
|
||||
|
||||
/* Set the CPU affinity for a task */
|
||||
extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
|
||||
__const cpu_set_t *__cpuset) __THROW;
|
||||
|
||||
/* Get the CPU affinity for a task */
|
||||
extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize,
|
||||
cpu_set_t *__cpuset) __THROW;
|
||||
#endif
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sched.h */
|
|
@ -29,7 +29,7 @@ int __pthread_attr_init_2_1(pthread_attr_t *attr)
|
|||
|
||||
attr->__detachstate = PTHREAD_CREATE_JOINABLE;
|
||||
attr->__schedpolicy = SCHED_OTHER;
|
||||
attr->__schedparam.sched_priority = 0;
|
||||
attr->__schedparam.__sched_priority = 0;
|
||||
attr->__inheritsched = PTHREAD_EXPLICIT_SCHED;
|
||||
attr->__scope = PTHREAD_SCOPE_SYSTEM;
|
||||
attr->__guardsize = ps;
|
||||
|
@ -47,7 +47,7 @@ int __pthread_attr_init_2_0(pthread_attr_t *attr)
|
|||
{
|
||||
attr->__detachstate = PTHREAD_CREATE_JOINABLE;
|
||||
attr->__schedpolicy = SCHED_OTHER;
|
||||
attr->__schedparam.sched_priority = 0;
|
||||
attr->__schedparam.__sched_priority = 0;
|
||||
attr->__inheritsched = PTHREAD_EXPLICIT_SCHED;
|
||||
attr->__scope = PTHREAD_SCOPE_SYSTEM;
|
||||
return 0;
|
||||
|
|
|
@ -35,7 +35,7 @@ main (void)
|
|||
return 1;
|
||||
}
|
||||
|
||||
sp1.sched_priority = 0;
|
||||
sp1.__sched_priority = 0;
|
||||
istatus = pthread_setschedparam (thread1, SCHED_OTHER, &sp1);
|
||||
if (istatus != ESRCH)
|
||||
{
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
/* The "thread manager" thread: manages creation and termination of threads */
|
||||
|
||||
#include <errno.h>
|
||||
#define __USE_MISC
|
||||
#include <sched.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
|
@ -594,7 +595,7 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr,
|
|||
break;
|
||||
}
|
||||
new_thread->p_priority =
|
||||
new_thread->p_start_args.schedparam.sched_priority;
|
||||
new_thread->p_start_args.schedparam.__sched_priority;
|
||||
}
|
||||
/* Finish setting up arguments to pthread_start_thread */
|
||||
new_thread->p_start_args.start_routine = start_routine;
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/libc/locale/collate.c,v 1.24 2002/03/29 22:43:42 markm Exp $");
|
||||
|
||||
#include "namespace.h"
|
||||
#include <rune.h>
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/libc/locale/collcmp.c,v 1.14 2002/03/22 21:52:18 obrien Exp $");
|
||||
|
||||
#define ASCII_COMPATIBLE_COLLATE /* see share/colldef */
|
||||
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/libc/regex/engine.c,v 1.12 2002/03/22 21:52:47 obrien Exp $");
|
||||
|
||||
/*
|
||||
* The matching engine and friends. This file is #included by regexec.c
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
static char sccsid[] = "@(#)fnmatch.c 8.2 (Berkeley) 4/16/94";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/libc/gen/fnmatch.c,v 1.15 2002/02/01 01:32:19 obrien Exp $");
|
||||
|
||||
/*
|
||||
* Function fnmatch() as specified in POSIX 1003.2-1992, section B.6.
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
static char sccsid[] = "@(#)glob.c 8.3 (Berkeley) 10/13/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/libc/gen/glob.c,v 1.19 2002/02/01 01:32:19 obrien Exp $");
|
||||
|
||||
/*
|
||||
* glob(3) -- a superset of the one defined in POSIX 1003.2.
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/libc/stdlib/reallocf.c,v 1.4 2002/03/22 21:53:10 obrien Exp $");
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
|
|
|
@ -41,7 +41,6 @@
|
|||
static char sccsid[] = "@(#)regcomp.c 8.5 (Berkeley) 3/20/94";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/libc/regex/regcomp.c,v 1.27 2002/03/22 21:52:47 obrien Exp $");
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -41,7 +41,6 @@
|
|||
static char sccsid[] = "@(#)regerror.c 8.4 (Berkeley) 3/20/94";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/libc/regex/regerror.c,v 1.7 2002/03/21 22:48:00 obrien Exp $");
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -41,7 +41,6 @@
|
|||
static char sccsid[] = "@(#)regexec.c 8.3 (Berkeley) 3/20/94";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/libc/regex/regexec.c,v 1.3 2002/03/21 18:41:51 obrien Exp $");
|
||||
|
||||
/*
|
||||
* the outer shell of regexec()
|
||||
|
|
|
@ -41,7 +41,6 @@
|
|||
static char sccsid[] = "@(#)regfree.c 8.3 (Berkeley) 3/20/94";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD: src/lib/libc/regex/regfree.c,v 1.5 2002/03/22 21:52:47 obrien Exp $");
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* Copyright (C) 1992,93,94,95,96,97,98,99,2000,2001 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1992-2001, 2002, 2004, 2005, 2006, 2007
|
||||
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
|
||||
|
@ -31,8 +32,6 @@
|
|||
# error "You need a ISO C conforming compiler to use the glibc headers"
|
||||
#endif
|
||||
|
||||
#define __FBSDID(x) /* nothing */
|
||||
|
||||
/* Some user header file might have defined this before. */
|
||||
#undef __P
|
||||
#undef __PMT
|
||||
|
@ -41,24 +40,28 @@
|
|||
|
||||
/* GCC can always grok prototypes. For C++ programs we add throw()
|
||||
to help it optimize the function calls. But this works only with
|
||||
gcc 2.8.x and egcs. */
|
||||
# if defined __cplusplus && __GNUC_PREREQ (2,8)
|
||||
# define __THROW throw ()
|
||||
gcc 2.8.x and egcs. For gcc 3.2 and up we even mark C functions
|
||||
as non-throwing using a function attribute since programs can use
|
||||
the -fexceptions options for C code as well. */
|
||||
# if !defined __cplusplus && __GNUC_PREREQ (3, 3)
|
||||
# define __THROW __attribute__ ((__nothrow__))
|
||||
# define __NTH(fct) __attribute__ ((__nothrow__)) fct
|
||||
# else
|
||||
# define __THROW
|
||||
# if defined __cplusplus && __GNUC_PREREQ (2,8)
|
||||
# define __THROW throw ()
|
||||
# define __NTH(fct) fct throw ()
|
||||
# else
|
||||
# define __THROW
|
||||
# define __NTH(fct) fct
|
||||
# endif
|
||||
# endif
|
||||
# define __P(args) args __THROW
|
||||
/* This macro will be used for functions which might take C++ callback
|
||||
functions. */
|
||||
# define __PMT(args) args
|
||||
|
||||
#else /* Not GCC. */
|
||||
|
||||
# define __inline /* No inline functions. */
|
||||
|
||||
# define __THROW
|
||||
# define __P(args) args
|
||||
# define __PMT(args) args
|
||||
# define __NTH(fct) fct
|
||||
|
||||
# define __const const
|
||||
# define __signed signed
|
||||
|
@ -66,6 +69,11 @@
|
|||
|
||||
#endif /* GCC. */
|
||||
|
||||
/* These two macros are not used in glibc anymore. They are kept here
|
||||
only because some other projects expect the macros to be defined. */
|
||||
#define __P(args) args
|
||||
#define __PMT(args) args
|
||||
|
||||
/* For these things, GCC behaves the ANSI way normally,
|
||||
and the non-ANSI way under -traditional. */
|
||||
|
||||
|
@ -87,6 +95,31 @@
|
|||
#endif
|
||||
|
||||
|
||||
/* The standard library needs the functions from the ISO C90 standard
|
||||
in the std namespace. At the same time we want to be safe for
|
||||
future changes and we include the ISO C99 code in the non-standard
|
||||
namespace __c99. The C++ wrapper header take case of adding the
|
||||
definitions to the global namespace. */
|
||||
#if defined __cplusplus && defined _GLIBCPP_USE_NAMESPACES
|
||||
# define __BEGIN_NAMESPACE_STD namespace std {
|
||||
# define __END_NAMESPACE_STD }
|
||||
# define __USING_NAMESPACE_STD(name) using std::name;
|
||||
# define __BEGIN_NAMESPACE_C99 namespace __c99 {
|
||||
# define __END_NAMESPACE_C99 }
|
||||
# define __USING_NAMESPACE_C99(name) using __c99::name;
|
||||
#else
|
||||
/* For compatibility we do not add the declarations into any
|
||||
namespace. They will end up in the global namespace which is what
|
||||
old code expects. */
|
||||
# define __BEGIN_NAMESPACE_STD
|
||||
# define __END_NAMESPACE_STD
|
||||
# define __USING_NAMESPACE_STD(name)
|
||||
# define __BEGIN_NAMESPACE_C99
|
||||
# define __END_NAMESPACE_C99
|
||||
# define __USING_NAMESPACE_C99(name)
|
||||
#endif
|
||||
|
||||
|
||||
/* Support for bounded pointers. */
|
||||
#ifndef __BOUNDED_POINTERS__
|
||||
# define __bounded /* nothing */
|
||||
|
@ -95,6 +128,12 @@
|
|||
#endif
|
||||
|
||||
|
||||
/* Fortify support. */
|
||||
#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
|
||||
#define __bos0(ptr) __builtin_object_size (ptr, 0)
|
||||
#define __warndecl(name, msg) extern void name (void)
|
||||
|
||||
|
||||
/* Support for flexible arrays. */
|
||||
#if __GNUC_PREREQ (2,97)
|
||||
/* GCC 2.97 supports C99 flexible array members. */
|
||||
|
@ -126,6 +165,13 @@
|
|||
#if defined __GNUC__ && __GNUC__ >= 2
|
||||
|
||||
# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
|
||||
# ifdef __cplusplus
|
||||
# define __REDIRECT_NTH(name, proto, alias) \
|
||||
name proto __THROW __asm__ (__ASMNAME (#alias))
|
||||
# else
|
||||
# define __REDIRECT_NTH(name, proto, alias) \
|
||||
name proto __asm__ (__ASMNAME (#alias)) __THROW
|
||||
# endif
|
||||
# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
|
||||
# define __ASMNAME2(prefix, cname) __STRING (prefix) cname
|
||||
|
||||
|
@ -173,6 +219,13 @@
|
|||
# define __attribute_noinline__ /* Ignore */
|
||||
#endif
|
||||
|
||||
/* gcc allows marking deprecated functions. */
|
||||
#if __GNUC_PREREQ (3,2)
|
||||
# define __attribute_deprecated__ __attribute__ ((__deprecated__))
|
||||
#else
|
||||
# define __attribute_deprecated__ /* Ignore */
|
||||
#endif
|
||||
|
||||
/* At some point during the gcc 2.8 development the `format_arg' attribute
|
||||
for functions was introduced. We don't want to use it unconditionally
|
||||
(although this would be possible) since it generates warnings.
|
||||
|
@ -196,6 +249,47 @@
|
|||
# define __attribute_format_strfmon__(a,b) /* Ignore */
|
||||
#endif
|
||||
|
||||
/* The nonull function attribute allows to mark pointer parameters which
|
||||
must not be NULL. */
|
||||
#if __GNUC_PREREQ (3,3)
|
||||
# define __nonnull(params) __attribute__ ((__nonnull__ params))
|
||||
#else
|
||||
# define __nonnull(params)
|
||||
#endif
|
||||
|
||||
/* If fortification mode, we warn about unused results of certain
|
||||
function calls which can lead to problems. */
|
||||
#if __GNUC_PREREQ (3,4)
|
||||
# define __attribute_warn_unused_result__ \
|
||||
__attribute__ ((__warn_unused_result__))
|
||||
# if __USE_FORTIFY_LEVEL > 0
|
||||
# define __wur __attribute_warn_unused_result__
|
||||
# endif
|
||||
#else
|
||||
# define __attribute_warn_unused_result__ /* empty */
|
||||
#endif
|
||||
#ifndef __wur
|
||||
# define __wur /* Ignore */
|
||||
#endif
|
||||
|
||||
/* Forces a function to be always inlined. */
|
||||
#if __GNUC_PREREQ (3,2)
|
||||
# define __always_inline __inline __attribute__ ((__always_inline__))
|
||||
#else
|
||||
# define __always_inline __inline
|
||||
#endif
|
||||
|
||||
/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
|
||||
inline semantics, unless -fgnu89-inline is used. */
|
||||
#ifdef __GNUC_STDC_INLINE__
|
||||
# define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
|
||||
# define __extern_always_inline \
|
||||
extern __always_inline __attribute__ ((__gnu_inline__))
|
||||
#else
|
||||
# define __extern_inline extern __inline
|
||||
# define __extern_always_inline extern __always_inline
|
||||
#endif
|
||||
|
||||
/* It is possible to compile containing GCC extensions even if GCC is
|
||||
run in pedantic mode if the uses are carefully marked using the
|
||||
`__extension__' keyword. But this is not generally available before
|
||||
|
@ -227,12 +321,29 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
/* The nonull function attribute allows to mark pointer parameters which
|
||||
must not be NULL. */
|
||||
#if __GNUC_PREREQ (3,3)
|
||||
# define __nonnull(params) __attribute__ ((__nonnull__ params))
|
||||
#else
|
||||
# define __nonnull(params)
|
||||
#include <bits/wordsize.h>
|
||||
|
||||
#if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH
|
||||
# define __LDBL_COMPAT 1
|
||||
# ifdef __REDIRECT
|
||||
# define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias)
|
||||
# define __LDBL_REDIR(name, proto) \
|
||||
__LDBL_REDIR1 (name, proto, __nldbl_##name)
|
||||
# define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias)
|
||||
# define __LDBL_REDIR_NTH(name, proto) \
|
||||
__LDBL_REDIR1_NTH (name, proto, __nldbl_##name)
|
||||
# define __LDBL_REDIR1_DECL(name, alias) \
|
||||
extern __typeof (name) name __asm (__ASMNAME (#alias));
|
||||
# define __LDBL_REDIR_DECL(name) \
|
||||
extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name));
|
||||
# endif
|
||||
#endif
|
||||
#if !defined __LDBL_COMPAT || !defined __REDIRECT
|
||||
# define __LDBL_REDIR1(name, proto, alias) name proto
|
||||
# define __LDBL_REDIR(name, proto) name proto
|
||||
# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW
|
||||
# define __LDBL_REDIR_NTH(name, proto) name proto __THROW
|
||||
# define __LDBL_REDIR_DECL(name)
|
||||
#endif
|
||||
|
||||
#endif /* sys/cdefs.h */
|
||||
|
|
|
@ -0,0 +1,297 @@
|
|||
/* libc-internal interface for mutex locks. LinuxThreads version.
|
||||
Copyright (C) 1996,1997,1998,1999,2000,2001 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. */
|
||||
|
||||
#ifndef _BITS_LIBC_LOCK_H
|
||||
#define _BITS_LIBC_LOCK_H 1
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
/* Mutex type. */
|
||||
#if defined(_LIBC) || defined(_IO_MTSAFE_IO)
|
||||
typedef pthread_mutex_t __libc_lock_t;
|
||||
typedef struct { pthread_mutex_t mutex; } __libc_lock_recursive_t;
|
||||
# ifdef __USE_UNIX98
|
||||
typedef pthread_rwlock_t __libc_rwlock_t;
|
||||
# else
|
||||
typedef struct __libc_rwlock_opaque__ __libc_rwlock_t;
|
||||
# endif
|
||||
#else
|
||||
typedef struct __libc_lock_opaque__ __libc_lock_t;
|
||||
typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t;
|
||||
typedef struct __libc_rwlock_opaque__ __libc_rwlock_t;
|
||||
#endif
|
||||
|
||||
/* Type for key to thread-specific data. */
|
||||
typedef pthread_key_t __libc_key_t;
|
||||
|
||||
/* Define a lock variable NAME with storage class CLASS. The lock must be
|
||||
initialized with __libc_lock_init before it can be used (or define it
|
||||
with __libc_lock_define_initialized, below). Use `extern' for CLASS to
|
||||
declare a lock defined in another module. In public structure
|
||||
definitions you must use a pointer to the lock structure (i.e., NAME
|
||||
begins with a `*'), because its storage size will not be known outside
|
||||
of libc. */
|
||||
#define __libc_lock_define(CLASS,NAME) \
|
||||
CLASS __libc_lock_t NAME;
|
||||
#define __libc_rwlock_define(CLASS,NAME) \
|
||||
CLASS __libc_rwlock_t NAME;
|
||||
#define __libc_lock_define_recursive(CLASS,NAME) \
|
||||
CLASS __libc_lock_recursive_t NAME;
|
||||
|
||||
/* Define an initialized lock variable NAME with storage class CLASS.
|
||||
|
||||
For the C library we take a deeper look at the initializer. For
|
||||
this implementation all fields are initialized to zero. Therefore
|
||||
we don't initialize the variable which allows putting it into the
|
||||
BSS section. (Except on PA-RISC and other odd architectures, where
|
||||
initialized locks must be set to one due to the lack of normal
|
||||
atomic operations.) */
|
||||
|
||||
#if __LT_SPINLOCK_INIT == 0
|
||||
# define __libc_lock_define_initialized(CLASS,NAME) \
|
||||
CLASS __libc_lock_t NAME;
|
||||
#else
|
||||
# define __libc_lock_define_initialized(CLASS,NAME) \
|
||||
CLASS __libc_lock_t NAME = PTHREAD_MUTEX_INITIALIZER;
|
||||
#endif
|
||||
|
||||
#define __libc_rwlock_define_initialized(CLASS,NAME) \
|
||||
CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER;
|
||||
|
||||
/* Define an initialized recursive lock variable NAME with storage
|
||||
class CLASS. */
|
||||
#define __libc_lock_define_initialized_recursive(CLASS,NAME) \
|
||||
CLASS __libc_lock_recursive_t NAME = _LIBC_LOCK_RECURSIVE_INITIALIZER;
|
||||
#define _LIBC_LOCK_RECURSIVE_INITIALIZER \
|
||||
{PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP}
|
||||
|
||||
/* Initialize the named lock variable, leaving it in a consistent, unlocked
|
||||
state. */
|
||||
#define __libc_lock_init(NAME) \
|
||||
(__pthread_mutex_init != NULL ? __pthread_mutex_init (&(NAME), NULL) : 0);
|
||||
#define __libc_rwlock_init(NAME) \
|
||||
(__pthread_rwlock_init != NULL ? __pthread_rwlock_init (&(NAME), NULL) : 0);
|
||||
|
||||
/* Same as last but this time we initialize a recursive mutex. */
|
||||
#define __libc_lock_init_recursive(NAME) \
|
||||
do { \
|
||||
if (__pthread_mutex_init != NULL) \
|
||||
{ \
|
||||
pthread_mutexattr_t __attr; \
|
||||
__pthread_mutexattr_init (&__attr); \
|
||||
__pthread_mutexattr_settype (&__attr, PTHREAD_MUTEX_RECURSIVE_NP); \
|
||||
__pthread_mutex_init (&(NAME).mutex, &__attr); \
|
||||
__pthread_mutexattr_destroy (&__attr); \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
/* Finalize the named lock variable, which must be locked. It cannot be
|
||||
used again until __libc_lock_init is called again on it. This must be
|
||||
called on a lock variable before the containing storage is reused. */
|
||||
#define __libc_lock_fini(NAME) \
|
||||
(__pthread_mutex_destroy != NULL ? __pthread_mutex_destroy (&(NAME)) : 0);
|
||||
#define __libc_rwlock_fini(NAME) \
|
||||
(__pthread_rwlock_destroy != NULL ? __pthread_rwlock_destroy (&(NAME)) : 0);
|
||||
|
||||
/* Finalize recursive named lock. */
|
||||
#define __libc_lock_fini_recursive(NAME) __libc_lock_fini ((NAME).mutex)
|
||||
|
||||
/* Lock the named lock variable. */
|
||||
#define __libc_lock_lock(NAME) \
|
||||
(__pthread_mutex_lock != NULL ? __pthread_mutex_lock (&(NAME)) : 0);
|
||||
#define __libc_rwlock_rdlock(NAME) \
|
||||
(__pthread_rwlock_rdlock != NULL ? __pthread_rwlock_rdlock (&(NAME)) : 0);
|
||||
#define __libc_rwlock_wrlock(NAME) \
|
||||
(__pthread_rwlock_wrlock != NULL ? __pthread_rwlock_wrlock (&(NAME)) : 0);
|
||||
|
||||
/* Lock the recursive named lock variable. */
|
||||
#define __libc_lock_lock_recursive(NAME) __libc_lock_lock ((NAME).mutex)
|
||||
|
||||
/* Try to lock the named lock variable. */
|
||||
#define __libc_lock_trylock(NAME) \
|
||||
(__pthread_mutex_trylock != NULL ? __pthread_mutex_trylock (&(NAME)) : 0)
|
||||
#define __libc_rwlock_tryrdlock(NAME) \
|
||||
(__pthread_rwlock_tryrdlock != NULL \
|
||||
? __pthread_rwlock_tryrdlock (&(NAME)) : 0)
|
||||
#define __libc_rwlock_trywrlock(NAME) \
|
||||
(__pthread_rwlock_trywrlock != NULL \
|
||||
? __pthread_rwlock_trywrlock (&(NAME)) : 0)
|
||||
|
||||
/* Try to lock the recursive named lock variable. */
|
||||
#define __libc_lock_trylock_recursive(NAME) __libc_lock_trylock ((NAME).mutex)
|
||||
|
||||
/* Unlock the named lock variable. */
|
||||
#define __libc_lock_unlock(NAME) \
|
||||
(__pthread_mutex_unlock != NULL ? __pthread_mutex_unlock (&(NAME)) : 0);
|
||||
#define __libc_rwlock_unlock(NAME) \
|
||||
(__pthread_rwlock_unlock != NULL ? __pthread_rwlock_unlock (&(NAME)) : 0);
|
||||
|
||||
/* Unlock the recursive named lock variable. */
|
||||
#define __libc_lock_unlock_recursive(NAME) __libc_lock_unlock ((NAME).mutex)
|
||||
|
||||
|
||||
/* Define once control variable. */
|
||||
#if PTHREAD_ONCE_INIT == 0
|
||||
/* Special case for static variables where we can avoid the initialization
|
||||
if it is zero. */
|
||||
# define __libc_once_define(CLASS, NAME) \
|
||||
CLASS pthread_once_t NAME
|
||||
#else
|
||||
# define __libc_once_define(CLASS, NAME) \
|
||||
CLASS pthread_once_t NAME = PTHREAD_ONCE_INIT
|
||||
#endif
|
||||
|
||||
/* Call handler iff the first call. */
|
||||
#define __libc_once(ONCE_CONTROL, INIT_FUNCTION) \
|
||||
do { \
|
||||
if (__pthread_once != NULL) \
|
||||
__pthread_once (&(ONCE_CONTROL), (INIT_FUNCTION)); \
|
||||
else if ((ONCE_CONTROL) == PTHREAD_ONCE_INIT) { \
|
||||
INIT_FUNCTION (); \
|
||||
(ONCE_CONTROL) = !PTHREAD_ONCE_INIT; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
/* Start critical region with cleanup. */
|
||||
#define __libc_cleanup_region_start(DOIT, FCT, ARG) \
|
||||
{ struct _pthread_cleanup_buffer _buffer; \
|
||||
int _avail = (DOIT) && _pthread_cleanup_push_defer != NULL; \
|
||||
if (_avail) { \
|
||||
_pthread_cleanup_push_defer (&_buffer, (FCT), (ARG)); \
|
||||
}
|
||||
|
||||
/* End critical region with cleanup. */
|
||||
#define __libc_cleanup_region_end(DOIT) \
|
||||
if (_avail) { \
|
||||
_pthread_cleanup_pop_restore (&_buffer, (DOIT)); \
|
||||
} \
|
||||
}
|
||||
|
||||
/* Sometimes we have to exit the block in the middle. */
|
||||
#define __libc_cleanup_end(DOIT) \
|
||||
if (_avail) { \
|
||||
_pthread_cleanup_pop_restore (&_buffer, (DOIT)); \
|
||||
}
|
||||
|
||||
/* Create thread-specific key. */
|
||||
#define __libc_key_create(KEY, DESTRUCTOR) \
|
||||
(__pthread_key_create != NULL ? __pthread_key_create (KEY, DESTRUCTOR) : 1)
|
||||
|
||||
/* Get thread-specific data. */
|
||||
#define __libc_getspecific(KEY) \
|
||||
(__pthread_getspecific != NULL ? __pthread_getspecific (KEY) : NULL)
|
||||
|
||||
/* Set thread-specific data. */
|
||||
#define __libc_setspecific(KEY, VALUE) \
|
||||
(__pthread_setspecific != NULL ? __pthread_setspecific (KEY, VALUE) : 0)
|
||||
|
||||
|
||||
/* Register handlers to execute before and after `fork'. */
|
||||
#define __libc_atfork(PREPARE, PARENT, CHILD) \
|
||||
(__pthread_atfork != NULL ? __pthread_atfork (PREPARE, PARENT, CHILD) : 0)
|
||||
|
||||
/* Functions that are used by this file and are internal to the GNU C
|
||||
library. */
|
||||
|
||||
extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
|
||||
__const pthread_mutexattr_t *__mutex_attr);
|
||||
|
||||
extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
|
||||
|
||||
extern int __pthread_mutex_trylock (pthread_mutex_t *__mutex);
|
||||
|
||||
extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);
|
||||
|
||||
extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex);
|
||||
|
||||
extern int __pthread_mutexattr_init (pthread_mutexattr_t *__attr);
|
||||
|
||||
extern int __pthread_mutexattr_destroy (pthread_mutexattr_t *__attr);
|
||||
|
||||
extern int __pthread_mutexattr_settype (pthread_mutexattr_t *__attr,
|
||||
int __kind);
|
||||
|
||||
#ifdef __USE_UNIX98
|
||||
extern int __pthread_rwlock_init (pthread_rwlock_t *__rwlock,
|
||||
__const pthread_rwlockattr_t *__attr);
|
||||
|
||||
extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
|
||||
|
||||
extern int __pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock);
|
||||
|
||||
extern int __pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock);
|
||||
|
||||
extern int __pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock);
|
||||
|
||||
extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
|
||||
|
||||
extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
|
||||
#endif
|
||||
|
||||
extern int __pthread_key_create (pthread_key_t *__key,
|
||||
void (*__destr_function) (void *));
|
||||
|
||||
extern int __pthread_setspecific (pthread_key_t __key,
|
||||
__const void *__pointer);
|
||||
|
||||
extern void *__pthread_getspecific (pthread_key_t __key);
|
||||
|
||||
extern int __pthread_once (pthread_once_t *__once_control,
|
||||
void (*__init_routine) (void));
|
||||
|
||||
extern int __pthread_atfork (void (*__prepare) (void),
|
||||
void (*__parent) (void),
|
||||
void (*__child) (void));
|
||||
|
||||
|
||||
|
||||
/* Make the pthread functions weak so that we can elide them from
|
||||
single-threaded processes. */
|
||||
#ifndef __NO_WEAK_PTHREAD_ALIASES
|
||||
# pragma weak __pthread_mutex_init
|
||||
# pragma weak __pthread_mutex_destroy
|
||||
# pragma weak __pthread_mutex_lock
|
||||
# pragma weak __pthread_mutex_trylock
|
||||
# pragma weak __pthread_mutex_unlock
|
||||
# pragma weak __pthread_mutexattr_init
|
||||
# pragma weak __pthread_mutexattr_destroy
|
||||
# pragma weak __pthread_mutexattr_settype
|
||||
# pragma weak __pthread_rwlock_destroy
|
||||
# pragma weak __pthread_rwlock_rdlock
|
||||
# pragma weak __pthread_rwlock_tryrdlock
|
||||
# pragma weak __pthread_rwlock_wrlock
|
||||
# pragma weak __pthread_rwlock_trywrlock
|
||||
# pragma weak __pthread_rwlock_unlock
|
||||
# pragma weak __pthread_key_create
|
||||
# pragma weak __pthread_setspecific
|
||||
# pragma weak __pthread_getspecific
|
||||
# pragma weak __pthread_once
|
||||
# pragma weak __pthread_initialize
|
||||
# pragma weak __pthread_atfork
|
||||
# pragma weak _pthread_cleanup_push_defer
|
||||
# pragma weak _pthread_cleanup_pop_restore
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* We need portable names for some functions. E.g., when they are
|
||||
used as argument to __libc_cleanup_region_start. */
|
||||
#define __libc_mutex_unlock __pthread_mutex_unlock
|
||||
|
||||
#endif /* bits/libc-lock.h */
|
|
@ -0,0 +1,254 @@
|
|||
/*
|
||||
* Copyright (c) 2004, 2005 by
|
||||
* Ralf Corsepius, Ulm/Germany. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software
|
||||
* is freely granted, provided that this notice is preserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @todo - Add fast<N>_t types.
|
||||
* @todo - Add support for wint_t types.
|
||||
*/
|
||||
|
||||
#ifndef _STDINT_H
|
||||
#define _STDINT_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined(__GNUC__) && (__GNUC__ >= 3 ) \
|
||||
&& defined(__GNUC_MINOR__) && (__GNUC_MINOR__ > 2 )
|
||||
#define __STDINT_EXP(x) __##x##__
|
||||
#else
|
||||
#define __STDINT_EXP(x) x
|
||||
#include <limits.h>
|
||||
#endif
|
||||
|
||||
#if __STDINT_EXP(SCHAR_MAX) == 0x7f
|
||||
#define __int8_t_defined 1
|
||||
#endif
|
||||
|
||||
#if __int8_t_defined
|
||||
typedef signed char int_least8_t;
|
||||
typedef unsigned char uint_least8_t;
|
||||
#define __int_least8_t_defined 1
|
||||
#endif
|
||||
|
||||
#if __STDINT_EXP(SHRT_MAX) == 0x7fff
|
||||
#define __int16_t_defined 1
|
||||
#elif __STDINT_EXP(INT_MAX) == 0x7fff
|
||||
#define __int16_t_defined 1
|
||||
#elif __STDINT_EXP(SCHAR_MAX) == 0x7fff
|
||||
#define __int16_t_defined 1
|
||||
#endif
|
||||
|
||||
#if __int16_t_defined
|
||||
typedef int16_t int_least16_t;
|
||||
typedef uint16_t uint_least16_t;
|
||||
#define __int_least16_t_defined 1
|
||||
|
||||
#ifndef __int_least8_t_defined
|
||||
typedef int16_t int_least8_t;
|
||||
typedef uint16_t uint_least8_t;
|
||||
#define __int_least8_t_defined 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if __STDINT_EXP(INT_MAX) == 0x7fffffffL
|
||||
#define __int32_t_defined 1
|
||||
#elif __STDINT_EXP(LONG_MAX) == 0x7fffffffL
|
||||
#define __int32_t_defined 1
|
||||
#define __have_long32 1
|
||||
#elif __STDINT_EXP(SHRT_MAX) == 0x7fffffffL
|
||||
#define __int32_t_defined 1
|
||||
#elif __STDINT_EXP(SCHAR_MAX) == 0x7fffffffL
|
||||
#define __int32_t_defined 1
|
||||
#endif
|
||||
|
||||
#if __int32_t_defined
|
||||
typedef int32_t int_least32_t;
|
||||
typedef uint32_t uint_least32_t;
|
||||
#define __int_least32_t_defined 1
|
||||
|
||||
#ifndef __int_least8_t_defined
|
||||
typedef int32_t int_least8_t;
|
||||
typedef uint32_t uint_least8_t;
|
||||
#define __int_least8_t_defined 1
|
||||
#endif
|
||||
|
||||
#ifndef __int_least16_t_defined
|
||||
typedef int32_t int_least16_t;
|
||||
typedef uint32_t uint_least16_t;
|
||||
#define __int_least16_t_defined 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if __STDINT_EXP(LONG_MAX) > 0x7fffffff
|
||||
#define __int64_t_defined 1
|
||||
#define __have_long64 1
|
||||
#elif defined(__LONG_LONG_MAX__) && (__LONG_LONG_MAX__ > 0x7fffffff)
|
||||
#define __int64_t_defined 1
|
||||
#define __have_longlong64 1
|
||||
#elif defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff)
|
||||
#define __int64_t_defined 1
|
||||
#define __have_longlong64 1
|
||||
#elif __STDINT_EXP(INT_MAX) > 0x7fffffff
|
||||
#define __int64_t_defined 1
|
||||
#endif
|
||||
|
||||
#if __int64_t_defined
|
||||
typedef int64_t int_least64_t;
|
||||
typedef uint64_t uint_least64_t;
|
||||
#define __int_least64_t_defined 1
|
||||
|
||||
#ifndef __int_least8_t_defined
|
||||
typedef int64_t int_least8_t;
|
||||
typedef uint64_t uint_least8_t;
|
||||
#define __int_least8_t_defined 1
|
||||
#endif
|
||||
|
||||
#ifndef __int_least16_t_defined
|
||||
typedef int64_t int_least16_t;
|
||||
typedef uint64_t uint_least16_t;
|
||||
#define __int_least16_t_defined 1
|
||||
#endif
|
||||
|
||||
#ifndef __int_least32_t_defined
|
||||
typedef int64_t int_least32_t;
|
||||
typedef uint64_t uint_least32_t;
|
||||
#define __int_least32_t_defined 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if __have_longlong64
|
||||
typedef signed long long intmax_t;
|
||||
typedef unsigned long long uintmax_t;
|
||||
#else
|
||||
typedef signed long intmax_t;
|
||||
typedef unsigned long uintmax_t;
|
||||
#endif
|
||||
|
||||
/* Limits of Specified-Width Integer Types */
|
||||
|
||||
#if __int8_t_defined
|
||||
#define INT8_MIN -128
|
||||
#define INT8_MAX 127
|
||||
#define UINT8_MAX 255
|
||||
#endif
|
||||
|
||||
#if __int_least8_t_defined
|
||||
#define INT_LEAST8_MIN -128
|
||||
#define INT_LEAST8_MAX 127
|
||||
#define UINT_LEAST8_MAX 255
|
||||
#else
|
||||
#error required type int_least8_t missing
|
||||
#endif
|
||||
|
||||
#if __int16_t_defined
|
||||
#define INT16_MIN -32768
|
||||
#define INT16_MAX 32767
|
||||
#define UINT16_MAX 65535
|
||||
#endif
|
||||
|
||||
#if __int_least16_t_defined
|
||||
#define INT_LEAST16_MIN -32768
|
||||
#define INT_LEAST16_MAX 32767
|
||||
#define UINT_LEAST16_MAX 65535
|
||||
#else
|
||||
#error required type int_least16_t missing
|
||||
#endif
|
||||
|
||||
#if __int32_t_defined
|
||||
#define INT32_MIN (-2147483647-1)
|
||||
#define INT32_MAX 2147483647
|
||||
#define UINT32_MAX 4294967295U
|
||||
#endif
|
||||
|
||||
#if __int_least32_t_defined
|
||||
#define INT_LEAST32_MIN (-2147483647-1)
|
||||
#define INT_LEAST32_MAX 2147483647
|
||||
#define UINT_LEAST32_MAX 4294967295U
|
||||
#else
|
||||
#error required type int_least32_t missing
|
||||
#endif
|
||||
|
||||
#if __int64_t_defined
|
||||
#ifdef __have_long64
|
||||
#define INT64_MIN (-9223372036854775807L-1L)
|
||||
#define INT64_MAX 9223372036854775807L
|
||||
#define UINT64_MAX 18446744073709551615U
|
||||
#elif __have_longlong64
|
||||
#define INT64_MIN (-9223372036854775807LL-1LL)
|
||||
#define INT64_MAX 9223372036854775807LL
|
||||
#define UINT64_MAX 18446744073709551615ULL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if __int_least64_t_defined
|
||||
#ifdef __have_long64
|
||||
#define INT_LEAST64_MIN (-9223372036854775807L-1L)
|
||||
#define INT_LEAST64_MAX 9223372036854775807L
|
||||
#define UINT_LEAST64_MAX 18446744073709551615U
|
||||
#elif __have_longlong64
|
||||
#define INT_LEAST64_MIN (-9223372036854775807LL-1LL)
|
||||
#define INT_LEAST64_MAX 9223372036854775807LL
|
||||
#define UINT_LEAST64_MAX 18446744073709551615ULL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* This must match size_t in stddef.h, currently long unsigned int */
|
||||
#define SIZE_MIN (-__STDINT_EXP(LONG_MAX) - 1L)
|
||||
#define SIZE_MAX __STDINT_EXP(LONG_MAX)
|
||||
|
||||
/* This must match sig_atomic_t in <signal.h> (currently int) */
|
||||
#define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)
|
||||
#define SIG_ATOMIC_MAX __STDINT_EXP(INT_MAX)
|
||||
|
||||
/* This must match ptrdiff_t in <stddef.h> (currently long int) */
|
||||
#define PTRDIFF_MIN (-__STDINT_EXP(LONG_MAX) - 1L)
|
||||
#define PTRDIFF_MAX __STDINT_EXP(LONG_MAX)
|
||||
|
||||
/** Macros for minimum-width integer constant expressions */
|
||||
#define INT8_C(x) x
|
||||
#define UINT8_C(x) x##U
|
||||
|
||||
#define INT16_C(x) x
|
||||
#define UINT16_C(x) x##U
|
||||
|
||||
#if __have_long32
|
||||
#define INT32_C(x) x##L
|
||||
#define UINT32_C(x) x##UL
|
||||
#else
|
||||
#define INT32_C(x) x
|
||||
#define UINT32_C(x) x##U
|
||||
#endif
|
||||
|
||||
#if __int64_t_defined
|
||||
#if __have_longlong64
|
||||
#define INT64_C(x) x##LL
|
||||
#define UINT64_C(x) x##ULL
|
||||
#else
|
||||
#define INT64_C(x) x##L
|
||||
#define UINT64_C(x) x##UL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/** Macros for greatest-width integer constant expression */
|
||||
#if __have_longlong64
|
||||
#define INTMAX_C(x) x##LL
|
||||
#define UINTMAX_C(x) x##ULL
|
||||
#else
|
||||
#define INTMAX_C(x) x##L
|
||||
#define UINTMAX_C(x) x##UL
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _STDINT_H */
|
Loading…
Reference in New Issue