FileStream.st
changeset 6267 10016cc16511
parent 6259 164d7efc1eb2
child 6333 9682533bce75
--- a/FileStream.st	Mon Dec 10 17:27:28 2001 +0100
+++ b/FileStream.st	Mon Dec 10 17:30:04 2001 +0100
@@ -117,6 +117,7 @@
 
 # include <windows.h>
 # include <winsock.h> /* */
+# include <io.h>
 
 # if !defined(__BORLANDC__)
 #  define stat _stat
@@ -159,57 +160,44 @@
 # define INT int
 
 # 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_C_CALL0(__nm__, __f__)                            __f__((__a1__))
+#  define STX_C_CALL1(__nm__, __f__, __a1__)                    __f__((__a1__))
+#  define STX_C_CALL2(__nm__, __f__, __a1__, __a2__)            __f__((__a1__), (__a2__))
+#  define STX_C_CALL3(__nm__, __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_C_CALL0(__nm__, __f__)                            __STX_C_CALL0(__nm__, (void*)__f__)
+#  define STX_C_CALL1(__nm__, __f__, __a1__)                    __STX_C_CALL1(__nm__, (void*)__f__, (void*)(__a1__))
+#  define STX_C_CALL2(__nm__, __f__, __a1__, __a2__)            __STX_C_CALL2(__nm__, (void*)__f__, (void*)(__a1__), (void*)(__a2__))
+#  define STX_C_CALL3(__nm__, __f__, __a1__, __a2__, __a3__)    __STX_C_CALL3(__nm__, (void*)__f__, (void*)(__a1__), (void*)(__a2__), (void*)(__a3__))
 # endif
 
 /* #  define HFILE HANDLE */
 #  define HFILE FILE *
 /* #  define fileno(f) f */
 
-extern long ftell();
-extern long lseek();
+// extern long lseek();
 
-# define TELL(currentPosition,f,buffered)                       \
-    if (buffered) {                                             \
-	currentPosition = STX_C_CALL1( ftell, f);               \
-    } else {                                                    \
-	OBJ rA = __INST(readAhead);                             \
-	if (rA != nil) {                                        \
-	    __INST(readAhead) = nil;                            \
-	    currentPosition = STX_C_CALL3( lseek , fileno(f), -1L, SEEK_CUR);  \
-	} else {                                                \
-	    currentPosition = STX_C_CALL3( lseek, fileno(f), 0L, SEEK_CUR);    \
-	}                                                       \
-    }
 
 # define SEEK(ret,f,nP,buffered)                                \
     if (buffered) {                                             \
-	ret = STX_C_CALL3( fseek, f, nP, SEEK_SET);             \
+	ret = STX_C_CALL3( "fseek", fseek, f, nP, SEEK_SET);    \
     } else {                                                    \
 	OBJ rA = __INST(readAhead);                             \
 	if (rA != nil) {                                        \
 	    __INST(readAhead) = nil;                            \
 	}                                                       \
-	ret = STX_C_CALL3( lseek, fileno(f), nP, SEEK_SET);     \
+	ret = STX_C_CALL3( "lseek", lseek, fileno(f), nP, SEEK_SET); \
     }
 
 # define TOEND(ret,f,buffered)                                  \
     if (buffered) {                                             \
-	ret = STX_C_CALL3( fseek, f, 0L, SEEK_END);             \
+	ret = STX_C_CALL3( "fseek", fseek, f, 0L, SEEK_END);    \
     } else {                                                    \
 	OBJ rA = __INST(readAhead);                             \
 	if (rA != nil) {                                        \
 	    __INST(readAhead) = nil;                            \
 	}                                                       \
-	ret = STX_C_CALL3( lseek, fileno(f), 0L, SEEK_END);     \
+	ret = STX_C_CALL3( "lseek", lseek, fileno(f), 0L, SEEK_END); \
     }
 
 #endif /* WIN32 */
@@ -651,10 +639,21 @@
     long currentPosition;
 
     if (__INST(filePointer) != nil) {
-	f = __FILEVal(__INST(filePointer));
 	do {
+	    f = __FILEVal(__INST(filePointer));
 #ifdef WIN32
-	    TELL(currentPosition,f,__INST(buffered) == true);
+	    __threadErrno = 0;
+	    if (__INST(buffered) == true) {                             
+		currentPosition = STX_C_CALL1( "ftell", ftell, f);     
+	    } else {                                                   
+		OBJ rA = __INST(readAhead);                            
+		if (rA != nil) {                                       
+		    __INST(readAhead) = nil;                           
+		    currentPosition = STX_C_CALL3( "lseek", lseek, fileno(f), -1L, SEEK_CUR);
+		} else {                                              
+		    currentPosition = STX_C_CALL3( "lseek", lseek, fileno(f), 0L, SEEK_CUR); 
+		}                                                      
+	    }
 #else
 	    if (__INST(buffered) == true) {
 		currentPosition = ftell(f);
@@ -663,6 +662,7 @@
 	    }
 #endif
 	} while ((currentPosition < 0) && (__threadErrno == EINTR));
+
 	if (currentPosition >= 0) {
 	    /*
 	     * notice: Smalltalk index starts at 1
@@ -1020,7 +1020,7 @@
 # ifdef WIN32
 
 	do {
-	    f = STX_C_CALL2(fopen, (char *)__stringVal(pathName), (char *)__stringVal(openmode));
+	    f = STX_C_CALL2( "fopen", fopen, (char *)__stringVal(pathName), (char *)__stringVal(openmode));
 	} while ((f == NULL) && (__threadErrno == EINTR));
 
 # else /* not WIN32 */
@@ -1313,6 +1313,6 @@
 !FileStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.78 2001-12-05 14:57:07 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.79 2001-12-10 16:29:17 cg Exp $'
 ! !
 FileStream initialize!