version 1.0.0-BETA-b3: Fixed error with offset read/write
This commit is contained in:
1 parent
ea451cd47e
commit
29f11fb06c
6 files changed
+31
-22
No files matched your search
BIN
Binary file not shown.
@@ -20,7 +20,7 @@ int dmu_print_file(char *path) {
|
||||
|
||||
printf("File ID: %lu\n", file->file_id);
|
||||
printf("Filename: %s\n", file->filename);
|
||||
printf("File size: %s\n", file->size);
|
||||
printf("File size: %lu\n", file->size);
|
||||
printf("Entry kind: %d", file->entry_kind);
|
||||
printf("Index in directory table: %d", file->table_entry_pointer);
|
||||
printf("Sector index on disk: %lu\n", file->table_entry_sector_index);
|
||||
|
||||
+30
-21
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
BIN
Binary file not shown.
Reference in new issue
Block a user