diff --git a/level_zero/sysman/source/linux/fs_access.cpp b/level_zero/sysman/source/linux/fs_access.cpp index 657a33df01..f2c9d9dfdd 100644 --- a/level_zero/sysman/source/linux/fs_access.cpp +++ b/level_zero/sysman/source/linux/fs_access.cpp @@ -199,6 +199,15 @@ bool FsAccess::fileExists(const std::string file) { return true; } +ze_result_t FsAccess::getFileMode(const std::string file, ::mode_t &mode) { + struct stat sb; + if (0 != stat(file.c_str(), &sb)) { + return getResult(errno); + } + mode = sb.st_mode; + return ZE_RESULT_SUCCESS; +} + ze_result_t FsAccess::readSymLink(const std::string path, std::string &val) { // returns the value of symlink at path char buf[PATH_MAX]; @@ -407,6 +416,11 @@ ze_result_t SysfsAccess::canWrite(const std::string file) { return FsAccess::canWrite(fullPath(file)); } +ze_result_t SysfsAccess::getFileMode(const std::string file, ::mode_t &mode) { + // Prepend sysfs directory path and call the base getFileMode + return FsAccess::getFileMode(fullPath(file), mode); +} + ze_result_t SysfsAccess::read(const std::string file, std::string &val) { // Prepend sysfs directory path and call the base read return FsAccess::read(fullPath(file).c_str(), val); diff --git a/level_zero/sysman/source/linux/fs_access.h b/level_zero/sysman/source/linux/fs_access.h index 7ecacfa0d7..595731fb0f 100644 --- a/level_zero/sysman/source/linux/fs_access.h +++ b/level_zero/sysman/source/linux/fs_access.h @@ -33,6 +33,7 @@ class FsAccess { virtual ze_result_t canRead(const std::string file); virtual ze_result_t canWrite(const std::string file); + virtual ze_result_t getFileMode(const std::string file, ::mode_t &mode); virtual ze_result_t read(const std::string file, uint64_t &val); virtual ze_result_t read(const std::string file, std::string &val); @@ -89,6 +90,7 @@ class SysfsAccess : protected FsAccess { ze_result_t canRead(const std::string file) override; ze_result_t canWrite(const std::string file) override; + ze_result_t getFileMode(const std::string file, ::mode_t &mode) override; ze_result_t read(const std::string file, std::string &val) override; ze_result_t read(const std::string file, int32_t &val) override; diff --git a/level_zero/tools/source/sysman/linux/fs_access.cpp b/level_zero/tools/source/sysman/linux/fs_access.cpp index 395eecf6ad..1b8e833b39 100644 --- a/level_zero/tools/source/sysman/linux/fs_access.cpp +++ b/level_zero/tools/source/sysman/linux/fs_access.cpp @@ -198,6 +198,15 @@ bool FsAccess::fileExists(const std::string file) { return true; } +ze_result_t FsAccess::getFileMode(const std::string file, ::mode_t &mode) { + struct stat sb; + if (0 != stat(file.c_str(), &sb)) { + return getResult(errno); + } + mode = sb.st_mode; + return ZE_RESULT_SUCCESS; +} + ze_result_t FsAccess::readSymLink(const std::string path, std::string &val) { // returns the value of symlink at path char buf[PATH_MAX]; @@ -406,6 +415,11 @@ ze_result_t SysfsAccess::canWrite(const std::string file) { return FsAccess::canWrite(fullPath(file)); } +ze_result_t SysfsAccess::getFileMode(const std::string file, ::mode_t &mode) { + // Prepend sysfs directory path and call the base getFileMode + return FsAccess::getFileMode(fullPath(file), mode); +} + ze_result_t SysfsAccess::read(const std::string file, std::string &val) { // Prepend sysfs directory path and call the base read return FsAccess::read(fullPath(file).c_str(), val); diff --git a/level_zero/tools/source/sysman/linux/fs_access.h b/level_zero/tools/source/sysman/linux/fs_access.h index 55604f034f..5dd85e4203 100644 --- a/level_zero/tools/source/sysman/linux/fs_access.h +++ b/level_zero/tools/source/sysman/linux/fs_access.h @@ -32,6 +32,7 @@ class FsAccess { virtual ze_result_t canRead(const std::string file); virtual ze_result_t canWrite(const std::string file); + virtual ze_result_t getFileMode(const std::string file, ::mode_t &mode); virtual ze_result_t read(const std::string file, uint64_t &val); virtual ze_result_t read(const std::string file, std::string &val); @@ -88,6 +89,7 @@ class SysfsAccess : protected FsAccess { ze_result_t canRead(const std::string file) override; ze_result_t canWrite(const std::string file) override; + ze_result_t getFileMode(const std::string file, ::mode_t &mode) override; ze_result_t read(const std::string file, std::string &val) override; ze_result_t read(const std::string file, int32_t &val) override;