mirror of
https://github.com/VARCem/MiniVHD.git
synced 2026-09-23 23:35:17 +00:00
Added error types
This commit is contained in:
16
minivhd.h
16
minivhd.h
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user