summaryrefslogtreecommitdiffstats
path: root/unix/tclUnixThrd.c
diff options
context:
space:
mode:
authordas <das>2002-08-06 01:49:27 (GMT)
committerdas <das>2002-08-06 01:49:27 (GMT)
commit662e3f9cf9ef3534b5ac05ea668b44fd912d2180 (patch)
tree19d006042c2fe2684711080b502d5def97fef349 /unix/tclUnixThrd.c
parent97436a436ee4b19926ee332ba593027e24264efc (diff)
downloadtcl-662e3f9cf9ef3534b5ac05ea668b44fd912d2180.zip
tcl-662e3f9cf9ef3534b5ac05ea668b44fd912d2180.tar.gz
tcl-662e3f9cf9ef3534b5ac05ea668b44fd912d2180.tar.bz2
* generic/tclInt.decls:
* unix/tclUnixThrd.c: Added stubs and implementations for non-threaded build for the tclUnixThrd.c procs TclpReaddir, TclpLocaltime, TclpGmtime and TclpInetNtoa. Fixes link errors in stubbed & threaded extensions that include tclUnixPort.h and use any of the procs readdir, localtime, gmtime or inet_ntoa (e.g. TclX 8.4) [Bug 589526] * generic/tclIntPlatDecls.h: * generic/tclStubInit.c: Regen.
Diffstat (limited to 'unix/tclUnixThrd.c')
-rw-r--r--unix/tclUnixThrd.c32
1 files changed, 27 insertions, 5 deletions
diff --git a/unix/tclUnixThrd.c b/unix/tclUnixThrd.c
index c0640cd..1dd2d99 100644
--- a/unix/tclUnixThrd.c
+++ b/unix/tclUnixThrd.c
@@ -13,10 +13,10 @@
*/
#include "tclInt.h"
+#include "tclPort.h"
#ifdef TCL_THREADS
-#include "tclPort.h"
#include "pthread.h"
typedef struct ThreadSpecificData {
@@ -772,6 +772,7 @@ TclpFinalizeCondition(condPtr)
*condPtr = NULL;
}
}
+#endif /* TCL_THREADS */
/*
*----------------------------------------------------------------------
@@ -790,7 +791,7 @@ TclpFinalizeCondition(condPtr)
*----------------------------------------------------------------------
*/
-#ifndef HAVE_READDIR_R
+#if defined(TCL_THREADS) && !defined(HAVE_READDIR_R)
TCL_DECLARE_MUTEX( rdMutex )
#undef readdir
#endif
@@ -798,8 +799,9 @@ TCL_DECLARE_MUTEX( rdMutex )
Tcl_DirEntry *
TclpReaddir(DIR * dir)
{
- ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
Tcl_DirEntry *ent;
+#ifdef TCL_THREADS
+ ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
#ifdef HAVE_READDIR_R
ent = &tsdPtr->rdbuf.ent;
@@ -823,10 +825,17 @@ TclpReaddir(DIR * dir)
Tcl_MutexUnlock(&rdMutex);
#endif /* HAVE_READDIR_R */
+#else
+# ifdef HAVE_STRUCT_DIRENT64
+ ent = readdir64(dir);
+# else /* !HAVE_STRUCT_DIRENT64 */
+ ent = readdir(dir);
+# endif /* HAVE_STRUCT_DIRENT64 */
+#endif
return ent;
}
-#if !defined(HAVE_GMTIME_R) || !defined(HAVE_LOCALTIME_R)
+#if defined(TCL_THREADS) && (!defined(HAVE_GMTIME_R) || !defined(HAVE_LOCALTIME_R))
TCL_DECLARE_MUTEX( tmMutex )
#undef localtime
#undef gmtime
@@ -835,6 +844,7 @@ TCL_DECLARE_MUTEX( tmMutex )
struct tm *
TclpLocaltime(time_t * clock)
{
+#ifdef TCL_THREADS
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
#ifdef HAVE_LOCALTIME_R
@@ -843,13 +853,17 @@ TclpLocaltime(time_t * clock)
Tcl_MutexLock( &tmMutex );
memcpy( (VOID *) &tsdPtr->ltbuf, (VOID *) localtime( clock ), sizeof (struct tm) );
Tcl_MutexUnlock( &tmMutex );
- return &tsdPtr->ltbuf;
+ return &tsdPtr->ltbuf;
#endif
+#else
+ return localtime(clock);
+#endif
}
struct tm *
TclpGmtime(time_t * clock)
{
+#ifdef TCL_THREADS
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
#ifdef HAVE_GMTIME_R
@@ -860,11 +874,15 @@ TclpGmtime(time_t * clock)
Tcl_MutexUnlock( &tmMutex );
return &tsdPtr->gtbuf;
#endif
+#else
+ return gmtime(clock);
+#endif
}
char *
TclpInetNtoa(struct in_addr addr)
{
+#ifdef TCL_THREADS
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
union {
unsigned long l;
@@ -874,8 +892,12 @@ TclpInetNtoa(struct in_addr addr)
u.l = (unsigned long) addr.s_addr;
sprintf(tsdPtr->nabuf, "%u.%u.%u.%u", u.b[0], u.b[1], u.b[2], u.b[3]);
return tsdPtr->nabuf;
+#else
+ return inet_ntoa(addr);
+#endif
}
+#ifdef TCL_THREADS
/*
* Additions by AOL for specialized thread memory allocator.
*/