|
@@ -14,21 +14,12 @@ static off_t wms_seek(FILE *f, off_t off, int whence)
|
|
|
{
|
|
|
ssize_t base;
|
|
|
struct cookie *c = f->cookie;
|
|
|
- switch (whence) {
|
|
|
- case SEEK_SET:
|
|
|
- base = 0;
|
|
|
- break;
|
|
|
- case SEEK_CUR:
|
|
|
- base = c->pos;
|
|
|
- break;
|
|
|
- case SEEK_END:
|
|
|
- base = c->len;
|
|
|
- break;
|
|
|
- default:
|
|
|
- fail:
|
|
|
+ if (whence>2U) {
|
|
|
+fail:
|
|
|
errno = EINVAL;
|
|
|
return -1;
|
|
|
}
|
|
|
+ base = (size_t [3]){0, c->pos, c->len}[whence];
|
|
|
if (off < -base || off > SSIZE_MAX/4-base) goto fail;
|
|
|
memset(&c->mbs, 0, sizeof c->mbs);
|
|
|
return c->pos = base+off;
|