add seek, read, write
This commit is contained in:
parent
87f3239c52
commit
3b3ce23df0
3
inc/fs.h
3
inc/fs.h
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
11
src/fs.c
11
src/fs.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue