https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=fdca943103761e494f9e59a589d7e15100fe5e7b
commit fdca943103761e494f9e59a589d7e15100fe5e7b
Author: Florian Krohm <fl...@ei...>
Date: Mon Mar 24 14:44:07 2025 +0000
s390x: disasm-test tweaks
- Give error messages a prefix.
- Do not segfault when the .dump file is empty. This happens when the
generated testcase has compiler errors.
- Avoid a file leak when reading the .dump file causes an I/O error.
Diff:
---
none/tests/s390x/disasm-test/main.c | 1 +
none/tests/s390x/disasm-test/objdump.c | 21 +++++++++++++++++----
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/none/tests/s390x/disasm-test/main.c b/none/tests/s390x/disasm-test/main.c
index 75d007b933..46f55cf4ce 100644
--- a/none/tests/s390x/disasm-test/main.c
+++ b/none/tests/s390x/disasm-test/main.c
@@ -296,6 +296,7 @@ error(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
+ fprintf(stderr, "error: ");
vfprintf(stderr, fmt, args);
va_end(args);
}
diff --git a/none/tests/s390x/disasm-test/objdump.c b/none/tests/s390x/disasm-test/objdump.c
index 62d8346540..7100e47420 100644
--- a/none/tests/s390x/disasm-test/objdump.c
+++ b/none/tests/s390x/disasm-test/objdump.c
@@ -32,6 +32,7 @@
static int get_nibble(const char *);
static int get_byte(const char *);
+static void io_error(FILE *, const char *, const char *);
objdump_file *
@@ -43,20 +44,24 @@ read_objdump(const char *file)
/* Slurp file into memory */
FILE *fp = fopen(file, "rb");
if (fp == NULL) {
- error("%s: fopen failed\n", file);
+ io_error(fp, file, "fopen failed\n");
return NULL;
}
/* Determine file size */
int rc = fseek(fp, 0, SEEK_END);
if (rc < 0) {
- error("%s: fseek failed\n", file);
+ io_error(fp, file, "fseek failed\n");
return NULL;
}
long size = ftell(fp);
if (size < 0) {
- error("%s: ftell failed\n", file);
+ io_error(fp, file, "ftell failed\n");
+ return NULL;
+ }
+ if (size == 0) {
+ io_error(fp, file, "file is empty\n");
return NULL;
}
rewind(fp);
@@ -64,7 +69,7 @@ read_objdump(const char *file)
char *const buf = mallock(size + 1);
size_t num_read = fread(buf, 1, size, fp);
if (num_read != size) {
- error("%s: fread failed\n", file);
+ io_error(fp, file, "fread failed\n");
free(buf);
return NULL;
}
@@ -235,3 +240,11 @@ get_byte(const char *p)
return (n1 << 4) + n2;
}
+
+static void
+io_error(FILE *fp, const char *file, const char *msg)
+{
+ if (fp)
+ fclose(fp);
+ error("%s: %s", file, msg);
+}
|