Re: return negative number for unsigned long function in kernel

H. Peter Anvin
2007-03-07T00:39:26Z

Chen, Dongliang wrote:
> There are lots of functions in the Linux kernel that are declared as
> unsigned long, but the return value is negative integer while error
> occurred. An example of these functions is do_mmap_pgoff in mm/mmap.c,
> which is defined as:
>
> unsigned long do_mmap_pgoff(....)
>
> In this function, it returns -ENODEV, -EPERM, -ENOMEM, -EINVAL, -EAGAIN,
> -EACCESS depends on the error type. My question is how should the caller
> perform error check based on the return value?
>

If you want to test for errorness, you could use the macro
IS_ERR_VALUE(). Unfortunately the macro isn't all that safe, in that it
will give you the wrong answer if it's ever used on something that
*isn't* an unsigned long.

-hpa