[libcamera-devel] [PATCH v5 4/4] libcamera: v4l2: Standardize return value checks

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Jun 19 14:44:54 CEST 2019


Hi Jacopo,

On Wed, Jun 19, 2019 at 02:39:56PM +0200, Jacopo Mondi wrote:
> On Wed, Jun 19, 2019 at 03:30:18PM +0300, Laurent Pinchart wrote:
> > On Wed, Jun 19, 2019 at 01:05:48PM +0200, Jacopo Mondi wrote:
> > > Standardize all return values checks on the 'if (ret)' style where
> > > appropriate.
> >
> > Just curious, why did you choose (ret) over (ret < 0) ? I would have
> > gone the other way around :-)
> >
> 
> I would say tastes ? And it makes clear that the only valid result is
> 0, but that does not depend on the caller.
> 
> Should I drop the patch?

I'm not opposed to the patch, but I'm wondering if we should make this
library-wide (in further patches possibly) and document it in our coding
style.

Note that a few ioctls return a non-negative value other than zero on
success. According to the man page errors are always indicated by -1.

> > >
> > > No functional changes intended.
> > >
> > > Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> > > ---
> > >  src/libcamera/v4l2_subdevice.cpp   |  2 +-
> > >  src/libcamera/v4l2_videodevice.cpp | 18 +++++++++---------
> > >  2 files changed, 10 insertions(+), 10 deletions(-)
> > >
> > > diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp
> > > index d0e1d717b26c..7f887e377c97 100644
> > > --- a/src/libcamera/v4l2_subdevice.cpp
> > > +++ b/src/libcamera/v4l2_subdevice.cpp
> > > @@ -340,7 +340,7 @@ int V4L2Subdevice::setSelection(unsigned int pad, unsigned int target,
> > >  	sel.r.height = rect->h;
> > >
> > >  	int ret = ioctl(VIDIOC_SUBDEV_S_SELECTION, &sel);
> > > -	if (ret < 0) {
> > > +	if (ret) {
> > >  		LOG(V4L2, Error)
> > >  			<< "Unable to set rectangle " << target << " on pad "
> > >  			<< pad << ": " << strerror(-ret);
> > > diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
> > > index bcbac79e82e9..d1409fcafa04 100644
> > > --- a/src/libcamera/v4l2_videodevice.cpp
> > > +++ b/src/libcamera/v4l2_videodevice.cpp
> > > @@ -305,11 +305,11 @@ int V4L2VideoDevice::open()
> > >  	int ret;
> > >
> > >  	ret = V4L2Device::open(O_RDWR | O_NONBLOCK);
> > > -	if (ret < 0)
> > > +	if (ret)
> > >  		return ret;
> > >
> > >  	ret = ioctl(VIDIOC_QUERYCAP, &caps_);
> > > -	if (ret < 0) {
> > > +	if (ret) {
> > >  		LOG(V4L2, Error)
> > >  			<< "Failed to query device capabilities: "
> > >  			<< strerror(-ret);
> > > @@ -633,7 +633,7 @@ int V4L2VideoDevice::requestBuffers(unsigned int count)
> > >  	rb.memory = memoryType_;
> > >
> > >  	ret = ioctl(VIDIOC_REQBUFS, &rb);
> > > -	if (ret < 0) {
> > > +	if (ret) {
> > >  		LOG(V4L2, Error)
> > >  			<< "Unable to request " << count << " buffers: "
> > >  			<< strerror(-ret);
> > > @@ -684,7 +684,7 @@ int V4L2VideoDevice::exportBuffers(BufferPool *pool)
> > >  		buf.m.planes = planes;
> > >
> > >  		ret = ioctl(VIDIOC_QUERYBUF, &buf);
> > > -		if (ret < 0) {
> > > +		if (ret) {
> > >  			LOG(V4L2, Error)
> > >  				<< "Unable to query buffer " << i << ": "
> > >  				<< strerror(-ret);
> > > @@ -736,7 +736,7 @@ int V4L2VideoDevice::createPlane(Buffer *buffer, unsigned int planeIndex,
> > >  	expbuf.flags = O_RDWR;
> > >
> > >  	ret = ioctl(VIDIOC_EXPBUF, &expbuf);
> > > -	if (ret < 0) {
> > > +	if (ret) {
> > >  		LOG(V4L2, Error)
> > >  			<< "Failed to export buffer: " << strerror(-ret);
> > >  		return ret;
> > > @@ -927,7 +927,7 @@ int V4L2VideoDevice::queueBuffer(Buffer *buffer)
> > >  	LOG(V4L2, Debug) << "Queueing buffer " << buf.index;
> > >
> > >  	ret = ioctl(VIDIOC_QBUF, &buf);
> > > -	if (ret < 0) {
> > > +	if (ret) {
> > >  		LOG(V4L2, Error)
> > >  			<< "Failed to queue buffer " << buf.index << ": "
> > >  			<< strerror(-ret);
> > > @@ -963,7 +963,7 @@ Buffer *V4L2VideoDevice::dequeueBuffer()
> > >  	}
> > >
> > >  	ret = ioctl(VIDIOC_DQBUF, &buf);
> > > -	if (ret < 0) {
> > > +	if (ret) {
> > >  		LOG(V4L2, Error)
> > >  			<< "Failed to dequeue buffer: " << strerror(-ret);
> > >  		return nullptr;
> > > @@ -1022,7 +1022,7 @@ int V4L2VideoDevice::streamOn()
> > >  	int ret;
> > >
> > >  	ret = ioctl(VIDIOC_STREAMON, &bufferType_);
> > > -	if (ret < 0) {
> > > +	if (ret) {
> > >  		LOG(V4L2, Error)
> > >  			<< "Failed to start streaming: " << strerror(-ret);
> > >  		return ret;
> > > @@ -1044,7 +1044,7 @@ int V4L2VideoDevice::streamOff()
> > >  	int ret;
> > >
> > >  	ret = ioctl(VIDIOC_STREAMOFF, &bufferType_);
> > > -	if (ret < 0) {
> > > +	if (ret) {
> > >  		LOG(V4L2, Error)
> > >  			<< "Failed to stop streaming: " << strerror(-ret);
> > >  		return ret;

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list