[Python-Dev] TELL64
Guido van Rossum
guido@python.org
Mon, 15 Jan 2001 23:08:46 -0500
Looking at the code (in _portable_fseek()) that uses TELL64, I don't
understand why it can't use fgetpos(). That code is used only when
fpos_t -- the type used by fgetpos() and fsetpos() -- is 64-bit.
Trent, you wrote that code. Why wouldn't this work just as well?
(your code):
if ((pos = TELL64(fileno(fp))) == -1L)
return -1;
(my suggestion):
if (fgetpos(fp, &pos) != 0)
return -1;
It can't be because fgetpos() doesn't exist or is otherwise unusable,
because the SEEK_CUR case uses it.
We also know that offset is 8-bit capable (the #if around the
declaration of _portable_fseek() ensures that).
I would even go as far as to collapse the entire switch as follows:
fpos_t pos;
switch (whence) {
case SEEK_END:
/* do a "no-op" seek first to sync the buffering so that
the low-level tell() can be used correctly */
if (fseek(fp, 0, SEEK_END) != 0)
return -1;
/* fall through */
case SEEK_CUR:
if (fgetpos(fp, &pos) != 0)
return -1;
offset += pos;
break;
/* case SEEK_SET: break; */
}
return fsetpos(fp, &offset);
--Guido van Rossum (home page: http://www.python.org/~guido/)