diff -r b12e2e6a84d7 -r 10016cc16511 FileStream.st --- 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 # include /* */ +# include # 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!