Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 May 2008 09:45:18 +0200
From:      Marc Olzheim <marcolz@stack.nl>
To:        Krassimir Slavchev <krassi@bulinfo.net>
Cc:        FreeBSD <freebsd-stable@freebsd.org>
Subject:   Re: shmat() return values?
Message-ID:  <20080527074518.GA2593@zlo.nu>
In-Reply-To: <483AEFFE.8080302@bulinfo.net>
References:  <483AEFFE.8080302@bulinfo.net>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080527074518.GA2593>