diff -r 000000000000 -r e4d67989cc36 genericopenlibs/cstdlib/LINCSYS/REENT.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/cstdlib/LINCSYS/REENT.H Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,139 @@ +/* +* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* WARNING: All identifiers here must begin with an underscore. This file is +* included by stdio.h and others and we therefore must only use identifiers +* in the namespace allotted to us. +* +* +*/ + + + +/** + @file + @publishedAll + @released +*/ + +#ifndef _SYS_REENT_H_ +#ifdef __cplusplus +extern "C" { +#endif + +#define _SYS_REENT_H_ + +#include <_ansi.h> +#include /* _sFILE type */ +#include /* for struct tm */ + +struct _glue +{ + struct _glue *_next; + int _niobs; + struct __sFILE *_iobs; +}; + +/** +atexit() support +*/ +#define _ATEXIT_SIZE 32 /* must be at least 32 to guarantee ANSI conformance */ + +struct _atexit { + struct _atexit *_next; /* next in list */ + int _ind; /* next index in this table */ + void (*_fns[_ATEXIT_SIZE])(void); /* the table itself */ +}; + + +/** +struct _reent + +This structure contains *all* globals needed by the library. +It's raison d'etre is to facilitate threads by making all library routines +reentrant. IE: All state information is contained here. +*/ + +#define _ASCTIME_SIZE (26+8) /* 26 min, plus caution factor! */ +#define _MINNARROWBUFSIZE 100 + +#ifdef __MWERKS__ + #pragma warn_padding off +#endif + +struct _reent +{ + /* local copy of errno */ + int _errno; + struct __sFILE _sf[3]; /* first three file descriptors: stdin, stdout, stderr */ + + char *_scanpoint; /* used by strtok */ + char _asctime[_ASCTIME_SIZE]; /* used by asctime */ + struct tm _struct_tm; /* used by gmtime */ + long _next[2]; /* used by rand/srand (64-bit seed for EPOC32) */ + int _inc; /* used by tmpnam */ + char _tmpnam[37]; /* used by tmpnam & inet_ntoa */ + wchar_t _wtmpnam[37]; /* used by tmpnam & inet_ntoa */ + void *_netdb; /* used by gethostbyaddr and similar netdb functions */ + + int _current_category; /* used by setlocale */ + const char *_current_locale; + + int __sdidinit; /* 1 means stdio has been init'd */ + + void (*__cleanup)(struct _reent *); + + /* atexit stuff */ + struct _atexit *_atexit; /* points to head of LIFO stack */ + struct _atexit _atexit0; /* one guaranteed table, required by ANSI */ + + /* signal info */ + void (**(_sig_func))(); + + struct _glue __sglue; /* root of glue chain for additional sFILE structures */ + + char **environ; + int environ_slots; + + char* _pNarrowEnvBuffer; + int _NEBSize; + + void *_system; /* Pointer to a C++ POSIX System object - Hands off! */ +}; + +/** +The struct _reent is managed on a per-thread basis by EPOC32, so there is no global +variable _impure_pointer and everyone has to use _REENT (panics in the event of an +error) or REENT2 (which returns a NULL pointer in the event of an error). +*/ +IMPORT_C void _reclaim_reent (struct _reent*); +IMPORT_C void _REENT_INIT (struct _reent*); +IMPORT_C struct _reent* ImpurePtr (void); +IMPORT_C struct _reent* ImpurePtr2 (void); +IMPORT_C void _init_reent (struct _reent*,void*); + +/** +Support for explicit release of all STDLIB resources belonging to this thread +*/ +IMPORT_C void CloseSTDLIB(); + +#define _REENT (ImpurePtr()) +#define _REENT2 (ImpurePtr2()) +#define __errno_r(ptr) ((ptr)->_errno) + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_REENT_H_ */