#ifndef IFILESYSTEM_H
#define IFILESYSTEM_H
typedef unsigned char __u8;
typedef unsigned short __u16;
typedef unsigned long __u32;
typedef unsigned __int64 __u64;
typedef char __s8;
typedef short __s16;
typedef long __s32;
#ifndef FMT_QWORD
#ifdef _MSC_VER
#define FMT_QWORD "I64d"
#else
#define FMT_QWORD "qd"
#endif
#endif
#ifndef S_ISCHR
#define S_IFMT 0170000 /* type of file (mask for following) */
#define S_IFIFO 0010000 /* first-in/first-out (pipe) */
#define S_IFCHR 0020000 /* character-special file */
#define S_IFDIR 0040000 /* directory */
#define S_IFBLK 0060000 /* blocking device (not used on NetWare) */
#define S_IFREG 0100000 /* regular */
#define S_IFLNK 0120000 /* symbolic link (not used on NetWare) */
#define S_IFSOCK 0140000 /* Berkeley socket */
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) /* (e.g.: pipe) */
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) /* (e.g.: console) */
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) /* (e.g.: pipe) */
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) /* should be FALSE */
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) /* (e.g.: socket) */
#endif
#define UNIX_FILENAME_LENGTH 255
struct UNIX_FILEINFO
{
__u16 i_mode; /* File mode (permissions)*/
__u16 i_uid; /* Low 16 bits of Owner Uid */
__u16 i_gid; /* Low 16 bits of Group Id */
__u64 i_size; /* Size in bytes */
__s32 i_atime; /* Access time */
__s32 i_ctime; /* Creation time */
__s32 i_mtime; /* Modification time */
TCHAR szFileName[UNIX_FILENAME_LENGTH];
};
class IFilesystem : public IUnknown
{
public:
virtual HANDLE OpenFile(LPCTSTR szFilename) const = 0;
virtual void ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD NumberOfBytesToRead, DWORD& NumberOfBytesRead) const = 0;
virtual void CloseFile(HANDLE hFile) const = 0;
virtual HANDLE FindFirstFile(LPCTSTR szPath) const = 0;
virtual bool FindNextFile(HANDLE hFind, UNIX_FILEINFO& FileInfo) const = 0;
virtual void CloseFind(HANDLE hFind) const = 0;
};
#ifdef __cplusplus
extern "C" {
#endif
typedef void (WINAPI* LPFNFoundPartition)(LPCSTR lpszName);
void WINAPI FS_Autodetect( LPFNFoundPartition lpCallback );
IFilesystem* WINAPI FS_CreateInstance( LPCSTR lpszName );
void WINAPI FS_DestroyInstance( IFilesystem* pFilesystem );
#ifdef __cplusplus
}
#endif
#endif // IFilesystem_H
syntax highlighted by Code2HTML, v. 0.9.1