mirror of https://github.com/mgba-emu/mgba.git
Core: Improve handling failures in mCoreSaveStateNamed function (#1272)
* Core: Do not set time in save state if we could not get the time Signed-off-by: Francois Berder <fberder@outlook.fr> * Core: Fix memory leak if gettimeofday or timespec_get failed Signed-off-by: Francois Berder <fberder@outlook.fr> * Core: Protect against malloc failure in mCoreSaveStateNamed Signed-off-by: Francois Berder <fberder@outlook.fr>
This commit is contained in:
parent
59e050edbe
commit
1ef1ebbf8d
|
@ -306,6 +306,7 @@ bool mCoreSaveStateNamed(struct mCore* core, struct VFile* vf, int flags) {
|
||||||
|
|
||||||
if (flags & SAVESTATE_METADATA) {
|
if (flags & SAVESTATE_METADATA) {
|
||||||
uint64_t* creationUsec = malloc(sizeof(*creationUsec));
|
uint64_t* creationUsec = malloc(sizeof(*creationUsec));
|
||||||
|
if (creationUsec) {
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
if (!gettimeofday(&tv, 0)) {
|
if (!gettimeofday(&tv, 0)) {
|
||||||
|
@ -322,9 +323,12 @@ bool mCoreSaveStateNamed(struct mCore* core, struct VFile* vf, int flags) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else {
|
else {
|
||||||
|
free(creationUsec);
|
||||||
creationUsec = 0;
|
creationUsec = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (creationUsec) {
|
||||||
struct mStateExtdataItem item = {
|
struct mStateExtdataItem item = {
|
||||||
.size = sizeof(*creationUsec),
|
.size = sizeof(*creationUsec),
|
||||||
.data = creationUsec,
|
.data = creationUsec,
|
||||||
|
@ -332,6 +336,7 @@ bool mCoreSaveStateNamed(struct mCore* core, struct VFile* vf, int flags) {
|
||||||
};
|
};
|
||||||
mStateExtdataPut(&extdata, EXTDATA_META_TIME, &item);
|
mStateExtdataPut(&extdata, EXTDATA_META_TIME, &item);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & SAVESTATE_SAVEDATA) {
|
if (flags & SAVESTATE_SAVEDATA) {
|
||||||
void* sram = NULL;
|
void* sram = NULL;
|
||||||
|
|
Loading…
Reference in New Issue