public int raw_seek(int pos) {
        if (!seekable) {
            return (-1); // don't dump machine if we can't seek
        }
        if (pos < 0 || pos > offsets[links]) {
            //goto seek_error;
            pcm_offset = -1;
            decode_clear();
            return -1;
        }

        // clear out decoding machine state
        pcm_offset = -1;
        decode_clear();

        // seek
        seek_helper(pos);

        // we need to make sure the pcm_offset is set.  We use the
        // _fetch_packet helper to process one packet with readp set, then
        // call it until it returns '0' with readp not set (the last packet
        // from a page has the 'granulepos' field set, and that's how the
        // helper updates the offset
        switch (process_packet(1)) {
            case 0:
                // oh, eof. There are no packets remaining.  Set the pcm offset to
                // the end of file
                pcm_offset = pcm_total(-1);
                return (0);
            case -1:
                // error! missing data or invalid bitstream structure
                //goto seek_error;
                pcm_offset = -1;
                decode_clear();
                return -1;
            default:
                // all OK
                break;
        }
        while (true) {
            switch (process_packet(0)) {
                case 0:
                    // the offset is set.  If it's a bogus bitstream with no offset
                    // information, it's not but that's not our fault.  We still run
                    // gracefully, we're just missing the offset
                    return (0);
                case -1:
                    // error! missing data or invalid bitstream structure
                    //goto seek_error;
                    pcm_offset = -1;
                    decode_clear();
                    return -1;
                default:
                    // continue processing packets
                    break;
            }
        }

        // seek_error:
        // dump the machine so we're in a known state
        //pcm_offset=-1;
        //decode_clear();
        //return -1;
    }