[libcamera-devel] [PATCH 3/2] libcamera: file: Use Flags<> class for map flags
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sat Jul 25 01:19:09 CEST 2020
Use the newly introduced Flags<> class to store a bitfield of
File::MapFlag in a type-safe way.
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
include/libcamera/internal/file.h | 9 +++++++--
src/libcamera/file.cpp | 11 ++++++++---
src/libcamera/ipa_module.cpp | 2 +-
test/file.cpp | 2 +-
4 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/include/libcamera/internal/file.h b/include/libcamera/internal/file.h
index 9b6d011f5e9d..d6baacaaa551 100644
--- a/include/libcamera/internal/file.h
+++ b/include/libcamera/internal/file.h
@@ -11,6 +11,7 @@
#include <string>
#include <sys/types.h>
+#include <libcamera/flags.h>
#include <libcamera/span.h>
namespace libcamera {
@@ -18,11 +19,13 @@ namespace libcamera {
class File
{
public:
- enum MapFlag {
+ enum class MapFlag {
MapNoOption = 0,
MapPrivate = (1 << 0),
};
+ using MapFlags = Flags<MapFlag>;
+
enum OpenMode {
NotOpen = 0,
ReadOnly = (1 << 0),
@@ -56,7 +59,7 @@ public:
ssize_t write(const Span<const uint8_t> &data);
Span<uint8_t> map(off_t offset = 0, ssize_t size = -1,
- MapFlag flags = MapNoOption);
+ MapFlags flags = MapFlag::MapNoOption);
bool unmap(uint8_t *addr);
static bool exists(const std::string &name);
@@ -72,6 +75,8 @@ private:
std::map<void *, size_t> maps_;
};
+LIBCAMERA_FLAGS_ENABLE_OPERATORS(File::MapFlag)
+
} /* namespace libcamera */
#endif /* __LIBCAMERA_INTERNAL_FILE_H__ */
diff --git a/src/libcamera/file.cpp b/src/libcamera/file.cpp
index 04b0cb61a1bf..de944deb8667 100644
--- a/src/libcamera/file.cpp
+++ b/src/libcamera/file.cpp
@@ -52,6 +52,11 @@ LOG_DEFINE_CATEGORY(File);
* the file constents
*/
+/**
+ * \typedef File::MapFlags
+ * \brief An OR combination of File::MapFlag values
+ */
+
/**
* \enum File::OpenMode
* \brief Mode in which a file is opened
@@ -371,7 +376,7 @@ ssize_t File::write(const Span<const uint8_t> &data)
*
* \return The mapped memory on success, or an empty span otherwise
*/
-Span<uint8_t> File::map(off_t offset, ssize_t size, enum File::MapFlag flags)
+Span<uint8_t> File::map(off_t offset, ssize_t size, File::MapFlags flags)
{
if (!isOpen()) {
error_ = -EBADF;
@@ -388,14 +393,14 @@ Span<uint8_t> File::map(off_t offset, ssize_t size, enum File::MapFlag flags)
size -= offset;
}
- int mmapFlags = flags & MapPrivate ? MAP_PRIVATE : MAP_SHARED;
+ int mmapFlags = flags & MapFlag::MapPrivate ? MAP_PRIVATE : MAP_SHARED;
int prot = 0;
if (mode_ & ReadOnly)
prot |= PROT_READ;
if (mode_ & WriteOnly)
prot |= PROT_WRITE;
- if (flags & MapPrivate)
+ if (flags & MapFlag::MapPrivate)
prot |= PROT_WRITE;
void *map = mmap(NULL, size, prot, mmapFlags, fd_, offset);
diff --git a/src/libcamera/ipa_module.cpp b/src/libcamera/ipa_module.cpp
index de512a7f3a0d..c1eaf0bbb792 100644
--- a/src/libcamera/ipa_module.cpp
+++ b/src/libcamera/ipa_module.cpp
@@ -323,7 +323,7 @@ int IPAModule::loadIPAModuleInfo()
return 0;
}
- data = sign.map(0, -1, File::MapPrivate);
+ data = sign.map(0, -1, File::MapFlag::MapPrivate);
signature_.resize(data.size());
memcpy(signature_.data(), data.data(), data.size());
diff --git a/test/file.cpp b/test/file.cpp
index f458f355ccad..9ea83d5b2cc4 100644
--- a/test/file.cpp
+++ b/test/file.cpp
@@ -313,7 +313,7 @@ protected:
file.setFileName(fileName_);
file.open(File::ReadWrite);
- data = file.map(0, -1, File::MapPrivate);
+ data = file.map(0, -1, File::MapFlag::MapPrivate);
if (data.empty()) {
cerr << "Private mapping failed" << endl;
return TestFail;
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list