Added error types

This commit is contained in:
shermp
2019-06-09 13:41:22 +12:00
parent 67bf1af5ae
commit 0e877d1ec7
2 changed files with 15 additions and 9 deletions

View File

@@ -4,13 +4,19 @@
#include <stdio.h>
#include "minivhd_internal.h"
typedef enum MVHDType
{
MVHD_TYPE_FIXED = 2,
MVHD_TYPE_DYNAMIC = 3,
MVHD_TYPE_DIFF = 4
typedef enum MVHDType {
MVHD_TYPE_FIXED = 2,
MVHD_TYPE_DYNAMIC = 3,
MVHD_TYPE_DIFF = 4
} MVHDType;
typedef enum MVHDError {
MVHD_ERR_MEM = -1,
MVHD_ERR_FILE,
MVHD_ERR_NOT_VHD,
MVHD_ERR_TYPE
} MVHDError;
typedef struct MVHDMeta {
FILE* f;
char* filename;

View File

@@ -39,23 +39,23 @@ static void mvhd_read_sparse_header(MVHDMeta* vhdm) {
MVHDMeta* mvhd_open(const char* path, int* err) {
MVHDMeta *vhdm = calloc(sizeof *vhdm, 1);
if (vhdm == NULL) {
*err = -1;
*err = MVHD_ERR_MEM;
goto end;
}
vhdm->f = fopen64(path, "r+");
if (vhdm->f == NULL) {
*err = -2;
*err = MVHD_ERR_FILE;
goto cleanup_vhdm;
}
if (!mvhd_file_is_vhd(vhdm->f)) {
*err = -3;
*err = MVHD_ERR_NOT_VHD;
goto cleanup_file;
}
mvhd_read_footer(vhdm);
if (vhdm->footer.disk_type == MVHD_TYPE_DIFF || vhdm->footer.disk_type == MVHD_TYPE_DYNAMIC) {
mvhd_read_sparse_header(vhdm);
} else if (vhdm->footer.disk_type != MVHD_TYPE_FIXED) {
*err = -4;
*err = MVHD_ERR_TYPE;
goto cleanup_file;
}
/* If we've reached this point, we are good to go, so skip the cleanup steps */