summaryrefslogtreecommitdiff
path: root/src/lib/gcov-io.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/gcov-io.c')
-rw-r--r--src/lib/gcov-io.c516
1 files changed, 250 insertions, 266 deletions
diff --git a/src/lib/gcov-io.c b/src/lib/gcov-io.c
index 7f3b7281f4..e14252412e 100644
--- a/src/lib/gcov-io.c
+++ b/src/lib/gcov-io.c
@@ -36,13 +36,12 @@ static void gcov_allocate(unsigned int);
static inline gcov_unsigned_t from_file(gcov_unsigned_t value)
{
#if !IN_LIBGCOV
- if (gcov_var.endian)
- {
- value = (value >> 16) | (value << 16);
- value = ((value & 0xff00ff) << 8) | ((value >> 8) & 0xff00ff);
- }
+ if (gcov_var.endian) {
+ value = (value >> 16) | (value << 16);
+ value = ((value & 0xff00ff) << 8) | ((value >> 8) & 0xff00ff);
+ }
#endif
- return value;
+ return value;
}
/* Open a gcov file. NAME is the name of the file to open and MODE
@@ -63,91 +62,83 @@ gcov_open(const char *name, int mode)
#endif
{
#if IN_LIBGCOV
- const int mode = 0;
+ const int mode = 0;
#endif
#if GCOV_LOCKED
- struct flock s_flock;
- int fd;
+ struct flock s_flock;
+ int fd;
- s_flock.l_whence = SEEK_SET;
- s_flock.l_start = 0;
- s_flock.l_len = 0; /* Until EOF. */
- s_flock.l_pid = getpid();
+ s_flock.l_whence = SEEK_SET;
+ s_flock.l_start = 0;
+ s_flock.l_len = 0; /* Until EOF. */
+ s_flock.l_pid = getpid();
#endif
- gcc_assert(!gcov_var.file);
- gcov_var.start = 0;
- gcov_var.offset = gcov_var.length = 0;
- gcov_var.overread = -1u;
- gcov_var.error = 0;
+ gcc_assert(!gcov_var.file);
+ gcov_var.start = 0;
+ gcov_var.offset = gcov_var.length = 0;
+ gcov_var.overread = -1u;
+ gcov_var.error = 0;
#if !IN_LIBGCOV
- gcov_var.endian = 0;
+ gcov_var.endian = 0;
#endif
#if GCOV_LOCKED
- if (mode > 0)
- {
- /* Read-only mode - acquire a read-lock. */
- s_flock.l_type = F_RDLCK;
- fd = open(name, O_RDONLY);
- }
- else
- {
- /* Write mode - acquire a write-lock. */
- s_flock.l_type = F_WRLCK;
- fd = open(name, O_RDWR | O_CREAT, 0666);
- }
- if (fd < 0)
- return 0;
-
- while (fcntl(fd, F_SETLKW, &s_flock) && errno == EINTR)
- continue;
-
- gcov_var.file = fdopen(fd, (mode > 0) ? "rb" : "r+b");
-
- if (!gcov_var.file)
- {
- close(fd);
- return 0;
- }
-
- if (mode > 0)
- gcov_var.mode = 1;
- else if (mode == 0)
- {
- struct stat st;
-
- if (fstat(fd, &st) < 0)
- {
- fclose(gcov_var.file);
- gcov_var.file = 0;
- return 0;
+ if (mode > 0) {
+ /* Read-only mode - acquire a read-lock. */
+ s_flock.l_type = F_RDLCK;
+ fd = open(name, O_RDONLY);
+ } else {
+ /* Write mode - acquire a write-lock. */
+ s_flock.l_type = F_WRLCK;
+ fd = open(name, O_RDWR | O_CREAT, 0666);
}
- if (st.st_size != 0)
- gcov_var.mode = 1;
- else
- gcov_var.mode = mode * 2 + 1;
- }
- else
- gcov_var.mode = mode * 2 + 1;
+ if (fd < 0)
+ return 0;
+
+ while (fcntl(fd, F_SETLKW, &s_flock) && errno == EINTR)
+ continue;
+
+ gcov_var.file = fdopen(fd, (mode > 0) ? "rb" : "r+b");
+
+ if (!gcov_var.file) {
+ close(fd);
+ return 0;
+ }
+
+ if (mode > 0)
+ gcov_var.mode = 1;
+ else if (mode == 0) {
+ struct stat st;
+
+ if (fstat(fd, &st) < 0) {
+ fclose(gcov_var.file);
+ gcov_var.file = 0;
+ return 0;
+ }
+ if (st.st_size != 0)
+ gcov_var.mode = 1;
+ else
+ gcov_var.mode = mode * 2 + 1;
+ } else
+ gcov_var.mode = mode * 2 + 1;
#else
- if (mode >= 0)
- gcov_var.file = fopen(name, (mode > 0) ? "rb" : "r+b");
-
- if (gcov_var.file)
- gcov_var.mode = 1;
- else if (mode <= 0)
- {
- gcov_var.file = fopen(name, "w+b");
- if (gcov_var.file)
- gcov_var.mode = mode * 2 + 1;
- }
- if (!gcov_var.file)
- return 0;
+ if (mode >= 0)
+ gcov_var.file = fopen(name, (mode > 0) ? "rb" : "r+b");
+
+ if (gcov_var.file)
+ gcov_var.mode = 1;
+ else if (mode <= 0) {
+ gcov_var.file = fopen(name, "w+b");
+ if (gcov_var.file)
+ gcov_var.mode = mode * 2 + 1;
+ }
+ if (!gcov_var.file)
+ return 0;
#endif
- setbuf(gcov_var.file, (char *)0);
+ setbuf(gcov_var.file, (char *)0);
- return 1;
+ return 1;
}
/* Close the current gcov file. Flushes data to disk. Returns nonzero
@@ -156,23 +147,22 @@ gcov_open(const char *name, int mode)
GCOV_LINKAGE int
gcov_close(void)
{
- if (gcov_var.file)
- {
+ if (gcov_var.file) {
#if !IN_GCOV
- if (gcov_var.offset && gcov_var.mode < 0)
- gcov_write_block(gcov_var.offset);
+ if (gcov_var.offset && gcov_var.mode < 0)
+ gcov_write_block(gcov_var.offset);
#endif
- fclose(gcov_var.file);
- gcov_var.file = 0;
- gcov_var.length = 0;
- }
+ fclose(gcov_var.file);
+ gcov_var.file = 0;
+ gcov_var.length = 0;
+ }
#if !IN_LIBGCOV
- free(gcov_var.buffer);
- gcov_var.alloc = 0;
- gcov_var.buffer = 0;
+ free(gcov_var.buffer);
+ gcov_var.alloc = 0;
+ gcov_var.buffer = 0;
#endif
- gcov_var.mode = 0;
- return gcov_var.error;
+ gcov_var.mode = 0;
+ return gcov_var.error;
}
#if !IN_LIBGCOV
@@ -183,16 +173,15 @@ gcov_close(void)
GCOV_LINKAGE int
gcov_magic(gcov_unsigned_t magic, gcov_unsigned_t expected)
{
- if (magic == expected)
- return 1;
- magic = (magic >> 16) | (magic << 16);
- magic = ((magic & 0xff00ff) << 8) | ((magic >> 8) & 0xff00ff);
- if (magic == expected)
- {
- gcov_var.endian = 1;
- return -1;
- }
- return 0;
+ if (magic == expected)
+ return 1;
+ magic = (magic >> 16) | (magic << 16);
+ magic = ((magic & 0xff00ff) << 8) | ((magic >> 8) & 0xff00ff);
+ if (magic == expected) {
+ gcov_var.endian = 1;
+ return -1;
+ }
+ return 0;
}
#endif
@@ -200,15 +189,16 @@ gcov_magic(gcov_unsigned_t magic, gcov_unsigned_t expected)
static void
gcov_allocate(unsigned int length)
{
- size_t new_size = gcov_var.alloc;
+ size_t new_size = gcov_var.alloc;
- if (!new_size)
- new_size = GCOV_BLOCK_SIZE;
- new_size += length;
- new_size *= 2;
+ if (!new_size)
+ new_size = GCOV_BLOCK_SIZE;
+ new_size += length;
+ new_size *= 2;
- gcov_var.alloc = new_size;
- gcov_var.buffer = XRESIZEVAR(gcov_unsigned_t, gcov_var.buffer, new_size << 2);
+ gcov_var.alloc = new_size;
+ gcov_var.buffer = XRESIZEVAR(gcov_unsigned_t, gcov_var.buffer,
+ new_size << 2);
}
#endif
@@ -218,10 +208,10 @@ gcov_allocate(unsigned int length)
static void
gcov_write_block(unsigned int size)
{
- if (fwrite(gcov_var.buffer, size << 2, 1, gcov_var.file) != 1)
- gcov_var.error = 1;
- gcov_var.start += size;
- gcov_var.offset -= size;
+ if (fwrite(gcov_var.buffer, size << 2, 1, gcov_var.file) != 1)
+ gcov_var.error = 1;
+ gcov_var.start += size;
+ gcov_var.offset -= size;
}
/* Allocate space to write BYTES bytes to the gcov file. Return a
@@ -230,27 +220,26 @@ gcov_write_block(unsigned int size)
static gcov_unsigned_t *
gcov_write_words(unsigned int words)
{
- gcov_unsigned_t *result;
+ gcov_unsigned_t *result;
- gcc_assert(gcov_var.mode < 0);
+ gcc_assert(gcov_var.mode < 0);
#if IN_LIBGCOV
- if (gcov_var.offset >= GCOV_BLOCK_SIZE)
- {
- gcov_write_block(GCOV_BLOCK_SIZE);
- if (gcov_var.offset)
- {
- gcc_assert(gcov_var.offset == 1);
- memcpy(gcov_var.buffer, gcov_var.buffer + GCOV_BLOCK_SIZE, 4);
+ if (gcov_var.offset >= GCOV_BLOCK_SIZE) {
+ gcov_write_block(GCOV_BLOCK_SIZE);
+ if (gcov_var.offset) {
+ gcc_assert(gcov_var.offset == 1);
+ memcpy(gcov_var.buffer, gcov_var.buffer
+ + GCOV_BLOCK_SIZE, 4);
+ }
}
- }
#else
- if (gcov_var.offset + words > gcov_var.alloc)
- gcov_allocate(gcov_var.offset + words);
+ if (gcov_var.offset + words > gcov_var.alloc)
+ gcov_allocate(gcov_var.offset + words);
#endif
- result = &gcov_var.buffer[gcov_var.offset];
- gcov_var.offset += words;
+ result = &gcov_var.buffer[gcov_var.offset];
+ gcov_var.offset += words;
- return result;
+ return result;
}
/* Write unsigned VALUE to coverage file. Sets error flag
@@ -259,9 +248,9 @@ gcov_write_words(unsigned int words)
GCOV_LINKAGE void
gcov_write_unsigned(gcov_unsigned_t value)
{
- gcov_unsigned_t *buffer = gcov_write_words(1);
+ gcov_unsigned_t *buffer = gcov_write_words(1);
- buffer[0] = value;
+ buffer[0] = value;
}
/* Write counter VALUE to coverage file. Sets error flag
@@ -271,13 +260,13 @@ gcov_write_unsigned(gcov_unsigned_t value)
GCOV_LINKAGE void
gcov_write_counter(gcov_type value)
{
- gcov_unsigned_t *buffer = gcov_write_words(2);
+ gcov_unsigned_t *buffer = gcov_write_words(2);
- buffer[0] = (gcov_unsigned_t) value;
- if (sizeof(value) > sizeof(gcov_unsigned_t))
- buffer[1] = (gcov_unsigned_t) (value >> 32);
- else
- buffer[1] = 0;
+ buffer[0] = (gcov_unsigned_t) value;
+ if (sizeof(value) > sizeof(gcov_unsigned_t))
+ buffer[1] = (gcov_unsigned_t) (value >> 32);
+ else
+ buffer[1] = 0;
}
#endif /* IN_LIBGCOV */
@@ -288,21 +277,20 @@ gcov_write_counter(gcov_type value)
GCOV_LINKAGE void
gcov_write_string(const char *string)
{
- unsigned int length = 0;
- unsigned int alloc = 0;
- gcov_unsigned_t *buffer;
+ unsigned int length = 0;
+ unsigned int alloc = 0;
+ gcov_unsigned_t *buffer;
- if (string)
- {
- length = strlen(string);
- alloc = (length + 4) >> 2;
- }
+ if (string) {
+ length = strlen(string);
+ alloc = (length + 4) >> 2;
+ }
- buffer = gcov_write_words(1 + alloc);
+ buffer = gcov_write_words(1 + alloc);
- buffer[0] = alloc;
- buffer[alloc] = 0;
- memcpy(&buffer[1], string, length);
+ buffer[0] = alloc;
+ buffer[alloc] = 0;
+ memcpy(&buffer[1], string, length);
}
#endif
@@ -313,13 +301,13 @@ gcov_write_string(const char *string)
GCOV_LINKAGE gcov_position_t
gcov_write_tag(gcov_unsigned_t tag)
{
- gcov_position_t result = gcov_var.start + gcov_var.offset;
- gcov_unsigned_t *buffer = gcov_write_words(2);
+ gcov_position_t result = gcov_var.start + gcov_var.offset;
+ gcov_unsigned_t *buffer = gcov_write_words(2);
- buffer[0] = tag;
- buffer[1] = 0;
+ buffer[0] = tag;
+ buffer[1] = 0;
- return result;
+ return result;
}
/* Write a record length using POSITION, which was returned by
@@ -330,19 +318,19 @@ gcov_write_tag(gcov_unsigned_t tag)
GCOV_LINKAGE void
gcov_write_length(gcov_position_t position)
{
- unsigned int offset;
- gcov_unsigned_t length;
- gcov_unsigned_t *buffer;
-
- gcc_assert(gcov_var.mode < 0);
- gcc_assert(position + 2 <= gcov_var.start + gcov_var.offset);
- gcc_assert(position >= gcov_var.start);
- offset = position - gcov_var.start;
- length = gcov_var.offset - offset - 2;
- buffer = (gcov_unsigned_t *) &gcov_var.buffer[offset];
- buffer[1] = length;
- if (gcov_var.offset >= GCOV_BLOCK_SIZE)
- gcov_write_block(gcov_var.offset);
+ unsigned int offset;
+ gcov_unsigned_t length;
+ gcov_unsigned_t *buffer;
+
+ gcc_assert(gcov_var.mode < 0);
+ gcc_assert(position + 2 <= gcov_var.start + gcov_var.offset);
+ gcc_assert(position >= gcov_var.start);
+ offset = position - gcov_var.start;
+ length = gcov_var.offset - offset - 2;
+ buffer = (gcov_unsigned_t *) &gcov_var.buffer[offset];
+ buffer[1] = length;
+ if (gcov_var.offset >= GCOV_BLOCK_SIZE)
+ gcov_write_block(gcov_var.offset);
}
#else /* IN_LIBGCOV */
@@ -352,10 +340,10 @@ gcov_write_length(gcov_position_t position)
GCOV_LINKAGE void
gcov_write_tag_length(gcov_unsigned_t tag, gcov_unsigned_t length)
{
- gcov_unsigned_t *buffer = gcov_write_words(2);
+ gcov_unsigned_t *buffer = gcov_write_words(2);
- buffer[0] = tag;
- buffer[1] = length;
+ buffer[0] = tag;
+ buffer[1] = length;
}
/* Write a summary structure to the gcov file. Return nonzero on
@@ -364,19 +352,18 @@ gcov_write_tag_length(gcov_unsigned_t tag, gcov_unsigned_t length)
GCOV_LINKAGE void
gcov_write_summary(gcov_unsigned_t tag, const struct gcov_summary *summary)
{
- unsigned int ix;
- const struct gcov_ctr_summary *csum;
-
- gcov_write_tag_length(tag, GCOV_TAG_SUMMARY_LENGTH);
- gcov_write_unsigned(summary->checksum);
- for (csum = summary->ctrs, ix = GCOV_COUNTERS_SUMMABLE; ix--; csum++)
- {
- gcov_write_unsigned(csum->num);
- gcov_write_unsigned(csum->runs);
- gcov_write_counter(csum->sum_all);
- gcov_write_counter(csum->run_max);
- gcov_write_counter(csum->sum_max);
- }
+ unsigned int ix;
+ const struct gcov_ctr_summary *csum;
+
+ gcov_write_tag_length(tag, GCOV_TAG_SUMMARY_LENGTH);
+ gcov_write_unsigned(summary->checksum);
+ for (csum = summary->ctrs, ix = GCOV_COUNTERS_SUMMABLE; ix--; csum++) {
+ gcov_write_unsigned(csum->num);
+ gcov_write_unsigned(csum->runs);
+ gcov_write_counter(csum->sum_all);
+ gcov_write_counter(csum->run_max);
+ gcov_write_counter(csum->sum_max);
+ }
}
#endif /* IN_LIBGCOV */
@@ -388,45 +375,44 @@ gcov_write_summary(gcov_unsigned_t tag, const struct gcov_summary *summary)
static const gcov_unsigned_t *
gcov_read_words(unsigned int words)
{
- const gcov_unsigned_t *result;
- unsigned int excess = gcov_var.length - gcov_var.offset;
+ const gcov_unsigned_t *result;
+ unsigned int excess = gcov_var.length - gcov_var.offset;
- gcc_assert(gcov_var.mode > 0);
- if (excess < words)
- {
- gcov_var.start += gcov_var.offset;
+ gcc_assert(gcov_var.mode > 0);
+ if (excess < words) {
+ gcov_var.start += gcov_var.offset;
#if IN_LIBGCOV
- if (excess)
- {
- gcc_assert(excess == 1);
- memcpy(gcov_var.buffer, gcov_var.buffer + gcov_var.offset, 4);
- }
+ if (excess) {
+ gcc_assert(excess == 1);
+ memcpy(gcov_var.buffer, gcov_var.buffer
+ + gcov_var.offset, 4);
+ }
#else
- memmove(gcov_var.buffer, gcov_var.buffer + gcov_var.offset, excess * 4);
+ memmove(gcov_var.buffer, gcov_var.buffer
+ + gcov_var.offset, excess * 4);
#endif
- gcov_var.offset = 0;
- gcov_var.length = excess;
+ gcov_var.offset = 0;
+ gcov_var.length = excess;
#if IN_LIBGCOV
- gcc_assert(!gcov_var.length || gcov_var.length == 1);
- excess = GCOV_BLOCK_SIZE;
+ gcc_assert(!gcov_var.length || gcov_var.length == 1);
+ excess = GCOV_BLOCK_SIZE;
#else
- if (gcov_var.length + words > gcov_var.alloc)
- gcov_allocate(gcov_var.length + words);
- excess = gcov_var.alloc - gcov_var.length;
+ if (gcov_var.length + words > gcov_var.alloc)
+ gcov_allocate(gcov_var.length + words);
+ excess = gcov_var.alloc - gcov_var.length;
#endif
- excess = fread(gcov_var.buffer + gcov_var.length,
- 1, excess << 2, gcov_var.file) >> 2;
- gcov_var.length += excess;
- if (gcov_var.length < words)
- {
- gcov_var.overread += words - gcov_var.length;
- gcov_var.length = 0;
- return 0;
+ excess = fread(gcov_var.buffer + gcov_var.length,
+ 1, excess << 2, gcov_var.file) >> 2;
+ gcov_var.length += excess;
+ if (gcov_var.length < words) {
+ gcov_var.overread += words - gcov_var.length;
+ gcov_var.length = 0;
+ return 0;
+ }
}
- }
- result = &gcov_var.buffer[gcov_var.offset];
- gcov_var.offset += words;
- return result;
+ result = &gcov_var.buffer[gcov_var.offset];
+ gcov_var.offset += words;
+ return result;
}
/* Read unsigned value from a coverage file. Sets error flag on file
@@ -435,13 +421,13 @@ gcov_read_words(unsigned int words)
GCOV_LINKAGE gcov_unsigned_t
gcov_read_unsigned(void)
{
- gcov_unsigned_t value;
- const gcov_unsigned_t *buffer = gcov_read_words(1);
+ gcov_unsigned_t value;
+ const gcov_unsigned_t *buffer = gcov_read_words(1);
- if (!buffer)
- return 0;
- value = from_file(buffer[0]);
- return value;
+ if (!buffer)
+ return 0;
+ value = from_file(buffer[0]);
+ return value;
}
/* Read counter value from a coverage file. Sets error flag on file
@@ -450,18 +436,18 @@ gcov_read_unsigned(void)
GCOV_LINKAGE gcov_type
gcov_read_counter(void)
{
- gcov_type value;
- const gcov_unsigned_t *buffer = gcov_read_words(2);
-
- if (!buffer)
- return 0;
- value = from_file(buffer[0]);
- if (sizeof(value) > sizeof(gcov_unsigned_t))
- value |= ((gcov_type) from_file(buffer[1])) << 32;
- else if (buffer[1])
- gcov_var.error = -1;
-
- return value;
+ gcov_type value;
+ const gcov_unsigned_t *buffer = gcov_read_words(2);
+
+ if (!buffer)
+ return 0;
+ value = from_file(buffer[0]);
+ if (sizeof(value) > sizeof(gcov_unsigned_t))
+ value |= ((gcov_type) from_file(buffer[1])) << 32;
+ else if (buffer[1])
+ gcov_var.error = -1;
+
+ return value;
}
/* Read string from coverage file. Returns a pointer to a static
@@ -472,30 +458,29 @@ gcov_read_counter(void)
GCOV_LINKAGE const char *
gcov_read_string(void)
{
- unsigned int length = gcov_read_unsigned();
+ unsigned int length = gcov_read_unsigned();
- if (!length)
- return 0;
+ if (!length)
+ return 0;
- return (const char *) gcov_read_words(length);
+ return (const char *) gcov_read_words(length);
}
#endif
GCOV_LINKAGE void
gcov_read_summary(struct gcov_summary *summary)
{
- unsigned int ix;
- struct gcov_ctr_summary *csum;
-
- summary->checksum = gcov_read_unsigned();
- for (csum = summary->ctrs, ix = GCOV_COUNTERS_SUMMABLE; ix--; csum++)
- {
- csum->num = gcov_read_unsigned();
- csum->runs = gcov_read_unsigned();
- csum->sum_all = gcov_read_counter();
- csum->run_max = gcov_read_counter();
- csum->sum_max = gcov_read_counter();
- }
+ unsigned int ix;
+ struct gcov_ctr_summary *csum;
+
+ summary->checksum = gcov_read_unsigned();
+ for (csum = summary->ctrs, ix = GCOV_COUNTERS_SUMMABLE; ix--; csum++) {
+ csum->num = gcov_read_unsigned();
+ csum->runs = gcov_read_unsigned();
+ csum->sum_all = gcov_read_counter();
+ csum->run_max = gcov_read_counter();
+ csum->sum_max = gcov_read_counter();
+ }
}
#if !IN_LIBGCOV
@@ -505,16 +490,15 @@ gcov_read_summary(struct gcov_summary *summary)
GCOV_LINKAGE void
gcov_sync(gcov_position_t base, gcov_unsigned_t length)
{
- gcc_assert(gcov_var.mode > 0);
- base += length;
- if (base - gcov_var.start <= gcov_var.length)
- gcov_var.offset = base - gcov_var.start;
- else
- {
- gcov_var.offset = gcov_var.length = 0;
- fseek(gcov_var.file, base << 2, SEEK_SET);
- gcov_var.start = ftell(gcov_var.file) >> 2;
- }
+ gcc_assert(gcov_var.mode > 0);
+ base += length;
+ if (base - gcov_var.start <= gcov_var.length)
+ gcov_var.offset = base - gcov_var.start;
+ else {
+ gcov_var.offset = gcov_var.length = 0;
+ fseek(gcov_var.file, base << 2, SEEK_SET);
+ gcov_var.start = ftell(gcov_var.file) >> 2;
+ }
}
#endif
@@ -524,11 +508,11 @@ gcov_sync(gcov_position_t base, gcov_unsigned_t length)
GCOV_LINKAGE void
gcov_seek(gcov_position_t base)
{
- gcc_assert(gcov_var.mode < 0);
- if (gcov_var.offset)
- gcov_write_block(gcov_var.offset);
- fseek(gcov_var.file, base << 2, SEEK_SET);
- gcov_var.start = ftell(gcov_var.file) >> 2;
+ gcc_assert(gcov_var.mode < 0);
+ if (gcov_var.offset)
+ gcov_write_block(gcov_var.offset);
+ fseek(gcov_var.file, base << 2, SEEK_SET);
+ gcov_var.start = ftell(gcov_var.file) >> 2;
}
#endif
@@ -538,11 +522,11 @@ gcov_seek(gcov_position_t base)
GCOV_LINKAGE time_t
gcov_time(void)
{
- struct stat status;
+ struct stat status;
- if (fstat(fileno(gcov_var.file), &status))
- return 0;
- else
- return status.st_mtime;
+ if (fstat(fileno(gcov_var.file), &status))
+ return 0;
+ else
+ return status.st_mtime;
}
#endif /* IN_GCOV */