[libcamera-devel,v2,5/5] libcamera: file: Turn MapFlag and OpenModeFlag into enum class
diff mbox series

Message ID 20210725171827.23643-6-laurent.pinchart@ideasonboard.com
State Accepted
Headers show
Series
  • libcamera: Add type-safe enum-based flags
Related show

Commit Message

Laurent Pinchart July 25, 2021, 5:18 p.m. UTC
Add type safety by turning the MapFlag and OpenModeFlag enum into enum
class.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 include/libcamera/base/file.h | 13 ++++++++-----
 src/ipa/vimc/vimc.cpp         |  2 +-
 src/libcamera/base/file.cpp   | 34 +++++++++++++++++-----------------
 src/libcamera/ipa_manager.cpp |  2 +-
 src/libcamera/ipa_module.cpp  |  6 +++---
 test/file.cpp                 | 32 ++++++++++++++++----------------
 6 files changed, 46 insertions(+), 43 deletions(-)

Comments

Jacopo Mondi July 26, 2021, 9:55 a.m. UTC | #1
On Sun, Jul 25, 2021 at 08:18:27PM +0300, Laurent Pinchart wrote:
> Add type safety by turning the MapFlag and OpenModeFlag enum into enum
> class.

Ah

>
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
>  include/libcamera/base/file.h | 13 ++++++++-----
>  src/ipa/vimc/vimc.cpp         |  2 +-
>  src/libcamera/base/file.cpp   | 34 +++++++++++++++++-----------------
>  src/libcamera/ipa_manager.cpp |  2 +-
>  src/libcamera/ipa_module.cpp  |  6 +++---
>  test/file.cpp                 | 32 ++++++++++++++++----------------
>  6 files changed, 46 insertions(+), 43 deletions(-)
>
> diff --git a/include/libcamera/base/file.h b/include/libcamera/base/file.h
> index eebb24024025..60851d385587 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 2f5758539a0e..0c0ee006fdc7 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 0860457421a1..376bf2ead382 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 558408969c31..771150ba0b35 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 adfb8d407697..7c52ad8d5796 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 d768e3235b8c..9ac151c944b5 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);

Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>

Thanks
  j

>  		if (data.empty()) {
>  			cerr << "Private mapping failed" << endl;
>  			return TestFail;
> --
> Regards,
>
> Laurent Pinchart
>

Patch
diff mbox series

diff --git a/include/libcamera/base/file.h b/include/libcamera/base/file.h
index eebb24024025..60851d385587 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 2f5758539a0e..0c0ee006fdc7 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 0860457421a1..376bf2ead382 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 558408969c31..771150ba0b35 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 adfb8d407697..7c52ad8d5796 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 d768e3235b8c..9ac151c944b5 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;