--- 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!