rem: (const char *)buf += res;
add: buf = ((const char *)buf) + res;
context: apr_ssize_t iconv_bwrite(void *handle, const void *buf, apr_size_t insize){#define stream ((iconv_stream *)handle)    apr_ssize_t res = 0;    apr_size_t left, size = insize;    if (!buf)        return iconv_write(handle, NULL, 0);    if (stream->buffer && stream->buf_ptr > stream->buffer) {        do {            left = stream->buffer + buf_size - stream->buf_ptr;            if (!left) {        	errno = E2BIG;                return -1;            }            if (left > size)                left = size;            memcpy(stream->buf_ptr, buf, left);            (const char *)buf += left;            size -= left;            stream->buf_ptr += left;            res = iconv_write(handle, stream->buffer,                              stream->buf_ptr - stream->buffer);            if (res < 0) {                if (errno != EINVAL)                    return -1;                res = 0;            }            left = stream->buf_ptr - (stream->buffer + res);            if (!res)                break;            if (left > 0)                memmove(stream->buffer, stream->buffer + res, left);            stream->buf_ptr -= res;        } while (size && left);        if (!size)            return insize;    }    do {        res = iconv_write(handle, buf, size);        if (res <= 0) {            if (errno != EINVAL)                return -1;            res = 0;        }        (const char *)buf += res;        size -= res;    } while (size && res);    if (!size)        return insize;    if (size > buf_size)	return -1;    if (!stream->buffer) {        if (!(stream->buffer = malloc(buf_size)))            return -1;    }    memcpy(stream->buffer, buf, size);    stream->buf_ptr = stream->buffer + size;    return insize;#undef stream}