iso9660: try to catch some potential mount errors
This commit is contained in:
parent
5c5b0952d0
commit
178841882b
@ -139,16 +139,15 @@ static void file_from_dir_entry(iso_9660_fs_t * this, size_t sector, iso_9660_di
|
|||||||
|
|
||||||
#define CACHE_SIZE 64
|
#define CACHE_SIZE 64
|
||||||
|
|
||||||
static void read_sector(iso_9660_fs_t * this, uint32_t sector_id, char * buffer) {
|
static int read_sector(iso_9660_fs_t * this, uint32_t sector_id, char * buffer) {
|
||||||
if (this->cache) {
|
if (this->cache) {
|
||||||
void * sector_id_v = (void *)(uintptr_t)sector_id;
|
void * sector_id_v = (void *)(uintptr_t)sector_id;
|
||||||
if (hashmap_has(this->cache, sector_id_v)) {
|
if (hashmap_has(this->cache, sector_id_v)) {
|
||||||
memcpy(buffer,hashmap_get(this->cache, sector_id_v), this->block_size);
|
memcpy(buffer,hashmap_get(this->cache, sector_id_v), this->block_size);
|
||||||
|
|
||||||
node_t * me = list_find(this->lru, sector_id_v);
|
node_t * me = list_find(this->lru, sector_id_v);
|
||||||
list_delete(this->lru, me);
|
list_delete(this->lru, me);
|
||||||
list_append(this->lru, me);
|
list_append(this->lru, me);
|
||||||
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
if (this->lru->length > CACHE_SIZE) {
|
if (this->lru->length > CACHE_SIZE) {
|
||||||
node_t * l = list_dequeue(this->lru);
|
node_t * l = list_dequeue(this->lru);
|
||||||
@ -156,14 +155,20 @@ static void read_sector(iso_9660_fs_t * this, uint32_t sector_id, char * buffer)
|
|||||||
hashmap_remove(this->cache, l->value);
|
hashmap_remove(this->cache, l->value);
|
||||||
free(l);
|
free(l);
|
||||||
}
|
}
|
||||||
read_fs(this->block_device, sector_id * this->block_size, this->block_size, (uint8_t *)buffer);
|
int result = read_fs(this->block_device, sector_id * this->block_size, this->block_size, (uint8_t *)buffer);
|
||||||
|
if (result < 0) return result;
|
||||||
|
if (result == 0) return 1;
|
||||||
char * buf = malloc(this->block_size);
|
char * buf = malloc(this->block_size);
|
||||||
memcpy(buf, buffer, this->block_size);
|
memcpy(buf, buffer, this->block_size);
|
||||||
hashmap_set(this->cache, sector_id_v, buf);
|
hashmap_set(this->cache, sector_id_v, buf);
|
||||||
list_insert(this->lru, sector_id_v);
|
list_insert(this->lru, sector_id_v);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
read_fs(this->block_device, sector_id * this->block_size, this->block_size, (uint8_t *)buffer);
|
int result = read_fs(this->block_device, sector_id * this->block_size, this->block_size, (uint8_t *)buffer);
|
||||||
|
if (result < 0) return result;
|
||||||
|
if (result == 0) return 1;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -433,7 +438,7 @@ static fs_node_t * iso_fs_mount(const char * device, const char * mount_path) {
|
|||||||
int i = 0x10;
|
int i = 0x10;
|
||||||
int found = 0;
|
int found = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
read_sector(this,i,(char*)tmp);
|
if (read_sector(this,i,(char*)tmp)) break;
|
||||||
if (tmp[0] == 0x00) {
|
if (tmp[0] == 0x00) {
|
||||||
//debug_print(WARNING, " Boot Record");
|
//debug_print(WARNING, " Boot Record");
|
||||||
} else if (tmp[0] == 0x01) {
|
} else if (tmp[0] == 0x01) {
|
||||||
|
Loading…
Reference in New Issue
Block a user