else
{
bflush(f);
- f->seek(f, pos, SEEK_SET);
+ if (!f->seek || !f->seek(f, pos, SEEK_SET))
+ die("bsetpos: stream not seekable");
}
}
return bsetpos(f, btell(f) + pos);
case SEEK_END:
bflush(f);
- f->seek(f, pos, SEEK_END);
+ if (!f->seek || !f->seek(f, pos, SEEK_END))
+ die("bseek: stream not seekable");
break;
default:
die("bseek: invalid whence=%d", whence);
if (!f)
return 0;
sh_off_t pos = btell(f);
- bseek(f, 0, SEEK_END);
+ bflush(f);
+ if (!f->seek(f, pos, SEEK_END))
+ return -1;
sh_off_t len = btell(f);
bsetpos(f, pos);
return len;