fix: added name verif before inode creation

This commit is contained in:
Guamss 2026-05-18 17:43:49 +02:00
parent f981262907
commit bc6ed93ad8

View File

@ -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;