--- a/DirectoryStream.st Wed Dec 05 10:23:46 2001 +0100
+++ b/DirectoryStream.st Wed Dec 05 15:57:07 2001 +0100
@@ -112,6 +112,26 @@
# define __HANDLEVal(o) (HANDLE)__externalAddressVal(o)
+# ifndef DO_WRAP_CALLS
+# define STX_C_CALL0(__f__) __f__((__a1__))
+# define STX_C_CALL1(__f__, __a1__) __f__((__a1__))
+# define STX_C_CALL2(__f__, __a1__, __a2__) __f__((__a1__), (__a2__))
+# define STX_C_CALL3(__f__, __a1__, __a2__, __a3__) __f__((__a1__), (__a2__), (__a3__))
+# define STX_API_CALL0(__f__) __f__((__a1__))
+# define STX_API_CALL1(__f__, __a1__) __f__((__a1__))
+# define STX_API_CALL2(__f__, __a1__, __a2__) __f__((__a1__), (__a2__))
+# define STX_API_CALL3(__f__, __a1__, __a2__, __a3__) __f__((__a1__), (__a2__), (__a3__))
+# else
+# define STX_C_CALL0(__f__) __STX_C_CALL0((void*)__f__)
+# define STX_C_CALL1(__f__, __a1__) __STX_C_CALL1((void*)__f__, (void*)(__a1__))
+# define STX_C_CALL2(__f__, __a1__, __a2__) __STX_C_CALL2((void*)__f__, (void*)(__a1__), (void*)(__a2__))
+# define STX_C_CALL3(__f__, __a1__, __a2__, __a3__) __STX_C_CALL3((void*)__f__, (void*)(__a1__), (void*)(__a2__), (void*)(__a3__))
+# define STX_API_CALL0(__f__) __STX_API_CALL0((void*)__f__)
+# define STX_API_CALL1(__f__, __a1__) __STX_API_CALL1((void*)__f__, (void*)(__a1__))
+# define STX_API_CALL2(__f__, __a1__, __a2__) __STX_API_CALL2((void*)__f__, (void*)(__a1__), (void*)(__a2__))
+# define STX_API_CALL3(__f__, __a1__, __a2__, __a3__) __STX_API_CALL3((void*)__f__, (void*)(__a1__), (void*)(__a2__), (void*)(__a3__))
+# endif
+
#endif /* WIN32 */
%}
@@ -507,12 +527,12 @@
__INST(lastErrorNumber) = nil;
d = __HANDLEVal(dirP);
-# ifdef DO_WRAP_CALLS
- rslt = __STX_API_CALL2( (void*)FindNextFile, (void *)d, (void *)&data );
-# else
- rslt = FindNextFile(d, &data);
-# endif
- if (rslt) {
+ do {
+ __threadErrno = 0;
+ rslt = STX_API_CALL2( FindNextFile, d, &data );
+ } while ((rslt < 0) && (__threadErrno == EINTR));
+
+ if (rslt > 0) {
nextEntry = __MKSTRING( data.cFileName );
} else {
__INST(hitEOF) = true;
@@ -613,11 +633,12 @@
if (l < (sizeof(pattern)-4)) {
strncpy(pattern, __stringVal(path), l);
strcpy(pattern+l, "\\*");
-# ifdef DO_WRAP_CALLS
- d = __STX_API_CALL2( (void*)FindFirstFile, (void *)pattern, (void *)&data );
-# else
- d = FindFirstFile(pattern, &data);
-# endif
+
+ do {
+ __threadErrno = 0;
+ d = STX_API_CALL2( FindFirstFile, pattern, &data );
+ } while ((d < 0) && (__threadErrno == EINTR));
+
if (d == INVALID_HANDLE_VALUE) {
__INST(lastErrorNumber) = __MKSMALLINT(GetLastError());
} else {
@@ -693,5 +714,5 @@
!DirectoryStream class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/DirectoryStream.st,v 1.50 2000-02-07 19:26:12 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/DirectoryStream.st,v 1.51 2001-12-05 14:57:07 cg Exp $'
! !