75 #include "../TimeStamp.h" 76 #include "../FileAttributes.h" 77 #include "../Compression.h" 78 #include "../UserRole.h" 88 template <
typename T>
static T
at_offset(
const void* current,
int offset)
90 auto p =
reinterpret_cast<const uint8_t*
>(current) + offset;
91 return reinterpret_cast<T
>(p);
94 template <
typename T>
static T
at_offset(
void* current,
int offset)
96 auto p =
reinterpret_cast<uint8_t*
>(current) + offset;
97 return reinterpret_cast<T
>(p);
119 #define FWFS_OBJTYPE_MAP(XX) \ 120 XX(0, End, "The system image footer") \ 121 XX(1, Data8, "Data, max 255 bytes") \ 122 XX(2, ID32, "32-bit identifier") \ 123 XX(3, ObjAttr, "Object attributes") \ 124 XX(4, Compression, "Compression descriptor") \ 125 XX(5, ReadACE, "minimum UserRole for read access") \ 126 XX(6, WriteACE, "minimum UserRole for write access") \ 127 XX(7, VolumeIndex, "Volume index number") \ 128 XX(8, Md5Hash, "MD5 Hash Value") \ 129 XX(9, Comment, "Comment") \ 130 XX(10, UserAttribute, "User Attribute") \ 131 XX(32, Data16, "Data, max 64K - 1") \ 132 XX(33, Volume, "Volume, top-level container object") \ 133 XX(34, MountPoint, "Root for another filesystem") \ 134 XX(35, Directory, "Directory entry") \ 135 XX(36, File, "File entry") \ 136 XX(64, Data24, "Data, max 16M - 1") 153 #define XX(value, tag, text) tag = value, 189 return static_cast<Type>(typeData & 0x7f);
194 typeData = unsigned(type);
211 memcpy(&
id, &
data8.ref.packedOffset,
data8.contentSize());
217 return type() >= Type::Volume &&
type() < Type::Data24;
222 return type() == Type::Data8 ||
type() == Type::Data16 ||
type() == Type::Data24;
227 return type() == Type::Directory;
232 return type() == Type::MountPoint;
253 _contentSize =
value;
315 _contentSize =
value;
318 uint32_t
size()
const 337 unsigned nameOffset()
const 370 _contentSize = value & 0xffff;
371 _contentSizeHigh = value >> 16;
374 uint32_t
size()
const 386 return data8.contentOffset();
387 }
else if(
type() < Type::Data24) {
388 return data16.contentOffset();
390 return data24.contentOffset();
401 return data8.contentSize();
402 }
else if(
type() < Type::Data24) {
403 return data16.contentSize();
405 return data24.contentSize();
412 data8.setContentSize(size);
413 }
else if(
type() < Type::Data24) {
414 data16.setContentSize(size);
416 data24.setContentSize(size);
423 return data16.contentOffset() +
data16.named.childTableOffset();
430 return (size <= 0) ? 0 :
size;
442 static_assert(
sizeof(
Object) == 8,
"Object alignment wrong!");
464 return offset() + obj.size();
475 return offset() + obj.contentOffset();
480 return offset() + obj.childTableOffset();
struct IFS::FWFS::Object::@25::@27::@30::@33 id32
#define MAX(a, b)
Definition: spiffs_nucleus.h:541
uint32_t packedOffset
Definition: Object.h:259
uint32_t value
32-bit identifier, e.g. volume ID
Definition: Object.h:264
uint8_t attr
Definition: Object.h:269
#define FWFS_OBJTYPE_MAP(XX)
Object type identifiers.
Definition: Object.h:119
struct IFS::FWFS::Object::@25::@27::@30::@34 objectAttributes
Compression compression
Definition: Object.h:273
size_t contentOffset() const
return offset to start of object content
Definition: Object.h:383
struct IFS::FWFS::Object::@25::@27::@30::@38 end
FWFS Object Descriptor.
Definition: Object.h:449
UserRole role
Definition: Object.h:277
Attribute
Object attributes.
Definition: Object.h:165
void next()
Definition: Object.h:468
FWObjDesc(Object::ID objId=0)
Definition: Object.h:453
Object::ID id
location
Definition: Object.h:450
uint8_t namelen
Length of object name.
Definition: Object.h:331
bool isMountPoint() const
Definition: Object.h:230
The String class.
Definition: WString.h:136
bool isNamed() const
Definition: Object.h:215
uint8_t typeData
Stored type plus flag.
Definition: Object.h:145
uint32_t ID
Object identifier (offset from start of image)
Definition: Object.h:150
constexpr uint32_t FWFILESYS_START_MARKER
Definition: Object.h:104
bool isRef() const
Definition: Object.h:200
uint32_t checksum
Definition: Object.h:293
uint32_t offset() const
Definition: Object.h:457
Type
Definition: Object.h:152
uint32_t getRef() const
Definition: Object.h:205
struct IFS::FWFS::Object::@25::@28 data16
Definition: DirectoryTemplate.h:36
Manage IFS timestamps stored as an unsigned 32-bit value.
Definition: TimeStamp.h:35
uint8_t index
Definition: Object.h:282
struct IFS::FWFS::Object::@25::@27::@30::@36 volumeIndex
bool isData() const
Definition: Object.h:220
constexpr size_t FWFS_BASE_OFFSET
Definition: Object.h:101
struct IFS::FWFS::Object::@25::@27::@30::@37 userAttribute
static T at_offset(const void *current, int offset)
Definition: Object.h:88
TimeStamp mtime
Definition: Object.h:332
uint8_t _contentSize
Definition: Object.h:238
struct IFS::FWFS::Object::@25::@27 data8
UserRole
Definition: UserRole.h:36
Type type() const
Definition: Object.h:187
bool isDir() const
Definition: Object.h:225
Object::Attributes getObjectAttributes(FileAttributes fileAttr)
uint32_t nextOffset() const
Definition: Object.h:462
uint32_t contentOffset() const
Definition: Object.h:473
uint32_t childTableOffset() const
Definition: Object.h:478
struct IFS::FWFS::Object::@25::@27::@30::@32 ref
uint32_t size() const
total size this object occupies in the image
Definition: Object.h:436
FileAttributes getFileAttributes(Object::Attributes objattr)
struct IFS::FWFS::Object::@25::@28::@39::@41 named
uint8_t _contentSizeHigh
Allows data up to 16MByte.
Definition: Object.h:355
void setType(Type type, bool isRef=false)
Definition: Object.h:192
struct IFS::FWFS::Object::@25::@29 data24
static constexpr uint8_t FWOBT_REF
Definition: Object.h:159
Object structure.
Definition: Object.h:144
uint32_t childTableOffset() const
Definition: Object.h:420
String toString(IFS::FWFS::Object::Type obt)
Get descriptive String for an object type.
constexpr uint32_t FWFILESYS_END_MARKER
Definition: Object.h:107
uint16_t _contentSize
Object size (excluding this header)
Definition: Object.h:300
uint8_t tagValue
Definition: Object.h:287
struct IFS::FWFS::Object::@25::@27::@30::@35 ace
uint32_t childTableSize() const
Definition: Object.h:426
void setContentSize(size_t size)
Definition: Object.h:409
uint32_t contentSize() const
return size of object content, excluding header and size fields
Definition: Object.h:398