etk/etk/fileSystem/Permissions.cpp

210 lines
4.7 KiB
C++

/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <etk/os/FSNodeRight.hpp>
#include <etk/stdTools.hpp>
#include <etk/typeInfo.hpp>
// Right Flags :
enum {
right_other_execute = 1 << 0,
right_other_write = 1 << 1,
right_other_read = 1 << 2,
right_group_execute = 1 << 3,
right_group_write = 1 << 4,
right_group_read = 1 << 5,
right_user_execute = 1 << 6,
right_user_write = 1 << 7,
right_user_read = 1 << 8,
};
ETK_DECLARE_TYPE(etk::filesystem::Permissions);
etk::filesystem::Permissions::FSNodeRight(int16_t _newRight) :
m_rights(_newRight&0x01FF) {
}
etk::filesystem::Permissions& etk::filesystem::Permissions::operator= (const etk::filesystem::Permissions &_obj ) {
m_rights = _obj.m_rights;
return *this;
}
etk::filesystem::Permissions& etk::filesystem::Permissions::operator= (const int32_t _newVal) {
m_rights = _newVal&0x01FF;
return *this;
}
void etk::filesystem::Permissions::clear() {
m_rights = 0;
}
bool etk::filesystem::Permissions::isUserReadable() const {
return ((m_rights&right_user_read)!=0)?true:false;
}
bool etk::filesystem::Permissions::isUserWritable() const {
return ((m_rights&right_user_write)!=0)?true:false;
}
bool etk::filesystem::Permissions::isUserRunable() const {
return ((m_rights&right_user_execute)!=0)?true:false;
}
void etk::filesystem::Permissions::setUserReadable(bool _newStatus) {
// reset the flag :
m_rights &= (0xFFFFFFFF - right_user_read);
if (_newStatus == true) {
m_rights |= right_user_read;
}
}
void etk::filesystem::Permissions::setUserWritable(bool _newStatus) {
// reset the flag :
m_rights &= (0xFFFFFFFF - right_user_write);
if (_newStatus == true) {
m_rights |= right_user_write;
}
}
void etk::filesystem::Permissions::setUserRunable(bool _newStatus) {
// reset the flag :
m_rights &= (0xFFFFFFFF - right_user_execute);
if (_newStatus == true) {
m_rights |= right_user_execute;
}
}
bool etk::filesystem::Permissions::isGroupReadable() const {
return ((m_rights&right_group_read)!=0)?true:false;
}
bool etk::filesystem::Permissions::isGroupWritable() const {
return ((m_rights&right_group_write)!=0)?true:false;
}
bool etk::filesystem::Permissions::isGroupRunable() const {
return ((m_rights&right_group_execute)!=0)?true:false;
}
void etk::filesystem::Permissions::setGroupReadable(bool _newStatus) {
// reset the flag :
m_rights &= (0xFFFFFFFF - right_group_read);
if (true == _newStatus) {
m_rights |= right_group_read;
}
}
void etk::filesystem::Permissions::setGroupWritable(bool _newStatus) {
// reset the flag :
m_rights &= (0xFFFFFFFF - right_group_write);
if (true == _newStatus) {
m_rights |= right_group_write;
}
}
void etk::filesystem::Permissions::setGroupRunable(bool _newStatus) {
// reset the flag :
m_rights &= (0xFFFFFFFF - right_group_execute);
if (true == _newStatus) {
m_rights |= right_group_execute;
}
}
bool etk::filesystem::Permissions::isOtherReadable() const {
return ((m_rights&right_other_read) != 0)?true:false;
}
bool etk::filesystem::Permissions::isOtherWritable() const {
return ((m_rights&right_other_write) != 0)?true:false;
}
bool etk::filesystem::Permissions::isOtherRunable() const {
return ((m_rights&right_other_execute) != 0)?true:false;
}
void etk::filesystem::Permissions::setOtherReadable(bool _newStatus) {
// reset the flag:
m_rights &= (0xFFFFFFFF - right_other_read);
if (_newStatus == true) {
m_rights |= right_other_read;
}
}
void etk::filesystem::Permissions::setOtherWritable(bool _newStatus) {
// reset the flag :
m_rights &= (0xFFFFFFFF - right_other_write);
if (_newStatus == true) {
m_rights |= right_other_write;
}
}
void etk::filesystem::Permissions::setOtherRunable(bool _newStatus) {
// reset the flag :
m_rights &= (0xFFFFFFFF - right_other_execute);
if (_newStatus == true) {
m_rights |= right_other_execute;
}
}
etk::String etk::filesystem::Permissions::getRight() const {
etk::String tmp;
if (isUserReadable() == true) {
tmp += "r";
} else {
tmp += "-";
}
if (isUserWritable() == true) {
tmp += "w";
} else {
tmp += "-";
}
if (isUserRunable() == true) {
tmp += "x";
} else {
tmp += "-";
}
if (isGroupReadable() == true) {
tmp += "r";
} else {
tmp += "-";
}
if (isGroupWritable() == true) {
tmp += "w";
} else {
tmp += "-";
}
if (isGroupRunable() == true) {
tmp += "x";
} else {
tmp += "-";
}
if (isOtherReadable() == true) {
tmp += "r";
} else {
tmp += "-";
}
if (isOtherWritable() == true) {
tmp += "w";
} else {
tmp += "-";
}
if (isOtherRunable() == true) {
tmp += "x";
} else {
tmp += "-";
}
return tmp;
}
etk::Stream& etk::operator <<(etk::Stream &_os, const etk::filesystem::Permissions &_obj) {
_os << _obj.getRight();
return _os;
};