From 4e5cb7b5fdf25613422205ee56290a8e47701d9f Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Mon, 18 Mar 2019 16:32:57 +0100 Subject: Fix handling of various error cases in cc4group_createTmpMemoryFile --- src/cc4group.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'src/cc4group.c') diff --git a/src/cc4group.c b/src/cc4group.c index 85c1be4..00e0a0d 100644 --- a/src/cc4group.c +++ b/src/cc4group.c @@ -333,22 +333,24 @@ static void* cc4group_createTmpMemoryFile(CC4Group* const this, const size_t siz if(unmapData == NULL) { - fprintf(stderr, "ERROR: allocating memory for cleanup data: %s\n", strerror(errno)); - } + SET_ERRNO_ERROR("malloc: allocating memory for cleanup data"); - *unmapData = (MunmapData){ret, size, mmapExtra}; - *cleanupJob = (CC4Group_CleanupJob){(CC4Group_CleanupFunc)cc4group_unmapTmpMemoryFile, unmapData}; + if(cc4group_munmap(ret, size, mmapExtra) == -1) + { + SET_ERRNO_ERROR("malloc: allocating memory for cleanup data; additionally munmap: unmapping the mapped file failed"); + } + ret = NULL; + } + else + { + *unmapData = (MunmapData){ret, size, mmapExtra}; + *cleanupJob = (CC4Group_CleanupJob){(CC4Group_CleanupFunc)cc4group_unmapTmpMemoryFile, unmapData}; + } } if(close(tmpFile) == -1) { fprintf(stderr, "WARNING: close: Closing tmp file failed: %s\n", strerror(errno)); - - if(ret != NULL) - { - cleanupJob->func(cleanupJob->data); - } - return NULL; } if(unlink(TMP_FILE) == -1) -- cgit v1.2.3-54-g00ecf