struct unicode_emit_param {
wchar_t *output;
int outlen;
+ int writtenlen;
const wchar_t *errstr;
int errlen;
int stopped;
outlen = 1;
}
- if (param->outlen >= outlen) {
+ if (param->outlen < 0 || param->outlen >= outlen) {
while (outlen > 0) {
- *param->output++ = *p++;
- param->outlen--;
+ if (param->output)
+ *param->output++ = *p++;
+ if (param->outlen > 0)
+ param->outlen--;
outlen--;
+ param->writtenlen++;
}
} else {
param->stopped = 1;
param.outlen = outlen;
param.errstr = errstr;
param.errlen = errlen;
+ param.writtenlen = 0;
param.stopped = 0;
if (state)
localstate = *state; /* structure copy */
while (*inlen > 0) {
- int lenbefore = param.output - output;
+ int lenbefore = param.writtenlen;
spec->read(spec, (unsigned char)**input, &localstate,
unicode_emit, ¶m);
if (param.stopped) {
(*inlen)--;
}
- return param.output - output;
+ return param.writtenlen;
}