lizard_free(struct lizard_buffer *buf)
{
munmap(buf->start, buf->len + PAGE_SIZE);
- sigaction(SIGSEGV, buf->old_sigsegv_handler, NULL);
+ unhandle_signal(SIGSEGV, buf->old_sigsegv_handler);
xfree(buf->old_sigsegv_handler);
xfree(buf);
}
}
volatile sh_sighandler_t old_handler = signal_handler[SIGSEGV];
signal_handler[SIGSEGV] = sigsegv_handler;
- int len, err;
+ int len;
if (!setjmp(safe_decompress_jump))
{
buf->ptr = buf->start + buf->len - lock_offset;
len = lizard_decompress(in, buf->ptr);
- err = errno;
}
else
{
buf->ptr = NULL;
len = -1;
- err = EFAULT;
+ errno = EFAULT;
}
signal_handler[SIGSEGV] = old_handler;
- errno = err;
return len;
}