#ifndef __FENNIX_KERNEL_FILESYSTEM_USTAR_H__ #define __FENNIX_KERNEL_FILESYSTEM_USTAR_H__ #include #include namespace VirtualFileSystem { class USTAR { enum FileType { REGULAR_FILE = '0', HARDLINK = '1', SYMLINK = '2', CHARDEV = '3', BLOCKDEV = '4', DIRECTORY = '5', FIFO = '6' }; struct FileHeader { char name[100]; char mode[8]; char uid[8]; char gid[8]; char size[12]; char mtime[12]; char chksum[8]; char typeflag[1]; char link[100]; char signature[6]; char version[2]; char owner[32]; char group[32]; char dev_maj[8]; char dev_min[8]; char prefix[155]; char pad[12]; }; private: uint32_t getsize(const char *s) { uint32_t ret = 0; while (*s) { ret *= 8; ret += *s - '0'; s++; } return ret; } int string2int(const char *str) { int res = 0; for (int i = 0; str[i] != '\0'; ++i) res = res * 10 + str[i] - '0'; return res; } public: USTAR(uintptr_t Address, Virtual *vfs); ~USTAR(); }; } #endif // !__FENNIX_KERNEL_FILESYSTEM_USTAR_H__