Make SAFE_* calls more informative when failing
The output has been "standardized" into the following format:
<file>:<line>: <func>(<params>) <error message>
E.g.:
test.c:130: chdir(mydir) failed
This will then be followed by the usual errno stuff if applicable.
Also includes a few fixes and coding style unification.
Signed-off-by: Mats Liljegren <mats.liljegren@enea.com>
Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
diff --git a/lib/safe_macros.c b/lib/safe_macros.c
index 6f85c11..0d805e9 100644
--- a/lib/safe_macros.c
+++ b/lib/safe_macros.c
@@ -19,11 +19,13 @@
char *rval;
rval = basename(path);
- if (rval == NULL)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "basename failed at %s:%d",
- file, lineno);
+ if (rval == NULL) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: basename(%s) failed",
+ file, lineno, path);
+ }
- return (rval);
+ return rval;
}
int
@@ -33,11 +35,13 @@
int rval;
rval = chdir(path);
- if (rval == -1)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "chdir failed at %s:%d",
- file, lineno);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: chdir(%s) failed",
+ file, lineno, path);
+ }
- return (rval);
+ return rval;
}
int
@@ -47,11 +51,13 @@
int rval;
rval = close(fildes);
- if (rval == -1)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "close failed at %s:%d",
- file, lineno);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: close(%d) failed",
+ file, lineno, fildes);
+ }
- return (rval);
+ return rval;
}
int
@@ -61,11 +67,13 @@
int rval;
rval = creat(pathname, mode);
- if (rval == -1)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "creat failed at %s:%d",
- file, lineno);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: creat(%s,0%o) failed",
+ file, lineno, pathname, mode);
+ }
- return (rval);
+ return rval;
}
char *safe_dirname(const char *file, const int lineno,
@@ -74,11 +82,13 @@
char *rval;
rval = dirname(path);
- if (rval == NULL)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "dirname failed at %s:%d",
- file, lineno);
+ if (rval == NULL) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: dirname(%s) failed",
+ file, lineno, path);
+ }
- return (rval);
+ return rval;
}
char *safe_getcwd(const char *file, const int lineno, void (*cleanup_fn) (void),
@@ -87,11 +97,13 @@
char *rval;
rval = getcwd(buf, size);
- if (rval == NULL)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "getcwd failed at %s:%d",
- file, lineno);
+ if (rval == NULL) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: getcwd(%p,%zu) failed",
+ file, lineno, buf, size);
+ }
- return (rval);
+ return rval;
}
struct passwd *safe_getpwnam(const char *file, const int lineno,
@@ -100,11 +112,13 @@
struct passwd *rval;
rval = getpwnam(name);
- if (rval == NULL)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "getpwnam failed at %s:%d",
- file, lineno);
+ if (rval == NULL) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: getpwnam(%s) failed",
+ file, lineno, name);
+ }
- return (rval);
+ return rval;
}
int
@@ -114,9 +128,11 @@
int rval;
rval = getrusage(who, usage);
- if (rval == -1)
+ if (rval == -1) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "getrusage failed at %s:%d", file, lineno);
+ "%s:%d: getrusage(%d,%p) failed",
+ file, lineno, who, usage);
+ }
return rval;
}
@@ -127,23 +143,26 @@
void *rval;
rval = malloc(size);
- if (rval == NULL)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "malloc failed at %s:%d",
- file, lineno);
+ if (rval == NULL) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: malloc(%zu) failed",
+ file, lineno, size);
+ }
- return (rval);
+ return rval;
}
-int
-safe_mkdir(const char *file, const int lineno, void (*cleanup_fn) (void),
- const char *pathname, mode_t mode)
+int safe_mkdir(const char *file, const int lineno, void (*cleanup_fn) (void),
+ const char *pathname, mode_t mode)
{
int rval;
rval = mkdir(pathname, mode);
- if (rval == -1)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "mkdir failed at %s:%d",
- file, lineno);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: mkdir(%s,0%o) failed",
+ file, lineno, pathname, mode);
+ }
return (rval);
}
@@ -155,30 +174,33 @@
void *rval;
rval = mmap(addr, length, prot, flags, fd, offset);
- if (rval == MAP_FAILED)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "mmap failed at %s:%d",
- file, lineno);
+ if (rval == MAP_FAILED) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: mmap(%p,%zu,%d,%d,%d,%ld) failed",
+ file, lineno, addr, length, prot, flags, fd,
+ (long) offset);
+ }
- return (rval);
+ return rval;
}
-int
-safe_munmap(const char *file, const int lineno, void (*cleanup_fn) (void),
- void *addr, size_t length)
+int safe_munmap(const char *file, const int lineno, void (*cleanup_fn) (void),
+ void *addr, size_t length)
{
int rval;
rval = munmap(addr, length);
- if (rval == -1)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "munmap failed at %s:%d",
- file, lineno);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: munmap(%p,%zu) failed",
+ file, lineno, addr, length);
+ }
- return (rval);
+ return rval;
}
-int
-safe_open(const char *file, const int lineno, void (*cleanup_fn) (void),
- const char *pathname, int oflags, ...)
+int safe_open(const char *file, const int lineno, void (*cleanup_fn) (void),
+ const char *pathname, int oflags, ...)
{
va_list ap;
int rval;
@@ -189,109 +211,118 @@
va_end(ap);
rval = open(pathname, oflags, mode);
- if (rval == -1)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "open failed at %s:%d",
- file, lineno);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: open(%s,%d,0%o) failed",
+ file, lineno, pathname, oflags, mode);
+ }
- return (rval);
+ return rval;
}
-int
-safe_pipe(const char *file, const int lineno, void (*cleanup_fn) (void),
- int fildes[2])
+int safe_pipe(const char *file, const int lineno, void (*cleanup_fn) (void),
+ int fildes[2])
{
int rval;
rval = pipe(fildes);
- if (rval == -1)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "pipe failed at %s:%d",
- file, lineno);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: pipe({%d,%d}) failed",
+ file, lineno, fildes[0], fildes[1]);
+ }
- return (rval);
+ return rval;
}
-ssize_t
-safe_read(const char *file, const int lineno, void (*cleanup_fn) (void),
- char len_strict, int fildes, void *buf, size_t nbyte)
+ssize_t safe_read(const char *file, const int lineno, void (*cleanup_fn) (void),
+ char len_strict, int fildes, void *buf, size_t nbyte)
{
ssize_t rval;
rval = read(fildes, buf, nbyte);
- if (rval == -1 || (len_strict && (size_t)rval != nbyte))
- tst_brkm(TBROK | TERRNO, cleanup_fn, "read failed at %s:%d",
- file, lineno);
+ if (rval == -1 || (len_strict && (size_t)rval != nbyte)) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: read(%d,%p,%zu) failed, returned %zd",
+ file, lineno, fildes, buf, nbyte, rval);
+ }
- return (rval);
+ return rval;
}
-int
-safe_setegid(const char *file, const int lineno, void (*cleanup_fn) (void),
- gid_t egid)
+int safe_setegid(const char *file, const int lineno, void (*cleanup_fn) (void),
+ gid_t egid)
{
int rval;
rval = setegid(egid);
- if (rval == -1)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "setegid failed at %s:%d",
- file, lineno);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: setegid(%u) failed",
+ file, lineno, (unsigned) egid);
+ }
- return (rval);
+ return rval;
}
-int
-safe_seteuid(const char *file, const int lineno, void (*cleanup_fn) (void),
- uid_t euid)
+int safe_seteuid(const char *file, const int lineno, void (*cleanup_fn) (void),
+ uid_t euid)
{
int rval;
rval = seteuid(euid);
- if (rval == -1)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "seteuid failed at %s:%d",
- file, lineno);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: seteuid(%u) failed",
+ file, lineno, (unsigned) euid);
+ }
- return (rval);
+ return rval;
}
-int
-safe_setgid(const char *file, const int lineno, void (*cleanup_fn) (void),
- gid_t gid)
+int safe_setgid(const char *file, const int lineno, void (*cleanup_fn) (void),
+ gid_t gid)
{
int rval;
rval = setgid(gid);
- if (rval == -1)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "setgid failed at %s:%d",
- file, lineno);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: setgid(%u) failed",
+ file, lineno, (unsigned) gid);
+ }
- return (rval);
+ return rval;
}
-int
-safe_setuid(const char *file, const int lineno, void (*cleanup_fn) (void),
- uid_t uid)
+int safe_setuid(const char *file, const int lineno, void (*cleanup_fn) (void),
+ uid_t uid)
{
int rval;
rval = setuid(uid);
- if (rval == -1)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "setuid failed at %s:%d",
- file, lineno);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: setuid(%u) failed",
+ file, lineno, (unsigned) uid);
+ }
- return (rval);
+ return rval;
}
-int
-safe_unlink(const char *file, const int lineno, void (*cleanup_fn) (void),
- const char *pathname)
+int safe_unlink(const char *file, const int lineno, void (*cleanup_fn) (void),
+ const char *pathname)
{
int rval;
rval = unlink(pathname);
- if (rval == -1)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "unlink failed at %s:%d",
- file, lineno);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: unlink(%s) failed",
+ file, lineno, pathname);
+ }
- return (rval);
+ return rval;
}
@@ -305,8 +336,8 @@
if (rval == -1) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "link(%s, %s) failed at %s:%d",
- oldpath, newpath, file, lineno);
+ "%s:%d: link(%s,%s) failed",
+ file, lineno, oldpath, newpath);
}
return rval;
@@ -322,8 +353,8 @@
if (rval == (off_t) -1) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "lseek(%i, %li, %i) failed at %s:%d",
- fd, (long)offset, whence, file, lineno);
+ "%s:%d: lseek(%d,%ld,%d) failed",
+ file, lineno, fd, (long)offset, whence);
}
return rval;
@@ -339,25 +370,26 @@
if (rval == -1) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "link(%s, %s) failed at %s:%d",
- oldpath, newpath, file, lineno);
+ "%s:%d: symlink(%s,%s) failed",
+ file, lineno, oldpath, newpath);
}
return rval;
}
-ssize_t
-safe_write(const char *file, const int lineno, void (cleanup_fn) (void),
- char len_strict, int fildes, const void *buf, size_t nbyte)
+ssize_t safe_write(const char *file, const int lineno, void (cleanup_fn) (void),
+ char len_strict, int fildes, const void *buf, size_t nbyte)
{
ssize_t rval;
rval = write(fildes, buf, nbyte);
- if ((len_strict == 0 && rval == -1) || (size_t)rval != nbyte)
- tst_brkm(TBROK | TERRNO, cleanup_fn, "write failed at %s:%d",
- file, lineno);
+ if ((len_strict == 0 && rval == -1) || (size_t)rval != nbyte) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: write(%d,%p,%zu) failed",
+ file, lineno, fildes, buf, rval);
+ }
- return (rval);
+ return rval;
}
int safe_ftruncate(const char *file, const int lineno,
@@ -368,7 +400,8 @@
rval = ftruncate(fd, length);
if (rval == -1) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "ftruncate failed at %s:%d", file, lineno);
+ "%s:%d: ftruncate(%d,%ld) failed",
+ file, lineno, fd, (long)length);
}
return rval;
@@ -381,8 +414,9 @@
rval = truncate(path, length);
if (rval == -1) {
- tst_brkm(TBROK | TERRNO, cleanup_fn, "truncate failed at %s:%d",
- file, lineno);
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: truncate(%s,%ld) failed",
+ file, lineno, path, (long)length);
}
return rval;
@@ -396,17 +430,23 @@
errno = 0;
rval = strtol(str, &endptr, 10);
+
if ((errno == ERANGE && (rval == LONG_MAX || rval == LONG_MIN))
- || (errno != 0 && rval == 0))
+ || (errno != 0 && rval == 0)) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "strtol failed at %s:%d", file, lineno);
- if (rval > max || rval < min)
+ "%s:%d: strtol(%s) failed", file, lineno, str);
+ }
+
+ if (endptr == str || (*endptr != '\0' && *endptr != '\n')) {
tst_brkm(TBROK, cleanup_fn,
- "converted value out of range (%ld - %ld) at %s:%d",
- min, max, file, lineno);
- if (endptr == str || (*endptr != '\0' && *endptr != '\n'))
+ "%s:%d: strtol(%s): Invalid value", file, lineno, str);
+ }
+
+ if (rval > max || rval < min) {
tst_brkm(TBROK, cleanup_fn,
- "Invalid value: '%s' at %s:%d", str, file, lineno);
+ "%s:%d: strtol(%s): %ld is out of range %ld - %ld",
+ file, lineno, str, rval, min, max);
+ }
return rval;
}
@@ -420,17 +460,23 @@
errno = 0;
rval = strtoul(str, &endptr, 10);
+
if ((errno == ERANGE && rval == ULONG_MAX)
- || (errno != 0 && rval == 0))
+ || (errno != 0 && rval == 0)) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "strtol failed at %s:%d", file, lineno);
- if (rval > max || rval < min)
+ "%s:%d: strtoul(%s) failed", file, lineno, str);
+ }
+
+ if (rval > max || rval < min) {
tst_brkm(TBROK, cleanup_fn,
- "converted value out of range (%lu - %lu at %s:%d",
- min, max, file, lineno);
- if (endptr == str || (*endptr != '\0' && *endptr != '\n'))
+ "%s:%d: strtoul(%s): %lu is out of range %lu - %lu",
+ file, lineno, str, rval, min, max);
+ }
+
+ if (endptr == str || (*endptr != '\0' && *endptr != '\n')) {
tst_brkm(TBROK, cleanup_fn,
"Invalid value: '%s' at %s:%d", str, file, lineno);
+ }
return rval;
}
@@ -444,13 +490,16 @@
rval = sysconf(name);
if (rval == -1) {
- if (errno == EINVAL)
+ if (errno) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "sysconf failed at %s:%d", file, lineno);
- else
- tst_resm(TINFO, "queried option is not available"
- " or thers is no definite limit at %s:%d",
- file, lineno);
+ "%s:%d: sysconf(%d) failed",
+ file, lineno, name);
+ } else {
+ tst_resm(TINFO, "%s:%d: sysconf(%d): "
+ "queried option is not available"
+ " or there is no definite limit",
+ file, lineno, name);
+ }
}
return rval;
@@ -465,7 +514,7 @@
if (rval == -1) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "stat failed at %s:%d", file, lineno);
+ "%s:%d: stat(%s,%p) failed", file, lineno, path, buf);
}
return rval;
@@ -480,7 +529,7 @@
if (rval == -1) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "fstat failed at %s:%d", file, lineno);
+ "%s:%d: fstat(%d,%p) failed", file, lineno, fd, buf);
}
return rval;
@@ -495,7 +544,7 @@
if (rval == -1) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "lstat failed at %s:%d", file, lineno);
+ "%s:%d: lstat(%s,%p) failed", file, lineno, path, buf);
}
return rval;
@@ -510,7 +559,8 @@
if (rval == -1) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "getrlimit failed at %s:%d", file, lineno);
+ "%s:%d: getrlimit(%d,%p) failed",
+ file, lineno, resource, rlim);
}
return rval;
@@ -525,7 +575,8 @@
if (rval == -1) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "setrlimit failed at %s:%d", file, lineno);
+ "%s:%d: setrlimit(%d,%p) failed",
+ file, lineno, resource, rlim);
}
return rval;
@@ -540,7 +591,8 @@
if (rval == -1) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "chmod failed at %s:%d", file, lineno);
+ "%s:%d: chmod(%s,0%o) failed",
+ file, lineno, path, mode);
}
return rval;
@@ -555,7 +607,8 @@
if (rval == -1) {
tst_brkm(TBROK | TERRNO, cleanup_fn,
- "fchmod failed at %s:%d", file, lineno);
+ "%s:%d: fchmod(%d,0%o) failed",
+ file, lineno, fd, mode);
}
return rval;