add seek, read, write

This commit is contained in:
ІО-23 Шмуляр Олег 2025-04-26 19:46:34 +03:00
parent 87f3239c52
commit 3b3ce23df0
3 changed files with 16 additions and 4 deletions

View File

@ -56,6 +56,9 @@ int fs_ls(void *d);
int fs_la(void *d); int fs_la(void *d);
int fs_rm(void *d); int fs_rm(void *d);
int fs_open(void *d); int fs_open(void *d);
int fs_seek(void *d);
int fs_read(void *d);
int fs_write(void *d);
int fs_close(void *d); int fs_close(void *d);
int fs_allow_write(void *d); int fs_allow_write(void *d);
int fs_prohibit_write(void *d); int fs_prohibit_write(void *d);

View File

@ -21,9 +21,9 @@ static const struct CliCommandEntry cmd[] = {
{"rm", 1, (enum CliArgType[]) {STR}, fs_rm}, {"rm", 1, (enum CliArgType[]) {STR}, fs_rm},
//{"truncate", 2, (enum CliArgType[]) {STR, INT}, fs_truncate}, //{"truncate", 2, (enum CliArgType[]) {STR, INT}, fs_truncate},
{"open", 1, (enum CliArgType[]) {STR}, fs_open}, {"open", 1, (enum CliArgType[]) {STR}, fs_open},
//{"seek", 2, (enum CliArgType[]) {INT, INT}, fs_seek}, {"seek", 2, (enum CliArgType[]) {INT, INT}, fs_seek},
//{"read", 2, (enum CliArgType[]) {INT, INT}, fs_read}, {"read", 2, (enum CliArgType[]) {INT, INT}, fs_read},
//{"write", 2, (enum CliArgType[]) {INT, STR}, fs_write}, {"write", 2, (enum CliArgType[]) {INT, STR}, fs_write},
{"close", 1, (enum CliArgType[]) {INT}, fs_close}, {"close", 1, (enum CliArgType[]) {INT}, fs_close},
// custom commands // custom commands

View File

@ -856,7 +856,7 @@ print_read_data:
int fs_write(void *d) int fs_write(void *d)
{ {
int fd = ((int *) d)[0]; int fd = ((int *) d)[0];
char *str = *((char **) d+4); char *str = *((char **) ((char *) d+4));
int str_len = strlen(str); int str_len = strlen(str);
if (!fs_file_descriptions[fd].inode) { if (!fs_file_descriptions[fd].inode) {
@ -890,6 +890,15 @@ int fs_write(void *d)
fd, fs_file_descriptions[fd].rw_offset, fs_file_descriptions[fd].rw_offset + str_len); fd, fs_file_descriptions[fd].rw_offset, fs_file_descriptions[fd].rw_offset + str_len);
fs_file_descriptions[fd].rw_offset += str_len; fs_file_descriptions[fd].rw_offset += str_len;
struct fs_inode f;
read_block(fs_file_descriptions[fd].inode, (void *) &f);
if (fs_file_descriptions[fd].rw_offset > f.size) {
pr("Increasing fd %d file size: %d -> %d\n", fd, f.size, f.size + str_len);
f.size = fs_file_descriptions[fd].rw_offset;
write_block(fs_file_descriptions[fd].inode, (void *) &f);
}
return 0; return 0;
} }