* include/_mingw.h: Increment version to 2.0.
* Makefile.in: Ditto. Merge in mingwex branch.
This commit is contained in:
parent
5f74ae83e5
commit
dc8971488e
16
winsup/mingw/CRT_fp10.c
Normal file
16
winsup/mingw/CRT_fp10.c
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
* CRT_FP10.c
|
||||||
|
*
|
||||||
|
* This defines _fpreset as asm ("fnint"). Calls to _fpreset
|
||||||
|
* will set default floating point precesion to 64-bit mantissa
|
||||||
|
* at app startup.
|
||||||
|
*
|
||||||
|
* Linking in CRT_FP10.o before libmingw.a will override the definition
|
||||||
|
* set in CRT_FP8.o.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Override library _fpreset() with asm fninit */
|
||||||
|
void _fpreset (void)
|
||||||
|
{ __asm__ ( "fninit" ) ;}
|
||||||
|
|
||||||
|
void __attribute__ ((alias ("_fpreset"))) fpreset(void);
|
18
winsup/mingw/CRT_fp8.c
Normal file
18
winsup/mingw/CRT_fp8.c
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* CRT_FP8.c
|
||||||
|
*
|
||||||
|
* This forces calls of _fpreset to the MSVCRT function
|
||||||
|
* exported from dll. Effectively it make default
|
||||||
|
* precison same as apps built with MSVC (53-bit mantissa).
|
||||||
|
|
||||||
|
*
|
||||||
|
* To change to 64-bit mantissa, link in CRT_FP10.o before libmingw.a.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Link against the _fpreset visible in import lib */
|
||||||
|
|
||||||
|
extern void (*_imp___fpreset)(void) ;
|
||||||
|
void _fpreset (void)
|
||||||
|
{ (*_imp___fpreset)(); }
|
||||||
|
|
||||||
|
void __attribute__ ((alias ("_fpreset"))) fpreset(void);
|
@ -1,3 +1,388 @@
|
|||||||
|
2002-06-13 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
|
||||||
|
* include/_mingw.h: Increment version to 2.0.
|
||||||
|
* Makefile.in: Ditto.
|
||||||
|
|
||||||
|
Merge in mingwex branch.
|
||||||
|
|
||||||
|
2002-06-11 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* include/math.h (fdim, fdimf, fdiml): Add prototypes.
|
||||||
|
* mingwex/fdim.c: New file.
|
||||||
|
* mingwex/fdimf.c: New file.
|
||||||
|
* mingwex/fdiml.c: New file.
|
||||||
|
* mingwex/Makefile.in (DISTFILES): Add fdim.c, fdimf.c,
|
||||||
|
fdiml.c.
|
||||||
|
(MATHOBJS):Add fdim.o, fdimf.o. fdiml.o.
|
||||||
|
|
||||||
|
2002-05-23 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* mingwex/Makefile.in (DISTFILES): Add truncf.c, truncl.c.
|
||||||
|
|
||||||
|
2002-05-22 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* mingwex/isnanl.c: New file.
|
||||||
|
|
||||||
|
2002-05-21 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* include/stdint.h: Include stddef.h to get
|
||||||
|
wchar_t and wint_t.
|
||||||
|
(WINT_MAX): Define to ((wint_t)-1).
|
||||||
|
|
||||||
|
2002-05-21 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* include/wctype.h: Replace 'inline' with '__inline__'.
|
||||||
|
* include/inttypes.h: Likewise.
|
||||||
|
|
||||||
|
2002-05-16 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* include/_mingw.h (__MINGW_IMPORT): Put extern at start
|
||||||
|
to avoid warnings. Thanks to: Oscar Fuentes <ofv@wanadoo.es>.
|
||||||
|
|
||||||
|
2002-05-16 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* mingwex/snprintf.c: Split out vsnprintf to....
|
||||||
|
* mingwex/vsnprintf.c: New file.
|
||||||
|
* mingwex/snwprintf.c: Split out vsnwprintf to...
|
||||||
|
* mingwex/vsnwprintf.c: New file.
|
||||||
|
* mingwex/Makefile.in: Adjust DISTFILES and STDIO_STUB_OBJS.
|
||||||
|
|
||||||
|
2002-05-15 Pascal Obry <obry@gnat.com>
|
||||||
|
* include/dirent.h (DIR): Change dd_stat type to int.
|
||||||
|
(_WDIR): Likewise.
|
||||||
|
|
||||||
|
2002-05-07 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* include/stdio.h (vsnprintf): Change inline to __inline__;
|
||||||
|
(vsnwprintf): Likewise.
|
||||||
|
* include/wchar.h (vsnwprintf): Likewise.
|
||||||
|
(wcstof): Likewise.
|
||||||
|
(fwide): Likewise.
|
||||||
|
(mbsinit): Likewise.
|
||||||
|
|
||||||
|
2002-04-29 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
Change FP default precison from 53 to 64-bit mantissa.
|
||||||
|
* Makefile.in (CRT0S): Add CRT_fp8.o.
|
||||||
|
(MINGW_OBJS): Replace CRT_fp8.o with CRT_fp10.o.
|
||||||
|
* include/float.h: Replace standard float.h defines with
|
||||||
|
#include_next<float.h> to use GCC's defines. Adjust comments
|
||||||
|
to reflect change.
|
||||||
|
|
||||||
|
2002-04-26 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* include/dos.h: Change prefix "__imp_" to "_imp__" for
|
||||||
|
__GNUC__ without __DECLSPEC_SUPPORTED.
|
||||||
|
* include/fnctl.h: Likewise.
|
||||||
|
* include/math.h: Likewise.
|
||||||
|
* include/stdio.h: Likewise.
|
||||||
|
* include/stdlib.h: Likewise.
|
||||||
|
* include/time.h: Likewise.
|
||||||
|
* include/wctype.h: Likewise.
|
||||||
|
* include/ctype.h: Likewise.
|
||||||
|
|
||||||
|
2002-04-26 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
Add atexit support for dlls.
|
||||||
|
* crt1.c (atexit): Force thunk to _imp__atexit.
|
||||||
|
(_onexit): Force thunk to _imp___onexit.
|
||||||
|
* dllcrt1.c (DllMainCRTStartup): Initialise private atexit
|
||||||
|
table on DLL_PROCESS_ATTACH, clean it up on DLL_PROCESS_DETACH.
|
||||||
|
(__dll_exit): New function to run atexit-registered functions
|
||||||
|
and flush output buffers on DLL_PROCESS_DETACH or failed
|
||||||
|
DLL_PROCESS_ATTACH.
|
||||||
|
(atexit): Force use of private atexit table via _dllonexit,
|
||||||
|
(_onexit): New function. Force use of private atexit table via
|
||||||
|
_dllonexit,
|
||||||
|
* mscvrt.def (atexit, _onexit): Add DATA keyword so that only
|
||||||
|
_imp_<_symbol> is visible in import lib.
|
||||||
|
* mscvrt20.def: Likewise.
|
||||||
|
* mscvrt40.def: Likewise.
|
||||||
|
* crtdll.def: Likewise.
|
||||||
|
|
||||||
|
2002-04-26 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* include/fenv.h: Change header guard macro to _FENV_H_.
|
||||||
|
(fenv_t, fexcept_t): Move into block protected by
|
||||||
|
#ifndef RC_INVOKED.
|
||||||
|
Cleanup some whitespace.
|
||||||
|
* include/inttypes.h: Change header guard macro to
|
||||||
|
_INTTYPES_H_.
|
||||||
|
|
||||||
|
2002-04-26 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* include/math.h (copysignl): Declare.
|
||||||
|
* mingwex/Makefile.in (DISTFILES): Add copysignl.S.
|
||||||
|
(MATHOBJS):Add copysignl.o.
|
||||||
|
|
||||||
|
2002-04-24 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* include/math.h (__signbitl, __isnanl): Declare.
|
||||||
|
|
||||||
|
2002-04-24 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* include/math.h (nanl, __fpcassifyl, fminl, fmaxl, rintl,
|
||||||
|
roundl, truncl, fmal, log2l): Declare.
|
||||||
|
Protect C99 declarations with _STDC_VERSION__ >= 199901L)
|
||||||
|
|| !defined __STRICT_ANSI__.
|
||||||
|
* mingwex/fmax.c (fmax): Call __isnan, not _isnan.
|
||||||
|
* mingwex/fmin.c (fmin): Likewise.
|
||||||
|
* mingwex/fmaxf.c (fmaxf): Call __isnanf, not _isnan.
|
||||||
|
* mingwex/fminf.c (fminf): Likewise.
|
||||||
|
* mingwex/fmaxl.c: New file.
|
||||||
|
* mingwex/fminl.c: New file.
|
||||||
|
* mingwex/fpclassify.c (__fpclassifyf): Split out to ...
|
||||||
|
* mingwex/fpclassifyf.c: New file.
|
||||||
|
* mingwex/fpclassifyl.c: New file.
|
||||||
|
* mingwex/rint.c (rintf): Split out to...
|
||||||
|
* mingwex/rintf.c: New file.
|
||||||
|
* mingwex/rintl.c: New file.
|
||||||
|
* mingwex/round.c (roundf): Split out to...
|
||||||
|
* mingwex/roundf.c: New file.
|
||||||
|
* mingwex/roundl.c: New file.
|
||||||
|
* mingwex/trunc.c (truncf): Split out to...
|
||||||
|
* mingwex/truncf.c: New file.
|
||||||
|
* mingwex/truncl.c: New file.
|
||||||
|
* mingwex/signbit.c (signbitf): Split out to...
|
||||||
|
* mingwex/signbitf.c: New file.
|
||||||
|
* mingwex/signbitl.c: New file.
|
||||||
|
* mingwex/fmal.c: New file.
|
||||||
|
* mingwex/copysignl.S: New file.
|
||||||
|
* mingwex/log2l.c: New file.
|
||||||
|
* mingwex/fp_consts.c: Add nanl definition.
|
||||||
|
Comment out unused constants.
|
||||||
|
* mingwex/Makefile.in (DISTFILES): Add fmaxl.c, fminl.c,
|
||||||
|
fpclassifyf.c, fpclassifyl.c, rintf.c, rintl.c, roundf.c,
|
||||||
|
roundl.c, truncf.c truncl.c, signbitf.c signbitl.c,
|
||||||
|
fmal.c, log2l.c
|
||||||
|
(MATHOBJS): Add fmaxl.o, fminl.o, fpclassifyf.o,
|
||||||
|
fpclassifyl.o, rintf.o, rintl.o, roundf.o, roundl.o,
|
||||||
|
truncf.o truncl.o, signbitf.o signbitl.o, fmal.o,
|
||||||
|
log2l.o.
|
||||||
|
* mingwex/snwprintf.c (snwprintf, vsnwprintf): Correct typo.
|
||||||
|
|
||||||
|
2002-04-23 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
Make wide char versions of opendir and friends.
|
||||||
|
* include/dirent.h (_wdirent, _WDIR): Define wide versions of
|
||||||
|
struct dirent, DIR.
|
||||||
|
(_wopendir,_wreaddir,_wclosedir,_wrewinddir,_wtelldir,
|
||||||
|
_wseekdir): Add prototypes for wide versions of corresponding
|
||||||
|
standard functions.
|
||||||
|
* include/tchar.h; Add _UNICODE mappings for dirent.h
|
||||||
|
structures and functions.
|
||||||
|
* mingwex/dirent.c: Make _UNICODE neutral.
|
||||||
|
* mingwex/wdirent.c: New file to define _UNICODE before
|
||||||
|
including dirent.c.
|
||||||
|
* mingwex/Makefile.in (DISTFILES): Add wdirent.c.
|
||||||
|
(POSIX_OBJS): Add wdirent.o.
|
||||||
|
(wdirent.o): Specify dependency on dirent.c as well as
|
||||||
|
wdirent.c.
|
||||||
|
* samples/dirent/wtest.c: New file, wide version of test.c.
|
||||||
|
|
||||||
|
2002-04-17 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* Makefile.in (INCLUDES): Add "-iwithprefixbefore include" to
|
||||||
|
ensure gcc include dir is searched despite -nostdinc.
|
||||||
|
* profile/Makefile.in (INCLUDES): Likewise.
|
||||||
|
* mingwex/Makefile.in (INCLUDES): Likewise.
|
||||||
|
* include/stdarg.h: Replace with stub that just guards the
|
||||||
|
real gcc system header with #ifndef RC_INVOKED
|
||||||
|
* include/varargs.h: Likewise.
|
||||||
|
* include/stddef.h: Likewise.
|
||||||
|
* include/stdio.h: Include stdarg.h after defining
|
||||||
|
__need___va_list.
|
||||||
|
(__VALIST): Define as __gnuc_va_list if __GNUC__, else char*.
|
||||||
|
Replace va_list with __VALIST throughout.
|
||||||
|
|
||||||
|
2002-04-17 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* crt1.c: Revert changes of 2002-04-16. Use _fpreset again.
|
||||||
|
* msvcrt.def (_fpreset): Mark as DATA so that only
|
||||||
|
_imp___fpreset is exported.
|
||||||
|
* msvcrt20.def (_fpreset): Likewise.
|
||||||
|
* msvcrt40.def (_fpreset): Likewise.
|
||||||
|
* crtdll.def (_fpreset): Likewise.
|
||||||
|
* CRT_fp10.c (_fpreset): Overide library _fpreset with one
|
||||||
|
that calls fninit.
|
||||||
|
(fpreset): Add alias.
|
||||||
|
(__CRT_PC): Delete definition. _fpreset does it now.
|
||||||
|
* CRT_fp8.c (_fpreset): Force use of library _imp___fpreset.
|
||||||
|
(fpreset): Add alias.
|
||||||
|
(__CRT_PC): Delete definition.
|
||||||
|
* moldname.def.in: Comment out fpreset.
|
||||||
|
* moldname-msvcrt.def: Regenerate.
|
||||||
|
* moldname-crtdll.def: Regenerate.
|
||||||
|
* include/fenv.h (FE_DFL_ENV): Define as (fenv_t*)0.
|
||||||
|
* mingwex/fesetenv.c (FE_DFL_ENV): Use it to set environment
|
||||||
|
with the _fpreset determined by startup CRT_fp object.
|
||||||
|
|
||||||
|
2002-04-16 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* CRT_fp8.c: New file.
|
||||||
|
* CRT_fp10.c: New file.
|
||||||
|
* crt1.c (__CRT_PC) Declare.
|
||||||
|
(__CRT_fesetenv): New static function, using _CRT_PC.
|
||||||
|
(__mingw_CRTStartup):Use __CRT_fesetenv instead of _fpreset.
|
||||||
|
(_gnu_exception_handler): Likewise.
|
||||||
|
* Makefile.in (CRT0S): Add CRT_fp10.o.
|
||||||
|
(MINGW_OBJS): Add CRT_fp8.o.
|
||||||
|
(SRCDIST_FILES): Add CRT_fp8.c, CRT_fp10.c.
|
||||||
|
Add CRT_fp8.o, CRT_fp10.o dependancies.
|
||||||
|
* include/float.h (_fpreset): Expand comment.
|
||||||
|
* include/fenv.h (FE_PC64_ENV): New define for Intel x87
|
||||||
|
(extended precison) environmemt.
|
||||||
|
(FE_PC53_ENV): New define for MSVCRT default environmemt.
|
||||||
|
(FE_DFL_ENV): Define as FE_PC53_ENV.
|
||||||
|
* mingwex/fesetenv.c: Use FE_PC53_ENV, FE_PC64_ENV to determine
|
||||||
|
precision control for default environment.
|
||||||
|
|
||||||
|
* include/math.h: Fix long comment line.
|
||||||
|
* profile/configure.in (CRT0S): Set to both gcrt1.o and gcrt2.o
|
||||||
|
for mingw.
|
||||||
|
* profile/configure: Regenerate.
|
||||||
|
|
||||||
|
2002-04-12 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* mingwex/Makefile.in (DISTFILES): Add suffix to wcstof.c.
|
||||||
|
|
||||||
|
2002-04-10 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* mingwex/mingw-fseek.c: New file, based on Mumit Khan
|
||||||
|
mingw-local patch to binutils.
|
||||||
|
Sun Nov 7 04:27:07 1999 Mumit Khan <khan@xraylith.wisc.edu>
|
||||||
|
(__mingw_fseek): New function to work around Win9x f/lseek bug.
|
||||||
|
(__mingw_fwrite): Likewise.
|
||||||
|
(__mingw_is_win9x): New helper function.
|
||||||
|
* include/stdio.h (__USE_MINGW_FSEEK): New define,guarding...
|
||||||
|
(__mingw_fseek): New prototype and define to replace fseek.
|
||||||
|
(__mingw_fwrite): New prototype and define to replace fwrite.
|
||||||
|
* mingwex/Makefile.in: Add mingw-fseek.o to libmingwex.a.
|
||||||
|
* moldname-crtdll.def: Remove CR from end of line.
|
||||||
|
* moldname-msvcrt.def: Ditto.
|
||||||
|
|
||||||
|
2002-04-09 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* profile/configure.in (CRT0S): Configure name of gcrt?.o
|
||||||
|
based on target, building gcrt0.o for cygwin -mno-cygwin.
|
||||||
|
* profile/configure: Regenerate.
|
||||||
|
* profile/Makefile.in (CRT0S): Use name from configure.
|
||||||
|
(gcrt0.o): New rule.
|
||||||
|
(ALL_CRT0S): New define, used to cleanup all gcrt?.o's.
|
||||||
|
|
||||||
|
2002-04-04 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* include/math.h (_controlfp, _control87, _clearfp, _statusfp, _fpreset,
|
||||||
|
_fpecode): Remove prototypes copied from float.h.
|
||||||
|
(nan, nanf): Move into block protected against RC_INVOKED
|
||||||
|
and __cplusplus.
|
||||||
|
* include/stdlib.h (_Exit): Change from static inline to
|
||||||
|
extern inline.
|
||||||
|
* mingwex/_Exit.c : New file.
|
||||||
|
* mingwex/Makefile.in: Add _Exit.o to libmingwex.a.
|
||||||
|
|
||||||
|
2002-04-04 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
Add libgmon.a and libmingwex.a for cygwin -mno-cygwin.
|
||||||
|
* configure.in (SUBDIRS): Add profile and mingwex to cygwin target.
|
||||||
|
(configdirs): Likewise.
|
||||||
|
(LIBGMON_A): Define for cygwin target as well.
|
||||||
|
* configure: Regenerate.
|
||||||
|
* profile/configure.in (THREAD_DLL): Remove define.
|
||||||
|
(LIBM_A): Remove define.
|
||||||
|
(LIBGMON_A): Define for cygwin target as well.
|
||||||
|
* profile/configure: Regenerate.
|
||||||
|
* profile/makefile.in (install): Install to inst_libdir and
|
||||||
|
inst_includedir.
|
||||||
|
* mingwex/makefile.in (CFLAGS): Move -fomit-frame-pointer to...
|
||||||
|
(OPTFLAGS): New define.
|
||||||
|
(ALL_CFLAGS): Add $(OPTFLAGS).
|
||||||
|
(ALL_CXXFLAGS): Same.
|
||||||
|
(.c.o:): Remove ALL_CXXFLAGS.
|
||||||
|
|
||||||
|
2002-03-29 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* include/stdint.h: Add missing newline at eof.
|
||||||
|
* include/stdio.h (snprintf): Add prototype.
|
||||||
|
(vsnprintf): Add prototype and inline definition.
|
||||||
|
(snwprintf): Add prototype.
|
||||||
|
(vsnwprintf): Add prototype and inline definition.
|
||||||
|
* include/wchar.h (snwprintf): Add prototype.
|
||||||
|
(vsnwprintf): Add prototype and inline definition.
|
||||||
|
* mingwex/Makefile.in: Add snprintf.o, snwprintf.o
|
||||||
|
to libmingwex.a.
|
||||||
|
* mingwex/snprintf.c: New file.
|
||||||
|
* mingwex/snwprintf.c: New file.
|
||||||
|
|
||||||
|
2002-03-22 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
* configure.in: Add mingwex as SUBDIRS and configdirs.
|
||||||
|
* configure: Regenerate.
|
||||||
|
* Makefile.in (MINGW_OBJS): Remove dirent.o.
|
||||||
|
(SRC_DIST_FILES): Remove dirent.c.
|
||||||
|
* dirent.c: Remove.
|
||||||
|
* include/stdlib.h (_Exit): Add static inline
|
||||||
|
function.
|
||||||
|
(struct lldiv_t): Define.
|
||||||
|
(lldiv): Add prototype.
|
||||||
|
(llabs): Add extern inline function.
|
||||||
|
(strtoll,strtoull): Add prototypes.
|
||||||
|
(wcstol, wcstoul, wcstod): Group together.
|
||||||
|
(strtof, wcstof): Add extern inline definitions.
|
||||||
|
(atoll,lltoa,ulltoa, wtoll, lltow ulltow): Add prototypes
|
||||||
|
and extern inline definitions.
|
||||||
|
* include/wchar.h (fwide, wcstoll,wcstoull, wmemchr
|
||||||
|
wmemcmp, wmemcpy, wmemmove, wmemset. mbsinit): Add
|
||||||
|
prototypes.
|
||||||
|
(wcstol, wcstoul,wcstod): Copy prototypes from stdlib.h.
|
||||||
|
(wcstof): Add extern inline definition.
|
||||||
|
* include/math.h (nan, nanf): Add prototypes.
|
||||||
|
(NAN, INFINITE): Define constants.
|
||||||
|
(fpclassify, isnan ,signbit): Add macros and supporting float
|
||||||
|
and double functions.
|
||||||
|
(isfinite, isinf, isnormal): Add macros.
|
||||||
|
(isgreater, isless, isgreaterequal, islessequal,islessgreater):
|
||||||
|
Add macros.
|
||||||
|
(rint, rintf, round, roundf, trunc. truncf, fmax, fmaxf,
|
||||||
|
fmin, fminf, fma, fmaf, log2, log2f): Add prototypes.
|
||||||
|
(copysign, logb, nextafter, scalb): Add prototypes and
|
||||||
|
inline stubs for underscored versions in msvcrt.dll.
|
||||||
|
* include/inttypes.h: New file.
|
||||||
|
* include/fenv.h: New file
|
||||||
|
|
||||||
|
Add new mingwex subdir and files.
|
||||||
|
* mingwex: New directory.
|
||||||
|
* mingwex/Makefile.in: New file.
|
||||||
|
* mingwex/configure.in: New file.
|
||||||
|
* mingwex/configure: Generate.
|
||||||
|
* mingwex/dirent.c: Moved here from parent dir.
|
||||||
|
* mingwex/atoll.c: New file.
|
||||||
|
* mingwex/feclearexcept.c: New file.
|
||||||
|
* mingwex/fegetenv.c: New file.
|
||||||
|
* mingwex/fegetexceptflag.c: New file.
|
||||||
|
* mingwex/fegetround.c: New file.
|
||||||
|
* mingwex/feholdexcept.c: New file.
|
||||||
|
* mingwex/feraiseexcept.c: New file.
|
||||||
|
* mingwex/fesetenv.c: New file.
|
||||||
|
* mingwex/fesetexceptflag.c: New file.
|
||||||
|
* mingwex/fesetround.o: New file.
|
||||||
|
* mingwex/fetestexcept.c: New file.
|
||||||
|
* mingwex/feupdateenv.c: New file.
|
||||||
|
* mingwex/fma.S: New file.
|
||||||
|
* mingwex/fmaf.S: New file.
|
||||||
|
* mingwex/fmax.c: New file.
|
||||||
|
* mingwex/fmaxf.c: New file.
|
||||||
|
* mingwex/fmin.c: New file.
|
||||||
|
* mingwex/fminf.c: New file.
|
||||||
|
* mingwex/fp_consts.c: New file.
|
||||||
|
* mingwex/fpclassify.c: New file.
|
||||||
|
* mingwex/fucom.c: New file.
|
||||||
|
* mingwex/fwide.c: New file.
|
||||||
|
* mingwex/imaxabs.c: New file.
|
||||||
|
* mingwex/imaxdiv.c: New file.
|
||||||
|
* mingwex/isnan.c: New file.
|
||||||
|
* mingwex/isnanf.c: New file.
|
||||||
|
* mingwex/lltoa.c: New file.
|
||||||
|
* mingwex/lltow.c: New file.
|
||||||
|
* mingwex/log2.c: New file.
|
||||||
|
* mingwex/log2f.c: New file.
|
||||||
|
* mingwex/math_stubs.c: New file.
|
||||||
|
* mingwex/mbsinit.c: New file.
|
||||||
|
* mingwex/rint.c: New file.
|
||||||
|
* mingwex/round.c: New file.
|
||||||
|
* mingwex/signbit.c: New file.
|
||||||
|
* mingwex/sitest.c: New file.
|
||||||
|
* mingwex/strtof.c: New file.
|
||||||
|
* mingwex/strtoimax.c: New file.
|
||||||
|
* mingwex/strtoumax.c: New file.
|
||||||
|
* mingwex/testwmem.c: New file.
|
||||||
|
* mingwex/trunc.c: New file.
|
||||||
|
* mingwex/ulltoa.c: New file.
|
||||||
|
* mingwex/ulltow.c: New file.
|
||||||
|
* mingwex/wcstof.c: New file.
|
||||||
|
* mingwex/wcstoimax.c: New file.
|
||||||
|
* mingwex/wcstoumax.c: New file.
|
||||||
|
* mingwex/wmemchr.c: New file.
|
||||||
|
* mingwex/wmemcmp.c: New file.
|
||||||
|
* mingwex/wmemcpy.c: New file.
|
||||||
|
* mingwex/wmemmove.c: New file.
|
||||||
|
* mingwex/wmemset.c: New file.
|
||||||
|
* mingwex/wtoll.c: New file.
|
||||||
|
|
||||||
2002-04-20 Danny Smith <dannysmith@users.sourceforge.net>
|
2002-04-20 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
|
||||||
* include/mbstring.h: New file.
|
* include/mbstring.h: New file.
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
# This makefile requires GNU make.
|
# This makefile requires GNU make.
|
||||||
|
|
||||||
PACKAGE = mingw-runtime
|
PACKAGE = mingw-runtime
|
||||||
VERSION = 1.4
|
VERSION = 2.0
|
||||||
CYGRELEASE = 1
|
CYGRELEASE = 1
|
||||||
|
|
||||||
VPATH = @srcdir@
|
VPATH = @srcdir@
|
||||||
@ -96,7 +96,8 @@ LIBM_A=@LIBM_A@
|
|||||||
|
|
||||||
INCLUDES = -I$(srcdir)/include -I$(srcdir)/../w32api/include \
|
INCLUDES = -I$(srcdir)/include -I$(srcdir)/../w32api/include \
|
||||||
-I$(srcdir)/../include \
|
-I$(srcdir)/../include \
|
||||||
-nostdinc -nostdinc++
|
-nostdinc -nostdinc++ \
|
||||||
|
-iwithprefixbefore include
|
||||||
ALL_CFLAGS = $(CFLAGS) $(INCLUDES) $(MNO_CYGWIN)
|
ALL_CFLAGS = $(CFLAGS) $(INCLUDES) $(MNO_CYGWIN)
|
||||||
ALL_CXXFLAGS = $(CXXFLAGS) $(INCLUDES) $(MNO_CYGWIN)
|
ALL_CXXFLAGS = $(CXXFLAGS) $(INCLUDES) $(MNO_CYGWIN)
|
||||||
|
|
||||||
@ -145,9 +146,10 @@ FLAGS_TO_PASS:=\
|
|||||||
TARFLAGS="$(TARFLAGS)" \
|
TARFLAGS="$(TARFLAGS)" \
|
||||||
TARFILEEXT="$(TARFILEEXT)"
|
TARFILEEXT="$(TARFILEEXT)"
|
||||||
|
|
||||||
CRT0S = crt1.o dllcrt1.o crt2.o dllcrt2.o CRT_noglob.o crtmt.o crtst.o
|
CRT0S = crt1.o dllcrt1.o crt2.o dllcrt2.o CRT_noglob.o crtmt.o crtst.o \
|
||||||
MINGW_OBJS = CRTglob.o CRTfmode.o CRTinit.o dirent.o dllmain.o gccmain.o \
|
CRT_fp8.o CRT_fp10.o
|
||||||
main.o crtst.o mthr_stub.o
|
MINGW_OBJS = CRTglob.o CRTfmode.o CRTinit.o dllmain.o gccmain.o \
|
||||||
|
main.o crtst.o mthr_stub.o CRT_fp10.o
|
||||||
MOLD_OBJS = ctype_old.o string_old.o
|
MOLD_OBJS = ctype_old.o string_old.o
|
||||||
|
|
||||||
LIBS = libcrtdll.a libmsvcrt.a libmsvcrt20.a libmsvcrt40.a libmingw32.a \
|
LIBS = libcrtdll.a libmsvcrt.a libmsvcrt20.a libmsvcrt40.a libmingw32.a \
|
||||||
@ -157,10 +159,11 @@ DLLS = $(THREAD_DLL_NAME)
|
|||||||
|
|
||||||
SRCDIST_FILES = CRT_noglob.c CRTfmode.c CRTglob.c CRTinit.c ChangeLog \
|
SRCDIST_FILES = CRT_noglob.c CRTfmode.c CRTglob.c CRTinit.c ChangeLog \
|
||||||
Makefile.in README TODO config.guess config.sub configure configure.in \
|
Makefile.in README TODO config.guess config.sub configure configure.in \
|
||||||
crt1.c crtdll.def crtmt.c crtst.c ctype_old.c dirent.c dllcrt1.c dllmain.c \
|
crt1.c crtdll.def crtmt.c crtst.c ctype_old.c dllcrt1.c dllmain.c \
|
||||||
gccmain.c init.c install-sh jamfile main.c mkinstalldirs moldname-crtdll.def \
|
gccmain.c init.c install-sh jamfile main.c mkinstalldirs moldname-crtdll.def \
|
||||||
moldname-msvcrt.def moldname.def moldname.def.in msvcrt.def msvcrt20.def \
|
moldname-msvcrt.def moldname.def moldname.def.in msvcrt.def msvcrt20.def \
|
||||||
msvcrt40.def mthr.c mthr_init.c mthr_stub.c readme.txt string_old.c
|
msvcrt40.def mthr.c mthr_init.c mthr_stub.c readme.txt string_old.c \
|
||||||
|
CRT_fp8.c CRT_fp10.c
|
||||||
|
|
||||||
all_dlls_host = @all_dlls_host@
|
all_dlls_host = @all_dlls_host@
|
||||||
install_dlls_host = @install_dlls_host@
|
install_dlls_host = @install_dlls_host@
|
||||||
@ -379,11 +382,13 @@ crtst.o: $(srcdir)/crtst.c
|
|||||||
ctype_old.o: $(srcdir)/ctype_old.c
|
ctype_old.o: $(srcdir)/ctype_old.c
|
||||||
dllcrt1.o: $(srcdir)/dllcrt1.c
|
dllcrt1.o: $(srcdir)/dllcrt1.c
|
||||||
dllcrt2.o: $(srcdir)/dllcrt1.c
|
dllcrt2.o: $(srcdir)/dllcrt1.c
|
||||||
dirent.o: $(srcdir)/dirent.c
|
|
||||||
dllmain.o: $(srcdir)/dllmain.c
|
dllmain.o: $(srcdir)/dllmain.c
|
||||||
main.o: $(srcdir)/main.c
|
main.o: $(srcdir)/main.c
|
||||||
oldnames.o: $(srcdir)/oldnames.c
|
oldnames.o: $(srcdir)/oldnames.c
|
||||||
string_old.o: $(srcdir)/string_old.c
|
string_old.o: $(srcdir)/string_old.c
|
||||||
|
CRT_fp8.o: $(srcdir)/CRT_fp8.c
|
||||||
|
CRT_fp10.o: $(srcdir)/CRT_fp10.c
|
||||||
|
|
||||||
|
|
||||||
Makefile: Makefile.in config.status configure
|
Makefile: Makefile.in config.status configure
|
||||||
$(SHELL) config.status
|
$(SHELL) config.status
|
||||||
|
17
winsup/mingw/configure
vendored
17
winsup/mingw/configure
vendored
@ -1659,20 +1659,16 @@ test "$host_alias" != "$target_alias" &&
|
|||||||
NONENONEs,x,x, &&
|
NONENONEs,x,x, &&
|
||||||
program_prefix=${target_alias}-
|
program_prefix=${target_alias}-
|
||||||
|
|
||||||
|
SUBDIRS="profile mingwex"
|
||||||
configdirs=""
|
configdirs="profile mingwex"
|
||||||
SUBDIRS=""
|
|
||||||
HEADER_SUBDIR=""
|
HEADER_SUBDIR=""
|
||||||
|
|
||||||
|
LIBGMON_A=libgmon.a
|
||||||
|
|
||||||
case "$target_os" in
|
case "$target_os" in
|
||||||
*cygwin*)
|
*cygwin*)
|
||||||
MNO_CYGWIN=-mno-cygwin
|
MNO_CYGWIN=-mno-cygwin
|
||||||
configdirs="$configdirs"
|
|
||||||
# FIXME MinGW versions of libm.a and libgmon.a needed for -mno-cygwin
|
|
||||||
# Do not build libm.a when building under Cygwin winsup. Otherwise, it'll
|
|
||||||
# overwrite Cygwin's one. Likewise for libgmon.a.
|
|
||||||
LIBM_A=
|
LIBM_A=
|
||||||
LIBGMON_A=
|
|
||||||
# Install mingw headers in mingw subdirectory.
|
# Install mingw headers in mingw subdirectory.
|
||||||
HEADER_SUBDIR="mingw"
|
HEADER_SUBDIR="mingw"
|
||||||
;;
|
;;
|
||||||
@ -1680,9 +1676,6 @@ case "$target_os" in
|
|||||||
# Build it for MSVCRT by default.
|
# Build it for MSVCRT by default.
|
||||||
MNO_CYGWIN=
|
MNO_CYGWIN=
|
||||||
LIBM_A=libm.a
|
LIBM_A=libm.a
|
||||||
LIBGMON_A=libgmon.a
|
|
||||||
SUBDIRS="profile"
|
|
||||||
configdirs="$configdirs profile"
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@ -1719,7 +1712,7 @@ MKINSTALLDIRS=$ac_aux_dir/mkinstalldirs
|
|||||||
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
||||||
# ./install, which can be erroneously created by make from ./install.sh.
|
# ./install, which can be erroneously created by make from ./install.sh.
|
||||||
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
|
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
|
||||||
echo "configure:1723: checking for a BSD compatible install" >&5
|
echo "configure:1716: checking for a BSD compatible install" >&5
|
||||||
if test -z "$INSTALL"; then
|
if test -z "$INSTALL"; then
|
||||||
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -88,20 +88,16 @@ AC_SUBST(WINDRES)
|
|||||||
AC_ALLOCA
|
AC_ALLOCA
|
||||||
|
|
||||||
AC_CANONICAL_SYSTEM
|
AC_CANONICAL_SYSTEM
|
||||||
|
SUBDIRS="profile mingwex"
|
||||||
configdirs=""
|
configdirs="profile mingwex"
|
||||||
SUBDIRS=""
|
|
||||||
HEADER_SUBDIR=""
|
HEADER_SUBDIR=""
|
||||||
|
|
||||||
|
LIBGMON_A=libgmon.a
|
||||||
|
|
||||||
case "$target_os" in
|
case "$target_os" in
|
||||||
*cygwin*)
|
*cygwin*)
|
||||||
MNO_CYGWIN=-mno-cygwin
|
MNO_CYGWIN=-mno-cygwin
|
||||||
configdirs="$configdirs"
|
|
||||||
# FIXME MinGW versions of libm.a and libgmon.a needed for -mno-cygwin
|
|
||||||
# Do not build libm.a when building under Cygwin winsup. Otherwise, it'll
|
|
||||||
# overwrite Cygwin's one. Likewise for libgmon.a.
|
|
||||||
LIBM_A=
|
LIBM_A=
|
||||||
LIBGMON_A=
|
|
||||||
# Install mingw headers in mingw subdirectory.
|
# Install mingw headers in mingw subdirectory.
|
||||||
HEADER_SUBDIR="mingw"
|
HEADER_SUBDIR="mingw"
|
||||||
;;
|
;;
|
||||||
@ -109,9 +105,6 @@ case "$target_os" in
|
|||||||
# Build it for MSVCRT by default.
|
# Build it for MSVCRT by default.
|
||||||
MNO_CYGWIN=
|
MNO_CYGWIN=
|
||||||
LIBM_A=libm.a
|
LIBM_A=libm.a
|
||||||
LIBGMON_A=libgmon.a
|
|
||||||
SUBDIRS="profile"
|
|
||||||
configdirs="$configdirs profile"
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
@ -232,3 +232,20 @@ WinMainCRTStartup ()
|
|||||||
__mingw_CRTStartup ();
|
__mingw_CRTStartup ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We force use of library version of atexit, which is only
|
||||||
|
* visible in import lib as _imp__atexit
|
||||||
|
*/
|
||||||
|
extern int (*_imp__atexit)(void (*)(void));
|
||||||
|
int atexit (void (* pfn )(void) )
|
||||||
|
{
|
||||||
|
return ( (*_imp__atexit)(pfn));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Likewise for non-ANSI _onexit */
|
||||||
|
extern _onexit_t (*_imp___onexit)(_onexit_t);
|
||||||
|
_onexit_t
|
||||||
|
_onexit (_onexit_t pfn )
|
||||||
|
{
|
||||||
|
return (*_imp___onexit)(pfn);
|
||||||
|
}
|
||||||
|
@ -285,7 +285,7 @@ _flushall
|
|||||||
_fmode_dll DATA
|
_fmode_dll DATA
|
||||||
_fpclass
|
_fpclass
|
||||||
_fpieee_flt
|
_fpieee_flt
|
||||||
_fpreset
|
_fpreset DATA
|
||||||
_fputchar
|
_fputchar
|
||||||
_fputwchar
|
_fputwchar
|
||||||
_fsopen
|
_fsopen
|
||||||
@ -414,7 +414,7 @@ _mkdir
|
|||||||
_mktemp
|
_mktemp
|
||||||
_msize
|
_msize
|
||||||
_nextafter
|
_nextafter
|
||||||
_onexit
|
_onexit DATA
|
||||||
_open
|
_open
|
||||||
_open_osfhandle
|
_open_osfhandle
|
||||||
_osmajor_dll DATA
|
_osmajor_dll DATA
|
||||||
@ -520,7 +520,7 @@ asctime
|
|||||||
asin
|
asin
|
||||||
atan
|
atan
|
||||||
atan2
|
atan2
|
||||||
atexit
|
atexit DATA
|
||||||
atof
|
atof
|
||||||
atoi
|
atoi
|
||||||
atol
|
atol
|
||||||
|
@ -25,10 +25,11 @@
|
|||||||
* $Date$
|
* $Date$
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#include <process.h>
|
#include <process.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
/* Unlike normal crt1, I don't initialize the FPU, because the process
|
/* Unlike normal crt1, I don't initialize the FPU, because the process
|
||||||
@ -40,8 +41,20 @@ extern void __main ();
|
|||||||
extern void __do_global_dtors ();
|
extern void __do_global_dtors ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef void (* p_atexit_fn )(void);
|
||||||
|
static p_atexit_fn* first_atexit;
|
||||||
|
static p_atexit_fn* next_atexit;
|
||||||
|
|
||||||
|
static void
|
||||||
|
__dll_exit (void);
|
||||||
|
|
||||||
|
/* This is based on the function in the Wine project's exit.c */
|
||||||
|
p_atexit_fn __dllonexit (p_atexit_fn, p_atexit_fn**, p_atexit_fn**);
|
||||||
|
|
||||||
|
|
||||||
extern BOOL WINAPI DllMain (HANDLE, DWORD, LPVOID);
|
extern BOOL WINAPI DllMain (HANDLE, DWORD, LPVOID);
|
||||||
|
|
||||||
|
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
DllMainCRTStartup (HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
|
DllMainCRTStartup (HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
|
||||||
{
|
{
|
||||||
@ -49,41 +62,135 @@ DllMainCRTStartup (HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
|
|||||||
|
|
||||||
if (dwReason == DLL_PROCESS_ATTACH)
|
if (dwReason == DLL_PROCESS_ATTACH)
|
||||||
{
|
{
|
||||||
|
/* Initialize private atexit table for this dll.
|
||||||
|
32 is min size required by ANSI */
|
||||||
|
|
||||||
|
first_atexit = (p_atexit_fn*) malloc (32 * sizeof (p_atexit_fn));
|
||||||
|
if (first_atexit == NULL ) /* can't allocate memory */
|
||||||
|
{
|
||||||
|
errno=ENOMEM;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
*first_atexit = NULL;
|
||||||
|
next_atexit = first_atexit;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf ("%s: DLL_PROCESS_ATTACH (%d)\n", __FUNCTION__);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
/* From libgcc.a, calls global class constructors. */
|
/* From libgcc.a, __main calls global class constructors,
|
||||||
|
__do_global_ctors, which registers __do_global_dtors
|
||||||
|
as the first entry of the private atexit table we
|
||||||
|
have just initialised */
|
||||||
__main ();
|
__main ();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call the user-supplied DllMain subroutine
|
* Call the user-supplied DllMain subroutine.
|
||||||
|
* This has to come after initialization of atexit table and
|
||||||
|
* registration of global constructors.
|
||||||
* NOTE: DllMain is optional, so libmingw32.a includes a stub
|
* NOTE: DllMain is optional, so libmingw32.a includes a stub
|
||||||
* which will be used if the user does not supply one.
|
* which will be used if the user does not supply one.
|
||||||
*/
|
*/
|
||||||
bRet = DllMain (hDll, dwReason, lpReserved);
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
bRet = DllMain (hDll, dwReason, lpReserved);
|
||||||
if (dwReason == DLL_PROCESS_DETACH)
|
/* Handle case where DllMain returns FALSE on attachment attempt. */
|
||||||
|
|
||||||
|
if ( (dwReason == DLL_PROCESS_ATTACH) && !bRet)
|
||||||
{
|
{
|
||||||
/* From libgcc.a, calls global class destructors. */
|
#ifdef DEBUG
|
||||||
__do_global_dtors ();
|
printf ("%s: DLL_PROCESS_ATTACH failed, cleaning up\n", __FUNCTION__);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
__dll_exit (); /* Cleanup now. This will set first_atexit to NULL so we
|
||||||
|
know we've cleaned up */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dwReason == DLL_PROCESS_DETACH)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf ("%s: DLL_PROCESS_DETACH (%d)\n", __FUNCTION__);
|
||||||
|
#endif
|
||||||
|
/* If not attached, return FALSE. Cleanup already done above
|
||||||
|
if failed attachment attempt. */
|
||||||
|
if (! first_atexit )
|
||||||
|
bRet = FALSE;
|
||||||
|
else
|
||||||
|
/*
|
||||||
|
* We used to call __do_global_dtors () here. This is
|
||||||
|
* no longer necessary since __do_global_dtors is now
|
||||||
|
* registered at start (last out) of private atexit table.
|
||||||
|
*/
|
||||||
|
__dll_exit ();
|
||||||
|
}
|
||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
static
|
||||||
* For the moment a dummy atexit. Atexit causes problems in DLLs, especially
|
void
|
||||||
* if they are dynamically loaded. For now atexit inside a DLL does nothing.
|
__dll_exit(void)
|
||||||
* NOTE: We need this even if the DLL author never calls atexit because
|
/* Run LIFO terminators registered in private atexit table */
|
||||||
* the global constructor function __do_global_ctors called from __main
|
|
||||||
* will attempt to register __do_global_dtors using atexit.
|
|
||||||
* Thanks to Andrey A. Smirnov for pointing this one out.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
atexit (void (*pfn) ())
|
|
||||||
{
|
{
|
||||||
return 0;
|
if ( first_atexit )
|
||||||
|
{
|
||||||
|
p_atexit_fn* __last = next_atexit - 1;
|
||||||
|
while ( __last >= first_atexit )
|
||||||
|
{
|
||||||
|
if ( *__last != NULL )
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf ("%s: Calling exit function 0x%x from 0x%x\n",
|
||||||
|
__FUNCTION__, (unsigned)(*__last),(unsigned)__last);
|
||||||
|
#endif
|
||||||
|
(**__last) ();
|
||||||
|
}
|
||||||
|
__last--;
|
||||||
|
}
|
||||||
|
free ( first_atexit ) ;
|
||||||
|
first_atexit = NULL ;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Make sure output buffers opened by DllMain or
|
||||||
|
atexit-registered functions are flushed before detaching,
|
||||||
|
otherwise we can have problems with redirected output.
|
||||||
|
*/
|
||||||
|
fflush (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The atexit exported from msvcrt.dll causes problems in DLLs.
|
||||||
|
* Here, we override the exported version of atexit with one that passes the
|
||||||
|
* private table initialised in DllMainCRTStartup to __dllonexit.
|
||||||
|
* That means we have to hide the mscvrt.dll atexit because the
|
||||||
|
* atexit defined here gets __dllonexit from the same lib.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
atexit (p_atexit_fn pfn )
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf ("%s: registering exit function 0x%x at 0x%x\n",
|
||||||
|
__FUNCTION__, (unsigned)pfn, (unsigned)next_atexit);
|
||||||
|
#endif
|
||||||
|
return (__dllonexit (pfn, &first_atexit, &next_atexit)
|
||||||
|
== NULL ? -1 : 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Likewise for non-ANSI function _onexit that may be called by
|
||||||
|
* code in the dll.
|
||||||
|
*/
|
||||||
|
|
||||||
|
_onexit_t
|
||||||
|
_onexit (_onexit_t pfn )
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf ("%s: registering exit function 0x%x at 0x%x\n",
|
||||||
|
__FUNCTION__, (unsigned)pfn, (unsigned)next_atexit);
|
||||||
|
#endif
|
||||||
|
return ((_onexit_t) __dllonexit ((p_atexit_fn)pfn, &first_atexit, &next_atexit));
|
||||||
|
}
|
||||||
|
@ -48,9 +48,9 @@
|
|||||||
# define __DECLSPEC_SUPPORTED
|
# define __DECLSPEC_SUPPORTED
|
||||||
#else /* __GNUC__ */
|
#else /* __GNUC__ */
|
||||||
# ifdef __declspec
|
# ifdef __declspec
|
||||||
/* note the extern at the end. This is needed to work around GCC's
|
/* Note the extern. This is needed to work around GCC's
|
||||||
limitations in handling dllimport attribute. */
|
limitations in handling dllimport attribute. */
|
||||||
# define __MINGW_IMPORT __attribute__((dllimport)) extern
|
# define __MINGW_IMPORT extern __attribute__((dllimport))
|
||||||
# define __DECLSPEC_SUPPORTED
|
# define __DECLSPEC_SUPPORTED
|
||||||
# else
|
# else
|
||||||
# undef __DECLSPEC_SUPPORTED
|
# undef __DECLSPEC_SUPPORTED
|
||||||
@ -60,9 +60,9 @@
|
|||||||
# define __int64 long long
|
# define __int64 long long
|
||||||
#endif /* __GNUC__ */
|
#endif /* __GNUC__ */
|
||||||
|
|
||||||
#define __MINGW32_VERSION 1.4
|
#define __MINGW32_VERSION 2.0
|
||||||
#define __MINGW32_MAJOR_VERSION 1
|
#define __MINGW32_MAJOR_VERSION 2
|
||||||
#define __MINGW32_MINOR_VERSION 4
|
#define __MINGW32_MINOR_VERSION 0
|
||||||
|
|
||||||
#endif /* __MINGW_H */
|
#endif /* __MINGW_H */
|
||||||
|
|
||||||
|
@ -95,6 +95,7 @@ int _toupper(int);
|
|||||||
|
|
||||||
/* Also defined in stdlib.h */
|
/* Also defined in stdlib.h */
|
||||||
#ifndef MB_CUR_MAX
|
#ifndef MB_CUR_MAX
|
||||||
|
#ifdef __DECLSPEC_SUPPORTED
|
||||||
# ifdef __MSVCRT__
|
# ifdef __MSVCRT__
|
||||||
# define MB_CUR_MAX __mb_cur_max
|
# define MB_CUR_MAX __mb_cur_max
|
||||||
__MINGW_IMPORT int __mb_cur_max;
|
__MINGW_IMPORT int __mb_cur_max;
|
||||||
@ -102,15 +103,39 @@ int _toupper(int);
|
|||||||
# define MB_CUR_MAX __mb_cur_max_dll
|
# define MB_CUR_MAX __mb_cur_max_dll
|
||||||
__MINGW_IMPORT int __mb_cur_max_dll;
|
__MINGW_IMPORT int __mb_cur_max_dll;
|
||||||
# endif /* not __MSVCRT */
|
# endif /* not __MSVCRT */
|
||||||
|
|
||||||
|
#else /* ! __DECLSPEC_SUPPORTED */
|
||||||
|
# ifdef __MSVCRT__
|
||||||
|
extern int* _imp____mbcur_max
|
||||||
|
# define MB_CUR_MAX (*_imp____mb_cur_max)
|
||||||
|
# else /* not __MSVCRT */
|
||||||
|
extern int* _imp____mbcur_max_dll
|
||||||
|
# define MB_CUR_MAX (*_imp____mb_cur_max_dll)
|
||||||
|
# endif /* not __MSVCRT */
|
||||||
|
#endif /* __DECLSPEC_SUPPORTED */
|
||||||
#endif /* MB_CUR_MAX */
|
#endif /* MB_CUR_MAX */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __DECLSPEC_SUPPORTED
|
||||||
__MINGW_IMPORT unsigned short _ctype[];
|
__MINGW_IMPORT unsigned short _ctype[];
|
||||||
#ifdef __MSVCRT__
|
# ifdef __MSVCRT__
|
||||||
__MINGW_IMPORT unsigned short* _pctype;
|
__MINGW_IMPORT unsigned short* _pctype;
|
||||||
#else /* CRTDLL */
|
# else /* CRTDLL */
|
||||||
__MINGW_IMPORT unsigned short* _pctype_dll;
|
__MINGW_IMPORT unsigned short* _pctype_dll;
|
||||||
#define _pctype _pctype_dll
|
# define _pctype _pctype_dll
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
|
#else /* __DECLSPEC_SUPPORTED */
|
||||||
|
extern unsigned short** _imp___ctype;
|
||||||
|
#define _ctype (*_imp___ctype)
|
||||||
|
# ifdef __MSVCRT__
|
||||||
|
extern unsigned short** _imp___pctype;
|
||||||
|
# define _pctype (*_imp___pctype)
|
||||||
|
# else /* CRTDLL */
|
||||||
|
extern unsigned short** _imp___pctype_dll;
|
||||||
|
# define _pctype (*_imp___pctype_dll)
|
||||||
|
# endif /* CRTDLL */
|
||||||
|
#endif /* __DECLSPEC_SUPPORTED */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use inlines here rather than macros, because macros will upset
|
* Use inlines here rather than macros, because macros will upset
|
||||||
|
@ -50,6 +50,7 @@ struct dirent
|
|||||||
/*
|
/*
|
||||||
* This is an internal data structure. Good programmers will not use it
|
* This is an internal data structure. Good programmers will not use it
|
||||||
* except as an argument to one of the functions below.
|
* except as an argument to one of the functions below.
|
||||||
|
* dd_stat field is now int (was short in older versions).
|
||||||
*/
|
*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -70,13 +71,12 @@ typedef struct
|
|||||||
* -1 = off the end
|
* -1 = off the end
|
||||||
* positive = 0 based index of next entry
|
* positive = 0 based index of next entry
|
||||||
*/
|
*/
|
||||||
short dd_stat;
|
int dd_stat;
|
||||||
|
|
||||||
/* given path for dir with search pattern (struct is extended) */
|
/* given path for dir with search pattern (struct is extended) */
|
||||||
char dd_name[1];
|
char dd_name[1];
|
||||||
} DIR;
|
} DIR;
|
||||||
|
|
||||||
|
|
||||||
DIR* opendir (const char*);
|
DIR* opendir (const char*);
|
||||||
struct dirent* readdir (DIR*);
|
struct dirent* readdir (DIR*);
|
||||||
int closedir (DIR*);
|
int closedir (DIR*);
|
||||||
@ -84,6 +84,57 @@ void rewinddir (DIR*);
|
|||||||
long telldir (DIR*);
|
long telldir (DIR*);
|
||||||
void seekdir (DIR*, long);
|
void seekdir (DIR*, long);
|
||||||
|
|
||||||
|
|
||||||
|
/* wide char versions */
|
||||||
|
|
||||||
|
struct _wdirent
|
||||||
|
{
|
||||||
|
long d_ino; /* Always zero. */
|
||||||
|
unsigned short d_reclen; /* Always zero. */
|
||||||
|
unsigned short d_namlen; /* Length of name in d_name. */
|
||||||
|
wchar_t* d_name; /* File name. */
|
||||||
|
/* NOTE: The name in the dirent structure points to the name in the * wfinddata_t structure in the _WDIR. */
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is an internal data structure. Good programmers will not use it
|
||||||
|
* except as an argument to one of the functions below.
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
/* disk transfer area for this dir */
|
||||||
|
struct _wfinddata_t dd_dta;
|
||||||
|
|
||||||
|
/* dirent struct to return from dir (NOTE: this makes this thread
|
||||||
|
* safe as long as only one thread uses a particular DIR struct at
|
||||||
|
* a time) */
|
||||||
|
struct _wdirent dd_dir;
|
||||||
|
|
||||||
|
/* _findnext handle */
|
||||||
|
long dd_handle;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Status of search:
|
||||||
|
* 0 = not started yet (next entry to read is first entry)
|
||||||
|
* -1 = off the end
|
||||||
|
* positive = 0 based index of next entry
|
||||||
|
*/
|
||||||
|
int dd_stat;
|
||||||
|
|
||||||
|
/* given path for dir with search pattern (struct is extended) */
|
||||||
|
wchar_t dd_name[1];
|
||||||
|
} _WDIR;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_WDIR* _wopendir (const wchar_t*);
|
||||||
|
struct _wdirent* _wreaddir (_WDIR*);
|
||||||
|
int _wclosedir (_WDIR*);
|
||||||
|
void _wrewinddir (_WDIR*);
|
||||||
|
long _wtelldir (_WDIR*);
|
||||||
|
void _wseekdir (_WDIR*, long);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -48,19 +48,19 @@ extern "C" {
|
|||||||
|
|
||||||
#ifndef __MSVCRT__ /* these are in CRTDLL, but not MSVCRT */
|
#ifndef __MSVCRT__ /* these are in CRTDLL, but not MSVCRT */
|
||||||
#ifndef __DECLSPEC_SUPPORTED
|
#ifndef __DECLSPEC_SUPPORTED
|
||||||
extern unsigned int *__imp__basemajor_dll;
|
extern unsigned int *_imp___basemajor_dll;
|
||||||
extern unsigned int *__imp__baseminor_dll;
|
extern unsigned int *_imp___baseminor_dll;
|
||||||
extern unsigned int *__imp__baseversion_dll;
|
extern unsigned int *_imp___baseversion_dll;
|
||||||
extern unsigned int *__imp__osmajor_dll;
|
extern unsigned int *_imp___osmajor_dll;
|
||||||
extern unsigned int *__imp__osminor_dll;
|
extern unsigned int *_imp___osminor_dll;
|
||||||
extern unsigned int *__imp__osmode_dll;
|
extern unsigned int *_imp___osmode_dll;
|
||||||
|
|
||||||
#define _basemajor (*__imp__basemajor_dll)
|
#define _basemajor (*_imp___basemajor_dll)
|
||||||
#define _baseminor (*__imp__baseminor_dll)
|
#define _baseminor (*_imp___baseminor_dll)
|
||||||
#define _baseversion (*__imp__baseversion_dll)
|
#define _baseversion (*_imp___baseversion_dll)
|
||||||
#define _osmajor (*__imp__osmajor_dll)
|
#define _osmajor (*_imp___osmajor_dll)
|
||||||
#define _osminor (*__imp__osminor_dll)
|
#define _osminor (*_imp___osminor_dll)
|
||||||
#define _osmode (*__imp__osmode_dll)
|
#define _osmode (*_imp___osmode_dll)
|
||||||
|
|
||||||
#else /* __DECLSPEC_SUPPORTED */
|
#else /* __DECLSPEC_SUPPORTED */
|
||||||
|
|
||||||
|
@ -93,12 +93,12 @@
|
|||||||
#ifndef __DECLSPEC_SUPPORTED
|
#ifndef __DECLSPEC_SUPPORTED
|
||||||
|
|
||||||
#ifdef __MSVCRT__
|
#ifdef __MSVCRT__
|
||||||
extern unsigned int* __imp__fmode;
|
extern unsigned int* _imp___fmode;
|
||||||
#define _fmode (*__imp__fmode)
|
#define _fmode (*_imp___fmode)
|
||||||
#else
|
#else
|
||||||
/* CRTDLL */
|
/* CRTDLL */
|
||||||
extern unsigned int* __imp__fmode_dll;
|
extern unsigned int* _imp___fmode_dll;
|
||||||
#define _fmode (*__imp__fmode_dll)
|
#define _fmode (*_imp___fmode_dll)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else /* __DECLSPEC_SUPPORTED */
|
#else /* __DECLSPEC_SUPPORTED */
|
||||||
|
91
winsup/mingw/include/fenv.h
Normal file
91
winsup/mingw/include/fenv.h
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#ifndef _FENV_H_
|
||||||
|
#define _FENV_H_
|
||||||
|
|
||||||
|
|
||||||
|
/* FPU status word exception flags */
|
||||||
|
#define FE_INVALID 0x01
|
||||||
|
#define FE_DENORMAL 0x02
|
||||||
|
#define FE_DIVBYZERO 0x04
|
||||||
|
#define FE_OVERFLOW 0x08
|
||||||
|
#define FE_UNDERFLOW 0x10
|
||||||
|
#define FE_INEXACT 0x20
|
||||||
|
#define FE_ALL_EXCEPT (FE_INVALID | FE_DENORMAL | FE_DIVBYZERO \
|
||||||
|
| FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
|
||||||
|
|
||||||
|
/* FPU control word rounding flags */
|
||||||
|
#define FE_TONEAREST 0x0000
|
||||||
|
#define FE_DOWNWARD 0x0400
|
||||||
|
#define FE_UPWARD 0x0800
|
||||||
|
#define FE_TOWARDZERO 0x0c00
|
||||||
|
|
||||||
|
#ifndef RC_INVOKED
|
||||||
|
/*
|
||||||
|
For now, support only for the basic abstraction of flags that are
|
||||||
|
either set or clear. fexcept_t could be structure that holds more
|
||||||
|
info about the fp environment.
|
||||||
|
*/
|
||||||
|
typedef unsigned short fexcept_t;
|
||||||
|
|
||||||
|
/* This 28-byte struct represents the entire floating point
|
||||||
|
environment as stored by fnstenv or fstenv */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned short __control_word;
|
||||||
|
unsigned short __unused0;
|
||||||
|
unsigned short __status_word;
|
||||||
|
unsigned short __unused1;
|
||||||
|
unsigned short __tag_word;
|
||||||
|
unsigned short __unused2;
|
||||||
|
unsigned int __ip_offset; /* instruction pointer offset */
|
||||||
|
unsigned short __ip_selector;
|
||||||
|
unsigned short __opcode;
|
||||||
|
unsigned int __data_offset;
|
||||||
|
unsigned short __data_selector;
|
||||||
|
unsigned short __unused3;
|
||||||
|
} fenv_t;
|
||||||
|
|
||||||
|
|
||||||
|
/*The C99 standard (7.6.9) allows us to define implementation-specific macros for
|
||||||
|
different fp environments */
|
||||||
|
|
||||||
|
/* The default Intel x87 floating point environment (64-bit mantissa) */
|
||||||
|
#define FE_PC64_ENV ((const fenv_t *)-1)
|
||||||
|
|
||||||
|
/* The floating point environment set by MSVCRT _fpreset (53-bit mantissa) */
|
||||||
|
#define FE_PC53_ENV ((const fenv_t *)-2)
|
||||||
|
|
||||||
|
/* The FE_DFL_ENV macro is required by standard.
|
||||||
|
fesetenv will use the environment set at app startup.*/
|
||||||
|
#define FE_DFL_ENV ((const fenv_t *) 0)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*TODO: Some of these could be inlined */
|
||||||
|
/* 7.6.2 Exception */
|
||||||
|
|
||||||
|
extern int feclearexcept (int);
|
||||||
|
extern int fegetexceptflag (fexcept_t * flagp, int excepts);
|
||||||
|
extern int feraiseexcept (int excepts );
|
||||||
|
extern int fesetexceptflag (const fexcept_t *, int);
|
||||||
|
extern int fetestexcept (int excepts);
|
||||||
|
|
||||||
|
/* 7.6.3 Rounding */
|
||||||
|
|
||||||
|
extern int fegetround (void);
|
||||||
|
extern int fesetround (int mode);
|
||||||
|
|
||||||
|
/* 7.6.4 Environment */
|
||||||
|
|
||||||
|
extern int fegetenv (fenv_t * envp);
|
||||||
|
extern int fesetenv (const fenv_t * );
|
||||||
|
extern int feupdateenv (const fenv_t *);
|
||||||
|
extern int feholdexcept (fenv_t *);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* Not RC_INVOKED */
|
||||||
|
|
||||||
|
#endif /* ndef _FENV_H */
|
@ -6,11 +6,10 @@
|
|||||||
* Also included here are some non-ANSI bits for accessing the floating
|
* Also included here are some non-ANSI bits for accessing the floating
|
||||||
* point controller.
|
* point controller.
|
||||||
*
|
*
|
||||||
* NOTE: GCC provides float.h, and it is probably more accurate than this,
|
* NOTE: GCC provides float.h, but it doesn't include the non-standard
|
||||||
* but it doesn't include the non-standard stuff for accessing the
|
* stuff for accessing the fp controller. We include_next the
|
||||||
* fp controller. (TODO: Move those bits elsewhere?) Thus it is
|
* GCC-supplied header and just define the MS-specific extensions
|
||||||
* probably not a good idea to use the GCC supplied version instead
|
* here.
|
||||||
* of this header.
|
|
||||||
*
|
*
|
||||||
* This file is part of the Mingw32 package.
|
* This file is part of the Mingw32 package.
|
||||||
*
|
*
|
||||||
@ -33,79 +32,13 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _FLOAT_H_
|
#ifndef _MINGW_FLOAT_H_
|
||||||
#define _FLOAT_H_
|
#define _MINGW_FLOAT_H_
|
||||||
|
|
||||||
/* All the headers include this file. */
|
/* All the headers include this file. */
|
||||||
#include <_mingw.h>
|
#include <_mingw.h>
|
||||||
|
|
||||||
#define FLT_ROUNDS 1
|
#include_next<float.h>
|
||||||
#define FLT_GUARD 1
|
|
||||||
#define FLT_NORMALIZE 1
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The characteristics of float.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* The radix for floating point representation. */
|
|
||||||
#define FLT_RADIX 2
|
|
||||||
|
|
||||||
/* Decimal digits of precision. */
|
|
||||||
#define FLT_DIG 6
|
|
||||||
|
|
||||||
/* Smallest number such that 1+x != 1 */
|
|
||||||
#define FLT_EPSILON 1.19209290e-07F
|
|
||||||
|
|
||||||
/* The number of base FLT_RADIX digits in the mantissa. */
|
|
||||||
#define FLT_MANT_DIG 24
|
|
||||||
|
|
||||||
/* The maximum floating point number. */
|
|
||||||
#define FLT_MAX 3.40282347e+38F
|
|
||||||
|
|
||||||
/* Maximum n such that FLT_RADIX^n - 1 is representable. */
|
|
||||||
#define FLT_MAX_EXP 128
|
|
||||||
|
|
||||||
/* Maximum n such that 10^n is representable. */
|
|
||||||
#define FLT_MAX_10_EXP 38
|
|
||||||
|
|
||||||
/* Minimum normalized floating-point number. */
|
|
||||||
#define FLT_MIN 1.17549435e-38F
|
|
||||||
|
|
||||||
/* Minimum n such that FLT_RADIX^n is a normalized number. */
|
|
||||||
#define FLT_MIN_EXP (-125)
|
|
||||||
|
|
||||||
/* Minimum n such that 10^n is a normalized number. */
|
|
||||||
#define FLT_MIN_10_EXP (-37)
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The characteristics of double.
|
|
||||||
*/
|
|
||||||
#define DBL_DIG 15
|
|
||||||
#define DBL_EPSILON 1.1102230246251568e-16
|
|
||||||
#define DBL_MANT_DIG 53
|
|
||||||
#define DBL_MAX 1.7976931348623157e+308
|
|
||||||
#define DBL_MAX_EXP 1024
|
|
||||||
#define DBL_MAX_10_EXP 308
|
|
||||||
#define DBL_MIN 2.2250738585072014e-308
|
|
||||||
#define DBL_MIN_EXP (-1021)
|
|
||||||
#define DBL_MIN_10_EXP (-307)
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The characteristics of long double.
|
|
||||||
* NOTE: long double is the same as double.
|
|
||||||
*/
|
|
||||||
#define LDBL_DIG 15
|
|
||||||
#define LDBL_EPSILON 1.1102230246251568e-16L
|
|
||||||
#define LDBL_MANT_DIG 53
|
|
||||||
#define LDBL_MAX 1.7976931348623157e+308L
|
|
||||||
#define LDBL_MAX_EXP 1024
|
|
||||||
#define LDBL_MAX_10_EXP 308
|
|
||||||
#define LDBL_MIN 2.2250738585072014e-308L
|
|
||||||
#define LDBL_MIN_EXP (-1021)
|
|
||||||
#define LDBL_MIN_10_EXP (-307)
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Functions and definitions for controlling the FPU.
|
* Functions and definitions for controlling the FPU.
|
||||||
@ -191,7 +124,17 @@ unsigned int _statusfp (void); /* Report the FPU status word */
|
|||||||
#define _clear87 _clearfp
|
#define _clear87 _clearfp
|
||||||
#define _status87 _statusfp
|
#define _status87 _statusfp
|
||||||
|
|
||||||
void _fpreset (void); /* Reset the FPU */
|
|
||||||
|
/*
|
||||||
|
MSVCRT.dll _fpreset initializes the control register to 0x27f,
|
||||||
|
the status register to zero and the tag word to 0FFFFh.
|
||||||
|
This differs from asm instruction finit/fninit which set control
|
||||||
|
word to 0x37f (64 bit mantissa precison rather than 53 bit).
|
||||||
|
By default, the mingw version of _fpreset sets fp control as
|
||||||
|
per fninit. To use the MSVCRT.dll _fpreset, include CRT_fp8.o when
|
||||||
|
building your application.
|
||||||
|
*/
|
||||||
|
void _fpreset (void);
|
||||||
void fpreset (void);
|
void fpreset (void);
|
||||||
|
|
||||||
/* Global 'variable' for the current floating point error code. */
|
/* Global 'variable' for the current floating point error code. */
|
||||||
@ -199,7 +142,8 @@ int * __fpecode(void);
|
|||||||
#define _fpecode (*(__fpecode()))
|
#define _fpecode (*(__fpecode()))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IEEE recommended functions
|
* IEEE recommended functions. MS puts them in float.h
|
||||||
|
* but they really belong in math.h.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
double _chgsign (double);
|
double _chgsign (double);
|
||||||
|
275
winsup/mingw/include/inttypes.h
Normal file
275
winsup/mingw/include/inttypes.h
Normal file
@ -0,0 +1,275 @@
|
|||||||
|
/* 7.8 Format conversion of integer types <inttypes.h> */
|
||||||
|
|
||||||
|
#ifndef _INTTYPES_H_
|
||||||
|
#define _INTTYPES_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#define __need_wchar_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
intmax_t quot;
|
||||||
|
intmax_t rem;
|
||||||
|
} imaxdiv_t;
|
||||||
|
|
||||||
|
#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
|
||||||
|
|
||||||
|
/* 7.8.1 Macros for format specifiers
|
||||||
|
*
|
||||||
|
* MS runtime does not yet understand C9x standard "ll"
|
||||||
|
* length specifier. It appears to treat "ll" as "l".
|
||||||
|
* The non-standard I64 length specifier causes warning in GCC,
|
||||||
|
* but understood by MS runtime functions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* fprintf macros for signed types */
|
||||||
|
#define PRId8 "d"
|
||||||
|
#define PRId16 "d"
|
||||||
|
#define PRId32 "d"
|
||||||
|
#define PRId64 "I64d"
|
||||||
|
|
||||||
|
#define PRIdLEAST8 "d"
|
||||||
|
#define PRIdLEAST16 "d"
|
||||||
|
#define PRIdLEAST32 "d"
|
||||||
|
#define PRIdLEAST64 "I64d"
|
||||||
|
|
||||||
|
#define PRIdFAST8 "d"
|
||||||
|
#define PRIdFAST16 "d"
|
||||||
|
#define PRIdFAST32 "d"
|
||||||
|
#define PRIdFAST64 "I64d"
|
||||||
|
|
||||||
|
#define PRIdMAX "I64d"
|
||||||
|
#define PRIdPTR "d"
|
||||||
|
|
||||||
|
#define PRIi8 "i"
|
||||||
|
#define PRIi16 "i"
|
||||||
|
#define PRIi32 "i"
|
||||||
|
#define PRIi64 "I64i"
|
||||||
|
|
||||||
|
#define PRIiLEAST8 "i"
|
||||||
|
#define PRIiLEAST16 "i"
|
||||||
|
#define PRIiLEAST32 "i"
|
||||||
|
#define PRIiLEAST64 "I64i"
|
||||||
|
|
||||||
|
#define PRIiFAST8 "i"
|
||||||
|
#define PRIiFAST16 "i"
|
||||||
|
#define PRIiFAST32 "i"
|
||||||
|
#define PRIiFAST64 "I64i"
|
||||||
|
|
||||||
|
#define PRIiMAX "I64i"
|
||||||
|
#define PRIiPTR "i"
|
||||||
|
|
||||||
|
#define PRIo8 "o"
|
||||||
|
#define PRIo16 "o"
|
||||||
|
#define PRIo32 "o"
|
||||||
|
#define PRIo64 "I64o"
|
||||||
|
|
||||||
|
#define PRIoLEAST8 "o"
|
||||||
|
#define PRIoLEAST16 "o"
|
||||||
|
#define PRIoLEAST32 "o"
|
||||||
|
#define PRIoLEAST64 "I64o"
|
||||||
|
|
||||||
|
#define PRIoFAST8 "o"
|
||||||
|
#define PRIoFAST16 "o"
|
||||||
|
#define PRIoFAST32 "o"
|
||||||
|
#define PRIoFAST64 "I64o"
|
||||||
|
|
||||||
|
#define PRIoMAX "I64o"
|
||||||
|
|
||||||
|
#define PRIoPTR "o"
|
||||||
|
|
||||||
|
/* fprintf macros for unsigned types */
|
||||||
|
#define PRIu8 "u"
|
||||||
|
#define PRIu16 "u"
|
||||||
|
#define PRIu32 "u"
|
||||||
|
#define PRIu64 "I64u"
|
||||||
|
|
||||||
|
|
||||||
|
#define PRIuLEAST8 "u"
|
||||||
|
#define PRIuLEAST16 "u"
|
||||||
|
#define PRIuLEAST32 "u"
|
||||||
|
#define PRIuLEAST64 "I64u"
|
||||||
|
|
||||||
|
#define PRIuFAST8 "u"
|
||||||
|
#define PRIuFAST16 "u"
|
||||||
|
#define PRIuFAST32 "u"
|
||||||
|
#define PRIuFAST64 "I64u"
|
||||||
|
|
||||||
|
#define PRIuMAX "I64u"
|
||||||
|
#define PRIuPTR "u"
|
||||||
|
|
||||||
|
#define PRIx8 "x"
|
||||||
|
#define PRIx16 "x"
|
||||||
|
#define PRIx32 "x"
|
||||||
|
#define PRIx64 "I64x"
|
||||||
|
|
||||||
|
#define PRIxLEAST8 "x"
|
||||||
|
#define PRIxLEAST16 "x"
|
||||||
|
#define PRIxLEAST32 "x"
|
||||||
|
#define PRIxLEAST64 "I64x"
|
||||||
|
|
||||||
|
#define PRIxFAST8 "x"
|
||||||
|
#define PRIxFAST16 "x"
|
||||||
|
#define PRIxFAST32 "x"
|
||||||
|
#define PRIxFAST64 "I64x"
|
||||||
|
|
||||||
|
#define PRIxMAX "I64x"
|
||||||
|
#define PRIxPTR "x"
|
||||||
|
|
||||||
|
#define PRIX8 "X"
|
||||||
|
#define PRIX16 "X"
|
||||||
|
#define PRIX32 "X"
|
||||||
|
#define PRIX64 "I64X"
|
||||||
|
|
||||||
|
#define PRIXLEAST8 "X"
|
||||||
|
#define PRIXLEAST16 "X"
|
||||||
|
#define PRIXLEAST32 "X"
|
||||||
|
#define PRIXLEAST64 "I64X"
|
||||||
|
|
||||||
|
#define PRIXFAST8 "X"
|
||||||
|
#define PRIXFAST16 "X"
|
||||||
|
#define PRIXFAST32 "X"
|
||||||
|
#define PRIXFAST64 "I64X"
|
||||||
|
|
||||||
|
#define PRIXMAX "I64X"
|
||||||
|
#define PRIXPTR "X"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fscanf macros for signed int types
|
||||||
|
* NOTE: if 32-bit int is used for int_fast8_t and int_fast16_t
|
||||||
|
* (see stdint.h, 7.18.1.3), FAST8 and FAST16 should have
|
||||||
|
* no length identifiers
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SCNd16 "hd"
|
||||||
|
#define SCNd32 "d"
|
||||||
|
#define SCNd64 "I64d"
|
||||||
|
|
||||||
|
#define SCNdLEAST16 "hd"
|
||||||
|
#define SCNdLEAST32 "d"
|
||||||
|
#define SCNdLEAST64 "I64d"
|
||||||
|
|
||||||
|
#define SCNdFAST16 "hd"
|
||||||
|
#define SCNdFAST32 "d"
|
||||||
|
#define SCNdFAST64 "I64d"
|
||||||
|
|
||||||
|
#define SCNdMAX "I64d"
|
||||||
|
#define SCNdPTR "d"
|
||||||
|
|
||||||
|
#define SCNi16 "hi"
|
||||||
|
#define SCNi32 "i"
|
||||||
|
#define SCNi64 "I64i"
|
||||||
|
|
||||||
|
#define SCNiLEAST16 "hi"
|
||||||
|
#define SCNiLEAST32 "i"
|
||||||
|
#define SCNiLEAST64 "I64i"
|
||||||
|
|
||||||
|
#define SCNiFAST16 "hi"
|
||||||
|
#define SCNiFAST32 "i"
|
||||||
|
#define SCNiFAST64 "I64i"
|
||||||
|
|
||||||
|
#define SCNiMAX "I64i"
|
||||||
|
#define SCNiPTR "i"
|
||||||
|
|
||||||
|
#define SCNo16 "ho"
|
||||||
|
#define SCNo32 "o"
|
||||||
|
#define SCNo64 "I64o"
|
||||||
|
|
||||||
|
#define SCNoLEAST16 "ho"
|
||||||
|
#define SCNoLEAST32 "o"
|
||||||
|
#define SCNoLEAST64 "I64o"
|
||||||
|
|
||||||
|
#define SCNoFAST16 "ho"
|
||||||
|
#define SCNoFAST32 "o"
|
||||||
|
#define SCNoFAST64 "I64o"
|
||||||
|
|
||||||
|
#define SCNoMAX "I64o"
|
||||||
|
#define SCNoPTR "o"
|
||||||
|
|
||||||
|
#define SCNx16 "hx"
|
||||||
|
#define SCNx32 "x"
|
||||||
|
#define SCNx64 "I64x"
|
||||||
|
|
||||||
|
#define SCNxLEAST16 "hx"
|
||||||
|
#define SCNxLEAST32 "x"
|
||||||
|
#define SCNxLEAST64 "I64x"
|
||||||
|
|
||||||
|
#define SCNxFAST16 "hx"
|
||||||
|
#define SCNxFAST32 "x"
|
||||||
|
#define SCNxFAST64 "I64x"
|
||||||
|
|
||||||
|
#define SCNxMAX "I64x"
|
||||||
|
#define SCNxPTR "x"
|
||||||
|
|
||||||
|
|
||||||
|
/* fscanf macros for unsigned int types */
|
||||||
|
|
||||||
|
#define SCNu16 "hu"
|
||||||
|
#define SCNu32 "u"
|
||||||
|
#define SCNu64 "I64u"
|
||||||
|
|
||||||
|
#define SCNuLEAST16 "hu"
|
||||||
|
#define SCNuLEAST32 "u"
|
||||||
|
#define SCNuLEAST64 "I64u"
|
||||||
|
|
||||||
|
#define SCNuFAST16 "hu"
|
||||||
|
#define SCNuFAST32 "u"
|
||||||
|
#define SCNuFAST64 "I64u"
|
||||||
|
|
||||||
|
#define SCNuMAX "I64u"
|
||||||
|
#define SCNuPTR "u"
|
||||||
|
|
||||||
|
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
||||||
|
/*
|
||||||
|
* no length modifier for char types prior to C9x
|
||||||
|
* MS runtime scanf appears to treat "hh" as "h"
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* signed char */
|
||||||
|
#define SCNd8 "hhd"
|
||||||
|
#define SCNdLEAST8 "hhd"
|
||||||
|
#define SCNdFAST8 "hhd"
|
||||||
|
|
||||||
|
#define SCNi8 "hhi"
|
||||||
|
#define SCNiLEAST8 "hhi"
|
||||||
|
#define SCNiFAST8 "hhi"
|
||||||
|
|
||||||
|
#define SCNo8 "hho"
|
||||||
|
#define SCNoLEAST8 "hho"
|
||||||
|
#define SCNoFAST8 "hho"
|
||||||
|
|
||||||
|
#define SCNx8 "hhx"
|
||||||
|
#define SCNxLEAST8 "hhx"
|
||||||
|
#define SCNxFAST8 "hhx"
|
||||||
|
|
||||||
|
/* unsigned char */
|
||||||
|
#define SCNu8 "hhu"
|
||||||
|
#define SCNuLEAST8 "hhu"
|
||||||
|
#define SCNuFAST8 "hhu"
|
||||||
|
#endif /* __STDC_VERSION__ >= 199901 */
|
||||||
|
|
||||||
|
#endif /* !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) */
|
||||||
|
|
||||||
|
extern __inline__ intmax_t imaxabs (intmax_t j)
|
||||||
|
{return (j >= 0 ? j : -j);}
|
||||||
|
imaxdiv_t imaxdiv (intmax_t numer, intmax_t denom);
|
||||||
|
|
||||||
|
/* 7.8.2 Conversion functions for greatest-width integer types */
|
||||||
|
|
||||||
|
intmax_t strtoimax (const char* __restrict__ nptr, char** __restrict__ endptr, int base);
|
||||||
|
uintmax_t strtoumax (const char* __restrict__ nptr, char** __restrict__ endptr, int base);
|
||||||
|
|
||||||
|
intmax_t wcstoimax (const wchar_t* __restrict__ nptr, wchar_t** __restrict__ endptr,
|
||||||
|
int base);
|
||||||
|
uintmax_t wcstoumax (const wchar_t* __restrict__ nptr, wchar_t** __restrict__ endptr,
|
||||||
|
int base);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* ndef _INTTYPES_H */
|
@ -64,6 +64,7 @@
|
|||||||
#ifndef __STRICT_ANSI__
|
#ifndef __STRICT_ANSI__
|
||||||
#ifndef __MINGW_FPCLASS_DEFINED
|
#ifndef __MINGW_FPCLASS_DEFINED
|
||||||
#define __MINGW_FPCLASS_DEFINED 1
|
#define __MINGW_FPCLASS_DEFINED 1
|
||||||
|
/* IEEE 754 classication */
|
||||||
#define _FPCLASS_SNAN 0x0001 /* Signaling "Not a Number" */
|
#define _FPCLASS_SNAN 0x0001 /* Signaling "Not a Number" */
|
||||||
#define _FPCLASS_QNAN 0x0002 /* Quiet "Not a Number" */
|
#define _FPCLASS_QNAN 0x0002 /* Quiet "Not a Number" */
|
||||||
#define _FPCLASS_NINF 0x0004 /* Negative Infinity */
|
#define _FPCLASS_NINF 0x0004 /* Negative Infinity */
|
||||||
@ -97,12 +98,12 @@ extern "C" {
|
|||||||
#ifndef __DECLSPEC_SUPPORTED
|
#ifndef __DECLSPEC_SUPPORTED
|
||||||
|
|
||||||
#ifdef __MSVCRT__
|
#ifdef __MSVCRT__
|
||||||
extern double* __imp__HUGE;
|
extern double* _imp___HUGE;
|
||||||
#define HUGE_VAL (*__imp__HUGE)
|
#define HUGE_VAL (*_imp___HUGE)
|
||||||
#else
|
#else
|
||||||
/* CRTDLL */
|
/* CRTDLL */
|
||||||
extern double* __imp__HUGE_dll;
|
extern double* _imp___HUGE_dll;
|
||||||
#define HUGE_VAL (*__imp__HUGE_dll)
|
#define HUGE_VAL (*_imp___HUGE_dll)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else /* __DECLSPEC_SUPPORTED */
|
#else /* __DECLSPEC_SUPPORTED */
|
||||||
@ -151,7 +152,6 @@ double frexp (double, int*);
|
|||||||
double modf (double, double*);
|
double modf (double, double*);
|
||||||
double fmod (double, double);
|
double fmod (double, double);
|
||||||
|
|
||||||
|
|
||||||
#ifndef __STRICT_ANSI__
|
#ifndef __STRICT_ANSI__
|
||||||
|
|
||||||
/* Complex number (for cabs) */
|
/* Complex number (for cabs) */
|
||||||
@ -190,12 +190,15 @@ int _isnan (double);
|
|||||||
|
|
||||||
/* END FLOAT.H COPY */
|
/* END FLOAT.H COPY */
|
||||||
|
|
||||||
#ifndef _NO_OLDNAMES
|
#if !defined (_NO_OLDNAMES) \
|
||||||
|
|| (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L )
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Non-underscored versions of non-ANSI functions. These reside in
|
* Non-underscored versions of non-ANSI functions. These reside in
|
||||||
* liboldnames.a. Provided for extra portability.
|
* liboldnames.a. They are now also ISO C99 standand names.
|
||||||
|
* Provided for extra portability.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
double cabs (struct _complex);
|
double cabs (struct _complex);
|
||||||
double hypot (double, double);
|
double hypot (double, double);
|
||||||
double j0 (double);
|
double j0 (double);
|
||||||
@ -212,8 +215,271 @@ double yn (int, double);
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* Not RC_INVOKED */
|
#endif /* Not RC_INVOKED */
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __NO_ISOCEXT
|
||||||
|
#ifndef RC_INVOKED
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
|
||||||
|
|| !defined __STRICT_ANSI__
|
||||||
|
|
||||||
|
#define INFINITY HUGE_VAL
|
||||||
|
#define NAN (0.0F/0.0F)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Return values for fpclassify.
|
||||||
|
These are based on Intel x87 fpu condition codes
|
||||||
|
in the high byte of status word and differ from
|
||||||
|
the return values for MS IEEE 754 extension _fpclass()
|
||||||
|
*/
|
||||||
|
#define FP_NAN 0x0100
|
||||||
|
#define FP_NORMAL 0x0400
|
||||||
|
#define FP_INFINITE (FP_NAN | FP_NORMAL)
|
||||||
|
#define FP_ZERO 0x4000
|
||||||
|
#define FP_SUBNORMAL (FP_NORMAL | FP_ZERO)
|
||||||
|
/* 0x0200 is signbit mask */
|
||||||
|
|
||||||
|
|
||||||
|
/* Return a NaN */
|
||||||
|
double nan(const char *tagp);
|
||||||
|
float nanf(const char *tagp);
|
||||||
|
long double nanl(const char *tagp);
|
||||||
|
|
||||||
|
#ifndef __STRICT_ANSI__
|
||||||
|
#define nan() nan("")
|
||||||
|
#define nanf() nanf("")
|
||||||
|
#define nanl() nanl("")
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
We can't inline float or double, because we want to ensure truncation
|
||||||
|
to semantic type before classification.
|
||||||
|
(A normal long double value might become subnormal when
|
||||||
|
converted to double, and zero when converted to float.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern int __fpclassifyf (float);
|
||||||
|
extern int __fpclassify (double);
|
||||||
|
|
||||||
|
extern __inline__ int __fpclassifyl (long double x){
|
||||||
|
unsigned short sw;
|
||||||
|
__asm__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x));
|
||||||
|
return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
|
||||||
|
}
|
||||||
|
|
||||||
|
#define fpclassify(x) (sizeof (x) == sizeof (float) ? __fpclassifyf (x) \
|
||||||
|
: sizeof (x) == sizeof (double) ? __fpclassify (x) \
|
||||||
|
: __fpclassifyl (x))
|
||||||
|
|
||||||
|
/* We don't need to worry about trucation here:
|
||||||
|
A NaN stays a NaN. */
|
||||||
|
extern __inline__ int __isnan (double _x)
|
||||||
|
{
|
||||||
|
unsigned short sw;
|
||||||
|
__asm__ ("fxam;"
|
||||||
|
"fstsw %%ax": "=a" (sw) : "t" (_x));
|
||||||
|
return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
|
||||||
|
== FP_NAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline__ int __isnanf (float _x)
|
||||||
|
{
|
||||||
|
unsigned short sw;
|
||||||
|
__asm__ ("fxam;"
|
||||||
|
"fstsw %%ax": "=a" (sw) : "t" (_x));
|
||||||
|
return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
|
||||||
|
== FP_NAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline__ int __isnanl (long double _x)
|
||||||
|
{
|
||||||
|
unsigned short sw;
|
||||||
|
__asm__ ("fxam;"
|
||||||
|
"fstsw %%ax": "=a" (sw) : "t" (_x));
|
||||||
|
return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
|
||||||
|
== FP_NAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define isnan(x) (sizeof (x) == sizeof (float) ? __isnanf (x) \
|
||||||
|
: sizeof (x) == sizeof (double) ? __isnan (x) \
|
||||||
|
: __isnanl (x))
|
||||||
|
|
||||||
|
#define isfinite(x) ((fpclassify(x) & FP_NAN) == 0)
|
||||||
|
#define isinf(x) (fpclassify(x) == FP_INFINITE)
|
||||||
|
#define isnormal(x) (fpclassify(x) == FP_NORMAL)
|
||||||
|
|
||||||
|
|
||||||
|
extern __inline__ int __signbit (double x) {
|
||||||
|
unsigned short stw;
|
||||||
|
__asm__ ( "fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
|
||||||
|
return stw & 0x0200;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline__ int __signbitf (float x) {
|
||||||
|
unsigned short stw;
|
||||||
|
__asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
|
||||||
|
return stw & 0x0200;
|
||||||
|
}
|
||||||
|
extern __inline__ int __signbitl (long double x) {
|
||||||
|
unsigned short stw;
|
||||||
|
__asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
|
||||||
|
return stw & 0x0200;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define signbit(x) (sizeof (x) == sizeof (float) ? __signbitf (x) \
|
||||||
|
: sizeof (x) == sizeof (double) ? __signbit (x) \
|
||||||
|
: __signbitl (x))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* With these functions, comparisons involving quiet NaNs set the FP
|
||||||
|
* condition code to "unordered". The IEEE floating-point spec
|
||||||
|
* dictates that the result of floating-point comparisons should be
|
||||||
|
* false whenever a NaN is involved, with the exception of the !=,
|
||||||
|
* which always returns true: yes, (NaN != NaN) is true).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if __GNUC__ >= 3
|
||||||
|
|
||||||
|
#define isgreater(x, y) __builtin_isgreater(x, y)
|
||||||
|
#define isgreaterequal(x, y) __builtin_isgreaterequal(x, y)
|
||||||
|
#define isless(x, y) __builtin_isless(x, y)
|
||||||
|
#define islessequal(x, y) __builtin_islessequal(x, y)
|
||||||
|
#define islessgreater(x, y) __builtin_islessgreater(x, y)
|
||||||
|
#define isunordered(x, y) __builtin_isunordered(x, y)
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* helper */
|
||||||
|
extern __inline__ int
|
||||||
|
__fp_unordered_compare (long double x, long double y){
|
||||||
|
unsigned short retval;
|
||||||
|
__asm__ ("fucom %%st(1);"
|
||||||
|
"fnstsw;": "=a" (retval) : "t" (x), "u" (y));
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define isgreater(x, y) ((__fp_unordered_compare(x, y) \
|
||||||
|
& 0x4500) == 0)
|
||||||
|
#define isless(x, y) ((__fp_unordered_compare (y, x) \
|
||||||
|
& 0x4500) == 0)
|
||||||
|
#define isgreaterequal(x, y) ((__fp_unordered_compare (x, y) \
|
||||||
|
& FP_INFINITE) == 0)
|
||||||
|
#define islessequal(x, y) ((__fp_unordered_compare(y, x) \
|
||||||
|
& FP_INFINITE) == 0)
|
||||||
|
#define islessgreater(x, y) ((__fp_unordered_compare(x, y) \
|
||||||
|
& FP_SUBNORMAL) == 0)
|
||||||
|
#define isunordered(x, y) ((__fp_unordered_compare(x, y) \
|
||||||
|
& 0x4500) == 0x4500)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* round, using fpu control word settings */
|
||||||
|
extern __inline__ double rint (double x)
|
||||||
|
{
|
||||||
|
double retval;
|
||||||
|
__asm__ ("frndint;": "=t" (retval) : "0" (x));
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline__ float rintf (float x)
|
||||||
|
{
|
||||||
|
float retval;
|
||||||
|
__asm__ ("frndint;" : "=t" (retval) : "0" (x) );
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline__ long double rintl (long double x)
|
||||||
|
{
|
||||||
|
long double retval;
|
||||||
|
__asm__ ("frndint;" : "=t" (retval) : "0" (x) );
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* round away from zero, regardless of fpu control word settings */
|
||||||
|
extern double round (double);
|
||||||
|
extern float roundf (float);
|
||||||
|
extern long double roundl (long double);
|
||||||
|
|
||||||
|
|
||||||
|
/* round towards zero, regardless of fpu control word settings */
|
||||||
|
extern double trunc (double);
|
||||||
|
extern float truncf (float);
|
||||||
|
extern long double truncl (long double);
|
||||||
|
|
||||||
|
|
||||||
|
/* fmax and fmin.
|
||||||
|
NaN arguments are treated as missing data: if one argument is a NaN
|
||||||
|
and the other numeric, then these functions choose the numeric
|
||||||
|
value. */
|
||||||
|
|
||||||
|
extern double fmax (double, double);
|
||||||
|
extern float fmaxf (float, float);
|
||||||
|
extern long double fmaxl (long double, long double);
|
||||||
|
|
||||||
|
extern double fmin (double, double);
|
||||||
|
extern float fminf (float, float);
|
||||||
|
extern long double fminl (long double, long double);
|
||||||
|
|
||||||
|
/* return x * y + z as a ternary op */
|
||||||
|
extern double fma (double, double, double);
|
||||||
|
extern float fmaf (float, float, float);
|
||||||
|
extern long double fmal (long double, long double, long double);
|
||||||
|
|
||||||
|
/* x > y ? (x - y) : 0.0 */
|
||||||
|
extern double fdim (double, double);
|
||||||
|
extern float fdimf (float, float);
|
||||||
|
extern long double fdiml (long double, long double);
|
||||||
|
|
||||||
|
/* one lonely transcendental */
|
||||||
|
extern double log2 (double _x);
|
||||||
|
extern float log2f (float _x);
|
||||||
|
extern long double log2l (long double _x);
|
||||||
|
#endif /* __STDC_VERSION__ >= 199901L */
|
||||||
|
|
||||||
|
|
||||||
|
/* The underscored versions for double are in MSVCRT.dll.
|
||||||
|
The stubs for float and double versions are in libmingwex.a */
|
||||||
|
|
||||||
|
double copysign (double, double);
|
||||||
|
float copysignf (float, float);
|
||||||
|
long double copysignl (long double, long double);
|
||||||
|
|
||||||
|
double logb (double);
|
||||||
|
float logbf (float);
|
||||||
|
double nextafter (double, double);
|
||||||
|
float nextafterf (float, float);
|
||||||
|
double scalb (double, long);
|
||||||
|
float scalbf (float, long);
|
||||||
|
|
||||||
|
#if !defined (__STRICT_ANSI__) /* inline using non-ANSI functions */
|
||||||
|
extern __inline__ double copysign (double x, double y)
|
||||||
|
{ return _copysign(x, y); }
|
||||||
|
extern __inline__ float copysignf (float x, float y)
|
||||||
|
{ return _copysign(x, y); }
|
||||||
|
extern __inline__ double logb (double x)
|
||||||
|
{ return _logb(x); }
|
||||||
|
extern __inline__ float logbf (float x)
|
||||||
|
{ return _logb(x); }
|
||||||
|
extern __inline__ double nextafter(double x, double y)
|
||||||
|
{ return _nextafter(x, y); }
|
||||||
|
extern __inline__ float nextafterf(float x, float y)
|
||||||
|
{ return _nextafter(x, y); }
|
||||||
|
extern __inline__ double scalb (double x, long i)
|
||||||
|
{ return _scalb (x, i); }
|
||||||
|
extern __inline__ float scalbf (float x, long i)
|
||||||
|
{ return _scalb(x, i); }
|
||||||
|
#endif /* (__STRICT_ANSI__) */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* Not RC_INVOKED */
|
||||||
|
|
||||||
|
#endif /* __NO_ISOCEXT */
|
||||||
|
|
||||||
#endif /* Not _MATH_H_ */
|
#endif /* Not _MATH_H_ */
|
||||||
|
|
||||||
|
@ -1,112 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* stdarg.h
|
* This is just an RC_INVOKED guard for the real stdarg.h
|
||||||
*
|
* fixincluded in gcc system dir. One day we will delete this file.
|
||||||
* Provides facilities for stepping through a list of function arguments of
|
|
||||||
* an unknown number and type.
|
|
||||||
*
|
|
||||||
* NOTE: Gcc should provide stdarg.h, and I believe their version will work
|
|
||||||
* with crtdll. If necessary I think you can replace this with the GCC
|
|
||||||
* stdarg.h.
|
|
||||||
*
|
|
||||||
* Note that the type used in va_arg is supposed to match the actual type
|
|
||||||
* *after default promotions*. Thus, va_arg (..., short) is not valid.
|
|
||||||
*
|
|
||||||
* This file is part of the Mingw32 package.
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
|
||||||
*
|
|
||||||
* This source code is offered for use in the public domain. You may
|
|
||||||
* use, modify or distribute it freely.
|
|
||||||
*
|
|
||||||
* This code is distributed in the hope that it will be useful but
|
|
||||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
|
||||||
* DISCLAIMED. This includes but is not limited to warranties of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* $Revision$
|
|
||||||
* $Author$
|
|
||||||
* $Date$
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _STDARG_H_
|
|
||||||
#define _STDARG_H_
|
|
||||||
|
|
||||||
/* All the headers include this file. */
|
|
||||||
#include <_mingw.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Don't do any of this stuff for the resource compiler.
|
|
||||||
*/
|
*/
|
||||||
#ifndef RC_INVOKED
|
#ifndef RC_INVOKED
|
||||||
|
#include_next<stdarg.h>
|
||||||
/*
|
|
||||||
* I was told that Win NT likes this.
|
|
||||||
*/
|
|
||||||
#ifndef _VA_LIST_DEFINED
|
|
||||||
#define _VA_LIST_DEFINED
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _VA_LIST
|
|
||||||
#define _VA_LIST
|
|
||||||
#if defined __GNUC__ && __GNUC__ >= 3
|
|
||||||
typedef __builtin_va_list va_list;
|
|
||||||
#else
|
|
||||||
typedef char* va_list;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Amount of space required in an argument list (ie. the stack) for an
|
|
||||||
* argument of type t.
|
|
||||||
*/
|
|
||||||
#define __va_argsiz(t) \
|
|
||||||
(((sizeof(t) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Start variable argument list processing by setting AP to point to the
|
|
||||||
* argument after pN.
|
|
||||||
*/
|
|
||||||
#ifdef __GNUC__
|
|
||||||
/*
|
|
||||||
* In GNU the stack is not necessarily arranged very neatly in order to
|
|
||||||
* pack shorts and such into a smaller argument list. Fortunately a
|
|
||||||
* neatly arranged version is available through the use of __builtin_next_arg.
|
|
||||||
*/
|
|
||||||
#define va_start(ap, pN) \
|
|
||||||
((ap) = ((va_list) __builtin_next_arg(pN)))
|
|
||||||
#else
|
|
||||||
/*
|
|
||||||
* For a simple minded compiler this should work (it works in GNU too for
|
|
||||||
* vararg lists that don't follow shorts and such).
|
|
||||||
*/
|
|
||||||
#define va_start(ap, pN) \
|
|
||||||
((ap) = ((va_list) (&pN) + __va_argsiz(pN)))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* End processing of variable argument list. In this case we do nothing.
|
|
||||||
*/
|
|
||||||
#define va_end(ap) ((void)0)
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Increment ap to the next argument in the list while returing a
|
|
||||||
* pointer to what ap pointed to first, which is of type t.
|
|
||||||
*
|
|
||||||
* We cast to void* and then to t* because this avoids a warning about
|
|
||||||
* increasing the alignment requirement.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define va_arg(ap, t) \
|
|
||||||
(((ap) = (ap) + __va_argsiz(t)), \
|
|
||||||
*((t*) (void*) ((ap) - __va_argsiz(t))))
|
|
||||||
|
|
||||||
#endif /* Not RC_INVOKED */
|
|
||||||
|
|
||||||
#endif /* not _STDARG_H_ */
|
|
||||||
|
@ -1,373 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* stddef.h
|
* This is just an RC_INVOKED guard for the real stddef.h
|
||||||
*
|
* fixincluded in gcc system dir. One day we will delete this file.
|
||||||
* Standard type definitions provided by the C library.
|
|
||||||
*
|
|
||||||
* NOTE: This is typically supplied by GCC, but there's a small gotcha -
|
|
||||||
* GCC's version doesn't guard typedefs via RC_INVOKED. This is
|
|
||||||
* GCC's version, with the guard macro. Since we install this in
|
|
||||||
* the tool include directory, it gets picked up before GCC's
|
|
||||||
* internal include directory, and we're safe.
|
|
||||||
*
|
|
||||||
* This file is part of the Mingw32 package.
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
|
||||||
*
|
|
||||||
* This source code is offered for use in the public domain. You may
|
|
||||||
* use, modify or distribute it freely.
|
|
||||||
*
|
|
||||||
* This code is distributed in the hope that it will be useful but
|
|
||||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
|
||||||
* DISCLAIMED. This includes but is not limited to warranties of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if (!defined(_STDDEF_H) && !defined(_STDDEF_H_) && !defined(_ANSI_STDDEF_H) \
|
|
||||||
&& !defined(__STDDEF_H__)) \
|
|
||||||
|| defined(__need_wchar_t) || defined(__need_size_t) \
|
|
||||||
|| defined(__need_ptrdiff_t) || defined(__need_NULL) \
|
|
||||||
|| defined(__need_wint_t)
|
|
||||||
|
|
||||||
/* Any one of these symbols __need_* means that GNU libc
|
|
||||||
wants us just to define one data type. So don't define
|
|
||||||
the symbols that indicate this file's entire job has been done. */
|
|
||||||
#if (!defined(__need_wchar_t) && !defined(__need_size_t) \
|
|
||||||
&& !defined(__need_ptrdiff_t) && !defined(__need_NULL) \
|
|
||||||
&& !defined(__need_wint_t))
|
|
||||||
#define _STDDEF_H
|
|
||||||
#define _STDDEF_H_
|
|
||||||
/* snaroff@next.com says the NeXT needs this. */
|
|
||||||
#define _ANSI_STDDEF_H
|
|
||||||
/* Irix 5.1 needs this. */
|
|
||||||
#define __STDDEF_H__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef RC_INVOKED
|
#ifndef RC_INVOKED
|
||||||
|
#include_next<stddef.h>
|
||||||
#ifndef __sys_stdtypes_h
|
|
||||||
/* This avoids lossage on SunOS but only if stdtypes.h comes first.
|
|
||||||
There's no way to win with the other order! Sun lossage. */
|
|
||||||
|
|
||||||
/* On 4.3bsd-net2, make sure ansi.h is included, so we have
|
|
||||||
one less case to deal with in the following. */
|
|
||||||
#if defined (__BSD_NET2__) || defined (____386BSD____) || defined (__FreeBSD__) || defined(__NetBSD__)
|
|
||||||
#include <machine/ansi.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
|
|
||||||
defined if the corresponding type is *not* defined.
|
|
||||||
FreeBSD-2.1 defines _MACHINE_ANSI_H_ instead of _ANSI_H_ */
|
|
||||||
#if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_)
|
|
||||||
#if !defined(_SIZE_T_) && !defined(_BSD_SIZE_T_)
|
|
||||||
#define _SIZE_T
|
|
||||||
#endif
|
|
||||||
#if !defined(_PTRDIFF_T_) && !defined(_BSD_PTRDIFF_T_)
|
|
||||||
#define _PTRDIFF_T
|
|
||||||
#endif
|
|
||||||
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
|
|
||||||
instead of _WCHAR_T_. */
|
|
||||||
#if !defined(_WCHAR_T_) && !defined(_BSD_WCHAR_T_)
|
|
||||||
#ifndef _BSD_WCHAR_T_
|
|
||||||
#define _WCHAR_T
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
/* Undef _FOO_T_ if we are supposed to define foo_t. */
|
|
||||||
#if defined (__need_ptrdiff_t) || defined (_STDDEF_H_)
|
|
||||||
#undef _PTRDIFF_T_
|
|
||||||
#undef _BSD_PTRDIFF_T_
|
|
||||||
#endif
|
|
||||||
#if defined (__need_size_t) || defined (_STDDEF_H_)
|
|
||||||
#undef _SIZE_T_
|
|
||||||
#undef _BSD_SIZE_T_
|
|
||||||
#endif
|
|
||||||
#if defined (__need_wchar_t) || defined (_STDDEF_H_)
|
|
||||||
#undef _WCHAR_T_
|
|
||||||
#undef _BSD_WCHAR_T_
|
|
||||||
#endif
|
|
||||||
#endif /* defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) */
|
|
||||||
|
|
||||||
/* Sequent's header files use _PTRDIFF_T_ in some conflicting way.
|
|
||||||
Just ignore it. */
|
|
||||||
#if defined (__sequent__) && defined (_PTRDIFF_T_)
|
|
||||||
#undef _PTRDIFF_T_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* On VxWorks, <type/vxTypesBase.h> may have defined macros like
|
|
||||||
_TYPE_size_t which will typedef size_t. fixincludes patched the
|
|
||||||
vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
|
|
||||||
not defined, and so that defining this macro defines _GCC_SIZE_T.
|
|
||||||
If we find that the macros are still defined at this point, we must
|
|
||||||
invoke them so that the type is defined as expected. */
|
|
||||||
#if defined (_TYPE_ptrdiff_t) && (defined (__need_ptrdiff_t) || defined (_STDDEF_H_))
|
|
||||||
_TYPE_ptrdiff_t;
|
|
||||||
#undef _TYPE_ptrdiff_t
|
|
||||||
#endif
|
|
||||||
#if defined (_TYPE_size_t) && (defined (__need_size_t) || defined (_STDDEF_H_))
|
|
||||||
_TYPE_size_t;
|
|
||||||
#undef _TYPE_size_t
|
|
||||||
#endif
|
|
||||||
#if defined (_TYPE_wchar_t) && (defined (__need_wchar_t) || defined (_STDDEF_H_))
|
|
||||||
_TYPE_wchar_t;
|
|
||||||
#undef _TYPE_wchar_t
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* In case nobody has defined these types, but we aren't running under
|
|
||||||
GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE__TYPE__, and
|
|
||||||
__WCHAR_TYPE__ have reasonable values. This can happen if the
|
|
||||||
parts of GCC is compiled by an older compiler, that actually
|
|
||||||
include gstddef.h, such as collect2. */
|
|
||||||
|
|
||||||
/* Signed type of difference of two pointers. */
|
|
||||||
|
|
||||||
/* Define this type if we are doing the whole job,
|
|
||||||
or if we want this type in particular. */
|
|
||||||
#if defined (_STDDEF_H) || defined (__need_ptrdiff_t)
|
|
||||||
#ifndef _PTRDIFF_T /* in case <sys/types.h> has defined it. */
|
|
||||||
#ifndef _T_PTRDIFF_
|
|
||||||
#ifndef _T_PTRDIFF
|
|
||||||
#ifndef __PTRDIFF_T
|
|
||||||
#ifndef _PTRDIFF_T_
|
|
||||||
#ifndef _BSD_PTRDIFF_T_
|
|
||||||
#ifndef ___int_ptrdiff_t_h
|
|
||||||
#ifndef _GCC_PTRDIFF_T
|
|
||||||
#define _PTRDIFF_T
|
|
||||||
#define _T_PTRDIFF_
|
|
||||||
#define _T_PTRDIFF
|
|
||||||
#define __PTRDIFF_T
|
|
||||||
#define _PTRDIFF_T_
|
|
||||||
#define _BSD_PTRDIFF_T_
|
|
||||||
#define ___int_ptrdiff_t_h
|
|
||||||
#define _GCC_PTRDIFF_T
|
|
||||||
#ifndef __PTRDIFF_TYPE__
|
|
||||||
#define __PTRDIFF_TYPE__ long int
|
|
||||||
#endif
|
|
||||||
typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
|
||||||
#endif /* _GCC_PTRDIFF_T */
|
|
||||||
#endif /* ___int_ptrdiff_t_h */
|
|
||||||
#endif /* _BSD_PTRDIFF_T_ */
|
|
||||||
#endif /* _PTRDIFF_T_ */
|
|
||||||
#endif /* __PTRDIFF_T */
|
|
||||||
#endif /* _T_PTRDIFF */
|
|
||||||
#endif /* _T_PTRDIFF_ */
|
|
||||||
#endif /* _PTRDIFF_T */
|
|
||||||
|
|
||||||
/* If this symbol has done its job, get rid of it. */
|
|
||||||
#undef __need_ptrdiff_t
|
|
||||||
|
|
||||||
#endif /* _STDDEF_H or __need_ptrdiff_t. */
|
|
||||||
|
|
||||||
/* Unsigned type of `sizeof' something. */
|
|
||||||
|
|
||||||
/* Define this type if we are doing the whole job,
|
|
||||||
or if we want this type in particular. */
|
|
||||||
#if defined (_STDDEF_H) || defined (__need_size_t)
|
|
||||||
#ifndef __size_t__ /* BeOS */
|
|
||||||
#ifndef _SIZE_T /* in case <sys/types.h> has defined it. */
|
|
||||||
#ifndef _SYS_SIZE_T_H
|
|
||||||
#ifndef _T_SIZE_
|
|
||||||
#ifndef _T_SIZE
|
|
||||||
#ifndef __SIZE_T
|
|
||||||
#ifndef _SIZE_T_
|
|
||||||
#ifndef _BSD_SIZE_T_
|
|
||||||
#ifndef _SIZE_T_DEFINED_
|
|
||||||
#ifndef _SIZE_T_DEFINED
|
|
||||||
#ifndef ___int_size_t_h
|
|
||||||
#ifndef _GCC_SIZE_T
|
|
||||||
#ifndef _SIZET_
|
|
||||||
#ifndef __size_t
|
|
||||||
#define __size_t__ /* BeOS */
|
|
||||||
#define _SIZE_T
|
|
||||||
#define _SYS_SIZE_T_H
|
|
||||||
#define _T_SIZE_
|
|
||||||
#define _T_SIZE
|
|
||||||
#define __SIZE_T
|
|
||||||
#define _SIZE_T_
|
|
||||||
#define _BSD_SIZE_T_
|
|
||||||
#define _SIZE_T_DEFINED_
|
|
||||||
#define _SIZE_T_DEFINED
|
|
||||||
#define ___int_size_t_h
|
|
||||||
#define _GCC_SIZE_T
|
|
||||||
#define _SIZET_
|
|
||||||
#define __size_t
|
|
||||||
#ifndef __SIZE_TYPE__
|
|
||||||
#define __SIZE_TYPE__ long unsigned int
|
|
||||||
#endif
|
|
||||||
#if !(defined (__GNUG__) && defined (size_t))
|
|
||||||
typedef __SIZE_TYPE__ size_t;
|
|
||||||
#ifdef __BEOS__
|
|
||||||
typedef long ssize_t;
|
|
||||||
#endif /* __BEOS__ */
|
|
||||||
#endif /* !(defined (__GNUG__) && defined (size_t)) */
|
|
||||||
#endif /* __size_t */
|
|
||||||
#endif /* _SIZET_ */
|
|
||||||
#endif /* _GCC_SIZE_T */
|
|
||||||
#endif /* ___int_size_t_h */
|
|
||||||
#endif /* _SIZE_T_DEFINED */
|
|
||||||
#endif /* _SIZE_T_DEFINED_ */
|
|
||||||
#endif /* _BSD_SIZE_T_ */
|
|
||||||
#endif /* _SIZE_T_ */
|
|
||||||
#endif /* __SIZE_T */
|
|
||||||
#endif /* _T_SIZE */
|
|
||||||
#endif /* _T_SIZE_ */
|
|
||||||
#endif /* _SYS_SIZE_T_H */
|
|
||||||
#endif /* _SIZE_T */
|
|
||||||
#endif /* __size_t__ */
|
|
||||||
#undef __need_size_t
|
|
||||||
#endif /* _STDDEF_H or __need_size_t. */
|
|
||||||
|
|
||||||
/* Wide character type.
|
|
||||||
Locale-writers should change this as necessary to
|
|
||||||
be big enough to hold unique values not between 0 and 127,
|
|
||||||
and not (wchar_t) -1, for each defined multibyte character. */
|
|
||||||
|
|
||||||
/* Define this type if we are doing the whole job,
|
|
||||||
or if we want this type in particular. */
|
|
||||||
#if defined (_STDDEF_H) || defined (__need_wchar_t)
|
|
||||||
#ifndef __wchar_t__ /* BeOS */
|
|
||||||
#ifndef _WCHAR_T
|
|
||||||
#ifndef _T_WCHAR_
|
|
||||||
#ifndef _T_WCHAR
|
|
||||||
#ifndef __WCHAR_T
|
|
||||||
#ifndef _WCHAR_T_
|
|
||||||
#ifndef _BSD_WCHAR_T_
|
|
||||||
#ifndef _WCHAR_T_DEFINED_
|
|
||||||
#ifndef _WCHAR_T_DEFINED
|
|
||||||
#ifndef _WCHAR_T_H
|
|
||||||
#ifndef ___int_wchar_t_h
|
|
||||||
#ifndef __INT_WCHAR_T_H
|
|
||||||
#ifndef _GCC_WCHAR_T
|
|
||||||
#define __wchar_t__ /* BeOS */
|
|
||||||
#define _WCHAR_T
|
|
||||||
#define _T_WCHAR_
|
|
||||||
#define _T_WCHAR
|
|
||||||
#define __WCHAR_T
|
|
||||||
#define _WCHAR_T_
|
|
||||||
#define _BSD_WCHAR_T_
|
|
||||||
#define _WCHAR_T_DEFINED_
|
|
||||||
#define _WCHAR_T_DEFINED
|
|
||||||
#define _WCHAR_T_H
|
|
||||||
#define ___int_wchar_t_h
|
|
||||||
#define __INT_WCHAR_T_H
|
|
||||||
#define _GCC_WCHAR_T
|
|
||||||
|
|
||||||
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
|
|
||||||
instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
|
|
||||||
symbols in the _FOO_T_ family, stays defined even after its
|
|
||||||
corresponding type is defined). If we define wchar_t, then we
|
|
||||||
must undef _WCHAR_T_; for BSD/386 1.1 (and perhaps others), if
|
|
||||||
we undef _WCHAR_T_, then we must also define rune_t, since
|
|
||||||
headers like runetype.h assume that if machine/ansi.h is included,
|
|
||||||
and _BSD_WCHAR_T_ is not defined, then rune_t is available.
|
|
||||||
machine/ansi.h says, "Note that _WCHAR_T_ and _RUNE_T_ must be of
|
|
||||||
the same type." */
|
|
||||||
#ifdef _BSD_WCHAR_T_
|
|
||||||
#undef _BSD_WCHAR_T_
|
|
||||||
#ifdef _BSD_RUNE_T_
|
|
||||||
#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
|
|
||||||
typedef _BSD_RUNE_T_ rune_t;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __WCHAR_TYPE__
|
|
||||||
#ifdef __BEOS__
|
|
||||||
#define __WCHAR_TYPE__ unsigned char
|
|
||||||
#else
|
|
||||||
#define __WCHAR_TYPE__ int
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#ifndef __cplusplus
|
|
||||||
typedef __WCHAR_TYPE__ wchar_t;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif /* __wchar_t__ */
|
|
||||||
#undef __need_wchar_t
|
|
||||||
#endif /* _STDDEF_H or __need_wchar_t. */
|
|
||||||
|
|
||||||
#if defined (_STDDEF_H) || defined (__need_wint_t)
|
|
||||||
#ifndef _WINT_T
|
|
||||||
#define _WINT_T
|
|
||||||
|
|
||||||
#ifndef __WINT_TYPE__
|
|
||||||
#define __WINT_TYPE__ unsigned int
|
|
||||||
#endif
|
|
||||||
typedef __WINT_TYPE__ wint_t;
|
|
||||||
#endif
|
|
||||||
#undef __need_wint_t
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* In 4.3bsd-net2, leave these undefined to indicate that size_t, etc.
|
|
||||||
are already defined. */
|
|
||||||
/* BSD/OS 3.1 requires the MACHINE_ANSI_H check here. FreeBSD 2.x apparently
|
|
||||||
does not, even though there is a check for MACHINE_ANSI_H above. */
|
|
||||||
#if defined(_ANSI_H_) || (defined(__bsdi__) && defined(_MACHINE_ANSI_H_))
|
|
||||||
/* The references to _GCC_PTRDIFF_T_, _GCC_SIZE_T_, and _GCC_WCHAR_T_
|
|
||||||
are probably typos and should be removed before 2.8 is released. */
|
|
||||||
#ifdef _GCC_PTRDIFF_T_
|
|
||||||
#undef _PTRDIFF_T_
|
|
||||||
#undef _BSD_PTRDIFF_T_
|
|
||||||
#endif
|
|
||||||
#ifdef _GCC_SIZE_T_
|
|
||||||
#undef _SIZE_T_
|
|
||||||
#undef _BSD_SIZE_T_
|
|
||||||
#endif
|
|
||||||
#ifdef _GCC_WCHAR_T_
|
|
||||||
#undef _WCHAR_T_
|
|
||||||
#undef _BSD_WCHAR_T_
|
|
||||||
#endif
|
|
||||||
/* The following ones are the real ones. */
|
|
||||||
#ifdef _GCC_PTRDIFF_T
|
|
||||||
#undef _PTRDIFF_T_
|
|
||||||
#undef _BSD_PTRDIFF_T_
|
|
||||||
#endif
|
|
||||||
#ifdef _GCC_SIZE_T
|
|
||||||
#undef _SIZE_T_
|
|
||||||
#undef _BSD_SIZE_T_
|
|
||||||
#endif
|
|
||||||
#ifdef _GCC_WCHAR_T
|
|
||||||
#undef _WCHAR_T_
|
|
||||||
#undef _BSD_WCHAR_T_
|
|
||||||
#endif
|
|
||||||
#endif /* _ANSI_H_ || ( __bsdi__ && _MACHINE_ANSI_H_ ) */
|
|
||||||
|
|
||||||
#endif /* __sys_stdtypes_h */
|
|
||||||
|
|
||||||
#endif /* RC_INVOKED */
|
|
||||||
|
|
||||||
/* A null pointer constant. */
|
|
||||||
|
|
||||||
#if defined (_STDDEF_H) || defined (__need_NULL)
|
|
||||||
#undef NULL /* in case <stdio.h> has defined it. */
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#define NULL __null
|
|
||||||
#else /* G++ */
|
|
||||||
#define NULL ((void *)0)
|
|
||||||
#endif /* G++ */
|
|
||||||
#endif /* NULL not defined and <stddef.h> or need NULL. */
|
|
||||||
#undef __need_NULL
|
|
||||||
|
|
||||||
#ifdef _STDDEF_H
|
|
||||||
|
|
||||||
/* Offset of member MEMBER in a struct of type TYPE. */
|
|
||||||
|
|
||||||
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
|
||||||
|
|
||||||
#endif /* _STDDEF_H was defined this time */
|
|
||||||
|
|
||||||
#endif /* !_STDDEF_H && !_STDDEF_H_ && !_ANSI_STDDEF_H && !__STDDEF_H__
|
|
||||||
|| __need_XXX was not defined before */
|
|
||||||
|
@ -19,6 +19,9 @@
|
|||||||
|
|
||||||
#ifndef _STDINT_H
|
#ifndef _STDINT_H
|
||||||
#define _STDINT_H
|
#define _STDINT_H
|
||||||
|
#define __need_wint_t
|
||||||
|
#define __need_wchar_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
/* 7.18.1.1 Exact-width integer types */
|
/* 7.18.1.1 Exact-width integer types */
|
||||||
typedef signed char int8_t;
|
typedef signed char int8_t;
|
||||||
@ -138,11 +141,10 @@ typedef unsigned long long uintmax_t;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* wint_t is unsigned int in __MINGW32__,
|
* wint_t is unsigned short for compatibility with MS runtime
|
||||||
* but unsigned short in MS runtime
|
|
||||||
*/
|
*/
|
||||||
#define WINT_MIN 0
|
#define WINT_MIN 0
|
||||||
#define WINT_MAX UINT32_MAX
|
#define WINT_MAX ((wint_t)-1) /* UINT16_MAX */
|
||||||
|
|
||||||
#endif /* !defined ( __cplusplus) || defined __STDC_LIMIT_MACROS */
|
#endif /* !defined ( __cplusplus) || defined __STDC_LIMIT_MACROS */
|
||||||
|
|
||||||
|
@ -34,12 +34,14 @@
|
|||||||
/* All the headers include this file. */
|
/* All the headers include this file. */
|
||||||
#include <_mingw.h>
|
#include <_mingw.h>
|
||||||
|
|
||||||
|
#ifndef RC_INVOKED
|
||||||
#define __need_size_t
|
#define __need_size_t
|
||||||
#define __need_NULL
|
#define __need_NULL
|
||||||
#define __need_wchar_t
|
#define __need_wchar_t
|
||||||
#define __need_wint_t
|
#define __need_wint_t
|
||||||
#ifndef RC_INVOKED
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
#define __need___va_list
|
||||||
|
#include <stdarg.h>
|
||||||
#endif /* Not RC_INVOKED */
|
#endif /* Not RC_INVOKED */
|
||||||
|
|
||||||
|
|
||||||
@ -122,19 +124,12 @@
|
|||||||
|
|
||||||
#ifndef RC_INVOKED
|
#ifndef RC_INVOKED
|
||||||
|
|
||||||
/*
|
#ifdef __GNUC__
|
||||||
* I used to include stdarg.h at this point, in order to allow for the
|
#define __VALIST __gnuc_va_list
|
||||||
* functions later on in the file which use va_list. That conflicts with
|
|
||||||
* using stdio.h and varargs.h in the same file, so I do the typedef myself.
|
|
||||||
*/
|
|
||||||
#ifndef _VA_LIST
|
|
||||||
#define _VA_LIST
|
|
||||||
#if defined __GNUC__ && __GNUC__ >= 3
|
|
||||||
typedef __builtin_va_list va_list;
|
|
||||||
#else
|
#else
|
||||||
typedef char* va_list;
|
#define __VALIST char*
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The structure underlying the FILE type.
|
* The structure underlying the FILE type.
|
||||||
*
|
*
|
||||||
@ -163,9 +158,9 @@ typedef struct _iobuf
|
|||||||
*/
|
*/
|
||||||
#ifndef __DECLSPEC_SUPPORTED
|
#ifndef __DECLSPEC_SUPPORTED
|
||||||
|
|
||||||
extern FILE (*__imp__iob)[]; /* A pointer to an array of FILE */
|
extern FILE (*_imp___iob)[]; /* A pointer to an array of FILE */
|
||||||
|
|
||||||
#define _iob (*__imp__iob) /* An array of FILE */
|
#define _iob (*_imp___iob) /* An array of FILE */
|
||||||
|
|
||||||
#else /* __DECLSPEC_SUPPORTED */
|
#else /* __DECLSPEC_SUPPORTED */
|
||||||
|
|
||||||
@ -211,11 +206,17 @@ int fprintf (FILE*, const char*, ...);
|
|||||||
int printf (const char*, ...);
|
int printf (const char*, ...);
|
||||||
int sprintf (char*, const char*, ...);
|
int sprintf (char*, const char*, ...);
|
||||||
int _snprintf (char*, size_t, const char*, ...);
|
int _snprintf (char*, size_t, const char*, ...);
|
||||||
int vfprintf (FILE*, const char*, va_list);
|
int vfprintf (FILE*, const char*, __VALIST);
|
||||||
int vprintf (const char*, va_list);
|
int vprintf (const char*, __VALIST);
|
||||||
int vsprintf (char*, const char*, va_list);
|
int vsprintf (char*, const char*, __VALIST);
|
||||||
int _vsnprintf (char*, size_t, const char*, va_list);
|
int _vsnprintf (char*, size_t, const char*, __VALIST);
|
||||||
|
|
||||||
|
#ifndef __NO_ISOCEXT /* externs in libmingwex.a */
|
||||||
|
int snprintf(char* s, size_t n, const char* format, ...);
|
||||||
|
extern __inline__ int vsnprintf (char* s, size_t n, const char* format,
|
||||||
|
__VALIST arg)
|
||||||
|
{ return _vsnprintf ( s, n, format, arg); }
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Formatted Input
|
* Formatted Input
|
||||||
@ -255,6 +256,18 @@ int fseek (FILE*, long, int);
|
|||||||
long ftell (FILE*);
|
long ftell (FILE*);
|
||||||
void rewind (FILE*);
|
void rewind (FILE*);
|
||||||
|
|
||||||
|
#ifdef __USE_MINGW_FSEEK /* These are in libmingwex.a */
|
||||||
|
/*
|
||||||
|
* Workaround for limitations on win9x where a file contents are
|
||||||
|
* not zero'd out if you seek past the end and then write.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int __mingw_fseek (FILE *, long, int);
|
||||||
|
int __mingw_fwrite (const void*, size_t, size_t, FILE*);
|
||||||
|
#define fseek(fp, offset, whence) __mingw_fseek(fp, offset, whence)
|
||||||
|
#define fwrite(buffer, size, count, fp) __mingw_fwrite(buffer, size, count, fp)
|
||||||
|
#endif /* __USE_MINGW_FSEEK */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* An opaque data type used for storing file positions... The contents of
|
* An opaque data type used for storing file positions... The contents of
|
||||||
* this type are unknown, but we (the compiler) need to know the size
|
* this type are unknown, but we (the compiler) need to know the size
|
||||||
@ -321,10 +334,10 @@ int fwprintf (FILE*, const wchar_t*, ...);
|
|||||||
int wprintf (const wchar_t*, ...);
|
int wprintf (const wchar_t*, ...);
|
||||||
int swprintf (wchar_t*, const wchar_t*, ...);
|
int swprintf (wchar_t*, const wchar_t*, ...);
|
||||||
int _snwprintf (wchar_t*, size_t, const wchar_t*, ...);
|
int _snwprintf (wchar_t*, size_t, const wchar_t*, ...);
|
||||||
int vfwprintf (FILE*, const wchar_t*, va_list);
|
int vfwprintf (FILE*, const wchar_t*, __VALIST);
|
||||||
int vwprintf (const wchar_t*, va_list);
|
int vwprintf (const wchar_t*, __VALIST);
|
||||||
int vswprintf (wchar_t*, const wchar_t*, va_list);
|
int vswprintf (wchar_t*, const wchar_t*, __VALIST);
|
||||||
int _vsnwprintf (wchar_t*, size_t, const wchar_t*, va_list);
|
int _vsnwprintf (wchar_t*, size_t, const wchar_t*, __VALIST);
|
||||||
int fwscanf (FILE*, const wchar_t*, ...);
|
int fwscanf (FILE*, const wchar_t*, ...);
|
||||||
int wscanf (const wchar_t*, ...);
|
int wscanf (const wchar_t*, ...);
|
||||||
int swscanf (const wchar_t*, const wchar_t*, ...);
|
int swscanf (const wchar_t*, const wchar_t*, ...);
|
||||||
@ -350,6 +363,14 @@ int _wremove (const wchar_t*);
|
|||||||
void _wperror (const wchar_t*);
|
void _wperror (const wchar_t*);
|
||||||
FILE* _wpopen (const wchar_t*, const wchar_t*);
|
FILE* _wpopen (const wchar_t*, const wchar_t*);
|
||||||
#endif /* __MSVCRT__ */
|
#endif /* __MSVCRT__ */
|
||||||
|
|
||||||
|
#ifndef __NO_ISOCEXT /* externs in libmingwex.a */
|
||||||
|
int snwprintf(wchar_t* s, size_t n, const wchar_t* format, ...);
|
||||||
|
extern __inline__ int
|
||||||
|
vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, __VALIST arg)
|
||||||
|
{ return _vsnwprintf ( s, n, format, arg);}
|
||||||
|
#endif
|
||||||
|
|
||||||
#define _WSTDIO_DEFINED
|
#define _WSTDIO_DEFINED
|
||||||
#endif /* _WSTDIO_DEFINED */
|
#endif /* _WSTDIO_DEFINED */
|
||||||
|
|
||||||
|
@ -101,10 +101,10 @@ extern wchar_t*** __p___wargv(void);
|
|||||||
|
|
||||||
#ifndef __DECLSPEC_SUPPORTED
|
#ifndef __DECLSPEC_SUPPORTED
|
||||||
|
|
||||||
extern int* __imp___argc_dll;
|
extern int* _imp____argc_dll;
|
||||||
extern char*** __imp___argv_dll;
|
extern char*** _imp____argv_dll;
|
||||||
#define __argc (*__imp___argc_dll)
|
#define __argc (*_imp____argc_dll)
|
||||||
#define __argv (*__imp___argv_dll)
|
#define __argv (*_imp____argv_dll)
|
||||||
|
|
||||||
#else /* __DECLSPEC_SUPPORTED */
|
#else /* __DECLSPEC_SUPPORTED */
|
||||||
|
|
||||||
@ -121,7 +121,9 @@ __MINGW_IMPORT char** __argv_dll;
|
|||||||
* Also defined in ctype.h.
|
* Also defined in ctype.h.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Also defined in stdlib.h */
|
||||||
#ifndef MB_CUR_MAX
|
#ifndef MB_CUR_MAX
|
||||||
|
#ifdef __DECLSPEC_SUPPORTED
|
||||||
# ifdef __MSVCRT__
|
# ifdef __MSVCRT__
|
||||||
# define MB_CUR_MAX __mb_cur_max
|
# define MB_CUR_MAX __mb_cur_max
|
||||||
__MINGW_IMPORT int __mb_cur_max;
|
__MINGW_IMPORT int __mb_cur_max;
|
||||||
@ -129,8 +131,17 @@ __MINGW_IMPORT char** __argv_dll;
|
|||||||
# define MB_CUR_MAX __mb_cur_max_dll
|
# define MB_CUR_MAX __mb_cur_max_dll
|
||||||
__MINGW_IMPORT int __mb_cur_max_dll;
|
__MINGW_IMPORT int __mb_cur_max_dll;
|
||||||
# endif /* not __MSVCRT */
|
# endif /* not __MSVCRT */
|
||||||
#endif /* MB_CUR_MAX */
|
|
||||||
|
|
||||||
|
#else /* ! __DECLSPEC_SUPPORTED */
|
||||||
|
# ifdef __MSVCRT__
|
||||||
|
extern int* _imp____mbcur_max
|
||||||
|
# define MB_CUR_MAX (*_imp____mb_cur_max)
|
||||||
|
# else /* not __MSVCRT */
|
||||||
|
extern int* _imp____mbcur_max_dll
|
||||||
|
# define MB_CUR_MAX (*_imp____mb_cur_max_dll)
|
||||||
|
# endif /* not __MSVCRT */
|
||||||
|
#endif /* __DECLSPEC_SUPPORTED */
|
||||||
|
#endif /* MB_CUR_MAX */
|
||||||
/*
|
/*
|
||||||
* MS likes to declare errno in stdlib.h as well.
|
* MS likes to declare errno in stdlib.h as well.
|
||||||
*/
|
*/
|
||||||
@ -156,8 +167,8 @@ int* __doserrno(void);
|
|||||||
# define _wenviron (*__p__wenviron())
|
# define _wenviron (*__p__wenviron())
|
||||||
#else /* ! __MSVCRT__ */
|
#else /* ! __MSVCRT__ */
|
||||||
# ifndef __DECLSPEC_SUPPORTED
|
# ifndef __DECLSPEC_SUPPORTED
|
||||||
extern char *** __imp__environ_dll;
|
extern char *** _imp___environ_dll;
|
||||||
# define _environ (*__imp__environ_dll)
|
# define _environ (*_imp___environ_dll)
|
||||||
# else /* __DECLSPEC_SUPPORTED */
|
# else /* __DECLSPEC_SUPPORTED */
|
||||||
__MINGW_IMPORT char ** _environ_dll;
|
__MINGW_IMPORT char ** _environ_dll;
|
||||||
# define _environ _environ_dll
|
# define _environ _environ_dll
|
||||||
@ -170,8 +181,8 @@ int* __doserrno(void);
|
|||||||
/* One of the MSVCRTxx libraries */
|
/* One of the MSVCRTxx libraries */
|
||||||
|
|
||||||
#ifndef __DECLSPEC_SUPPORTED
|
#ifndef __DECLSPEC_SUPPORTED
|
||||||
extern int* __imp__sys_nerr;
|
extern int* _imp___sys_nerr;
|
||||||
# define sys_nerr (*__imp__sys_nerr)
|
# define sys_nerr (*_imp___sys_nerr)
|
||||||
#else /* __DECLSPEC_SUPPORTED */
|
#else /* __DECLSPEC_SUPPORTED */
|
||||||
__MINGW_IMPORT int _sys_nerr;
|
__MINGW_IMPORT int _sys_nerr;
|
||||||
# ifndef _UWIN
|
# ifndef _UWIN
|
||||||
@ -184,8 +195,8 @@ int* __doserrno(void);
|
|||||||
/* CRTDLL run time library */
|
/* CRTDLL run time library */
|
||||||
|
|
||||||
#ifndef __DECLSPEC_SUPPORTED
|
#ifndef __DECLSPEC_SUPPORTED
|
||||||
extern int* __imp__sys_nerr_dll;
|
extern int* _imp___sys_nerr_dll;
|
||||||
# define sys_nerr (*__imp__sys_nerr_dll)
|
# define sys_nerr (*_imp___sys_nerr_dll)
|
||||||
#else /* __DECLSPEC_SUPPORTED */
|
#else /* __DECLSPEC_SUPPORTED */
|
||||||
__MINGW_IMPORT int _sys_nerr_dll;
|
__MINGW_IMPORT int _sys_nerr_dll;
|
||||||
# define sys_nerr _sys_nerr_dll
|
# define sys_nerr _sys_nerr_dll
|
||||||
@ -194,8 +205,8 @@ int* __doserrno(void);
|
|||||||
#endif /* ! __MSVCRT__ */
|
#endif /* ! __MSVCRT__ */
|
||||||
|
|
||||||
#ifndef __DECLSPEC_SUPPORTED
|
#ifndef __DECLSPEC_SUPPORTED
|
||||||
extern char*** __imp__sys_errlist;
|
extern char*** _imp__sys_errlist;
|
||||||
#define sys_errlist (*__imp__sys_errlist)
|
#define sys_errlist (*_imp___sys_errlist)
|
||||||
#else /* __DECLSPEC_SUPPORTED */
|
#else /* __DECLSPEC_SUPPORTED */
|
||||||
__MINGW_IMPORT char* _sys_errlist[];
|
__MINGW_IMPORT char* _sys_errlist[];
|
||||||
#ifndef _UWIN
|
#ifndef _UWIN
|
||||||
@ -262,7 +273,7 @@ wchar_t** __p__wpgmptr(void);
|
|||||||
#else /* ! __MSVCRT__ */
|
#else /* ! __MSVCRT__ */
|
||||||
# ifndef __DECLSPEC_SUPPORTED
|
# ifndef __DECLSPEC_SUPPORTED
|
||||||
extern char** __imp__pgmptr_dll;
|
extern char** __imp__pgmptr_dll;
|
||||||
# define _pgmptr (*__imp__pgmptr_dll)
|
# define _pgmptr (*_imp___pgmptr_dll)
|
||||||
# else /* __DECLSPEC_SUPPORTED */
|
# else /* __DECLSPEC_SUPPORTED */
|
||||||
__MINGW_IMPORT char* _pgmptr_dll;
|
__MINGW_IMPORT char* _pgmptr_dll;
|
||||||
# define _pgmptr _pgmptr_dll
|
# define _pgmptr _pgmptr_dll
|
||||||
@ -285,12 +296,26 @@ int _wtoi (const wchar_t *);
|
|||||||
long _wtol (const wchar_t *);
|
long _wtol (const wchar_t *);
|
||||||
|
|
||||||
double strtod (const char*, char**);
|
double strtod (const char*, char**);
|
||||||
double wcstod (const wchar_t*, wchar_t**);
|
#if !defined __NO_ISOCEXT /* extern stubs in static libmingwex.a */
|
||||||
long strtol (const char*, char**, int);
|
extern __inline__ float strtof (const char *nptr, char **endptr)
|
||||||
long wcstol (const wchar_t*, wchar_t**, int);
|
{ return (strtod (nptr, endptr));}
|
||||||
|
#endif /* __NO_ISOCEXT */
|
||||||
|
|
||||||
|
long strtol (const char*, char**, int);
|
||||||
unsigned long strtoul (const char*, char**, int);
|
unsigned long strtoul (const char*, char**, int);
|
||||||
|
|
||||||
|
#ifndef _WSTDLIB_DEFINED
|
||||||
|
/* also declared in wchar.h */
|
||||||
|
double wcstod (const wchar_t*, wchar_t**);
|
||||||
|
#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
|
||||||
|
extern __inline__ float wcstof( const wchar_t *nptr, wchar_t **endptr)
|
||||||
|
{ return (wcstod(nptr, endptr)); }
|
||||||
|
#endif /* __NO_ISOCEXT */
|
||||||
|
|
||||||
|
long wcstol (const wchar_t*, wchar_t**, int);
|
||||||
unsigned long wcstoul (const wchar_t*, wchar_t**, int);
|
unsigned long wcstoul (const wchar_t*, wchar_t**, int);
|
||||||
|
#define _WSTDLIB_DEFINED
|
||||||
|
#endif
|
||||||
|
|
||||||
size_t wcstombs (char*, const wchar_t*, size_t);
|
size_t wcstombs (char*, const wchar_t*, size_t);
|
||||||
int wctomb (char*, wchar_t);
|
int wctomb (char*, wchar_t);
|
||||||
@ -336,7 +361,6 @@ typedef struct { long quot, rem; } ldiv_t;
|
|||||||
div_t div (int, int);
|
div_t div (int, int);
|
||||||
ldiv_t ldiv (long, long);
|
ldiv_t ldiv (long, long);
|
||||||
|
|
||||||
|
|
||||||
#ifndef __STRICT_ANSI__
|
#ifndef __STRICT_ANSI__
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -348,7 +372,12 @@ void _seterrormode (int);
|
|||||||
void _sleep (unsigned long);
|
void _sleep (unsigned long);
|
||||||
|
|
||||||
void _exit (int) _ATTRIB_NORETURN;
|
void _exit (int) _ATTRIB_NORETURN;
|
||||||
|
#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
|
||||||
|
/* C99 function name */
|
||||||
|
void _Exit(int) _ATTRIB_NORETURN; /* Declare to get noreturn attribute. */
|
||||||
|
extern __inline__ void _Exit(int status)
|
||||||
|
{ _exit(status); }
|
||||||
|
#endif
|
||||||
/* _onexit is MS extension. Use atexit for portability. */
|
/* _onexit is MS extension. Use atexit for portability. */
|
||||||
typedef int (* _onexit_t)(void);
|
typedef int (* _onexit_t)(void);
|
||||||
_onexit_t _onexit( _onexit_t );
|
_onexit_t _onexit( _onexit_t );
|
||||||
@ -406,6 +435,49 @@ char* gcvt (double, int, char*);
|
|||||||
|
|
||||||
#endif /* Not __STRICT_ANSI__ */
|
#endif /* Not __STRICT_ANSI__ */
|
||||||
|
|
||||||
|
/* C99 names */
|
||||||
|
|
||||||
|
#if !defined __NO_ISOCEXT /* externs in static libmingwex.a */
|
||||||
|
|
||||||
|
typedef struct { long long quot, rem; } lldiv_t;
|
||||||
|
|
||||||
|
lldiv_t lldiv (long long, long long);
|
||||||
|
|
||||||
|
extern __inline__ long long llabs(long long _j)
|
||||||
|
{return (_j >= 0 ? _j : -_j);}
|
||||||
|
|
||||||
|
long long strtoll (const char* __restrict__, char** __restrict, int);
|
||||||
|
unsigned long long strtoull (const char* __restrict__, char** __restrict__, int);
|
||||||
|
|
||||||
|
#if defined (__MSVCRT__) /* these are stubs for MS _i64 versions */
|
||||||
|
long long atoll (const char *);
|
||||||
|
|
||||||
|
#if !defined (__STRICT_ANSI__)
|
||||||
|
long long wtoll(const wchar_t *);
|
||||||
|
char* lltoa(long long, char *, int);
|
||||||
|
char* ulltoa(unsigned long long , char *, int);
|
||||||
|
wchar_t* lltow(long long, wchar_t *, int);
|
||||||
|
wchar_t* ulltow(unsigned long long, wchar_t *, int);
|
||||||
|
|
||||||
|
/* inline using non-ansi functions */
|
||||||
|
extern __inline__ long long atoll (const char * _c)
|
||||||
|
{ return _atoi64 (_c); }
|
||||||
|
extern __inline__ char* lltoa(long long _n, char * _c, int _i)
|
||||||
|
{ return _i64toa (_n, _c, _i); }
|
||||||
|
extern __inline__ char* ulltoa(unsigned long long _n, char * _c, int _i)
|
||||||
|
{ return _ui64toa (_n, _c, _i); }
|
||||||
|
extern __inline__ long long wtoll(const wchar_t * _w)
|
||||||
|
{ return _wtoi64 (_w); }
|
||||||
|
extern __inline__ wchar_t* lltow(long long _n, wchar_t * _w, int _i)
|
||||||
|
{ return _i64tow (_n, _w, _i); }
|
||||||
|
extern __inline__ wchar_t* ulltow(unsigned long long _n, wchar_t * _w, int _i)
|
||||||
|
{ return _ui64tow (_n, _w, _i); }
|
||||||
|
#endif /* (__STRICT_ANSI__) */
|
||||||
|
|
||||||
|
#endif /* __MSVCRT__ */
|
||||||
|
|
||||||
|
#endif /* !__NO_ISOCEXT */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Undefine the no return attribute used in some function definitions
|
* Undefine the no return attribute used in some function definitions
|
||||||
*/
|
*/
|
||||||
|
@ -207,6 +207,15 @@ typedef wchar_t _TCHAR;
|
|||||||
#define _tfinddatai64_t _wfinddatai64_t
|
#define _tfinddatai64_t _wfinddatai64_t
|
||||||
#endif /* __MSVCRT__ */
|
#endif /* __MSVCRT__ */
|
||||||
|
|
||||||
|
/* dirent structures and functions */
|
||||||
|
#define _tdirent _wdirent
|
||||||
|
#define _TDIR _WDIR
|
||||||
|
#define _topendir _wopendir
|
||||||
|
#define _tclosedir _wclosedir
|
||||||
|
#define _treaddir _wreaddir
|
||||||
|
#define _trewinddir _wrewinddir
|
||||||
|
#define _ttelldir _wtelldir
|
||||||
|
#define _tseekdir _wseekdir
|
||||||
#else /* Not _UNICODE */
|
#else /* Not _UNICODE */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -364,6 +373,16 @@ typedef char _TCHAR;
|
|||||||
#define _tfinddatai64_t _finddatai64_t
|
#define _tfinddatai64_t _finddatai64_t
|
||||||
#endif /* __MSVCRT__ */
|
#endif /* __MSVCRT__ */
|
||||||
|
|
||||||
|
/* dirent structures and functions */
|
||||||
|
#define _tdirent dirent
|
||||||
|
#define _TDIR DIR
|
||||||
|
#define _topendir opendir
|
||||||
|
#define _tclosedir closedir
|
||||||
|
#define _treaddir readdir
|
||||||
|
#define _trewinddir rewinddir
|
||||||
|
#define _ttelldir telldir
|
||||||
|
#define _tseekdir seekdir
|
||||||
|
|
||||||
#endif /* Not _UNICODE */
|
#endif /* Not _UNICODE */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -151,13 +151,13 @@ __MINGW_IMPORT char *_tzname[2];
|
|||||||
|
|
||||||
#ifndef __DECLSPEC_SUPPORTED
|
#ifndef __DECLSPEC_SUPPORTED
|
||||||
|
|
||||||
extern int* __imp__daylight_dll;
|
extern int* _imp___daylight_dll;
|
||||||
extern long* __imp__timezone_dll;
|
extern long* _imp___timezone_dll;
|
||||||
extern char** __imp__tzname;
|
extern char** _imp___tzname;
|
||||||
|
|
||||||
#define _daylight (*__imp__daylight_dll)
|
#define _daylight (*_imp___daylight_dll)
|
||||||
#define _timezone (*__imp__timezone_dll)
|
#define _timezone (*_imp___timezone_dll)
|
||||||
#define _tzname (__imp__tzname)
|
#define _tzname (*_imp___tzname)
|
||||||
|
|
||||||
#else /* __DECLSPEC_SUPPORTED */
|
#else /* __DECLSPEC_SUPPORTED */
|
||||||
|
|
||||||
|
@ -1,102 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* varargs.h
|
* This is just an RC_INVOKED guard for the real varargs.h
|
||||||
*
|
* fixincluded in gcc system dir. One day we will delete this file.
|
||||||
* Old, non-ANSI facilities for stepping through a list of function
|
|
||||||
* arguments of an unknown number and type.
|
|
||||||
* TODO: Has not been tested. Essentially it copies the GCC version.
|
|
||||||
*
|
|
||||||
* NOTE: I believe GCC supplies a version of this header as well (in
|
|
||||||
* addition to stdarg.h and others). The GCC version is more
|
|
||||||
* complex, to deal with many alternate systems, but it is
|
|
||||||
* probably more trustworthy overall. It would probably be
|
|
||||||
* better to use the GCC version.
|
|
||||||
*
|
|
||||||
* NOTE: These are incompatible with the versions in stdarg.h and should
|
|
||||||
* NOT be mixed! All new code should use the ANSI compatible versions.
|
|
||||||
*
|
|
||||||
* This file is part of the Mingw32 package.
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
|
||||||
*
|
|
||||||
* This source code is offered for use in the public domain. You may
|
|
||||||
* use, modify or distribute it freely.
|
|
||||||
*
|
|
||||||
* This code is distributed in the hope that it will be useful but
|
|
||||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
|
||||||
* DISCLAIMED. This includes but is not limited to warranties of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* $Revision$
|
|
||||||
* $Author$
|
|
||||||
* $Date$
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __STRICT_ANSI__
|
|
||||||
|
|
||||||
#ifndef _VARARGS_H_
|
|
||||||
#define _VARARGS_H_
|
|
||||||
|
|
||||||
/* All the headers include this file. */
|
|
||||||
#include <_mingw.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* I was told that Win NT likes this.
|
|
||||||
*/
|
|
||||||
#ifndef _VA_LIST_DEFINED
|
|
||||||
#define _VA_LIST_DEFINED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef RC_INVOKED
|
#ifndef RC_INVOKED
|
||||||
|
#include_next<varargs.h>
|
||||||
#ifndef _VA_LIST
|
|
||||||
#define _VA_LIST
|
|
||||||
#if defined __GNUC__ && __GNUC__ >= 3
|
|
||||||
typedef __builtin_va_list va_list;
|
|
||||||
#else
|
|
||||||
typedef char* va_list;
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Amount of space required in an argument list (ie. the stack) for an
|
|
||||||
* argument of type t.
|
|
||||||
*/
|
|
||||||
#define __va_argsiz(t) \
|
|
||||||
(((sizeof(t) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
|
|
||||||
|
|
||||||
#define va_alist __builtin_va_alist
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Used in old style argument lists IIRC. The ellipsis forces the compiler
|
|
||||||
* to realize this is a vararg function.
|
|
||||||
*/
|
|
||||||
#define va_dcl int __builtin_va_alist; ...
|
|
||||||
|
|
||||||
#define va_start(ap) \
|
|
||||||
((ap) = ((va_list) &__builtin_va_alist))
|
|
||||||
#define va_end(ap) ((void)0)
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Increment ap to the next argument in the list while returing a
|
|
||||||
* pointer to what ap pointed to first, which is of type t.
|
|
||||||
*
|
|
||||||
* We cast to void* and then to t* because this avoids a warning about
|
|
||||||
* increasing the alignment requirement.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define va_arg(ap, t) \
|
|
||||||
(((ap) = (ap) + __va_argsiz(t)), \
|
|
||||||
*((t*) (void*) ((ap) - __va_argsiz(t))))
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* Not RC_INVOKED */
|
|
||||||
|
|
||||||
#endif /* Not _VARARGS_H_ */
|
|
||||||
|
|
||||||
#endif /* Not __STRICT_ANSI__ */
|
|
||||||
|
|
||||||
|
@ -117,6 +117,13 @@ wint_t fgetwc (FILE*);
|
|||||||
wint_t fputwc (wchar_t, FILE*);
|
wint_t fputwc (wchar_t, FILE*);
|
||||||
wint_t ungetwc (wchar_t, FILE*);
|
wint_t ungetwc (wchar_t, FILE*);
|
||||||
|
|
||||||
|
#ifndef __NO_ISOCEXT /* externs in libmingwex.a */
|
||||||
|
int snwprintf(wchar_t* s, size_t n, const wchar_t* format, ...);
|
||||||
|
extern __inline__ int vsnwprintf (wchar_t* s, size_t n, const wchar_t* format,
|
||||||
|
va_list arg)
|
||||||
|
{ return _vsnwprintf ( s, n, format, arg); }
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __MSVCRT__
|
#ifdef __MSVCRT__
|
||||||
wchar_t* fgetws (wchar_t*, int, FILE*);
|
wchar_t* fgetws (wchar_t*, int, FILE*);
|
||||||
int fputws (const wchar_t*, FILE*);
|
int fputws (const wchar_t*, FILE*);
|
||||||
@ -236,6 +243,17 @@ wchar_t* _wsetlocale (int, const wchar_t*);
|
|||||||
#define _WLOCALE_DEFINED
|
#define _WLOCALE_DEFINED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef _WSTDLIB_DEFINED /* also declared in stdlib.h */
|
||||||
|
long wcstol (const wchar_t*, wchar_t**, int);
|
||||||
|
unsigned long wcstoul (const wchar_t*, wchar_t**, int);
|
||||||
|
double wcstod (const wchar_t*, wchar_t**);
|
||||||
|
#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
|
||||||
|
extern __inline__ float wcstof( const wchar_t *nptr, wchar_t **endptr)
|
||||||
|
{ return (wcstod(nptr, endptr)); }
|
||||||
|
#endif /* __NO_ISOCEXT */
|
||||||
|
#define _WSTDLIB_DEFINED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifndef _NO_OLDNAMES
|
#ifndef _NO_OLDNAMES
|
||||||
|
|
||||||
@ -273,6 +291,23 @@ size_t wcrtomb(char *, wchar_t, mbstate_t *);
|
|||||||
size_t wcsrtombs(char *, const wchar_t **, size_t, mbstate_t *);
|
size_t wcsrtombs(char *, const wchar_t **, size_t, mbstate_t *);
|
||||||
int wctob(wint_t);
|
int wctob(wint_t);
|
||||||
|
|
||||||
|
#ifndef __NO_ISOCEXT /* these need static lib libmingwex.a */
|
||||||
|
extern __inline__ int fwide(FILE* stream, int mode) {return -1;} /* limited to byte orientation */
|
||||||
|
extern __inline__ int mbsinit(const mbstate_t* ps) {return 1;}
|
||||||
|
wchar_t* wmemset(wchar_t* s, wchar_t c, size_t n);
|
||||||
|
wchar_t* wmemchr(const wchar_t* s, wchar_t c, size_t n);
|
||||||
|
int wmemcmp(const wchar_t* s1, const wchar_t * s2, size_t n);
|
||||||
|
wchar_t* wmemcpy(wchar_t* __restrict__ s1, const wchar_t* __restrict__ s2,
|
||||||
|
size_t n);
|
||||||
|
wchar_t* wmemmove(wchar_t* s1, const wchar_t* s2, size_t n);
|
||||||
|
long long wcstoll(const wchar_t* __restrict__ nptr,
|
||||||
|
wchar_t** __restrict__ endptr, int base);
|
||||||
|
unsigned long long wcstoull(const wchar_t* __restrict__ nptr,
|
||||||
|
wchar_t ** __restrict__ endptr, int base);
|
||||||
|
|
||||||
|
#endif /* __NO_ISOCEXT */
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* end of extern "C" */
|
} /* end of extern "C" */
|
||||||
#endif
|
#endif
|
||||||
|
@ -86,29 +86,43 @@ int isleadbyte (int);
|
|||||||
|
|
||||||
/* Also in ctype.h */
|
/* Also in ctype.h */
|
||||||
|
|
||||||
|
#ifdef __DECLSPEC_SUPPORTED
|
||||||
__MINGW_IMPORT unsigned short _ctype[];
|
__MINGW_IMPORT unsigned short _ctype[];
|
||||||
#ifdef __MSVCRT__
|
# ifdef __MSVCRT__
|
||||||
__MINGW_IMPORT unsigned short* _pctype;
|
__MINGW_IMPORT unsigned short* _pctype;
|
||||||
#else
|
# else /* CRTDLL */
|
||||||
__MINGW_IMPORT unsigned short* _pctype_dll;
|
__MINGW_IMPORT unsigned short* _pctype_dll;
|
||||||
#define _pctype _pctype_dll
|
# define _pctype _pctype_dll
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
|
#else /* ! __DECLSPEC_SUPPORTED */
|
||||||
|
extern unsigned short** _imp___ctype;
|
||||||
|
#define _ctype (*_imp___ctype)
|
||||||
|
# ifdef __MSVCRT__
|
||||||
|
extern unsigned short** _imp___pctype;
|
||||||
|
# define _pctype (*_imp___pctype)
|
||||||
|
# else /* CRTDLL */
|
||||||
|
extern unsigned short** _imp___pctype_dll;
|
||||||
|
# define _pctype (*_imp___pctype_dll)
|
||||||
|
# endif /* CRTDLL */
|
||||||
|
#endif /* __DECLSPEC_SUPPORTED */
|
||||||
|
|
||||||
|
|
||||||
#if !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED))
|
#if !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED))
|
||||||
#define __WCTYPE_INLINES_DEFINED
|
#define __WCTYPE_INLINES_DEFINED
|
||||||
extern inline int iswalnum(wint_t wc) {return (iswctype(wc,_ALPHA|_DIGIT));}
|
extern __inline__ int iswalnum(wint_t wc) {return (iswctype(wc,_ALPHA|_DIGIT));}
|
||||||
extern inline int iswalpha(wint_t wc) {return (iswctype(wc,_ALPHA));}
|
extern __inline__ int iswalpha(wint_t wc) {return (iswctype(wc,_ALPHA));}
|
||||||
extern inline int iswascii(wint_t wc) {return (((unsigned)wc & 0x7F) ==0);}
|
extern __inline__ int iswascii(wint_t wc) {return (((unsigned)wc & 0x7F) ==0);}
|
||||||
extern inline int iswcntrl(wint_t wc) {return (iswctype(wc,_CONTROL));}
|
extern __inline__ int iswcntrl(wint_t wc) {return (iswctype(wc,_CONTROL));}
|
||||||
extern inline int iswdigit(wint_t wc) {return (iswctype(wc,_DIGIT));}
|
extern __inline__ int iswdigit(wint_t wc) {return (iswctype(wc,_DIGIT));}
|
||||||
extern inline int iswgraph(wint_t wc) {return (iswctype(wc,_PUNCT|_ALPHA|_DIGIT));}
|
extern __inline__ int iswgraph(wint_t wc) {return (iswctype(wc,_PUNCT|_ALPHA|_DIGIT));}
|
||||||
extern inline int iswlower(wint_t wc) {return (iswctype(wc,_LOWER));}
|
extern __inline__ int iswlower(wint_t wc) {return (iswctype(wc,_LOWER));}
|
||||||
extern inline int iswprint(wint_t wc) {return (iswctype(wc,_BLANK|_PUNCT|_ALPHA|_DIGIT));}
|
extern __inline__ int iswprint(wint_t wc) {return (iswctype(wc,_BLANK|_PUNCT|_ALPHA|_DIGIT));}
|
||||||
extern inline int iswpunct(wint_t wc) {return (iswctype(wc,_PUNCT));}
|
extern __inline__ int iswpunct(wint_t wc) {return (iswctype(wc,_PUNCT));}
|
||||||
extern inline int iswspace(wint_t wc) {return (iswctype(wc,_SPACE));}
|
extern __inline__ int iswspace(wint_t wc) {return (iswctype(wc,_SPACE));}
|
||||||
extern inline int iswupper(wint_t wc) {return (iswctype(wc,_UPPER));}
|
extern __inline__ int iswupper(wint_t wc) {return (iswctype(wc,_UPPER));}
|
||||||
extern inline int iswxdigit(wint_t wc) {return (iswctype(wc,_HEX));}
|
extern __inline__ int iswxdigit(wint_t wc) {return (iswctype(wc,_HEX));}
|
||||||
extern inline int isleadbyte(int c) {return (_pctype[(unsigned char)(c)] & _LEADBYTE);}
|
extern __inline__ int isleadbyte(int c) {return (_pctype[(unsigned char)(c)] & _LEADBYTE);}
|
||||||
#endif /* !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED)) */
|
#endif /* !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED)) */
|
||||||
|
|
||||||
|
|
||||||
|
236
winsup/mingw/mingwex/Makefile.in
Normal file
236
winsup/mingw/mingwex/Makefile.in
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
#
|
||||||
|
# mingw/mingwex/Makefile.in: This file is part of Mingw runtime.
|
||||||
|
#
|
||||||
|
# This makefile requires GNU make.
|
||||||
|
|
||||||
|
VPATH = @srcdir@
|
||||||
|
srcdir = @srcdir@
|
||||||
|
objdir = .
|
||||||
|
|
||||||
|
target_alias = @target_alias@
|
||||||
|
prefix = @prefix@
|
||||||
|
|
||||||
|
program_transform_name = @program_transform_name@
|
||||||
|
exec_prefix = @exec_prefix@
|
||||||
|
bindir = @bindir@
|
||||||
|
libdir = @libdir@
|
||||||
|
tooldir = $(exec_prefix)/$(target_alias)
|
||||||
|
datadir = @datadir@
|
||||||
|
infodir = @infodir@
|
||||||
|
includedir = @includedir@
|
||||||
|
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
INSTALL = @INSTALL@
|
||||||
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
|
mkinstalldirs = $(SHELL) $(srcdir)/../mkinstalldirs
|
||||||
|
DISTFILES = Makefile.in configure configure.in \
|
||||||
|
mingw-fseek.c \
|
||||||
|
_Exit.c \
|
||||||
|
atoll.c \
|
||||||
|
copysignl.S \
|
||||||
|
dirent.c \
|
||||||
|
fdim.c \
|
||||||
|
fdimf.c \
|
||||||
|
fdiml.c \
|
||||||
|
feclearexcept.c \
|
||||||
|
fegetenv.c \
|
||||||
|
fegetexceptflag.c \
|
||||||
|
fegetround.c \
|
||||||
|
feholdexcept.c \
|
||||||
|
feraiseexcept.c \
|
||||||
|
fesetenv.c \
|
||||||
|
fesetround.c \
|
||||||
|
fetestexcept.c \
|
||||||
|
fesetexceptflag.c \
|
||||||
|
feupdateenv.c \
|
||||||
|
fma.S \
|
||||||
|
fmaf.S \
|
||||||
|
fmal.c \
|
||||||
|
fmax.c \
|
||||||
|
fmaxf.c \
|
||||||
|
fmaxl.c \
|
||||||
|
fmin.c \
|
||||||
|
fminf.c \
|
||||||
|
fminl.c \
|
||||||
|
fp_consts.c \
|
||||||
|
fpclassify.c \
|
||||||
|
fpclassifyf.c \
|
||||||
|
fpclassifyl.c \
|
||||||
|
fucom.c \
|
||||||
|
fwide.c \
|
||||||
|
imaxabs.c \
|
||||||
|
imaxdiv.c \
|
||||||
|
isnan.c \
|
||||||
|
isnanf.c \
|
||||||
|
isnanl.c \
|
||||||
|
lltoa.c \
|
||||||
|
lltow.c \
|
||||||
|
log2.c \
|
||||||
|
log2f.c \
|
||||||
|
log2l.c \
|
||||||
|
math_stubs.c \
|
||||||
|
mbsinit.c \
|
||||||
|
rint.c \
|
||||||
|
rintf.c \
|
||||||
|
rintl.c \
|
||||||
|
round.c \
|
||||||
|
roundf.c \
|
||||||
|
roundl.c \
|
||||||
|
signbit.c \
|
||||||
|
signbitf.c \
|
||||||
|
signbitl.c \
|
||||||
|
sitest.c \
|
||||||
|
snprintf.c \
|
||||||
|
snwprintf.c \
|
||||||
|
strtof.c \
|
||||||
|
strtoimax.c \
|
||||||
|
strtoumax.c \
|
||||||
|
testwmem.c \
|
||||||
|
trunc.c \
|
||||||
|
truncf.c \
|
||||||
|
truncl.c \
|
||||||
|
ulltoa.c \
|
||||||
|
ulltow.c \
|
||||||
|
vsnprintf.c \
|
||||||
|
vsnwprintf.c \
|
||||||
|
wcstof.c \
|
||||||
|
wcstoimax.c \
|
||||||
|
wcstoumax.c \
|
||||||
|
wdirent.c \
|
||||||
|
wmemchr.c \
|
||||||
|
wmemcmp.c \
|
||||||
|
wmemcpy.c \
|
||||||
|
wmemmove.c \
|
||||||
|
wmemset.c \
|
||||||
|
wtoll.c
|
||||||
|
|
||||||
|
CC = @CC@
|
||||||
|
# FIXME: Which is it, CC or CC_FOR_TARGET?
|
||||||
|
CC_FOR_TARGET = $(CC)
|
||||||
|
AS_FOR_TARGET = $(AS)
|
||||||
|
CFLAGS = @CFLAGS@ -Wall
|
||||||
|
CXXFLAGS = @CXXFLAGS@
|
||||||
|
OPTFLAGS= -fomit-frame-pointer
|
||||||
|
|
||||||
|
# compiling with Cygwin?
|
||||||
|
MNO_CYGWIN = @MNO_CYGWIN@
|
||||||
|
|
||||||
|
|
||||||
|
INCLUDES = -I$(srcdir) -I$(srcdir)/../include \
|
||||||
|
-I$(srcdir)/../../w32api/include \
|
||||||
|
-nostdinc -nostdinc++ \
|
||||||
|
-iwithprefixbefore include
|
||||||
|
ALL_CFLAGS = $(CFLAGS) $(OPTFLAGS) $(INCLUDES) $(MNO_CYGWIN)
|
||||||
|
ALL_CXXFLAGS = $(CXXFLAGS) $(OPTFLAGS) $(INCLUDES) $(MNO_CYGWIN)
|
||||||
|
|
||||||
|
AS = @AS@
|
||||||
|
AR = @AR@
|
||||||
|
LD = @LD@
|
||||||
|
AR_FLAGS = rcv
|
||||||
|
RANLIB = @RANLIB@
|
||||||
|
DLLTOOL = @DLLTOOL@
|
||||||
|
DLLTOOLFLAGS =
|
||||||
|
DLLTOOL_FOR_TARGET = $(DLLTOOL)
|
||||||
|
DLLTOOL_FLAGS = --as $(AS_FOR_TARGET)
|
||||||
|
|
||||||
|
LIBMINGWEX_A = libmingwex.a
|
||||||
|
|
||||||
|
Q8_OBJS = \
|
||||||
|
fwide.o imaxabs.o imaxdiv.o mbsinit.o \
|
||||||
|
strtoimax.o strtoumax.o wcstoimax.o wcstoumax.o \
|
||||||
|
wmemchr.o wmemcmp.o wmemcpy.o wmemmove.o wmemset.o
|
||||||
|
STDLIB_STUB_OBJS = \
|
||||||
|
lltoa.o ulltoa.o \
|
||||||
|
lltow.o ulltow.o \
|
||||||
|
atoll.o wtoll.o \
|
||||||
|
strtof.o wcstof.o \
|
||||||
|
_Exit.o
|
||||||
|
STDIO_STUB_OBJS = \
|
||||||
|
snprintf.o vsnprintf.o snwprintf.o vsnwprintf.o
|
||||||
|
MATH_OBJS = \
|
||||||
|
fpclassify.o fpclassifyf.o fpclassifyl.o \
|
||||||
|
fucom.o \
|
||||||
|
round.o roundf.o roundl.o \
|
||||||
|
rint.o rintf.o rintl.o \
|
||||||
|
signbit.o signbitf.o signbitl.o \
|
||||||
|
trunc.o truncf.o truncl.o \
|
||||||
|
isnan.o isnanf.o isnanl.o \
|
||||||
|
fp_consts.o \
|
||||||
|
fdim.o fdimf.o fdiml.o \
|
||||||
|
fmax.o fmaxf.o fmaxl.o \
|
||||||
|
fmin.o fminf.o fminl.o \
|
||||||
|
fma.o fmaf.o fmal.o \
|
||||||
|
log2.o log2f.o log2l.o \
|
||||||
|
copysignl.o
|
||||||
|
MATH_STUB_OBJS = \
|
||||||
|
math_stubs.o
|
||||||
|
FENV_OBJS = fesetround.o fegetround.o \
|
||||||
|
fegetenv.o fesetenv.o feupdateenv.o \
|
||||||
|
feclearexcept.o feholdexcept.o fegetexceptflag.o \
|
||||||
|
feraiseexcept.o fetestexcept.o fesetexceptflag.o
|
||||||
|
POSIX_OBJS = \
|
||||||
|
dirent.o wdirent.o
|
||||||
|
REPLACE_OBJS = \
|
||||||
|
mingw-fseek.o
|
||||||
|
|
||||||
|
LIB_OBJS = $(Q8_OBJS) $(STDLIB_STUB_OBJS) $(STDIO_STUB_OBJS) \
|
||||||
|
$(MATH_OBJS) $(MATH_STUB_OBJS) $(FENV_OBJS) $(POSIX_OBJS) \
|
||||||
|
$(REPLACE_OBJS)
|
||||||
|
|
||||||
|
LIBS = $(LIBMINGWEX_A)
|
||||||
|
DLLS =
|
||||||
|
|
||||||
|
all: $(LIBMINGWEX_A)
|
||||||
|
|
||||||
|
$(LIBMINGWEX_A): $(LIB_OBJS)
|
||||||
|
$(AR) $(ARFLAGS) $@ $(LIB_OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
|
||||||
|
Makefile: Makefile.in config.status configure
|
||||||
|
$(SHELL) config.status
|
||||||
|
|
||||||
|
config.status: configure
|
||||||
|
$(SHELL) config.status --recheck
|
||||||
|
|
||||||
|
info:
|
||||||
|
|
||||||
|
info-html:
|
||||||
|
|
||||||
|
install-info: info
|
||||||
|
|
||||||
|
install: all
|
||||||
|
$(mkinstalldirs) $(inst_libdir)
|
||||||
|
for i in $(LIBS); do \
|
||||||
|
$(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
|
||||||
|
done
|
||||||
|
|
||||||
|
clean:
|
||||||
|
-rm -f $(LIB_OBJS) $(LIBMINGWEX_A)
|
||||||
|
|
||||||
|
distclean:
|
||||||
|
-rm -f *.o *.a *~ core a.out
|
||||||
|
-rm -f config.cache config.status config.log
|
||||||
|
-rm -f Makefile
|
||||||
|
.c.o:
|
||||||
|
$(CC) -c $(ALL_CFLAGS) $< -o $@
|
||||||
|
.S.o:
|
||||||
|
$(CC) -c $< -o $@
|
||||||
|
.s.o:
|
||||||
|
$(CC) -c $< -o $@
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Dependancies
|
||||||
|
#
|
||||||
|
wdirent.o: $(srcdir)/dirent.c $(srcdir)/wdirent.c
|
||||||
|
|
||||||
|
|
||||||
|
dist:
|
||||||
|
mkdir $(distdir)/mingwex
|
||||||
|
chmod 755 $(distdir)/mingwex
|
||||||
|
@for i in $(DISTFILES); do\
|
||||||
|
cp -p $(srcdir)/$$i $(distdir)/mingwex/$$i ; \
|
||||||
|
done
|
3
winsup/mingw/mingwex/_Exit.c
Normal file
3
winsup/mingw/mingwex/_Exit.c
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
void _Exit(int status)
|
||||||
|
{ _exit(status); }
|
3
winsup/mingw/mingwex/atoll.c
Normal file
3
winsup/mingw/mingwex/atoll.c
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
long long atoll (const char * _c)
|
||||||
|
{ return _atoi64 (_c); }
|
1007
winsup/mingw/mingwex/configure
vendored
Executable file
1007
winsup/mingw/mingwex/configure
vendored
Executable file
File diff suppressed because it is too large
Load Diff
52
winsup/mingw/mingwex/configure.in
Normal file
52
winsup/mingw/mingwex/configure.in
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
|
dnl This file is part of Mingw runtime.
|
||||||
|
dnl
|
||||||
|
dnl This program is free software; you can redistribute it and/or modify
|
||||||
|
dnl it under the terms of the GNU General Public License as published by
|
||||||
|
dnl the Free Software Foundation; either version 2 of the License, or
|
||||||
|
dnl (at your option) any later version.
|
||||||
|
dnl
|
||||||
|
dnl This program is distributed in the hope that it will be useful,
|
||||||
|
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
dnl GNU General Public License for more details.
|
||||||
|
dnl
|
||||||
|
dnl You should have received a copy of the GNU General Public License
|
||||||
|
dnl along with this program; if not, write to the Free Software
|
||||||
|
dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
AC_PREREQ(2.13)
|
||||||
|
AC_INIT(imaxabs.c)
|
||||||
|
|
||||||
|
CC=${CC-cc}
|
||||||
|
AC_SUBST(CC)
|
||||||
|
AS=${AS-as}
|
||||||
|
AC_SUBST(AS)
|
||||||
|
AR=${AR-ar}
|
||||||
|
AC_SUBST(AR)
|
||||||
|
LD=${LD-ld}
|
||||||
|
AC_SUBST(LD)
|
||||||
|
RANLIB=${RANLIB-ranlib}
|
||||||
|
AC_SUBST(RANLIB)
|
||||||
|
DLLTOOL=${DLLTOOL-dlltool}
|
||||||
|
AC_SUBST(DLLTOOL)
|
||||||
|
DLLWRAP=${DLLWRAP-dllwrap}
|
||||||
|
AC_SUBST(DLLWRAP)
|
||||||
|
AC_CANONICAL_SYSTEM
|
||||||
|
|
||||||
|
case "$target_os" in
|
||||||
|
*cygwin*)
|
||||||
|
MNO_CYGWIN=-mno-cygwin
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Build it for MSVCRT by default.
|
||||||
|
MNO_CYGWIN=
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AC_SUBST(MNO_CYGWIN)
|
||||||
|
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
AC_OUTPUT(Makefile)
|
||||||
|
|
21
winsup/mingw/mingwex/copysignl.S
Normal file
21
winsup/mingw/mingwex/copysignl.S
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Changes for long double by Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
* Public domain.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.file "copysignl.S"
|
||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
.p2align 4,,15
|
||||||
|
.globl _copysignl
|
||||||
|
.def _copysignl; .scl 2; .type 32; .endef
|
||||||
|
_copysignl:
|
||||||
|
movl 24(%esp),%edx
|
||||||
|
movl 12(%esp),%eax
|
||||||
|
andl $0x8000,%edx
|
||||||
|
andl $0x7fff,%eax
|
||||||
|
orl %edx,%eax
|
||||||
|
movl %eax,12(%esp)
|
||||||
|
fldt 4(%esp)
|
||||||
|
ret
|
@ -20,14 +20,14 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
|
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h> /* for GetFileAttributes */
|
#include <windows.h> /* for GetFileAttributes */
|
||||||
|
|
||||||
#define SUFFIX "*"
|
#include <tchar.h>
|
||||||
#define SLASH "\\"
|
#define SUFFIX _T("*")
|
||||||
|
#define SLASH _T("\\")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* opendir
|
* opendir
|
||||||
@ -35,25 +35,25 @@
|
|||||||
* Returns a pointer to a DIR structure appropriately filled in to begin
|
* Returns a pointer to a DIR structure appropriately filled in to begin
|
||||||
* searching a directory.
|
* searching a directory.
|
||||||
*/
|
*/
|
||||||
DIR *
|
_TDIR *
|
||||||
opendir (const char *szPath)
|
_topendir (const _TCHAR *szPath)
|
||||||
{
|
{
|
||||||
DIR *nd;
|
_TDIR *nd;
|
||||||
unsigned int rc;
|
unsigned int rc;
|
||||||
char szFullPath[MAX_PATH];
|
_TCHAR szFullPath[MAX_PATH];
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
|
|
||||||
if (!szPath)
|
if (!szPath)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
return (DIR *) 0;
|
return (_TDIR *) 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (szPath[0] == '\0')
|
if (szPath[0] == _T('\0'))
|
||||||
{
|
{
|
||||||
errno = ENOTDIR;
|
errno = ENOTDIR;
|
||||||
return (DIR *) 0;
|
return (_TDIR *) 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Attempt to determine if the given path really is a directory. */
|
/* Attempt to determine if the given path really is a directory. */
|
||||||
@ -62,43 +62,43 @@ opendir (const char *szPath)
|
|||||||
{
|
{
|
||||||
/* call GetLastError for more error info */
|
/* call GetLastError for more error info */
|
||||||
errno = ENOENT;
|
errno = ENOENT;
|
||||||
return (DIR *) 0;
|
return (_TDIR *) 0;
|
||||||
}
|
}
|
||||||
if (!(rc & FILE_ATTRIBUTE_DIRECTORY))
|
if (!(rc & FILE_ATTRIBUTE_DIRECTORY))
|
||||||
{
|
{
|
||||||
/* Error, entry exists but not a directory. */
|
/* Error, entry exists but not a directory. */
|
||||||
errno = ENOTDIR;
|
errno = ENOTDIR;
|
||||||
return (DIR *) 0;
|
return (_TDIR *) 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make an absolute pathname. */
|
/* Make an absolute pathname. */
|
||||||
_fullpath (szFullPath, szPath, MAX_PATH);
|
_tfullpath (szFullPath, szPath, MAX_PATH);
|
||||||
|
|
||||||
/* Allocate enough space to store DIR structure and the complete
|
/* Allocate enough space to store DIR structure and the complete
|
||||||
* directory path given. */
|
* directory path given. */
|
||||||
nd = (DIR *) malloc (sizeof (DIR) + strlen (szFullPath) + strlen (SLASH) +
|
nd = (_TDIR *) malloc (sizeof (_TDIR) + _tcslen (szFullPath) + _tcslen (SLASH) +
|
||||||
strlen (SUFFIX));
|
_tcslen (SUFFIX));
|
||||||
|
|
||||||
if (!nd)
|
if (!nd)
|
||||||
{
|
{
|
||||||
/* Error, out of memory. */
|
/* Error, out of memory. */
|
||||||
errno = ENOMEM;
|
errno = ENOMEM;
|
||||||
return (DIR *) 0;
|
return (_TDIR *) 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create the search expression. */
|
/* Create the search expression. */
|
||||||
strcpy (nd->dd_name, szFullPath);
|
_tcscpy (nd->dd_name, szFullPath);
|
||||||
|
|
||||||
/* Add on a slash if the path does not end with one. */
|
/* Add on a slash if the path does not end with one. */
|
||||||
if (nd->dd_name[0] != '\0' &&
|
if (nd->dd_name[0] != _T('\0') &&
|
||||||
nd->dd_name[strlen (nd->dd_name) - 1] != '/' &&
|
nd->dd_name[_tcslen (nd->dd_name) - 1] != _T('/') &&
|
||||||
nd->dd_name[strlen (nd->dd_name) - 1] != '\\')
|
nd->dd_name[_tcslen (nd->dd_name) - 1] != _T('\\'))
|
||||||
{
|
{
|
||||||
strcat (nd->dd_name, SLASH);
|
_tcscat (nd->dd_name, SLASH);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add on the search pattern */
|
/* Add on the search pattern */
|
||||||
strcat (nd->dd_name, SUFFIX);
|
_tcscat (nd->dd_name, SUFFIX);
|
||||||
|
|
||||||
/* Initialize handle to -1 so that a premature closedir doesn't try
|
/* Initialize handle to -1 so that a premature closedir doesn't try
|
||||||
* to call _findclose on it. */
|
* to call _findclose on it. */
|
||||||
@ -125,8 +125,8 @@ opendir (const char *szPath)
|
|||||||
* Return a pointer to a dirent structure filled with the information on the
|
* Return a pointer to a dirent structure filled with the information on the
|
||||||
* next entry in the directory.
|
* next entry in the directory.
|
||||||
*/
|
*/
|
||||||
struct dirent *
|
struct _tdirent *
|
||||||
readdir (DIR * dirp)
|
_treaddir (_TDIR * dirp)
|
||||||
{
|
{
|
||||||
errno = 0;
|
errno = 0;
|
||||||
|
|
||||||
@ -134,27 +134,27 @@ readdir (DIR * dirp)
|
|||||||
if (!dirp)
|
if (!dirp)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
return (struct dirent *) 0;
|
return (struct _tdirent *) 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dirp->dd_dir.d_name != dirp->dd_dta.name)
|
if (dirp->dd_dir.d_name != dirp->dd_dta.name)
|
||||||
{
|
{
|
||||||
/* The structure does not seem to be set up correctly. */
|
/* The structure does not seem to be set up correctly. */
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return (struct dirent *) 0;
|
return (struct _tdirent *) 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dirp->dd_stat < 0)
|
if (dirp->dd_stat < 0)
|
||||||
{
|
{
|
||||||
/* We have already returned all files in the directory
|
/* We have already returned all files in the directory
|
||||||
* (or the structure has an invalid dd_stat). */
|
* (or the structure has an invalid dd_stat). */
|
||||||
return (struct dirent *) 0;
|
return (struct _tdirent *) 0;
|
||||||
}
|
}
|
||||||
else if (dirp->dd_stat == 0)
|
else if (dirp->dd_stat == 0)
|
||||||
{
|
{
|
||||||
/* We haven't started the search yet. */
|
/* We haven't started the search yet. */
|
||||||
/* Start the search */
|
/* Start the search */
|
||||||
dirp->dd_handle = _findfirst (dirp->dd_name, &(dirp->dd_dta));
|
dirp->dd_handle = _tfindfirst (dirp->dd_name, &(dirp->dd_dta));
|
||||||
|
|
||||||
if (dirp->dd_handle == -1)
|
if (dirp->dd_handle == -1)
|
||||||
{
|
{
|
||||||
@ -170,7 +170,7 @@ readdir (DIR * dirp)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Get the next search entry. */
|
/* Get the next search entry. */
|
||||||
if (_findnext (dirp->dd_handle, &(dirp->dd_dta)))
|
if (_tfindnext (dirp->dd_handle, &(dirp->dd_dta)))
|
||||||
{
|
{
|
||||||
/* We are off the end or otherwise error. */
|
/* We are off the end or otherwise error. */
|
||||||
_findclose (dirp->dd_handle);
|
_findclose (dirp->dd_handle);
|
||||||
@ -190,11 +190,11 @@ readdir (DIR * dirp)
|
|||||||
/* Successfully got an entry. Everything about the file is
|
/* Successfully got an entry. Everything about the file is
|
||||||
* already appropriately filled in except the length of the
|
* already appropriately filled in except the length of the
|
||||||
* file name. */
|
* file name. */
|
||||||
dirp->dd_dir.d_namlen = strlen (dirp->dd_dir.d_name);
|
dirp->dd_dir.d_namlen = _tcslen (dirp->dd_dir.d_name);
|
||||||
return &dirp->dd_dir;
|
return &dirp->dd_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (struct dirent *) 0;
|
return (struct _tdirent *) 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -204,7 +204,7 @@ readdir (DIR * dirp)
|
|||||||
* Frees up resources allocated by opendir.
|
* Frees up resources allocated by opendir.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
closedir (DIR * dirp)
|
_tclosedir (_TDIR * dirp)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
@ -235,7 +235,7 @@ closedir (DIR * dirp)
|
|||||||
* and then reset things like an opendir.
|
* and then reset things like an opendir.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
rewinddir (DIR * dirp)
|
_trewinddir (_TDIR * dirp)
|
||||||
{
|
{
|
||||||
errno = 0;
|
errno = 0;
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ rewinddir (DIR * dirp)
|
|||||||
* seekdir to go back to an old entry. We simply return the value in stat.
|
* seekdir to go back to an old entry. We simply return the value in stat.
|
||||||
*/
|
*/
|
||||||
long
|
long
|
||||||
telldir (DIR * dirp)
|
_ttelldir (_TDIR * dirp)
|
||||||
{
|
{
|
||||||
errno = 0;
|
errno = 0;
|
||||||
|
|
||||||
@ -283,7 +283,7 @@ telldir (DIR * dirp)
|
|||||||
* any such system.
|
* any such system.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
seekdir (DIR * dirp, long lPos)
|
_tseekdir (_TDIR * dirp, long lPos)
|
||||||
{
|
{
|
||||||
errno = 0;
|
errno = 0;
|
||||||
|
|
||||||
@ -312,9 +312,9 @@ seekdir (DIR * dirp, long lPos)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Rewind and read forward to the appropriate index. */
|
/* Rewind and read forward to the appropriate index. */
|
||||||
rewinddir (dirp);
|
_trewinddir (dirp);
|
||||||
|
|
||||||
while ((dirp->dd_stat < lPos) && readdir (dirp))
|
while ((dirp->dd_stat < lPos) && _treaddir (dirp))
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
7
winsup/mingw/mingwex/fdim.c
Normal file
7
winsup/mingw/mingwex/fdim.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
double
|
||||||
|
fdim (double x, double y)
|
||||||
|
{
|
||||||
|
return (isgreater(x, y) ? (x - y) : 0.0);
|
||||||
|
}
|
7
winsup/mingw/mingwex/fdimf.c
Normal file
7
winsup/mingw/mingwex/fdimf.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
float
|
||||||
|
fdimf (float x, float y)
|
||||||
|
{
|
||||||
|
return (isgreater(x, y) ? (x - y) : 0.0F);
|
||||||
|
}
|
7
winsup/mingw/mingwex/fdiml.c
Normal file
7
winsup/mingw/mingwex/fdiml.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
long double
|
||||||
|
fdiml (long double x, long double y)
|
||||||
|
{
|
||||||
|
return (isgreater(x, y) ? (x - y) : 0.0L);
|
||||||
|
}
|
14
winsup/mingw/mingwex/feclearexcept.c
Normal file
14
winsup/mingw/mingwex/feclearexcept.c
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
/* 7.6.2.1
|
||||||
|
The feclearexcept function clears the supported exceptions
|
||||||
|
represented by its argument. */
|
||||||
|
|
||||||
|
int feclearexcept (int excepts)
|
||||||
|
{
|
||||||
|
fenv_t _env;
|
||||||
|
__asm__ volatile ("fnstenv %0;" : "=m" (_env)); /* get the env */
|
||||||
|
_env.__status_word &= ~(excepts & FE_ALL_EXCEPT); /* clear the except */
|
||||||
|
__asm__ volatile ("fldenv %0;" :: "m" (_env)); /*set the env */
|
||||||
|
return 0;
|
||||||
|
}
|
12
winsup/mingw/mingwex/fegetenv.c
Normal file
12
winsup/mingw/mingwex/fegetenv.c
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
/* 7.6.4.1
|
||||||
|
The fegetenv function stores the current floating-point environment
|
||||||
|
in the object pointed to by envp. */
|
||||||
|
|
||||||
|
int fegetenv (fenv_t * envp)
|
||||||
|
{
|
||||||
|
__asm__ ("fnstenv %0;": "=m" (*envp));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
15
winsup/mingw/mingwex/fegetexceptflag.c
Normal file
15
winsup/mingw/mingwex/fegetexceptflag.c
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* 7.6.2.2
|
||||||
|
The fegetexceptflag function stores an implementation-defined
|
||||||
|
representation of the exception flags indicated by the argument
|
||||||
|
excepts in the object pointed to by the argument flagp. */
|
||||||
|
|
||||||
|
int fegetexceptflag (fexcept_t * flagp, int excepts)
|
||||||
|
{
|
||||||
|
unsigned short _sw;
|
||||||
|
__asm__ ("fnstsw %%ax;": "=a" (_sw));
|
||||||
|
*flagp = _sw & excepts & FE_ALL_EXCEPT;
|
||||||
|
return 0;
|
||||||
|
}
|
14
winsup/mingw/mingwex/fegetround.c
Normal file
14
winsup/mingw/mingwex/fegetround.c
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
/* 7.6.3.1
|
||||||
|
The fegetround function returns the value of the rounding direction
|
||||||
|
macro representing the current rounding direction. */
|
||||||
|
|
||||||
|
int
|
||||||
|
fegetround (void)
|
||||||
|
{
|
||||||
|
unsigned short _cw;
|
||||||
|
__asm__ ("fnstcw %0;" : "=m" (_cw));
|
||||||
|
return _cw
|
||||||
|
& (FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO);
|
||||||
|
}
|
18
winsup/mingw/mingwex/feholdexcept.c
Normal file
18
winsup/mingw/mingwex/feholdexcept.c
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
/* 7.6.4.2
|
||||||
|
The feholdexcept function saves the current floating-point
|
||||||
|
environment in the object pointed to by envp, clears the exception
|
||||||
|
flags, and then installs a non-stop (continue on exceptions) mode,
|
||||||
|
if available, for all exceptions. */
|
||||||
|
|
||||||
|
int feholdexcept (fenv_t * envp)
|
||||||
|
{
|
||||||
|
fenv_t tmp_env;
|
||||||
|
__asm__ ("fnstenv %0;" : "=m" (* envp)); /* save current into envp */
|
||||||
|
tmp_env = * envp;
|
||||||
|
tmp_env.__status_word &= ~FE_ALL_EXCEPT; /* clear exception flags */
|
||||||
|
tmp_env.__control_word |= FE_ALL_EXCEPT; /* set cw to non-stop */
|
||||||
|
__asm__ volatile ("fldenv %0;" : : "m" (tmp_env)); /* install the copy */
|
||||||
|
return 0;
|
||||||
|
}
|
19
winsup/mingw/mingwex/feraiseexcept.c
Normal file
19
winsup/mingw/mingwex/feraiseexcept.c
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
/* 7.6.2.3
|
||||||
|
The feraiseexcept function raises the supported exceptions
|
||||||
|
represented by its argument The order in which these exceptions
|
||||||
|
are raised is unspecified, except as stated in F.7.6.
|
||||||
|
Whether the feraiseexcept function additionally raises
|
||||||
|
the inexact exception whenever it raises the overflow
|
||||||
|
or underflow exception is implementation-defined. */
|
||||||
|
|
||||||
|
int feraiseexcept (int excepts)
|
||||||
|
{
|
||||||
|
fenv_t _env;
|
||||||
|
__asm__ volatile ("fnstenv %0;" : "=m" (_env));
|
||||||
|
_env.__status_word |= excepts & FE_ALL_EXCEPT;
|
||||||
|
__asm__ volatile ("fldenv %0;"
|
||||||
|
"fwait;" : : "m" (_env));
|
||||||
|
return 0;
|
||||||
|
}
|
41
winsup/mingw/mingwex/fesetenv.c
Normal file
41
winsup/mingw/mingwex/fesetenv.c
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
/* 7.6.4.3
|
||||||
|
The fesetenv function establishes the floating-point environment
|
||||||
|
represented by the object pointed to by envp. The argument envp
|
||||||
|
points to an object set by a call to fegetenv or feholdexcept, or
|
||||||
|
equal the macro FE_DFL_ENV or an implementation-defined environment
|
||||||
|
macro. Note that fesetenv merely installs the state of the exception
|
||||||
|
flags represented through its argument, and does not raise these
|
||||||
|
exceptions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern void (*_imp___fpreset)( void ) ;
|
||||||
|
|
||||||
|
int fesetenv (const fenv_t * envp)
|
||||||
|
{
|
||||||
|
if (envp == FE_PC64_ENV)
|
||||||
|
/*
|
||||||
|
* fninit initializes the control register to 0x37f,
|
||||||
|
* the status register to zero and the tag word to 0FFFFh.
|
||||||
|
* The other registers are unaffected.
|
||||||
|
*/
|
||||||
|
__asm__ ("fninit");
|
||||||
|
|
||||||
|
else if (envp == FE_PC53_ENV)
|
||||||
|
/*
|
||||||
|
* MS _fpreset() does same *except* it sets control word
|
||||||
|
* to 0x27f (53-bit precison).
|
||||||
|
* We force calling _fpreset in msvcrt.dll
|
||||||
|
*/
|
||||||
|
|
||||||
|
(*_imp___fpreset)();
|
||||||
|
|
||||||
|
else if (envp == FE_DFL_ENV)
|
||||||
|
/* Use the choice made at app startup */
|
||||||
|
_fpreset();
|
||||||
|
|
||||||
|
else
|
||||||
|
__asm__ ("fldenv %0;" : : "m" (*envp));
|
||||||
|
return 0;
|
||||||
|
}
|
22
winsup/mingw/mingwex/fesetexceptflag.c
Normal file
22
winsup/mingw/mingwex/fesetexceptflag.c
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
/* 7.6.2.4
|
||||||
|
The fesetexceptflag function sets the complete status for those
|
||||||
|
exception flags indicated by the argument excepts, according to the
|
||||||
|
representation in the object pointed to by flagp. The value of
|
||||||
|
*flagp shall have been set by a previous call to fegetexceptflag
|
||||||
|
whose second argument represented at least those exceptions
|
||||||
|
represented by the argument excepts. This function does not raise
|
||||||
|
exceptions, but only sets the state of the flags. */
|
||||||
|
|
||||||
|
int fesetexceptflag (const fexcept_t * flagp, int excepts)
|
||||||
|
{
|
||||||
|
fenv_t _env;
|
||||||
|
|
||||||
|
excepts &= FE_ALL_EXCEPT;
|
||||||
|
__asm__ volatile ("fnstenv %0;" : "=m" (_env));
|
||||||
|
_env.__status_word &= ~excepts;
|
||||||
|
_env.__status_word |= (*flagp & excepts);
|
||||||
|
__asm__ volatile ("fldenv %0;" : : "m" (_env));
|
||||||
|
return 0;
|
||||||
|
}
|
19
winsup/mingw/mingwex/fesetround.c
Normal file
19
winsup/mingw/mingwex/fesetround.c
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
/* 7.6.3.2
|
||||||
|
The fesetround function establishes the rounding direction
|
||||||
|
represented by its argument round. If the argument is not equal
|
||||||
|
to the value of a rounding direction macro, the rounding direction
|
||||||
|
is not changed. */
|
||||||
|
|
||||||
|
int fesetround (int mode)
|
||||||
|
{
|
||||||
|
unsigned short _cw;
|
||||||
|
if ((mode & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO))
|
||||||
|
!= 0)
|
||||||
|
return -1;
|
||||||
|
__asm__ volatile ("fnstcw %0;": "=m" (_cw));
|
||||||
|
_cw &= ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO);
|
||||||
|
_cw |= mode;
|
||||||
|
__asm__ volatile ("fldcw %0;" : : "m" (_cw));
|
||||||
|
return 0;
|
||||||
|
}
|
15
winsup/mingw/mingwex/fetestexcept.c
Normal file
15
winsup/mingw/mingwex/fetestexcept.c
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
/* 7.6.2.5
|
||||||
|
The fetestexcept function determines which of a specified subset of
|
||||||
|
the exception flags are currently set. The excepts argument
|
||||||
|
specifies the exception flags to be queried.
|
||||||
|
The fetestexcept function returns the value of the bitwise OR of the
|
||||||
|
exception macros corresponding to the currently set exceptions
|
||||||
|
included in excepts. */
|
||||||
|
|
||||||
|
int fetestexcept (int excepts)
|
||||||
|
{
|
||||||
|
unsigned short _sw;
|
||||||
|
__asm__ ("fnstsw %%ax" : "=a" (_sw));
|
||||||
|
return _sw & excepts & FE_ALL_EXCEPT;
|
||||||
|
}
|
20
winsup/mingw/mingwex/feupdateenv.c
Normal file
20
winsup/mingw/mingwex/feupdateenv.c
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
/* 7.6.4.4
|
||||||
|
The feupdateenv function saves the currently raised exceptions in
|
||||||
|
its automatic storage, installs the floating-point environment
|
||||||
|
represented by the object pointed to by envp, and then raises the
|
||||||
|
saved exceptions. The argument envp shall point to an object
|
||||||
|
set by a call to feholdexcept or fegetenv, or equal the macro
|
||||||
|
FE_DFL_ENV or an implementation-defined environment macro. */
|
||||||
|
|
||||||
|
/* FIXME: this works but surely there must be a better way. */
|
||||||
|
|
||||||
|
int feupdateenv (const fenv_t * envp)
|
||||||
|
{
|
||||||
|
unsigned int _fexcept = fetestexcept (FE_ALL_EXCEPT); /*save excepts */
|
||||||
|
fesetenv (envp); /* install the env */
|
||||||
|
feraiseexcept (_fexcept); /* raise the execept */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
12
winsup/mingw/mingwex/fma.S
Normal file
12
winsup/mingw/mingwex/fma.S
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
.file "fma.S"
|
||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
.p2align 4,,15
|
||||||
|
.globl _fma
|
||||||
|
.def _fma; .scl 2; .type 32; .endef
|
||||||
|
_fma:
|
||||||
|
fldl 4(%esp)
|
||||||
|
fmull 12(%esp)
|
||||||
|
fldl 20(%esp)
|
||||||
|
faddp
|
||||||
|
ret
|
12
winsup/mingw/mingwex/fmaf.S
Normal file
12
winsup/mingw/mingwex/fmaf.S
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
.file "fmaf.S"
|
||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
.p2align 4,,15
|
||||||
|
.globl _fmaf
|
||||||
|
.def _fmaf; .scl 2; .type 32; .endef
|
||||||
|
_fmaf:
|
||||||
|
flds 4(%esp)
|
||||||
|
fmuls 8(%esp)
|
||||||
|
flds 12(%esp)
|
||||||
|
faddp
|
||||||
|
ret
|
4
winsup/mingw/mingwex/fmal.c
Normal file
4
winsup/mingw/mingwex/fmal.c
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
long double
|
||||||
|
fmal ( long double _x, long double _y, long double _z){
|
||||||
|
return ((_x * _y) + _z);
|
||||||
|
}
|
7
winsup/mingw/mingwex/fmax.c
Normal file
7
winsup/mingw/mingwex/fmax.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
double
|
||||||
|
fmax (double _x, double _y)
|
||||||
|
{
|
||||||
|
return ( isgreaterequal (_x, _y)|| __isnan (_y) ? _x : _y );
|
||||||
|
}
|
7
winsup/mingw/mingwex/fmaxf.c
Normal file
7
winsup/mingw/mingwex/fmaxf.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
float
|
||||||
|
fmaxf (float _x, float _y)
|
||||||
|
{
|
||||||
|
return (( isgreaterequal(_x, _y) || __isnanf (_y)) ? _x : _y );
|
||||||
|
}
|
7
winsup/mingw/mingwex/fmaxl.c
Normal file
7
winsup/mingw/mingwex/fmaxl.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
long double
|
||||||
|
fmaxl (long double _x, long double _y)
|
||||||
|
{
|
||||||
|
return (( isgreaterequal(_x, _y) || __isnanl (_y)) ? _x : _y );
|
||||||
|
}
|
7
winsup/mingw/mingwex/fmin.c
Normal file
7
winsup/mingw/mingwex/fmin.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
double
|
||||||
|
fmin (double _x, double _y)
|
||||||
|
{
|
||||||
|
return ((islessequal(_x, _y) || __isnan (_y)) ? _x : _y );
|
||||||
|
}
|
7
winsup/mingw/mingwex/fminf.c
Normal file
7
winsup/mingw/mingwex/fminf.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
float
|
||||||
|
fminf (float _x, float _y)
|
||||||
|
{
|
||||||
|
return ((islessequal(_x, _y) || _isnan (_y)) ? _x : _y );
|
||||||
|
}
|
7
winsup/mingw/mingwex/fminl.c
Normal file
7
winsup/mingw/mingwex/fminl.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
long double
|
||||||
|
fminl (long double _x, long double _y)
|
||||||
|
{
|
||||||
|
return ((islessequal(_x, _y) || __isnanl (_y)) ? _x : _y );
|
||||||
|
}
|
81
winsup/mingw/mingwex/fp_consts.c
Normal file
81
winsup/mingw/mingwex/fp_consts.c
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
/* Floating point consts needed by STL class mumeric_limits<float>
|
||||||
|
and numeric_limits<double>. Also used as return values by nan, inf */
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
/*
|
||||||
|
According to IEEE 754 a QNaN has exponent bits of all 1 values and
|
||||||
|
initial significand bit of 1. A SNaN has has an exponent of all 1
|
||||||
|
values and initial significand bit of 0 (with one or more other
|
||||||
|
significand bits of 1). An Inf has significand of 0 and
|
||||||
|
exponent of all 1 values. A denormal value has all exponent bits of 0.
|
||||||
|
|
||||||
|
The following does _not_ follow those rules, but uses values
|
||||||
|
equal to those exported from MS C++ runtime lib, msvcprt.dll
|
||||||
|
for float and double. MSVC however, does not have long doubles.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define __DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 }
|
||||||
|
#define __DOUBLE_QNAN_REP { 0, 0, 0, 0xfff8 } /* { 0, 0, 0, 0x7ff8 } */
|
||||||
|
#define __DOUBLE_SNAN_REP { 0, 0, 0, 0xfff0 } /* { 1, 0, 0, 0x7ff0 } */
|
||||||
|
#define __DOUBLE_DENORM_REP {1, 0, 0, 0}
|
||||||
|
#define D_NAN_MASK 0x7ff0000000000000LL /* this will mask NaN's and Inf's */
|
||||||
|
|
||||||
|
#define __FLOAT_INF_REP { 0, 0x7f80 }
|
||||||
|
#define __FLOAT_QNAN_REP { 0, 0xffc0 } /* { 0, 0x7fc0 } */
|
||||||
|
#define __FLOAT_SNAN_REP { 0, 0xff80 } /* { 1, 0x7f80 } */
|
||||||
|
#define __FLOAT_DENORM_REP {1,0}
|
||||||
|
#define F_NAN_MASK 0x7f800000
|
||||||
|
|
||||||
|
/* This assumes no implicit (hidden) bit in extended mode */
|
||||||
|
#define __LONG_DOUBLE_INF_REP { 0, 0, 0, 0x8000, 0x7fff }
|
||||||
|
#define __LONG_DOUBLE_QNAN_REP { 0, 0, 0, 0xc000, 0xffff }
|
||||||
|
#define __LONG_DOUBLE_SNAN_REP { 0, 0, 0, 0x8000, 0xffff }
|
||||||
|
#define __LONG_DOUBLE_DENORM_REP {1, 0, 0, 0, 0}
|
||||||
|
|
||||||
|
union _ieee_rep
|
||||||
|
{
|
||||||
|
unsigned short rep[5];
|
||||||
|
float float_val;
|
||||||
|
double double_val;
|
||||||
|
long double ldouble_val;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
const union _ieee_rep __QNAN = { __DOUBLE_QNAN_REP };
|
||||||
|
/*
|
||||||
|
const union _ieee_rep __SNAN = { __DOUBLE_SNAN_REP };
|
||||||
|
const union _ieee_rep __INF = { __DOUBLE_INF_REP };
|
||||||
|
const union _ieee_rep __DENORM = { __DOUBLE_DENORM_REP };
|
||||||
|
*/
|
||||||
|
/* ISO C99 */
|
||||||
|
|
||||||
|
#undef nan
|
||||||
|
/* FIXME */
|
||||||
|
double nan (const char * tagp __attribute__((unused)) )
|
||||||
|
{ return __QNAN.double_val; }
|
||||||
|
|
||||||
|
|
||||||
|
const union _ieee_rep __QNANF = { __FLOAT_QNAN_REP };
|
||||||
|
/*
|
||||||
|
const union _ieee_rep __SNANF = { __FLOAT_SNAN_REP };
|
||||||
|
const union _ieee_rep __INFF = { __FLOAT_INF_REP };
|
||||||
|
const union _ieee_rep __DENORMF = { __FLOAT_DENORM_REP };
|
||||||
|
*/
|
||||||
|
|
||||||
|
#undef nanf
|
||||||
|
/* FIXME */
|
||||||
|
float nanf(const char * tagp __attribute__((unused)) )
|
||||||
|
{ return __QNANF.float_val;}
|
||||||
|
|
||||||
|
|
||||||
|
const union _ieee_rep __QNANL = { __LONG_DOUBLE_QNAN_REP };
|
||||||
|
/*
|
||||||
|
const union _ieee_rep __SNANL = { __LONG_DOUBLE_SNAN_REP };
|
||||||
|
const union _ieee_rep __INFL = { __LONG_DOUBLE_INF_REP };
|
||||||
|
const union _ieee_rep __DENORML = { __LONG_DOUBLE_DENORM_REP };
|
||||||
|
*/
|
||||||
|
|
||||||
|
#undef nanl
|
||||||
|
/* FIXME */
|
||||||
|
long double nanl (const char * tagp __attribute__((unused)) )
|
||||||
|
{ return __QNANL.ldouble_val;}
|
20
winsup/mingw/mingwex/fpclassify.c
Normal file
20
winsup/mingw/mingwex/fpclassify.c
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
/* 'fxam' sets FPU flags C3,C2,C0 'fstsw' stores:
|
||||||
|
FP_NAN 001 0x0100
|
||||||
|
FP_NORMAL 010 0x0400
|
||||||
|
FP_INFINITE 011 0x0500
|
||||||
|
FP_ZERO 100 0x4000
|
||||||
|
FP_SUBNORMAL 110 0x4400
|
||||||
|
|
||||||
|
and sets C1 flag (signbit) if neg */
|
||||||
|
|
||||||
|
int __fpclassify (double _x){
|
||||||
|
unsigned short sw;
|
||||||
|
__asm__ (
|
||||||
|
"fxam; fstsw %%ax;"
|
||||||
|
: "=a" (sw)
|
||||||
|
: "t" (_x)
|
||||||
|
);
|
||||||
|
return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
|
||||||
|
}
|
10
winsup/mingw/mingwex/fpclassifyf.c
Normal file
10
winsup/mingw/mingwex/fpclassifyf.c
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#include <math.h>
|
||||||
|
int __fpclassifyf (float _x){
|
||||||
|
unsigned short sw;
|
||||||
|
__asm__ (
|
||||||
|
"fxam; fstsw %%ax;"
|
||||||
|
: "=a" (sw)
|
||||||
|
: "t" (_x)
|
||||||
|
);
|
||||||
|
return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
|
||||||
|
}
|
10
winsup/mingw/mingwex/fpclassifyl.c
Normal file
10
winsup/mingw/mingwex/fpclassifyl.c
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#include <math.h>
|
||||||
|
int __fpclassifyl (long double _x){
|
||||||
|
unsigned short sw;
|
||||||
|
__asm__ (
|
||||||
|
"fxam; fstsw %%ax;"
|
||||||
|
: "=a" (sw)
|
||||||
|
: "t" (_x)
|
||||||
|
);
|
||||||
|
return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
|
||||||
|
}
|
11
winsup/mingw/mingwex/fucom.c
Normal file
11
winsup/mingw/mingwex/fucom.c
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
int
|
||||||
|
__fp_unordered_compare (long double x, long double y){
|
||||||
|
unsigned short retval;
|
||||||
|
__asm__ (
|
||||||
|
"fucom %%st(1);"
|
||||||
|
"fnstsw;"
|
||||||
|
: "=a" (retval)
|
||||||
|
: "t" (x), "u" (y)
|
||||||
|
);
|
||||||
|
return retval;
|
||||||
|
}
|
25
winsup/mingw/mingwex/fwide.c
Normal file
25
winsup/mingw/mingwex/fwide.c
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/* This source code was extracted from the Q8 package created and placed
|
||||||
|
in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
|
||||||
|
last edit: 1999/11/05 gwyn@arl.mil
|
||||||
|
|
||||||
|
Implements subclause 7.24 of ISO/IEC 9899:1999 (E).
|
||||||
|
|
||||||
|
This is a minimal implementation for environments where
|
||||||
|
internationalization is not considered important.
|
||||||
|
|
||||||
|
It supports an encoding where all char codes are mapped
|
||||||
|
to the *same* code values within a wchar_t or wint_t,
|
||||||
|
so long as no other wchar_t codes are used by the program.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
fwide(stream, mode)
|
||||||
|
FILE *stream;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
return -1; /* limited to byte orientation */
|
||||||
|
}
|
||||||
|
|
17
winsup/mingw/mingwex/imaxabs.c
Normal file
17
winsup/mingw/mingwex/imaxabs.c
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
This source code was extracted from the Q8 package created and
|
||||||
|
placed in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
|
||||||
|
last edit: 1999/11/05 gwyn@arl.mil
|
||||||
|
|
||||||
|
Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E).
|
||||||
|
|
||||||
|
This particular implementation requires the matching <inttypes.h>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
intmax_t
|
||||||
|
imaxabs (intmax_t _j)
|
||||||
|
{ return _j >= 0 ? _j : -_j; }
|
||||||
|
|
||||||
|
long long __attribute__ ((alias ("imaxabs"))) llabs (long long);
|
25
winsup/mingw/mingwex/imaxdiv.c
Normal file
25
winsup/mingw/mingwex/imaxdiv.c
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
This source code was extracted from the Q8 package created and
|
||||||
|
placed in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
|
||||||
|
last edit: 1999/11/05 gwyn@arl.mil
|
||||||
|
|
||||||
|
|
||||||
|
last edit: 1999/11/05 gwyn@arl.mil
|
||||||
|
|
||||||
|
Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E).
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
imaxdiv_t
|
||||||
|
imaxdiv(intmax_t numer, intmax_t denom)
|
||||||
|
{
|
||||||
|
imaxdiv_t result;
|
||||||
|
result.quot = numer / denom;
|
||||||
|
result.rem = numer % denom;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
long long __attribute__ ((alias ("imaxdiv")))
|
||||||
|
lldiv (long long, long long);
|
14
winsup/mingw/mingwex/isnan.c
Normal file
14
winsup/mingw/mingwex/isnan.c
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
__isnan (double _x)
|
||||||
|
{
|
||||||
|
unsigned short _sw;
|
||||||
|
__asm__ ("fxam;"
|
||||||
|
"fstsw %%ax": "=a" (_sw) : "t" (_x));
|
||||||
|
return (_sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
|
||||||
|
== FP_NAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef isnan
|
||||||
|
int __attribute__ ((alias ("__isnan"))) isnan (double);
|
12
winsup/mingw/mingwex/isnanf.c
Normal file
12
winsup/mingw/mingwex/isnanf.c
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#include <math.h>
|
||||||
|
int
|
||||||
|
__isnanf (float _x)
|
||||||
|
{
|
||||||
|
unsigned short _sw;
|
||||||
|
__asm__ ("fxam;"
|
||||||
|
"fstsw %%ax": "=a" (_sw) : "t" (_x) );
|
||||||
|
return (_sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
|
||||||
|
== FP_NAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __attribute__ ((alias ("__isnanf"))) isnanf (float);
|
13
winsup/mingw/mingwex/isnanl.c
Normal file
13
winsup/mingw/mingwex/isnanl.c
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
__isnanl (long double _x)
|
||||||
|
{
|
||||||
|
unsigned short _sw;
|
||||||
|
__asm__ ("fxam;"
|
||||||
|
"fstsw %%ax": "=a" (_sw) : "t" (_x));
|
||||||
|
return (_sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
|
||||||
|
== FP_NAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __attribute__ ((alias ("__isnanl"))) isnanl (long double);
|
3
winsup/mingw/mingwex/lltoa.c
Normal file
3
winsup/mingw/mingwex/lltoa.c
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
char* lltoa(long long _n, char * _c, int _i)
|
||||||
|
{ return _i64toa (_n, _c, _i); }
|
3
winsup/mingw/mingwex/lltow.c
Normal file
3
winsup/mingw/mingwex/lltow.c
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
wchar_t* lltow(long long _n, wchar_t * _w, int _i)
|
||||||
|
{ return _i64tow (_n, _w, _i); }
|
8
winsup/mingw/mingwex/log2.c
Normal file
8
winsup/mingw/mingwex/log2.c
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include <math.h>
|
||||||
|
double
|
||||||
|
log2 (double _x)
|
||||||
|
{
|
||||||
|
double retval;
|
||||||
|
__asm__ ("fyl2x;" : "=t" (retval) : "0" (_x), "u" (1.0L) : "st(1)");
|
||||||
|
return retval;
|
||||||
|
}
|
8
winsup/mingw/mingwex/log2f.c
Normal file
8
winsup/mingw/mingwex/log2f.c
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include <math.h>
|
||||||
|
float
|
||||||
|
log2f (float _x)
|
||||||
|
{
|
||||||
|
float retval;
|
||||||
|
__asm__ ("fyl2x;" : "=t" (retval) : "0" (_x), "u" (1.0L) : "st(1)");
|
||||||
|
return retval;
|
||||||
|
}
|
8
winsup/mingw/mingwex/log2l.c
Normal file
8
winsup/mingw/mingwex/log2l.c
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include <math.h>
|
||||||
|
long double
|
||||||
|
log2l (long double _x)
|
||||||
|
{
|
||||||
|
long double retval;
|
||||||
|
__asm__ ("fyl2x;" : "=t" (retval) : "0" (_x), "u" (1.0L) : "st(1)");
|
||||||
|
return retval;
|
||||||
|
}
|
12
winsup/mingw/mingwex/math_stubs.c
Normal file
12
winsup/mingw/mingwex/math_stubs.c
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
double copysign (double x, double y) {return _copysign(x, y);}
|
||||||
|
float copysignf (float x, float y) {return _copysign(x, y);}
|
||||||
|
double logb (double x) {return _logb(x);}
|
||||||
|
float logbf (float x) {return _logb( x );}
|
||||||
|
double nextafter(double x, double y) {return _nextafter(x, y);}
|
||||||
|
float nextafterf(float x, float y) {return _nextafter(x, y);}
|
||||||
|
double scalb (double x, long i) {return _scalb (x, i);}
|
||||||
|
float scalbf (float x, long i) {return _scalb(x, i);}
|
||||||
|
|
21
winsup/mingw/mingwex/mbsinit.c
Normal file
21
winsup/mingw/mingwex/mbsinit.c
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/* This source code was extracted from the Q8 package created and placed
|
||||||
|
in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
|
||||||
|
last edit: 1999/11/05 gwyn@arl.mil
|
||||||
|
|
||||||
|
Implements subclause 7.24 of ISO/IEC 9899:1999 (E).
|
||||||
|
|
||||||
|
It supports an encoding where all char codes are mapped
|
||||||
|
to the *same* code values within a wchar_t or wint_t,
|
||||||
|
so long as no other wchar_t codes are used by the program.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
mbsinit(ps)
|
||||||
|
const mbstate_t *ps;
|
||||||
|
{
|
||||||
|
return 1; /* don't have shift states */
|
||||||
|
}
|
||||||
|
|
119
winsup/mingw/mingwex/mingw-fseek.c
Normal file
119
winsup/mingw/mingwex/mingw-fseek.c
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
/*
|
||||||
|
* Workaround for limitations on win9x where a file contents are
|
||||||
|
* not zero'd out if you seek past the end and then write.
|
||||||
|
* Copied from ming local-patch to binutils/bfd/libbfd.c written by
|
||||||
|
* Mumit Khan <khan@xraylith.wisc.edu>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <io.h>
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# define INLINE __inline__
|
||||||
|
#elif defined _MSC_VER
|
||||||
|
# define INLINE __inline
|
||||||
|
#else
|
||||||
|
# define INLINE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ZEROBLOCKSIZE 512
|
||||||
|
static int __mingw_fseek_called;
|
||||||
|
|
||||||
|
/* FIXME: put this in startup code and make os_platform_id global?
|
||||||
|
Or just get _osver from msvcrt.dll and bitest (_osver & 0x8000)? */
|
||||||
|
|
||||||
|
INLINE
|
||||||
|
static
|
||||||
|
int
|
||||||
|
__mingw_is_win9x (void)
|
||||||
|
{
|
||||||
|
static DWORD os_platform_id = -1 ;
|
||||||
|
|
||||||
|
if (os_platform_id == -1)
|
||||||
|
{
|
||||||
|
OSVERSIONINFO os_version_info;
|
||||||
|
memset (&os_version_info, 0, sizeof (OSVERSIONINFO));
|
||||||
|
os_version_info.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
|
||||||
|
GetVersionEx (&os_version_info);
|
||||||
|
|
||||||
|
os_platform_id = os_version_info.dwPlatformId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Don't even bother to check for Win32s. */
|
||||||
|
return os_platform_id == VER_PLATFORM_WIN32_WINDOWS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The fseek in Win9x runtime does not zero out the file if seeking past
|
||||||
|
the end; if you don't want random stuff from your disk included in your
|
||||||
|
output DLL/executable, use this version instead. On WinNT/Win2k, it
|
||||||
|
just calls runtime fseek().
|
||||||
|
|
||||||
|
CHECK/FIXME: Does this work for both text and binary modes?? */
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
__mingw_fseek (FILE *fp, long offset, int whence)
|
||||||
|
{
|
||||||
|
# undef fseek
|
||||||
|
__mingw_fseek_called = 1;
|
||||||
|
return fseek (fp, offset, whence);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__mingw_fwrite (const void *buffer, size_t size, size_t count, FILE *fp)
|
||||||
|
{
|
||||||
|
# undef fwrite
|
||||||
|
if ( __mingw_is_win9x () && __mingw_fseek_called)
|
||||||
|
{
|
||||||
|
DWORD actual_length, current_position;
|
||||||
|
__mingw_fseek_called = 0;
|
||||||
|
fflush (fp);
|
||||||
|
actual_length = GetFileSize ((HANDLE) _get_osfhandle (fileno (fp)),
|
||||||
|
NULL);
|
||||||
|
current_position = SetFilePointer ((HANDLE) _get_osfhandle (fileno (fp)),
|
||||||
|
0, 0, FILE_CURRENT);
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf ("__mingw_fwrite: current %ld, actual %ld\n",
|
||||||
|
current_position, actual_length);
|
||||||
|
#endif /* DEBUG */
|
||||||
|
if (current_position > actual_length)
|
||||||
|
{
|
||||||
|
static char __mingw_zeros[ZEROBLOCKSIZE];
|
||||||
|
long numleft;
|
||||||
|
|
||||||
|
SetFilePointer ((HANDLE) _get_osfhandle (fileno (fp)),
|
||||||
|
0, 0, FILE_END);
|
||||||
|
numleft = current_position - actual_length;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf ("__mingw_fwrite: Seeking %ld bytes past end\n", numleft);
|
||||||
|
#endif /* DEBUG */
|
||||||
|
while (numleft > 0)
|
||||||
|
{
|
||||||
|
DWORD nzeros = (numleft > ZEROBLOCKSIZE)
|
||||||
|
? ZEROBLOCKSIZE : numleft;
|
||||||
|
DWORD written;
|
||||||
|
if (! WriteFile ((HANDLE) _get_osfhandle (fileno (fp)),
|
||||||
|
__mingw_zeros, nzeros, &written, NULL))
|
||||||
|
{
|
||||||
|
/* Best we can hope for, or at least DJ says so. */
|
||||||
|
SetFilePointer ((HANDLE) _get_osfhandle (fileno (fp)),
|
||||||
|
0, 0, FILE_BEGIN);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (written < nzeros)
|
||||||
|
{
|
||||||
|
/* Likewise. */
|
||||||
|
SetFilePointer ((HANDLE) _get_osfhandle (fileno (fp)),
|
||||||
|
0, 0, FILE_BEGIN);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
numleft -= written;
|
||||||
|
}
|
||||||
|
FlushFileBuffers ((HANDLE) _get_osfhandle (fileno (fp)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fwrite (buffer, size, count, fp);
|
||||||
|
}
|
6
winsup/mingw/mingwex/rint.c
Normal file
6
winsup/mingw/mingwex/rint.c
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include <math.h>
|
||||||
|
double rint (double x){
|
||||||
|
double retval;
|
||||||
|
__asm__ ("frndint;" : "=t" (retval) : "0" (x));
|
||||||
|
return retval;
|
||||||
|
}
|
7
winsup/mingw/mingwex/rintf.c
Normal file
7
winsup/mingw/mingwex/rintf.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
float rintf (float x){
|
||||||
|
float retval;
|
||||||
|
__asm__ ("frndint;": "=t" (retval) : "0" (x));
|
||||||
|
return retval;
|
||||||
|
}
|
7
winsup/mingw/mingwex/rintl.c
Normal file
7
winsup/mingw/mingwex/rintl.c
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
long double rintl (long double x){
|
||||||
|
long double retval;
|
||||||
|
__asm__ ("frndint;": "=t" (retval) : "0" (x));
|
||||||
|
return retval;
|
||||||
|
}
|
29
winsup/mingw/mingwex/round.c
Normal file
29
winsup/mingw/mingwex/round.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
double
|
||||||
|
round (double x) {
|
||||||
|
double retval;
|
||||||
|
unsigned short saved_cw, _cw;
|
||||||
|
__asm__ (
|
||||||
|
"fnstcw %0;"
|
||||||
|
: "=m" (saved_cw)
|
||||||
|
); /* save control word */
|
||||||
|
_cw = ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO)
|
||||||
|
| (x > 0.0 ? FE_UPWARD : FE_DOWNWARD); /* round away from zero */
|
||||||
|
__asm__ (
|
||||||
|
"fldcw %0;"
|
||||||
|
:
|
||||||
|
: "m" (_cw)
|
||||||
|
); /* load the rounding control */
|
||||||
|
__asm__ (
|
||||||
|
"frndint;"
|
||||||
|
: "=t" (retval)
|
||||||
|
: "0" (x)
|
||||||
|
); /* do the rounding */
|
||||||
|
__asm__ (
|
||||||
|
"fldcw %0;"
|
||||||
|
:
|
||||||
|
: "m" (saved_cw)
|
||||||
|
); /* restore control word */
|
||||||
|
return retval;
|
||||||
|
}
|
29
winsup/mingw/mingwex/roundf.c
Normal file
29
winsup/mingw/mingwex/roundf.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
float
|
||||||
|
roundf (float x) {
|
||||||
|
double retval;
|
||||||
|
unsigned short saved_cw, _cw;
|
||||||
|
__asm__ (
|
||||||
|
"fnstcw %0;"
|
||||||
|
: "=m" (saved_cw)
|
||||||
|
); /* save control word */
|
||||||
|
_cw = ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO)
|
||||||
|
| (x > 0.0 ? FE_UPWARD : FE_DOWNWARD); /* round away from zero */
|
||||||
|
__asm__ (
|
||||||
|
"fldcw %0;"
|
||||||
|
:
|
||||||
|
: "m" (_cw)
|
||||||
|
); /* load the rounding control */
|
||||||
|
__asm__ (
|
||||||
|
"frndint;"
|
||||||
|
: "=t" (retval)
|
||||||
|
: "0" (x)
|
||||||
|
); /* do the rounding */
|
||||||
|
__asm__ (
|
||||||
|
"fldcw %0;"
|
||||||
|
:
|
||||||
|
: "m" (saved_cw)
|
||||||
|
); /* restore control word */
|
||||||
|
return retval;
|
||||||
|
}
|
30
winsup/mingw/mingwex/roundl.c
Normal file
30
winsup/mingw/mingwex/roundl.c
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
long double
|
||||||
|
roundl (long double x) {
|
||||||
|
long double retval;
|
||||||
|
unsigned short saved_cw, _cw;
|
||||||
|
__asm__ (
|
||||||
|
"fnstcw %0;"
|
||||||
|
: "=m" (saved_cw)
|
||||||
|
); /* save control word */
|
||||||
|
_cw = ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO)
|
||||||
|
| (x > 0.0 ? FE_UPWARD : FE_DOWNWARD); /* round away from zero */
|
||||||
|
__asm__ (
|
||||||
|
"fldcw %0;"
|
||||||
|
:
|
||||||
|
: "m" (_cw)
|
||||||
|
); /* load the rounding control */
|
||||||
|
__asm__ (
|
||||||
|
"frndint;"
|
||||||
|
: "=t" (retval)
|
||||||
|
: "0" (x)
|
||||||
|
); /* do the rounding */
|
||||||
|
__asm__ (
|
||||||
|
"fldcw %0;"
|
||||||
|
:
|
||||||
|
: "m" (saved_cw)
|
||||||
|
); /* restore control word */
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
13
winsup/mingw/mingwex/signbit.c
Normal file
13
winsup/mingw/mingwex/signbit.c
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#define __FP_SIGNBIT 0x0200
|
||||||
|
|
||||||
|
int __signbit (double x) {
|
||||||
|
unsigned short sw;
|
||||||
|
__asm__ ("fxam; fstsw %%ax;"
|
||||||
|
: "=a" (sw)
|
||||||
|
: "t" (x) );
|
||||||
|
return sw & __FP_SIGNBIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef signbit
|
||||||
|
int __attribute__ ((alias ("__signbit"))) signbit (double);
|
||||||
|
|
10
winsup/mingw/mingwex/signbitf.c
Normal file
10
winsup/mingw/mingwex/signbitf.c
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#define __FP_SIGNBIT 0x0200
|
||||||
|
|
||||||
|
int __signbitf (float x) {
|
||||||
|
unsigned short sw;
|
||||||
|
__asm__ ("fxam; fstsw %%ax;"
|
||||||
|
: "=a" (sw)
|
||||||
|
: "t" (x) );
|
||||||
|
return sw & __FP_SIGNBIT;
|
||||||
|
}
|
||||||
|
int __attribute__ ((alias ("__signbitf"))) signbitf (float);
|
11
winsup/mingw/mingwex/signbitl.c
Normal file
11
winsup/mingw/mingwex/signbitl.c
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#define __FP_SIGNBIT 0x0200
|
||||||
|
|
||||||
|
int __signbitl (long double x) {
|
||||||
|
unsigned short sw;
|
||||||
|
__asm__ ("fxam; fstsw %%ax;"
|
||||||
|
: "=a" (sw)
|
||||||
|
: "t" (x) );
|
||||||
|
return sw & __FP_SIGNBIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __attribute__ ((alias ("__signbitl"))) signbitl (long double);
|
1527
winsup/mingw/mingwex/sitest.c
Normal file
1527
winsup/mingw/mingwex/sitest.c
Normal file
File diff suppressed because it is too large
Load Diff
13
winsup/mingw/mingwex/snprintf.c
Normal file
13
winsup/mingw/mingwex/snprintf.c
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int snprintf(char* buffer, size_t n, const char* format, ...)
|
||||||
|
{
|
||||||
|
int retval;
|
||||||
|
va_list argptr;
|
||||||
|
|
||||||
|
va_start( argptr, format );
|
||||||
|
retval = _vsnprintf( buffer, n, format, argptr );
|
||||||
|
va_end( argptr );
|
||||||
|
return retval;
|
||||||
|
}
|
13
winsup/mingw/mingwex/snwprintf.c
Normal file
13
winsup/mingw/mingwex/snwprintf.c
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include <stdarg.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
int snwprintf(wchar_t* buffer, size_t n, const wchar_t* format, ...)
|
||||||
|
{
|
||||||
|
int retval;
|
||||||
|
va_list argptr;
|
||||||
|
|
||||||
|
va_start( argptr, format );
|
||||||
|
retval = _vsnwprintf( buffer, n, format, argptr );
|
||||||
|
va_end( argptr );
|
||||||
|
return retval;
|
||||||
|
}
|
6
winsup/mingw/mingwex/strtof.c
Normal file
6
winsup/mingw/mingwex/strtof.c
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
float strtof( const char *nptr, char **endptr)
|
||||||
|
{
|
||||||
|
return (strtod(nptr, endptr));
|
||||||
|
}
|
112
winsup/mingw/mingwex/strtoimax.c
Normal file
112
winsup/mingw/mingwex/strtoimax.c
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
This source code was extracted from the Q8 package created and
|
||||||
|
placed in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
|
||||||
|
last edit: 1999/11/05 gwyn@arl.mil
|
||||||
|
|
||||||
|
Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E).
|
||||||
|
|
||||||
|
This particular implementation requires the matching <inttypes.h>.
|
||||||
|
It also assumes that character codes for A..Z and a..z are in
|
||||||
|
contiguous ascending order; this is true for ASCII but not EBCDIC.
|
||||||
|
*/
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
/* Helper macros */
|
||||||
|
|
||||||
|
/* convert digit character to number, in any base */
|
||||||
|
#define ToNumber(c) (isdigit(c) ? (c) - '0' : \
|
||||||
|
isupper(c) ? (c) - 'A' + 10 : \
|
||||||
|
islower(c) ? (c) - 'a' + 10 : \
|
||||||
|
-1 /* "invalid" flag */ \
|
||||||
|
)
|
||||||
|
/* validate converted digit character for specific base */
|
||||||
|
#define valid(n, b) ((n) >= 0 && (n) < (b))
|
||||||
|
|
||||||
|
intmax_t
|
||||||
|
strtoimax(nptr, endptr, base)
|
||||||
|
register const char * __restrict__ nptr;
|
||||||
|
char ** __restrict__ endptr;
|
||||||
|
register int base;
|
||||||
|
{
|
||||||
|
register uintmax_t accum; /* accumulates converted value */
|
||||||
|
register int n; /* numeral from digit character */
|
||||||
|
int minus; /* set iff minus sign seen */
|
||||||
|
int toobig; /* set iff value overflows */
|
||||||
|
|
||||||
|
if ( endptr != NULL )
|
||||||
|
*endptr = (char *)nptr; /* in case no conversion's performed */
|
||||||
|
|
||||||
|
if ( base < 0 || base == 1 || base > 36 )
|
||||||
|
{
|
||||||
|
errno = EDOM;
|
||||||
|
return 0; /* unspecified behavior */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* skip initial, possibly empty sequence of white-space characters */
|
||||||
|
|
||||||
|
while ( isspace(*nptr) )
|
||||||
|
++nptr;
|
||||||
|
|
||||||
|
/* process subject sequence: */
|
||||||
|
|
||||||
|
/* optional sign */
|
||||||
|
if ( (minus = *nptr == '-') || *nptr == '+' )
|
||||||
|
++nptr;
|
||||||
|
|
||||||
|
if ( base == 0 ) {
|
||||||
|
if ( *nptr == '0' ) {
|
||||||
|
if ( nptr[1] == 'X' || nptr[1] == 'x' )
|
||||||
|
base = 16;
|
||||||
|
else
|
||||||
|
base = 8;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
base = 10;
|
||||||
|
}
|
||||||
|
/* optional "0x" or "0X" for base 16 */
|
||||||
|
|
||||||
|
if ( base == 16 && *nptr == '0' && (nptr[1] == 'X' || nptr[1] == 'x') )
|
||||||
|
nptr += 2; /* skip past this prefix */
|
||||||
|
|
||||||
|
/* check whether there is at least one valid digit */
|
||||||
|
|
||||||
|
n = ToNumber(*nptr);
|
||||||
|
++nptr;
|
||||||
|
|
||||||
|
if ( !valid(n, base) )
|
||||||
|
return 0; /* subject seq. not of expected form */
|
||||||
|
|
||||||
|
accum = n;
|
||||||
|
|
||||||
|
for ( toobig = 0; n = ToNumber(*nptr), valid(n, base); ++nptr )
|
||||||
|
if ( accum > INTMAX_MAX / base + 2 ) /* major wrap-around */
|
||||||
|
toobig = 1; /* but keep scanning */
|
||||||
|
else
|
||||||
|
accum = base * accum + n;
|
||||||
|
|
||||||
|
if ( endptr != NULL )
|
||||||
|
*endptr = (char *)nptr; /* points to first not-valid-digit */
|
||||||
|
|
||||||
|
if ( minus )
|
||||||
|
{
|
||||||
|
if ( accum > (uintmax_t)INTMAX_MAX + 1 )
|
||||||
|
toobig = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ( accum > (uintmax_t)INTMAX_MAX )
|
||||||
|
toobig = 1;
|
||||||
|
|
||||||
|
if ( toobig )
|
||||||
|
{
|
||||||
|
errno = ERANGE;
|
||||||
|
return minus ? INTMAX_MIN : INTMAX_MAX;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return (intmax_t)(minus ? -accum : accum);
|
||||||
|
}
|
||||||
|
|
||||||
|
long long __attribute__ ((alias ("strtoimax")))
|
||||||
|
strtoll (const char* __restrict__ nptr, char ** __restrict__ endptr, int base);
|
110
winsup/mingw/mingwex/strtoumax.c
Normal file
110
winsup/mingw/mingwex/strtoumax.c
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
This source code was extracted from the Q8 package created and
|
||||||
|
placed in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
|
||||||
|
last edit: 1999/11/05 gwyn@arl.mil
|
||||||
|
|
||||||
|
Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E).
|
||||||
|
|
||||||
|
This particular implementation requires the matching <inttypes.h>.
|
||||||
|
It also assumes that character codes for A..Z and a..z are in
|
||||||
|
contiguous ascending order; this is true for ASCII but not EBCDIC.
|
||||||
|
*/
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
/* Helper macros */
|
||||||
|
|
||||||
|
/* convert digit character to number, in any base */
|
||||||
|
#define ToNumber(c) (isdigit(c) ? (c) - '0' : \
|
||||||
|
isupper(c) ? (c) - 'A' + 10 : \
|
||||||
|
islower(c) ? (c) - 'a' + 10 : \
|
||||||
|
-1 /* "invalid" flag */ \
|
||||||
|
)
|
||||||
|
/* validate converted digit character for specific base */
|
||||||
|
#define valid(n, b) ((n) >= 0 && (n) < (b))
|
||||||
|
|
||||||
|
uintmax_t
|
||||||
|
strtoumax(nptr, endptr, base)
|
||||||
|
register const char * __restrict__ nptr;
|
||||||
|
char ** __restrict__ endptr;
|
||||||
|
register int base;
|
||||||
|
{
|
||||||
|
register uintmax_t accum; /* accumulates converted value */
|
||||||
|
register uintmax_t next; /* for computing next value of accum */
|
||||||
|
register int n; /* numeral from digit character */
|
||||||
|
int minus; /* set iff minus sign seen (yes!) */
|
||||||
|
int toobig; /* set iff value overflows */
|
||||||
|
|
||||||
|
if ( endptr != NULL )
|
||||||
|
*endptr = (char *)nptr; /* in case no conversion's performed */
|
||||||
|
|
||||||
|
if ( base < 0 || base == 1 || base > 36 )
|
||||||
|
{
|
||||||
|
errno = EDOM;
|
||||||
|
return 0; /* unspecified behavior */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* skip initial, possibly empty sequence of white-space characters */
|
||||||
|
|
||||||
|
while ( isspace(*nptr) )
|
||||||
|
++nptr;
|
||||||
|
|
||||||
|
/* process subject sequence: */
|
||||||
|
|
||||||
|
/* optional sign (yes!) */
|
||||||
|
|
||||||
|
if ( (minus = *nptr == '-') || *nptr == '+' )
|
||||||
|
++nptr;
|
||||||
|
|
||||||
|
if ( base == 0 )
|
||||||
|
{
|
||||||
|
if ( *nptr == '0' )
|
||||||
|
{
|
||||||
|
if ( nptr[1] == 'X' || nptr[1] == 'x' )
|
||||||
|
base = 16;
|
||||||
|
else
|
||||||
|
base = 8;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
base = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* optional "0x" or "0X" for base 16 */
|
||||||
|
|
||||||
|
if ( base == 16 && *nptr == '0' && (nptr[1] == 'X' || nptr[1] == 'x') )
|
||||||
|
nptr += 2; /* skip past this prefix */
|
||||||
|
|
||||||
|
/* check whether there is at least one valid digit */
|
||||||
|
|
||||||
|
n = ToNumber(*nptr);
|
||||||
|
++nptr;
|
||||||
|
|
||||||
|
if ( !valid(n, base) )
|
||||||
|
return 0; /* subject seq. not of expected form */
|
||||||
|
|
||||||
|
accum = n;
|
||||||
|
|
||||||
|
for ( toobig = 0; n = ToNumber(*nptr), valid(n, base); ++nptr )
|
||||||
|
if ( accum > UINTMAX_MAX / base + 1 /* major wrap-around */
|
||||||
|
|| (next = base * accum + n) < accum /* minor wrap-around */
|
||||||
|
)
|
||||||
|
toobig = 1; /* but keep scanning */
|
||||||
|
else
|
||||||
|
accum = next;
|
||||||
|
|
||||||
|
if ( endptr != NULL )
|
||||||
|
*endptr = (char *)nptr; /* points to first not-valid-digit */
|
||||||
|
|
||||||
|
if ( toobig )
|
||||||
|
{
|
||||||
|
errno = ERANGE;
|
||||||
|
return UINTMAX_MAX;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return minus ? -accum : accum; /* (yes!) */
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long __attribute__ ((alias ("strtoumax")))
|
||||||
|
strtoull (const char* __restrict__ nptr, char ** __restrict__ endptr, int base);
|
104
winsup/mingw/mingwex/testwmem.c
Normal file
104
winsup/mingw/mingwex/testwmem.c
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
#include <memory.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
wchar_t fmt1[] = L" 1 2 3 4 5";
|
||||||
|
wchar_t fmt2[] = L"12345678901234567890123456789012345678901234567890";
|
||||||
|
|
||||||
|
void test_wmemchr( void )
|
||||||
|
{
|
||||||
|
wchar_t* dest;
|
||||||
|
wint_t result;
|
||||||
|
wint_t ch = L'r';
|
||||||
|
wchar_t str[] = L"lazy";
|
||||||
|
wchar_t string1[60] = L"The quick brown dog jumps over the lazy fox";
|
||||||
|
|
||||||
|
wprintf( L"Wmemchr\n" );
|
||||||
|
wprintf( L"String to be searched:\n\t\t%s\n", string1 );
|
||||||
|
wprintf( L"\t\t%s\n\t\t%s\n\n", fmt1, fmt2 );
|
||||||
|
|
||||||
|
wprintf( L"Search char:\t%c\n", ch );
|
||||||
|
dest = wmemchr( string1, ch, sizeof( string1 ) );
|
||||||
|
result = dest - string1 + 1;
|
||||||
|
if( dest != NULL )
|
||||||
|
wprintf( L"Result:\t\t%c found at position %d\n\n", ch, result );
|
||||||
|
else
|
||||||
|
wprintf( L"Result:\t\t%c not found\n\n" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
void test_wmemset( void )
|
||||||
|
{/* 1 2
|
||||||
|
0123456789012345678901234567890 */
|
||||||
|
wchar_t buffer[] = L"This is a test of the wmemset function";
|
||||||
|
wprintf( L"Before: %s\n", buffer );
|
||||||
|
wmemset( buffer+22, L'*', 7 );
|
||||||
|
wprintf( L"After: %s\n\n", buffer );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_wmemmove( void )
|
||||||
|
{
|
||||||
|
wchar_t string1[60] = L"The quick brown dog jumps over the lazy fox";
|
||||||
|
wchar_t string2[60] = L"The quick brown fox jumps over the lazy dog";
|
||||||
|
|
||||||
|
wprintf( L"Wmemcpy without overlap\n" );
|
||||||
|
wprintf( L"Source:\t\t%s\n", string1 + 40 );
|
||||||
|
wprintf( L"Destination:\t%s\n", string1 + 16 );
|
||||||
|
wmemcpy( string1 + 16, string1 + 40, 3 );
|
||||||
|
wprintf( L"Result:\t\t%s\n", string1 );
|
||||||
|
wprintf( L"Length:\t\t%d characters\n\n", wcslen( string1 ) );
|
||||||
|
wmemcpy( string1 + 16, string2 + 40, 3 );
|
||||||
|
|
||||||
|
wprintf( L"Wmemmove with overlap\n" );
|
||||||
|
wprintf( L"Source:\t\t%s\n", string2 + 4 );
|
||||||
|
wprintf( L"Destination:\t%s\n", string2 + 10 );
|
||||||
|
wmemmove( string2 + 10, string2 + 4, 40 );
|
||||||
|
wprintf( L"Result:\t\t%s\n", string2 );
|
||||||
|
wprintf( L"Length:\t\t%d characters\n\n", wcslen( string2 ) );
|
||||||
|
|
||||||
|
wprintf( L"Wmemcpy with overlap\n" );
|
||||||
|
wprintf( L"Source:\t\t%s\n", string1 + 4 );
|
||||||
|
wprintf( L"Destination:\t%s\n", string1 + 10 );
|
||||||
|
wmemcpy( string1 + 10, string1 + 4, 40 );
|
||||||
|
wprintf( L"Result:\t\t%s\n", string1 );
|
||||||
|
wprintf( L"Length:\t\t%d characters\n\n", wcslen( string1 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void test_wmemcmp( void )
|
||||||
|
{
|
||||||
|
wchar_t first[] = L"12345678901234567890";
|
||||||
|
wchar_t second[] = L"12345678901234567891";
|
||||||
|
wint_t result;
|
||||||
|
wprintf(L"Wmemcmp\n");
|
||||||
|
wprintf( L"Compare '%.19s' to '%.19s':\n", first, second );
|
||||||
|
result = wmemcmp( first, second, 19 );
|
||||||
|
if( result < 0 )
|
||||||
|
wprintf( L"First is less than second.\n" );
|
||||||
|
else if( result == 0 )
|
||||||
|
wprintf( L"First is equal to second.\n" );
|
||||||
|
else if( result > 0 )
|
||||||
|
wprintf( L"First is greater than second.\n" );
|
||||||
|
wprintf( L"\nCompare '%.20s' to '%.20s':\n", first, second );
|
||||||
|
result = wmemcmp( first, second, 20 );
|
||||||
|
if( result < 0 )
|
||||||
|
wprintf( L"First is less than second.\n\n" );
|
||||||
|
else if( result == 0 )
|
||||||
|
wprintf( L"First is equal to second.\n\n" );
|
||||||
|
else if( result > 0 )
|
||||||
|
wprintf( L"First is greater than second.\n\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
test_wmemset();
|
||||||
|
test_wmemmove();
|
||||||
|
test_wmemchr();
|
||||||
|
test_wmemcmp();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
17
winsup/mingw/mingwex/trunc.c
Normal file
17
winsup/mingw/mingwex/trunc.c
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
double
|
||||||
|
trunc (double _x){
|
||||||
|
double retval;
|
||||||
|
unsigned short saved_cw;
|
||||||
|
__asm__ ("fnstcw %0;": "=m" (saved_cw)); /* save FPU control word */
|
||||||
|
__asm__ ("fldcw %0;"
|
||||||
|
:
|
||||||
|
: "m" ((saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD
|
||||||
|
| FE_TOWARDZERO)) | FE_TOWARDZERO)
|
||||||
|
);
|
||||||
|
__asm__ ("frndint;" : "=t" (retval) : "0" (_x)); /* round towards zero */
|
||||||
|
__asm__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */
|
||||||
|
return retval;
|
||||||
|
}
|
17
winsup/mingw/mingwex/truncf.c
Normal file
17
winsup/mingw/mingwex/truncf.c
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
float
|
||||||
|
truncf (float _x){
|
||||||
|
float retval;
|
||||||
|
unsigned short saved_cw;
|
||||||
|
__asm__ ("fnstcw %0;": "=m" (saved_cw)); /* save FPU control word */
|
||||||
|
__asm__ ("fldcw %0;"
|
||||||
|
:
|
||||||
|
: "m" ((saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD
|
||||||
|
| FE_TOWARDZERO)) | FE_TOWARDZERO)
|
||||||
|
);
|
||||||
|
__asm__ ("frndint;" : "=t" (retval) : "0" (_x)); /* round towards zero */
|
||||||
|
__asm__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */
|
||||||
|
return retval;
|
||||||
|
}
|
17
winsup/mingw/mingwex/truncl.c
Normal file
17
winsup/mingw/mingwex/truncl.c
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#include <fenv.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
long double
|
||||||
|
truncl (long double _x){
|
||||||
|
long double retval;
|
||||||
|
unsigned short saved_cw;
|
||||||
|
__asm__ ("fnstcw %0;": "=m" (saved_cw)); /* save FPU control word */
|
||||||
|
__asm__ ("fldcw %0;"
|
||||||
|
:
|
||||||
|
: "m" ((saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD
|
||||||
|
| FE_TOWARDZERO)) | FE_TOWARDZERO)
|
||||||
|
);
|
||||||
|
__asm__ ("frndint;" : "=t" (retval) : "0" (_x)); /* round towards zero */
|
||||||
|
__asm__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */
|
||||||
|
return retval;
|
||||||
|
}
|
3
winsup/mingw/mingwex/ulltoa.c
Normal file
3
winsup/mingw/mingwex/ulltoa.c
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
char* ulltoa(unsigned long long _n, char * _c, int _i)
|
||||||
|
{ return _ui64toa (_n, _c, _i); }
|
3
winsup/mingw/mingwex/ulltow.c
Normal file
3
winsup/mingw/mingwex/ulltow.c
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
wchar_t* ulltow(unsigned long long _n, wchar_t * _w, int _i)
|
||||||
|
{ return _ui64tow (_n, _w, _i); }
|
5
winsup/mingw/mingwex/vsnprintf.c
Normal file
5
winsup/mingw/mingwex/vsnprintf.c
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int vsnprintf (char* s, size_t n, const char* format, va_list arg)
|
||||||
|
{ return _vsnprintf ( s, n, format, arg); }
|
5
winsup/mingw/mingwex/vsnwprintf.c
Normal file
5
winsup/mingw/mingwex/vsnwprintf.c
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#include <stdarg.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
int vsnwprintf(wchar_t *buffer, size_t n, const wchar_t * format, va_list argptr)
|
||||||
|
{ return _vsnwprintf( buffer, n, format, argptr );}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user