> Here 'unsigned long' is just a convenient stand-in for "generic register-sized argument".
That wouldn't be register-sized on x86 would it?
That wouldn't be register-sized on x86 would it?
Therefore, Linux-only code (including the Linux kernel itself) commonly uses "long" or "unsigned long" to mean "register-sized" and "large enough to fit a pointer"; portable code normally uses "size_t" or "uintptr_t" for that.
Edit: but of course you meant OS with system, not hardware architecture :)