@ -238,18 +238,19 @@ int lsfs_disk_getattr(lsfs_file* find_file, const char* path) {
int lsfs_disk_read_data_from_file ( lsfs_file * file , int buffer_size , char * data , size_t offset_to_next_entry )
{
int data_length = file - > size ;
int data_length = file - > size - offset_to_next_entry ;
int amount_read = 0 ;
int amount_to_read = 0 ;
//printf("READ: buffer_size: %d\n", buffer_size);
//printf("READ: Data length: %d\n", data_length);
//printf("READ: Offset length: %d\n", offset_to_next_entry);
int remaining_offset = offset_to_next_entry ;
printf ( " READ: buffer_size: %d \n " , buffer_size ) ;
printf ( " READ: Data length: %d \n " , data_length ) ;
printf ( " READ: Offset length: %d \n " , offset_to_next_entry ) ;
int data_pointer_index = 0 ; // start at first data pointer.
while ( data_length > 0 ) // We have more to write
{
if ( offset_to_next_entry = = 0 )
if ( remaining_ offset = = 0 )
{
char * tmp_buffer = calloc ( DEFAULT_DATA_POINTER_SIZE , SECTOR_SIZE ) ;
assert ( tmp_buffer ) ;
@ -270,25 +271,26 @@ int lsfs_disk_read_data_from_file(lsfs_file *file, int buffer_size, char *data,
data_pointer_index + + ;
free ( tmp_buffer ) ;
}
else if ( offset_to_next_entry < = ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) )
else if ( remaining_ offset < ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) )
{
char * tmp_buffer = calloc ( 1 , ( ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) - offset_to_next_entry ) ) ;
char * tmp_buffer = calloc ( 1 , ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) ) ;
assert ( tmp_buffer ) ;
if ( data_length < ( ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) - offset_to_next_entry ) )
if ( data_length < ( ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) - remaining_ offset) )
{
amount_to_read = data_length ;
}
else
{
amount_to_read = ( ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) - offset_to_next_entry ) ;
amount_to_read = ( ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) - remaining_ offset) ;
}
read_data_from_disk_off ( file - > data_pointer [ data_pointer_index ] , DEFAULT_DATA_POINTER_SIZE , tmp_buffer , offset_to_next_entry ) ;
read_data_from_disk ( file - > data_pointer [ data_pointer_index ] , DEFAULT_DATA_POINTER_SIZE , tmp_buffer ) ;
memcpy ( ( data + amount_read ) , tmp_buffer , amount_to_read ) ;
memcpy ( data , ( tmp_buffer + remaining_offset ) , amount_to_read ) ;
data_length - = amount_to_read ;
amount_read + = amount_to_read ;
remaining_offset - = amount_to_read ;
data_pointer_index + + ;
free ( tmp_buffer ) ;
@ -296,7 +298,7 @@ int lsfs_disk_read_data_from_file(lsfs_file *file, int buffer_size, char *data,
else
{
// We have to skip a whole data pointer:
offset_to_next_entry - = ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) ;
remaining_ offset - = ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) ;
data_pointer_index + + ;
}
@ -321,19 +323,22 @@ int lsfs_disk_write_data_to_file(lsfs_file *file, int data_length, char *data, s
int new_filesize = data_length + offset_to_next_entry ;
int amount_written = 0 ;
int amount_to_write = 0 ;
//printf("Data length: %d\n", data_length);
//printf("Offset length: %d\n", offset_to_next_entry);
printf ( " Data length: %d \n " , data_length ) ;
printf ( " Offset length: %d \n " , offset_to_next_entry ) ;
int data_pointer_index = 0 ; // start at first data pointer.
while ( data_length > 0 ) // We have more to write
{
printf ( " Outside: Data pointers: %d \n " , file - > data_pointer [ data_pointer_index ] ) ;
while ( file - > data_pointer [ data_pointer_index ] = = 0 )
{
printf ( " inside: Data pointers: %d \n " , file - > data_pointer [ data_pointer_index ] ) ;
// we have to assign a free sector
if ( get_free_sectors ( 1 , file - > data_pointer ) )
{
// This is a fail case, we cannot assign a new sector:
printf ( " SHIT " ) ;
return amount_written ;
}
}
@ -360,10 +365,11 @@ int lsfs_disk_write_data_to_file(lsfs_file *file, int data_length, char *data, s
data_pointer_index + + ;
free ( tmp_buffer ) ;
}
else if ( offset_to_next_entry < = ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) )
else if ( offset_to_next_entry < ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) )
{
char * tmp_buffer = calloc ( 1 , ( ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) - offset_to_next_entry ) ) ;
char * tmp_buffer = calloc ( 1 , ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) ) ;
assert ( tmp_buffer ) ;
read_data_from_disk ( file - > data_pointer [ data_pointer_index ] , DEFAULT_DATA_POINTER_SIZE , tmp_buffer ) ;
if ( data_length < ( ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) - offset_to_next_entry ) )
{
@ -375,12 +381,12 @@ int lsfs_disk_write_data_to_file(lsfs_file *file, int data_length, char *data, s
}
memcpy ( tmp_buffer , ( data + amount_written ) , amount_to_write ) ;
memcpy ( tmp_buffer + offset_to_next_entry , data , amount_to_write ) ;
data_length - = amount_to_write ;
amount_written + = amount_to_write ;
offset_to_next_entry - = amount_to_write ;
write_data_to_disk_off ( file - > data_pointer [ data_pointer_index ] , DEFAULT_DATA_POINTER_SIZE , tmp_buffer , offset_to_next_entry ) ;
write_data_to_disk ( file - > data_pointer [ data_pointer_index ] , DEFAULT_DATA_POINTER_SIZE , tmp_buffer ) ;
data_pointer_index + + ;
free ( tmp_buffer ) ;
}
@ -388,6 +394,7 @@ int lsfs_disk_write_data_to_file(lsfs_file *file, int data_length, char *data, s
{
// We have to skip a whole data pointer:
offset_to_next_entry - = ( DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE ) ;
printf ( " Skip, offset is now: %d \n " , offset_to_next_entry ) ;
data_pointer_index + + ;
}
@ -406,6 +413,7 @@ int lsfs_disk_write_data_to_file(lsfs_file *file, int data_length, char *data, s
//write_data_to_disk(file->file_id, 4, &p_control.master_table[file->file_id]);
// Should return the total new file size
printf ( " We Think that we have written: %d \n " , amount_written ) ;
return amount_written ;
}
@ -518,6 +526,7 @@ int get_free_sectors(int num_sectors_needed, lsfs_sector_offset* output_array) {
{
return - EINVAL ; // We don't have any more data pointers.
}
if ( output_array [ i ] = = 0 )
{
// If free we can assign:
@ -619,8 +628,8 @@ int lsfs_disk_install_vbr(char *vbr_path)
fseek ( vbr , 0 , SEEK_SET ) ;
fread ( vbr_buffer , 1 , st . st_size , vbr ) ;
write_data_to_disk ( ( p_control . fsci . this_partition_offset_on_disk - SPACE_VBR_RECORD ) , SPACE_VBR_RECORD , vbr ) ; // Write this to the first sector of the disk.
printf ( " Sector index for vbr: %d - %d \n " , ( p_control . fsci . this_partition_offset_on_disk - SPACE_VBR_RECORD ) , st . st_size ) ;
write_data_to_disk ( ( p_control . fsci . this_partition_offset_on_disk - SPACE_VBR_RECORD ) , SPACE_VBR_RECORD , vbr_buffer ) ; // Write this to the first sector of the disk.
return 0 ;
}