int create_file(char *file_name, unsigned int directory_clus) { unsigned int clus, offset; union directory_entry file; create_directory_entry(file_name, directory_clus, &file, &clus, &offset, 1); file.sf.attr = 0x00; set_directory_entry(&file, clus, offset); return 1; }
void create_file(uint8_t **entry, uint8_t *name, uint8_t *sfn, uint8_t attributes, uint8_t *content, int32_t length) { if (length == -1) { length = strlen(content); } create_directory_entry(entry, name, sfn, attributes, free_cluster, length); for (int i=0; i<length; i+=512) { fat_entry(free_cluster, (length-i > 512) ? free_cluster+1 : EOC); strncpy(BUFFER_FOR_CLUSTER(free_cluster), content+i, 512); free_cluster++; } }
int create_directory(char *dir_name, unsigned int directory_clus) { unsigned int clus, offset, d_clus, d_offset, dd_clus, dd_offset, new_dir_clus; union directory_entry file, d_file, dd_file; create_directory_entry(dir_name, directory_clus, &file, &clus, &offset, 1); file.sf.attr = 0x10; set_directory_entry(&file, clus, offset); new_dir_clus = get_file_cluster(&file); create_directory_entry(".", new_dir_clus, &d_file, &d_clus, &d_offset, 0); d_file.sf.first_clus_hi = get_hi(new_dir_clus); d_file.sf.first_clus_lo = get_lo(new_dir_clus); d_file.sf.attr = 0x10; set_directory_entry(&d_file, d_clus, d_offset); create_directory_entry("..", new_dir_clus, &dd_file, &dd_clus, &dd_offset, 0); if (directory_clus == img_info.root_clus) { dd_file.sf.first_clus_hi = 0x0000; dd_file.sf.first_clus_lo = 0x0000; } else { dd_file.sf.first_clus_hi = get_hi(directory_clus); dd_file.sf.first_clus_lo = get_lo(directory_clus); } dd_file.sf.attr = 0x10; set_directory_entry(&dd_file, dd_clus, dd_offset); return 1; }
uint8_t *create_directory(uint8_t **entry_position, uint8_t *name, uint8_t *sfn, uint16_t parent_cluster, uint8_t size) { uint16_t first_cluster = free_cluster; for (int i=1; i<size; i++) { fat_entry(free_cluster, free_cluster+1); free_cluster++; } fat_entry(free_cluster, EOC); create_directory_entry(entry_position, name, sfn, FAT_FILE_DIR, first_cluster, 0); uint8_t *directory_start = BUFFER_FOR_CLUSTER(first_cluster); create_sfn_entry(&directory_start, ". ", FAT_FILE_DIR, first_cluster, 0); create_sfn_entry(&directory_start, ".. ", FAT_FILE_DIR, parent_cluster, 0); free_cluster++; return directory_start; }