int create_file(const char *name, mode_t mode, dev_t dev) { int number = search_free_block(); if (number >= 0) { inode_t *file = (inode_t *)create_block(); if (file != NULL) { int name_size = strlen(name) + 1; if (name_size > NODE_NAME_MAX_SIZE) { name_size = NODE_NAME_MAX_SIZE; } file->status = BLOCK_STATUS_FILE; memcpy(file->name, name, name_size); file->stat.st_mode = S_IFREG | mode; file->stat.st_rdev = dev; file->stat.st_nlink = 1; if (write_block(number, file) != 0) { number = -1; } destroy_block(file); } } return number; }
int create_folder(const char *name, mode_t mode) { int number = search_free_block(); if (number >= 0) { inode_t *folder = (inode_t *)create_block(); if (folder != NULL) { int name_size = strlen(name) + 1; if (name_size > NODE_NAME_MAX_SIZE) { name_size = NODE_NAME_MAX_SIZE; } folder->status = BLOCK_STATUS_FOLDER; memcpy(folder->name, name, name_size); folder->stat.st_mode = S_IFDIR | mode; folder->stat.st_nlink = 2; if (write_block(number, folder) != 0) { number = -1; } destroy_block(folder); } } return number; }
/** * alloue size octets de mémoire au système * @param size: taille de l'allocation memoire demandée * @return pointeur sur la zone mémoire allouée */ void *malloc(size_t size) { t_block *pnt; initiation(); pthread_mutex_lock(&list.mutex); pnt = search_free_block(size); if (pnt != NULL) { set_attribute_block(pnt, size); } else { pnt = add_block_end(size); } pthread_mutex_unlock(&list.mutex); return (pnt->pnt); }