Example #1
0
/*
 * Creates an image
 */
void create_image(void* image, int size)
{
	initrd = image;
	vol_header = (IFSVolume*)image;
	memset(vol_header, 0, size);
	vol_header->file_block_size = 1024;
	vol_header->block_pool_size = (0xFFFF * sizeof(IFSBlock));
	placement = sizeof(IFSVolume) + (0xFFFF * sizeof(IFSBlock)) ;
	block_pool = (image + sizeof(IFSVolume));
	for(int i = 0; i < 0xFFFF; i++)
		block_pool[i].state = BLOCK_NONEXISTENT;
	vol_header->root_directory = 0;
	IFSFileEntry* rootdir = ifs_create_file_entry();
	rootdir->data_index = 1;
	IFSBlock* root = ifs_block_alloc();
	
	memset(initrd + ifs_get_address(1), 0xFF, 1024);

	/*
	 * Yes Courtney, even though you completely f****d me over
	 * in just about every respect, I immortalized you in the IFS
	 * magic number. Not that you will ever see this. Maybe because
	 * I still love you, maybe because, well I have no f*****g clue....
	 *
	 * Magic number: 0xCB0A0D0D (Big endian)
	 */
	vol_header->mag0 = 0xCB;
	vol_header->mag1 = 0x0A;
	vol_header->mag2 = 0x0D;
	vol_header->mag3 = 0x0D;
}
Example #2
0
static int ifs_symlink(struct device *dev, const char *from, const char *to)
{
	int d_block = ifs_block_alloc(dev, 1024);
	struct ifs_entry dir;
	dir.mode = 0444;
	dir.file_type = IFS_LINK;
	dir.data_index = d_block;
	dir.file_size = 1024;
    dir.uid = getuid();
    dir.gid = getgid();
	strcpy(dir.file_name, basename(from));
	int e = ifs_insert_entry(dev, from, &dir);
	device_write(dev, to, (strlen(to) + 1) % 1024, ifs_get_address(dev, d_block));
    return 0;
}
Example #3
0
static int ifs_creat(struct device *dev, const char *path, mode_t mode)
{
	int d_block = ifs_block_alloc(dev, 1024);
	struct ifs_entry dir;
	dir.mode = mode;
	dir.file_type = IFS_DIRECTORY;
	dir.data_index = d_block;
	dir.file_size = 0;
    dir.uid = getuid();
    dir.gid = getgid();
	strcpy(dir.file_name, basename(path));
	int e = ifs_insert_entry(dev, path, &dir);
	int32_t files[256];
	memset(files, 0xFF, 1024);
	device_write(dev, files, 1024, ifs_get_address(dev, d_block));
}
Example #4
0
static inline int ifs_insert_entry(struct device *dev, const char *path, struct ifs_entry *entry)
{
	int e_block = ifs_block_alloc(dev, 1024);
	entry->block_index = e_block;
    int parent = ifs_get_parent(dev, path);
    struct ifs_entry p_ent;
    device_read(dev, &p_ent, sizeof(struct ifs_entry), ifs_get_address(dev, parent));
	int32_t *files = (int32_t *)kalloc(1024);
	device_read(dev, files, 1024, ifs_get_address(dev, p_ent.data_index));
	int i = 0;
	while (files[i] != -1) i++;
	files[i] = e_block;
	device_write(dev, files, 1024, ifs_get_address(dev, p_ent.data_index));
	device_write(dev, entry, sizeof(struct ifs_entry), ifs_get_address(dev, e_block));
	kfree(files);
	return e_block;
}