GitOS
Loading...
Searching...
No Matches
file.c File Reference
#include "file.h"
#include <common/assert.h>
#include <stdint.h>
#include "Path.hpp"
#include "common/status.h"
#include "common/string.h"
#include "kernel.h"
#include "memory/heap/kheap.h"
#include "memory/memory.h"

Functions

void fs_insert_filesystem (struct filesystem *filesystem)
 Inserts filesystem struct into internal array.
void fs_init ()
 Initializes internal filesystem arrays.
struct filesystemfs_resolve (struct disk *disk)
 Resolves filesystem for given disk.
int fopen (const char *filename, const char *str_mode)
 Opens file.
int fread (void *ptr, uint32_t size, uint32_t nmemb, int fd)
 Reads from file.
int fwrite (void *ptr, uint32_t size, uint32_t nmemb, int fd)
 Writes to file.
int fseek (int fd, int offset, FILE_SEEK_MODE whence)
 Seeks into file.
int fstat (int fd, struct file_stat *stat)
 Returns file status.
int fclose (int fd)
 Closes file descriptor.
void mount (const char *filename, struct filesystem *fs, void *data)

Variables

struct filesystemfilesystems [MAX_FILESYSTEMS]
 Array holding all registered filesystems.
struct file_descriptorfile_descriptors [MAX_FILEDESCRIPTORS]
 Array holding all open file descriptors.
struct mounted_file ** mounted
 Array holding all mounted files.

Function Documentation

◆ fclose()

int fclose ( int fd)

Closes file descriptor.

Parameters
fdFile descriptor
Returns
int Status

References filesystem::close, EIO, file_descriptor::filesystem, and file_descriptor::private_fs_descriptor.

◆ fopen()

◆ fread()

int fread ( void * ptr,
uint32_t size,
uint32_t nmemb,
int fd )

Reads from file.

Parameters
ptrOutput buffer
sizeSize in bytes of block
nmembNumber of blocks to read
fdFile descriptor
Returns
int Status

References EINVARG, file_descriptor::filesystem, file_descriptor::private_fs, file_descriptor::private_fs_descriptor, filesystem::read, and size.

◆ fs_init()

void fs_init ( )

Initializes internal filesystem arrays.

References file_descriptors, filesystems, kzalloc(), MAX_MOUNTED, memset(), and mounted.

◆ fs_insert_filesystem()

void fs_insert_filesystem ( struct filesystem * filesystem)

Inserts filesystem struct into internal array.

Parameters
filesystem

References fs, kernel_panic(), kprintf(), and filesystem::name.

◆ fs_resolve()

struct filesystem * fs_resolve ( struct disk * disk)

Resolves filesystem for given disk.

Parameters
diskDisk to resolve
Returns
struct filesystem* Resolved filesystem, 0 if not resolved

References ALL_OK, filesystems, disk::fs_private, disk::id, kprintf(), MAX_FILESYSTEMS, mount(), and filesystem::resolve.

◆ fseek()

int fseek ( int fd,
int offset,
FILE_SEEK_MODE whence )

Seeks into file.

Parameters
fdFile descriptor
offsetSeek offset
whenceFile seek mode (SEEK_SET for absolute, SEEK_CUR for relative)
Returns
int Status

References EIO, file_descriptor::filesystem, offset, file_descriptor::private_fs_descriptor, and filesystem::seek.

◆ fstat()

int fstat ( int fd,
struct file_stat * stat )

Returns file status.

Parameters
fdFile descriptor
statOutput file status struct
Returns
int Status

References EIO, file_descriptor::filesystem, file_descriptor::private_fs_descriptor, and filesystem::stat.

◆ fwrite()

int fwrite ( void * ptr,
uint32_t size,
uint32_t nmemb,
int fd )

Writes to file.

Parameters
ptrInput buffer
sizeSize in bytes of block
nmembNumber of blocks to read
fdFile descriptor
Returns
int Status

References EINVARG, file_descriptor::filesystem, file_descriptor::private_fs, file_descriptor::private_fs_descriptor, size, and filesystem::write.

◆ mount()

void mount ( const char * filename,
struct filesystem * fs,
void * data )

Variable Documentation

◆ file_descriptors

struct file_descriptor* file_descriptors[MAX_FILEDESCRIPTORS]

Array holding all open file descriptors.

◆ filesystems

struct filesystem* filesystems[MAX_FILESYSTEMS]

Array holding all registered filesystems.

◆ mounted

struct mounted_file** mounted

Array holding all mounted files.