syscall(3) returns long, not int

This may be crucial on 64-bit architectures when doing stuff
like syscall(__NR_mremap, ...) since sizeof(void*) > sizeof(int).