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;
}
Example #2
0
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;
}
Example #4
0
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;
}