/* Copyright (c) 1993 Xerox Corporation. All rights reserved. */ /* $Id$ $Date$ * * PCR ANSI and POSIX emulation per-thread data. */ #ifndef __PCR_EmuData_h #define __PCR_EmuData_h 1 #include #include struct PCR_EmuData_IDataRep /* Inherited across fork */ { /* stdlib.h */ void * eid_stdlib_env; }; typedef struct PCR_EmuData_IDataRep PCR_EmuData_IData; extern PCR_EmuData_IData *(PCR_EmuData_IGet(void)); #define PCR_EmuData_IGet() ( (PCR_EmuData_IData *) \ (PCR_ThData_Get()->td__emuIData) ) #define PCR_EmuData_IGET(eid) { (eid) = PCR_EmuData_IGet(); } #include #include #include #include struct PCR_EmuData_RDataRep /* Reset across fork */ { /* grp.h */ struct group erd_grp_gr; char *erd_grp_buf; unsigned long erd_grp_bufBytes; /* pwd.h */ struct passwd erd_pwd_pw; char *erd_pwd_buf; unsigned long erd_pwd_bufBytes; /* stdio.h */ FILE * erd_stdio_stdStream[PCR_Stdio_numStdStreams]; /* The actual streams used as std{in,out,err} by this thread. The global std{in,out,err} indirect to these. */ FILE * erd_stdio_lclStreams; /* List of all open streams based on a local descriptor for this thread. */ long erd_stdio_tmpnamID; /* stdlib.h */ unsigned long int erd_stdlib_randNext; void (**erd_stdlib_atexitFuncList)(void); long erd_stdlib_atexitFuncCnt; /* string.h */ char *erd_string_strtokBuf; char *erd_string_strtokP; char *erd_string_strerrorBuf; /* time.h */ struct tm erd_time_tm; char *erd_time_buf; unsigned long erd_time_bufBytes; char *erd_stdlib_envVal; /* unistd.h */ long erd_unistd_alarmSecs; PCR_ThData_T * erd_unistd_alarmNext; }; typedef struct PCR_EmuData_RDataRep PCR_EmuData_RData; extern PCR_EmuData_RData *(PCR_EmuData__RGet(void)); extern PCR_EmuData_RData *(PCR_EmuData_RGet(void)); #define PCR_EmuData_RTry() (PCR_ThData_Get()->td__emuRData) #define PCR_EmuData_RGet() ( PCR_EmuData_RTry() \ ? PCR_EmuData_RTry() : PCR_EmuData__RGet() ) #define PCR_EmuData_RGET(erd) {\ if( ((erd) = PCR_EmuData_RTry()) == NIL ) {\ (erd) = PCR_EmuData__RGet(); \ } } /* * cleanup procs -- called just before thread exit ... */ void (*PCR_EmuData_atexitCleanup)(void); void (*PCR_EmuData_stdioCleanup)(void); #endif /* ! __PCR_EmuData_h */ /* $Log$ */