Exemple #1
0
lzma_vli read_file_index(lzma_vli offset) {
    void *bdata = NULL;
    if (!offset)
        offset = find_file_index(&bdata);
    if (!offset)
        return 0;

    while (true) {
        char *name = read_file_index_name();
        if (!name)
            break;

        file_index_t *f = malloc(sizeof(file_index_t));
        f->name = strlen(name) ? xstrdup(name) : NULL;
        f->offset = xle64dec(gFileIndexBuf + gFIBPos);
        gFIBPos += sizeof(uint64_t);

        if (gLastFile) {
            gLastFile->next = f;
        } else {
            gFileIndex = f;
        }
        gLastFile = f;
    }
    free(gFileIndexBuf);
    lzma_end(&gStream);
    free(bdata);

    return offset;
}
Exemple #2
0
struct file_descriptor* open_file( char* path )
{

	printf("opening file %s ...\n" , path);

	int i;

	if( (strlen(path) == 1) && path[0]=='/' )
	{

		i = 1;
	}else{
		i = 0;
	}

	char** dirs = split_string( path , "/" );

	printf("   arg_count: %d\n" , arg_count);

	int k;

	for( k = 0 ; k < arg_count ; k++)
	{
		printf( "   dirs[%d]: %s\n" , k , dirs[k] );
	}

	int entry_count = 0 , j = 0;

	struct dir_table_entry* cur_entries;

	struct file_descriptor cur_fd;

	struct dir_table_entry* cur_file_entry;

	//get root directory file descriptor
	
	cur_fd.pointer = sizeof( struct boot_sec );

	int found_file = 0;

	while( i < arg_count  && !found_file )
	{
		cur_entries    = get_dir_entries( cur_fd );

		cur_file_entry = get_file_entry( cur_fd );

		//printf("\nretrieved file %s \n" , cur_file_entry->name );

		entry_count    = cur_file_entry->file_size / (int)sizeof( struct dir_table_entry );

		//printf("entry_count: %d\n" , entry_count);

		for( j = 0 ; j < entry_count  ; j++ )
		{
			//printf("printing entry[%d]...\n" , j);

			cur_file_entry = cur_entries + j;

			//printf("   name: %s\n" , cur_file_entry->name );

			if( cur_file_entry->allocated )
			{

				//printf("   looking for file %s...\n" , *(dirs + i) );

				if( strcmp( cur_file_entry->name , *(dirs + i) ) == 0 )
				{

					if( i == (arg_count -1))
						found_file = 1;

					//printf( "   found file!\n"); 

					cur_fd.pointer = find_file_index( cur_fd , cur_file_entry->name );

					//printf("   %s fd pointer: %d\n" , cur_file_entry->name , cur_fd.pointer );
					
 
					/*
					struct file_descriptor* ret = (struct file_descriptor*)malloc( sizeof(struct file_descriptor) );

					memcpy( ret , &cur_fd , sizeof( struct file_descriptor ) );

					return ret;
					*/
				}
			}

		}

		i++;
	}

	if( !found_file )
		printf("file not found!\n");

	struct file_descriptor* ret = (struct file_descriptor*)malloc( sizeof(struct file_descriptor) );

	memcpy( ret , &cur_fd , sizeof( struct file_descriptor ) );

	return ret;

}