libcamera: base: file_descriptor: Move inode() function to frame_buffer.cpp

The inode() function has always been a bit of an outcast in the
FileDescriptor class, as it's not related to the core feature provided
by FileDescriptor, a shared ownership wrapper around file descriptors.
As it's only used in the FrameBuffer implementation, move it to
frame_buffer.cpp as a static function.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Laurent Pinchart
2021-11-28 05:20:14 +02:00
parent 6c6acaa7ea
commit 1546a74e64
3 changed files with 26 additions and 30 deletions
-25
View File
@@ -8,7 +8,6 @@
#include <libcamera/base/file_descriptor.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <utility>
@@ -223,30 +222,6 @@ FileDescriptor FileDescriptor::dup() const
return FileDescriptor(fd());
}
/**
* \brief Retrieve the file descriptor inode
*
* \todo Should this move to the File class ?
*
* \return The file descriptor inode on success, or 0 on error
*/
ino_t FileDescriptor::inode() const
{
if (!isValid())
return 0;
struct stat st;
int ret = fstat(fd_->fd(), &st);
if (ret < 0) {
ret = -errno;
LOG(FileDescriptor, Fatal)
<< "Failed to fstat() fd: " << strerror(-ret);
return 0;
}
return st.st_ino;
}
FileDescriptor::Descriptor::Descriptor(int fd, bool duplicate)
{
if (!duplicate) {
+26 -2
View File
@@ -8,6 +8,9 @@
#include <libcamera/framebuffer.h>
#include "libcamera/internal/framebuffer.h"
#include <sys/stat.h>
#include <libcamera/base/file_descriptor.h>
#include <libcamera/base/log.h>
/**
@@ -207,6 +210,27 @@ FrameBuffer::Private::Private()
* \brief The plane length in bytes
*/
namespace {
ino_t fileDescriptorInode(const FileDescriptor &fd)
{
if (!fd.isValid())
return 0;
struct stat st;
int ret = fstat(fd.fd(), &st);
if (ret < 0) {
ret = -errno;
LOG(Buffer, Fatal)
<< "Failed to fstat() fd: " << strerror(-ret);
return 0;
}
return st.st_ino;
}
} /* namespace */
/**
* \brief Construct a FrameBuffer with an array of planes
* \param[in] planes The frame memory planes
@@ -236,8 +260,8 @@ FrameBuffer::FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie)
*/
if (plane.fd.fd() != planes_[0].fd.fd()) {
if (!inode)
inode = planes_[0].fd.inode();
if (plane.fd.inode() != inode) {
inode = fileDescriptorInode(planes_[0].fd);
if (fileDescriptorInode(plane.fd) != inode) {
isContiguous = false;
break;
}