fseek(fp, 0, SEEK_CUR) is expensive

even in cases where it looks like it could be optimized