From b5ee4ac21b1c4d759659ad5c19bdb3ce7cb84a98 Mon Sep 17 00:00:00 2001 From: Jay McCarthy Date: Tue, 18 May 2010 09:18:45 -0500 Subject: [PATCH] Observing ftruncate results to remove error, adding comments to have better eyes look at a better way to recover from the problems --- src/foreign/gcc/libffi/src/closures.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/foreign/gcc/libffi/src/closures.c b/src/foreign/gcc/libffi/src/closures.c index c441b870f7..d1987510d7 100644 --- a/src/foreign/gcc/libffi/src/closures.c +++ b/src/foreign/gcc/libffi/src/closures.c @@ -379,8 +379,12 @@ dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) close (execfd); goto retry_open; } - ftruncate (execfd, offset); - return MFAIL; + if (ftruncate (execfd, offset)) { + // FIXME: Should fail "even worse" because the truncate failed + return MFAIL; + } else { + return MFAIL; + } } else if (!offset && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) @@ -391,8 +395,11 @@ dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) if (start == MFAIL) { munmap (ptr, length); - ftruncate (execfd, offset); - return start; + if (ftruncate (execfd, offset)) { + // FIXME: Should return failure, but how to recover work we've done? + 1; + } + return start; } mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start;