2025-08-10 01:34:16 +02:00

62 lines
1.6 KiB
C

/*
* Information provided by stat()
*/
#ifndef STATDATA_H_
#define STATDATA_H_
#include <common/storage/StorageDefinitions.h>
#include <common/FhgfsTypes.h>
#define STATDATA_FEATURE_SPARSE_FILE 1
// stat blocks are 512 bytes, ">> 9" is then the same as "/ 512", but faster
#define STATDATA_SIZETOBLOCKSBIT_SHIFT 9
struct StatData;
typedef struct StatData StatData;
extern bool StatData_deserialize(DeserializeCtx* ctx, StatData* outThis);
static inline void StatData_getOsStat(StatData* this, fhgfs_stat* outOsStat);
struct StatData
{
unsigned flags;
int64_t fileSize;
uint64_t numBlocks;
int64_t creationTimeSecs; // real creation time
int64_t attribChangeTimeSecs; // this corresponds to unix ctime
unsigned nlink;
SettableFileAttribs settableFileAttribs;
unsigned metaVersion; // inc'ed when internal metadata is modified (for cache invalidation)
};
void StatData_getOsStat(StatData* this, fhgfs_stat* outOsStat)
{
outOsStat->mode = this->settableFileAttribs.mode;
outOsStat->size = this->fileSize;
outOsStat->blocks = this->numBlocks;
outOsStat->uid = this->settableFileAttribs.userID;
outOsStat->gid = this->settableFileAttribs.groupID;
outOsStat->nlink = this->nlink;
outOsStat->atime.tv_sec = this->settableFileAttribs.lastAccessTimeSecs;
outOsStat->atime.tv_nsec = 0;
outOsStat->mtime.tv_sec = this->settableFileAttribs.modificationTimeSecs;
outOsStat->mtime.tv_nsec = 0;
outOsStat->ctime.tv_sec = this->attribChangeTimeSecs;
outOsStat->ctime.tv_nsec = 0;
outOsStat->metaVersion = this->metaVersion;
}
#endif /* STATDATA_H_ */