Big changes, starting to divided up i .c and .h files
This commit is contained in:
1 parent
d5bc5e8958
commit
ec61cd8b8a
11 files changed
+2669
-1327
No files matched your search
@@ -0,0 +1,112 @@
|
||||
#include "lsfs.h"
|
||||
#include "../main.h"
|
||||
|
||||
struct lsfs_file {
|
||||
long file_id[2];
|
||||
long table_entry_pointer[2];
|
||||
Table_Entry_Kind entry_kind;
|
||||
char* filename;
|
||||
long owner_id;
|
||||
long size[2];
|
||||
long creation_date[2];
|
||||
long access_time[2];
|
||||
long modification_time[2];
|
||||
long number_sector;
|
||||
long table_entry_sector_index[2];
|
||||
long data_pointer[NUM_DATA_POINTERS * 2];
|
||||
};
|
||||
|
||||
int lsfs_disk_read_data_from_file(file, buffer_size, data, offset_to_next_entry)
|
||||
lsfs_file *file;
|
||||
int buffer_size;
|
||||
char *data;
|
||||
long offset_to_next_entry;
|
||||
{
|
||||
int integer_file_size = file->size;
|
||||
int integer_offset = offset_to_next_entry;
|
||||
int integer_datapointer = 0;
|
||||
int data_length = integer_file_size - integer_offset;
|
||||
int amount_read = 0;
|
||||
int amount_to_read = 0;
|
||||
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. */
|
||||
|
||||
if (data_length > buffer_size)
|
||||
{
|
||||
data_length = buffer_size;
|
||||
}
|
||||
|
||||
while(data_length > 0) /* We have more to write */
|
||||
{
|
||||
/* printf("READ: Remaing Data length: %d\n", data_length); */
|
||||
if (remaining_offset == 0)
|
||||
{
|
||||
char *tmp_buffer = calloc(DEFAULT_DATA_POINTER_SIZE, SECTOR_SIZE);
|
||||
/* assert(tmp_buffer); */
|
||||
|
||||
if (data_length < (DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE))
|
||||
{
|
||||
amount_to_read = data_length;
|
||||
}
|
||||
else
|
||||
{
|
||||
amount_to_read = (DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE);
|
||||
}
|
||||
/* disk_service_read_data_from_disk(lsfs_sector_offset index, uint32_t number_sector, void* data_buffer) */
|
||||
integer_datapointer = file->data_pointer[data_pointer_index];
|
||||
if (integer_datapointer == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
disk_service_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);
|
||||
data_length -= amount_to_read;
|
||||
amount_read += amount_to_read;
|
||||
data_pointer_index++;
|
||||
/* free(tmp_buffer); */
|
||||
}
|
||||
else if (remaining_offset < (DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE))
|
||||
{
|
||||
char *tmp_buffer = calloc(1, (DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE));
|
||||
/* assert(tmp_buffer); */
|
||||
|
||||
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) - remaining_offset);
|
||||
}
|
||||
|
||||
disk_service_read_data_from_disk(file->data_pointer[data_pointer_index], DEFAULT_DATA_POINTER_SIZE, tmp_buffer);
|
||||
|
||||
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); */
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We have to skip a whole data pointer: */
|
||||
remaining_offset -= (DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE);
|
||||
data_pointer_index++;
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
time_t current_time;
|
||||
time ( ¤t_time );
|
||||
file->access_time = current_time;
|
||||
*/
|
||||
return amount_read;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef LSFS_H
|
||||
#define LSFS_H
|
||||
|
||||
typedef struct lsfs_file lsfs_file;
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user