DirectoryStream.st
changeset 6259 164d7efc1eb2
parent 5245 fb27aee25da6
child 6266 b12e2e6a84d7
--- 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 $'
 ! !