summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-08-03 02:10:28 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-08-03 10:55:33 +0300
commit6a8582dc20eedeba90431fa1ab1ba2ee432f5bbc (patch)
tree47611614d13a6984741e5ac696bb9d443df1944c
parent91d06ae2fc6114d870ab76a05c1268a6ee417415 (diff)
libcamera: file: Turn MapFlag and OpenModeFlag into enum class
Add type safety by turning the MapFlag and OpenModeFlag enum into enum class. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r--include/libcamera/base/file.h13
-rw-r--r--src/ipa/vimc/vimc.cpp2
-rw-r--r--src/libcamera/base/file.cpp34
-rw-r--r--src/libcamera/ipa_manager.cpp2
-rw-r--r--src/libcamera/ipa_module.cpp6
-rw-r--r--test/file.cpp32
6 files changed, 46 insertions, 43 deletions
diff --git a/include/libcamera/base/file.h b/include/libcamera/base/file.h
index eebb2402..60851d38 100644
--- a/include/libcamera/base/file.h
+++ b/include/libcamera/base/file.h
@@ -23,14 +23,14 @@ namespace libcamera {
class File
{
public:
- enum MapFlag {
- MapNoOption = 0,
- MapPrivate = (1 << 0),
+ enum class MapFlag {
+ NoOption = 0,
+ Private = (1 << 0),
};
using MapFlags = Flags<MapFlag>;
- enum OpenModeFlag {
+ enum class OpenModeFlag {
NotOpen = 0,
ReadOnly = (1 << 0),
WriteOnly = (1 << 1),
@@ -62,7 +62,7 @@ public:
ssize_t write(const Span<const uint8_t> &data);
Span<uint8_t> map(off_t offset = 0, ssize_t size = -1,
- MapFlags flags = MapNoOption);
+ MapFlags flags = MapFlag::NoOption);
bool unmap(uint8_t *addr);
static bool exists(const std::string &name);
@@ -80,6 +80,9 @@ private:
std::map<void *, size_t> maps_;
};
+LIBCAMERA_FLAGS_ENABLE_OPERATORS(File::MapFlag)
+LIBCAMERA_FLAGS_ENABLE_OPERATORS(File::OpenModeFlag)
+
} /* namespace libcamera */
#endif /* __LIBCAMERA_BASE_FILE_H__ */
diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp
index 2f575853..0c0ee006 100644
--- a/src/ipa/vimc/vimc.cpp
+++ b/src/ipa/vimc/vimc.cpp
@@ -62,7 +62,7 @@ int IPAVimc::init(const IPASettings &settings)
<< settings.configurationFile;
File conf(settings.configurationFile);
- if (!conf.open(File::ReadOnly)) {
+ if (!conf.open(File::OpenModeFlag::ReadOnly)) {
LOG(IPAVimc, Error) << "Failed to open configuration file";
return -EINVAL;
}
diff --git a/src/libcamera/base/file.cpp b/src/libcamera/base/file.cpp
index 1c5879b3..ae4be1f9 100644
--- a/src/libcamera/base/file.cpp
+++ b/src/libcamera/base/file.cpp
@@ -45,9 +45,9 @@ LOG_DEFINE_CATEGORY(File)
/**
* \enum File::MapFlag
* \brief Flags for the File::map() function
- * \var File::MapNoOption
+ * \var File::MapFlag::NoOption
* \brief No option (used as default value)
- * \var File::MapPrivate
+ * \var File::MapFlag::Private
* \brief The memory region is mapped as private, changes are not reflected in
* the file constents
*/
@@ -60,13 +60,13 @@ LOG_DEFINE_CATEGORY(File)
/**
* \enum File::OpenModeFlag
* \brief Mode in which a file is opened
- * \var File::NotOpen
+ * \var File::OpenModeFlag::NotOpen
* \brief The file is not open
- * \var File::ReadOnly
+ * \var File::OpenModeFlag::ReadOnly
* \brief The file is open for reading
- * \var File::WriteOnly
+ * \var File::OpenModeFlag::WriteOnly
* \brief The file is open for writing
- * \var File::ReadWrite
+ * \var File::OpenModeFlag::ReadWrite
* \brief The file is open for reading and writing
*/
@@ -83,7 +83,7 @@ LOG_DEFINE_CATEGORY(File)
* before performing I/O operations.
*/
File::File(const std::string &name)
- : name_(name), fd_(-1), mode_(NotOpen), error_(0)
+ : name_(name), fd_(-1), mode_(OpenModeFlag::NotOpen), error_(0)
{
}
@@ -94,7 +94,7 @@ File::File(const std::string &name)
* setFileName().
*/
File::File()
- : fd_(-1), mode_(NotOpen), error_(0)
+ : fd_(-1), mode_(OpenModeFlag::NotOpen), error_(0)
{
}
@@ -173,8 +173,8 @@ bool File::open(File::OpenMode mode)
return false;
}
- int flags = static_cast<OpenMode::Type>(mode & ReadWrite) - 1;
- if (mode & WriteOnly)
+ int flags = static_cast<OpenMode::Type>(mode & OpenModeFlag::ReadWrite) - 1;
+ if (mode & OpenModeFlag::WriteOnly)
flags |= O_CREAT;
fd_ = ::open(name_.c_str(), flags, 0666);
@@ -214,7 +214,7 @@ void File::close()
::close(fd_);
fd_ = -1;
- mode_ = NotOpen;
+ mode_ = OpenModeFlag::NotOpen;
}
/**
@@ -374,8 +374,8 @@ ssize_t File::write(const Span<const uint8_t> &data)
* offset until the end of the file.
*
* The mapping memory protection is controlled by the file open mode, unless \a
- * flags contains MapPrivate in which case the region is mapped in read/write
- * mode.
+ * flags contains MapFlag::Private in which case the region is mapped in
+ * read/write mode.
*
* The error() status is updated.
*
@@ -398,14 +398,14 @@ Span<uint8_t> File::map(off_t offset, ssize_t size, File::MapFlags flags)
size -= offset;
}
- int mmapFlags = flags & MapPrivate ? MAP_PRIVATE : MAP_SHARED;
+ int mmapFlags = flags & MapFlag::Private ? MAP_PRIVATE : MAP_SHARED;
int prot = 0;
- if (mode_ & ReadOnly)
+ if (mode_ & OpenModeFlag::ReadOnly)
prot |= PROT_READ;
- if (mode_ & WriteOnly)
+ if (mode_ & OpenModeFlag::WriteOnly)
prot |= PROT_WRITE;
- if (flags & MapPrivate)
+ if (flags & MapFlag::Private)
prot |= PROT_WRITE;
void *map = mmap(NULL, size, prot, mmapFlags, fd_, offset);
diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp
index 55840896..771150ba 100644
--- a/src/libcamera/ipa_manager.cpp
+++ b/src/libcamera/ipa_manager.cpp
@@ -285,7 +285,7 @@ bool IPAManager::isSignatureValid([[maybe_unused]] IPAModule *ipa) const
}
File file{ ipa->path() };
- if (!file.open(File::ReadOnly))
+ if (!file.open(File::OpenModeFlag::ReadOnly))
return false;
Span<uint8_t> data = file.map();
diff --git a/src/libcamera/ipa_module.cpp b/src/libcamera/ipa_module.cpp
index adfb8d40..7c52ad8d 100644
--- a/src/libcamera/ipa_module.cpp
+++ b/src/libcamera/ipa_module.cpp
@@ -275,7 +275,7 @@ IPAModule::~IPAModule()
int IPAModule::loadIPAModuleInfo()
{
File file{ libPath_ };
- if (!file.open(File::ReadOnly)) {
+ if (!file.open(File::OpenModeFlag::ReadOnly)) {
LOG(IPAModule, Error) << "Failed to open IPA library: "
<< strerror(-file.error());
return file.error();
@@ -317,13 +317,13 @@ int IPAModule::loadIPAModuleInfo()
/* Load the signature. Failures are not fatal. */
File sign{ libPath_ + ".sign" };
- if (!sign.open(File::ReadOnly)) {
+ if (!sign.open(File::OpenModeFlag::ReadOnly)) {
LOG(IPAModule, Debug)
<< "IPA module " << libPath_ << " is not signed";
return 0;
}
- data = sign.map(0, -1, File::MapPrivate);
+ data = sign.map(0, -1, File::MapFlag::Private);
signature_.resize(data.size());
memcpy(signature_.data(), data.data(), data.size());
diff --git a/test/file.cpp b/test/file.cpp
index d768e323..9ac151c9 100644
--- a/test/file.cpp
+++ b/test/file.cpp
@@ -72,7 +72,7 @@ protected:
return TestFail;
}
- if (file.openMode() != File::NotOpen) {
+ if (file.openMode() != File::OpenModeFlag::NotOpen) {
cerr << "File has invalid open mode after construction"
<< endl;
return TestFail;
@@ -83,7 +83,7 @@ protected:
return TestFail;
}
- if (file.open(File::ReadWrite)) {
+ if (file.open(File::OpenModeFlag::ReadWrite)) {
cerr << "Opening unnamed file succeeded" << endl;
return TestFail;
}
@@ -111,7 +111,7 @@ protected:
return TestFail;
}
- if (file.openMode() != File::NotOpen) {
+ if (file.openMode() != File::OpenModeFlag::NotOpen) {
cerr << "Invalid file has invalid open mode after construction"
<< endl;
return TestFail;
@@ -122,7 +122,7 @@ protected:
return TestFail;
}
- if (file.open(File::ReadWrite)) {
+ if (file.open(File::OpenModeFlag::ReadWrite)) {
cerr << "Opening invalid file succeeded" << endl;
return TestFail;
}
@@ -140,7 +140,7 @@ protected:
return TestFail;
}
- if (file.openMode() != File::NotOpen) {
+ if (file.openMode() != File::OpenModeFlag::NotOpen) {
cerr << "Valid file has invalid open mode after construction"
<< endl;
return TestFail;
@@ -152,7 +152,7 @@ protected:
}
/* Test open and close. */
- if (!file.open(File::ReadWrite)) {
+ if (!file.open(File::OpenModeFlag::ReadWrite)) {
cerr << "Opening file failed" << endl;
return TestFail;
}
@@ -162,7 +162,7 @@ protected:
return TestFail;
}
- if (file.openMode() != File::ReadWrite) {
+ if (file.openMode() != File::OpenModeFlag::ReadWrite) {
cerr << "Open file has invalid open mode" << endl;
return TestFail;
}
@@ -174,7 +174,7 @@ protected:
return TestFail;
}
- if (file.openMode() != File::NotOpen) {
+ if (file.openMode() != File::OpenModeFlag::NotOpen) {
cerr << "Closed file has invalid open mode" << endl;
return TestFail;
}
@@ -187,7 +187,7 @@ protected:
return TestFail;
}
- file.open(File::ReadOnly);
+ file.open(File::OpenModeFlag::ReadOnly);
ssize_t size = file.size();
if (size <= 0) {
@@ -205,12 +205,12 @@ protected:
return TestFail;
}
- if (file.open(File::ReadOnly)) {
+ if (file.open(File::OpenModeFlag::ReadOnly)) {
cerr << "Read-only open succeeded on nonexistent file" << endl;
return TestFail;
}
- if (!file.open(File::WriteOnly)) {
+ if (!file.open(File::OpenModeFlag::WriteOnly)) {
cerr << "Write-only open failed on nonexistent file" << endl;
return TestFail;
}
@@ -238,7 +238,7 @@ protected:
return TestFail;
}
- file.open(File::ReadOnly);
+ file.open(File::OpenModeFlag::ReadOnly);
if (file.write(buffer) >= 0) {
cerr << "Write succeeded on read-only file" << endl;
@@ -247,7 +247,7 @@ protected:
file.close();
- file.open(File::ReadWrite);
+ file.open(File::OpenModeFlag::ReadWrite);
if (file.write({ buffer.data(), 9 }) != 9) {
cerr << "Write test failed" << endl;
@@ -278,7 +278,7 @@ protected:
/* Test mapping and unmapping. */
file.setFileName("/proc/self/exe");
- file.open(File::ReadOnly);
+ file.open(File::OpenModeFlag::ReadOnly);
Span<uint8_t> data = file.map();
if (data.empty()) {
@@ -316,9 +316,9 @@ protected:
/* Test private mapping. */
file.setFileName(fileName_);
- file.open(File::ReadWrite);
+ file.open(File::OpenModeFlag::ReadWrite);
- data = file.map(0, -1, File::MapPrivate);
+ data = file.map(0, -1, File::MapFlag::Private);
if (data.empty()) {
cerr << "Private mapping failed" << endl;
return TestFail;