optimize seek function for memory streams
[musl] / src / stdio / open_wmemstream.c
index 41b92d2..0db7741 100644 (file)
@@ -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;