Modify: bf: add file optional argument
This commit is contained in:
@@ -102,3 +102,33 @@ void cat_initrd(uint8_t* initrd, const char* filename)
|
||||
|
||||
printf("File '%s' not found\n", filename);
|
||||
}
|
||||
|
||||
int tar_file_to_buffer(uint8_t* initrd, const char* filename, char* buffer)
|
||||
{
|
||||
uint8_t* current_block = initrd;
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (current_block[0] == '\0')
|
||||
{
|
||||
//puts("[tar] EOF\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
const char* file_name = (const char*)current_block;
|
||||
uint32_t file_size = tar_parse_size((const char*)(current_block+124));
|
||||
|
||||
if (strcmp(file_name, filename) == 0)
|
||||
{
|
||||
uint8_t* file_data = current_block + TAR_BLOCK_SIZE;
|
||||
memcpy(buffer, file_data, file_size);
|
||||
buffer[file_size] = '\0';
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t total_size = ((file_size + TAR_BLOCK_SIZE - 1) / TAR_BLOCK_SIZE) * TAR_BLOCK_SIZE;
|
||||
current_block += TAR_BLOCK_SIZE + total_size;
|
||||
}
|
||||
printf("[tar] file '%s' not found\n", filename);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -33,5 +33,6 @@ typedef struct
|
||||
void tar_find_file(uint8_t *tar_start, const char* filename);
|
||||
void ls_initrd(uint8_t* initrd);
|
||||
void cat_initrd(uint8_t* initrd, const char* filename);
|
||||
int tar_file_to_buffer(uint8_t* initrd, const char* filename, char* buffer);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -34,6 +34,18 @@ void *memmove(void* dest, const void* src, size_t n)
|
||||
return dest;
|
||||
}
|
||||
|
||||
void *memcpy(void* dest, const void* src, uint32_t n)
|
||||
{
|
||||
uint8_t* d = (uint8_t*)dest;
|
||||
const uint8_t* s = (const uint8_t*)src;
|
||||
|
||||
for (uint32_t i=0; i<n; i++)
|
||||
{
|
||||
d[i] = s[i];
|
||||
}
|
||||
return dest;
|
||||
}
|
||||
|
||||
void panic()
|
||||
{
|
||||
for (;;);
|
||||
|
||||
@@ -13,6 +13,7 @@ typedef int size_t;
|
||||
|
||||
void *memset(void *dest, char val, size_t count);
|
||||
void *memmove(void* dest, const void* src, size_t n);
|
||||
void *memcpy(void* dest, const void* src, uint32_t n);
|
||||
|
||||
struct regs
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user