gctf2023/pwn/flipper/dist/common/include/fs/VfsSyscall.h
2023-11-24 13:11:34 -05:00

151 lines
4.9 KiB
C++

#pragma once
#include "types.h"
class Dirent;
class Dentry;
class VfsMount;
class FileDescriptor;
class VfsSyscall;
class Path;
class FileSystemInfo;
class VfsSyscall
{
public:
/**
* make a new directory.
* i.e. im the path "/file/test/" create a new directory with the name
* "dir". => the new_dir ist "/file/test/dir"
* @param pathname the new directory.
* @param type the permission.
* @return On success, zero is returned. On error, -1 is returned.
*/
static int32 mkdir(const char* pathname, int32 /*type*/);
/**
* The readdir() displays or saves the names from all childs into buffer and returns a pointer
* to a Dirent.
* @param pathname the destination-directory.
* @param buffer the buffer the output is saved to
* @param size the size of buffer in bytes
* @return the dirent
*/
static Dirent* readdir(const char* pathname, char* buffer = 0, size_t size = 0);
/**
* chdir() changes the current directory to the specified directory.
* @param dir the destination-directory.
* @return On success, zero is returned. On error, -1 is returned.
*/
static int32 chdir(const char* pathname);
/**
* delete a directory, which must be empty.
* @param pathname the removed directory
* @return On success, zero is returned. On error, -1 is returned.
*/
static int32 rmdir(const char* pathname);
/**
* remove a directory (which must be empty) or a file
* @param pathname the removed directory or file
* @return On success, zero is returned. On error, -1 is returned.
*/
static int32 rm(const char* pathname);
/**
* The open() is used to convert a pathname into a file descriptor, if the
* pathname does not exist, create a new file.
* @param pathname the file pathname
* @param flag specified when the file was opened
* @return On success, file descriptor is returned. On error, -1 is returned.
*/
static int32 open(const char* pathname, uint32 flag);
/**
* The close() closes a file descriptor.
* @param fd the file descriptor
* @return On success, zero is returned. On error, -1 is returned.
*/
static int32 close(uint32 fd);
/**
* The read() attempts to read up to count bytes from file descriptor fd
* into the buffer starting at buffter.
* @param fd the file descriptor
* @param buffer the buffer that to read the date
* @param count the size of the byte
* @return On success, the number of bytes read is returned (zero indicates
* end of file), and the file position is advanced by this number.
* On error, -1 is returned.
*/
static int32 read(uint32 fd, char* buffer, uint32 count);
/**
* Sets the file position relative to the start of the file, the end of the
* file or the current file position.
* @param fd the file descriptor
* @param offset is the offset to set.
* @param origin is the on off SEEK_SET, SEEK_CUR and SEEK_END.
* @returns the offset from the start off the file or -1 on failure.
*/
static l_off_t lseek(uint32 fd, l_off_t offset, uint8 origin);
/**
* write writes up to count bytes to the file referenced by the file
* descriptor fd from the buffer starting at buf.
* @param fd the file descriptor
* @param buffer the buffer that to store the date
* @param count the size of the byte
* @return On success, the number of bytes written are returned (zero
* indicates nothing was written). On error, -1 is returned
*/
static int32 write(uint32 fd, const char *buffer, uint32 count);
/**
* flushes the file with the given file descriptor to the disc
* so that changes in the system are written to disc
* @param fd the file descriptor
* @return 0 on success, -1 on error
*/
static int32 flush(uint32 fd);
/**
* mounts a file system
* @param device_name the device name i.e. ida
* @param dir_name the directory name where to mount the filesystem
* @param file_system_name the file system name i.e. minixfs
* @param flag the flag indicates if mounted readonly etc.
* @return 0 on success
*/
static int32 mount(const char *device_name, const char *dir_name, const char *file_system_name, int32 flag);
/** unmounts a filesystem
* @param dir_name the directory where the filesystem to unmount is mounted
* @param flag not used
* @return 0 on success
*/
static int32 umount(const char *dir_name, int32 flag);
/**
* returns the size of a file
* @param fd the file looking for
* @return the size
*/
static uint32 getFileSize(uint32 fd);
/**
* get the File descriptor object from the global variable
* @param the fd int
* @return the file descriptor object
*/
static FileDescriptor* getFileDescriptor(uint32 fd);
private:
VfsSyscall();
~VfsSyscall();
};