diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2019-03-18 16:32:57 +0100 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2019-03-18 16:33:18 +0100 |
| commit | 4e5cb7b5fdf25613422205ee56290a8e47701d9f (patch) | |
| tree | 69e3fb6a3d12a2a130c0370ef165e9f80b248550 /src/cc4group.c | |
| parent | 0a77f7a5fbee586e6a05120b087202b84f1a9dc6 (diff) | |
| download | cc4group-4e5cb7b5fdf25613422205ee56290a8e47701d9f.tar.gz cc4group-4e5cb7b5fdf25613422205ee56290a8e47701d9f.zip | |
Fix handling of various error cases in cc4group_createTmpMemoryFile
Diffstat (limited to 'src/cc4group.c')
| -rw-r--r-- | src/cc4group.c | 22 |
1 files changed, 12 insertions, 10 deletions
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) |
