shmat() return values?

Marc Olzheim marcolz at stack.nl
Tue May 27 08:02:18 UTC 2008


On Mon, May 26, 2008 at 08:14:38PM +0300, Krassimir Slavchev wrote:
> Hello,
> 
> When I try:
> 
> if ((*shm = shmat(shmid, NULL, 0)) == -1)
> 
> The gcc complains with:
> warning: comparison between pointer and integer
> 
> shmat() is declared in shm.h as:
> void *shmat(int, const void *, int);
> 
> but 'man 4 shmat;
> 
> RETURN VALUES
>      Upon success, shmat() returns the address where the segment is
> attached;
>      otherwise, -1 is returned and errno is set to indicate the error.
> 
> 
> What is the correct return value on failure, -1 or NULL?
> I think it should be NULL?

The return value is a void pointer, with value equivalent to -1,
so (void *)-1

So you can replace it with:

if ((*shm = shmat(shmid, NULL, 0)) == (void*)-1)

Marc


More information about the freebsd-stable mailing list