genericopenlibs/cstdlib/LINCSYS/REENT.H
changeset 0 e4d67989cc36
--- /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 <sys/stdio_t.h>	/* _sFILE type */
+#include <time.h>		/* 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_ */