mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-25 01:25:08 +03:00
libcamera: file_descriptor: Add a function to retrieve the inode
The inode is useful to check if two file descriptors refer to the same file. Add a function to retrieve it. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
This commit is contained in:
parent
f9c1a40e21
commit
8e18f8d45f
2 changed files with 29 additions and 0 deletions
|
@ -8,6 +8,7 @@
|
||||||
#define __LIBCAMERA_FILE_DESCRIPTOR_H__
|
#define __LIBCAMERA_FILE_DESCRIPTOR_H__
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
namespace libcamera {
|
namespace libcamera {
|
||||||
|
|
||||||
|
@ -27,6 +28,8 @@ public:
|
||||||
int fd() const { return fd_ ? fd_->fd() : -1; }
|
int fd() const { return fd_ ? fd_->fd() : -1; }
|
||||||
FileDescriptor dup() const;
|
FileDescriptor dup() const;
|
||||||
|
|
||||||
|
ino_t inode() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class Descriptor
|
class Descriptor
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
#include <libcamera/file_descriptor.h>
|
#include <libcamera/file_descriptor.h>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
@ -221,6 +223,30 @@ FileDescriptor FileDescriptor::dup() const
|
||||||
return FileDescriptor(fd());
|
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)
|
FileDescriptor::Descriptor::Descriptor(int fd, bool duplicate)
|
||||||
{
|
{
|
||||||
if (!duplicate) {
|
if (!duplicate) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue