fix: added name verif before inode creation
This commit is contained in:
parent
f981262907
commit
bc6ed93ad8
26
src/disk.c
26
src/disk.c
@ -297,6 +297,22 @@ int create_directory(disk *disk, inode *parent, char *dirname) {
|
||||
return new_idx;
|
||||
}
|
||||
|
||||
int check_if_name_is_already_taken(char* name, int dir_index, disk* d) {
|
||||
if (dir_index < 0 || dir_index >= MAX_INODE)
|
||||
return -1;
|
||||
|
||||
int bloc = d->inodes[dir_index].blocs[0];
|
||||
char buff[MAX_INODE_NAME];
|
||||
|
||||
for (int i = 0; i < MAX_BYTES_PER_BLOC; i+= MAX_INODE_NAME + sizeof(int)) {
|
||||
strncpy(buff, &d->blocs[bloc].datas[i], MAX_INODE_NAME);
|
||||
if (strcmp(buff, name) == 0) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int do_touch(disk *d, char *filepath) {
|
||||
char *parent_path;
|
||||
char *dirname;
|
||||
@ -327,6 +343,11 @@ int do_touch(disk *d, char *filepath) {
|
||||
token = strtok(NULL, "/");
|
||||
}
|
||||
|
||||
if (check_if_name_is_already_taken(dirname, dir_index, d)) {
|
||||
dprintf(STDERR_FILENO, "touch: name '%s' is already taken \n", dirname);
|
||||
return -1;
|
||||
}
|
||||
|
||||
create_file(d, &d->inodes[dir_index], dirname);
|
||||
return 0;
|
||||
}
|
||||
@ -361,6 +382,11 @@ int do_mkdir(disk *d, char *dirpath) {
|
||||
token = strtok(NULL, "/");
|
||||
}
|
||||
|
||||
if (check_if_name_is_already_taken(dirname, dir_index, d)) {
|
||||
dprintf(STDERR_FILENO, "mkdir: name '%s' is already taken \n", dirname);
|
||||
return -1;
|
||||
}
|
||||
|
||||
create_directory(d, &d->inodes[dir_index], dirname);
|
||||
|
||||
return 0;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user