summaryrefslogtreecommitdiff
path: root/dirent.c
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2015-07-20 15:42:22 +0000
committerDmitry V. Levin <ldv@altlinux.org>2015-07-20 22:03:07 +0000
commit3ef50217c1ee61fce359e178e2f03cfc89d54f22 (patch)
treed9d3ada479a804652f6e5df0cf7f24b588e0d742 /dirent.c
parent7e56b4e5ae7b8b59b57bcb3b568b3ae31f66d725 (diff)
downloadstrace-3ef50217c1ee61fce359e178e2f03cfc89d54f22.tar.gz
dirent.c: do not use xmalloc
* dirent.c (print_old_dirent): Use umove_or_printaddr. (sys_readdir): Use printaddr. (sys_getdents, sys_getdents64): Do not use xmalloc for dirents, treat malloc failure the same way as umoven failure. Use printaddr.
Diffstat (limited to 'dirent.c')
-rw-r--r--dirent.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/dirent.c b/dirent.c
index 988d535c0..7b2609ed2 100644
--- a/dirent.c
+++ b/dirent.c
@@ -25,10 +25,8 @@ print_old_dirent(struct tcb *tcp, long addr)
#endif
old_dirent_t d;
- if (!verbose(tcp) || umove(tcp, addr, &d) < 0) {
- tprintf("%#lx", addr);
+ if (umove_or_printaddr(tcp, addr, &d))
return;
- }
tprintf("{d_ino=%lu, d_off=%lu, d_reclen=%u, d_name=",
(unsigned long) d.d_ino, (unsigned long) d.d_off, d.d_reclen);
@@ -44,8 +42,8 @@ SYS_FUNC(readdir)
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
} else {
- if (syserror(tcp) || tcp->u_rval == 0 || !verbose(tcp))
- tprintf("%#lx", tcp->u_arg[1]);
+ if (tcp->u_rval == 0)
+ printaddr(tcp->u_arg[1]);
else
print_old_dirent(tcp, tcp->u_arg[1]);
/* Not much point in printing this out, it is always 1. */
@@ -68,7 +66,8 @@ SYS_FUNC(getdents)
return 0;
}
if (syserror(tcp) || !verbose(tcp)) {
- tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
+ printaddr(tcp->u_arg[1]);
+ tprintf(", %lu", tcp->u_arg[2]);
return 0;
}
@@ -81,9 +80,10 @@ SYS_FUNC(getdents)
len = tcp->u_rval;
if (len) {
- buf = xmalloc(len);
- if (umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
- tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
+ buf = malloc(len);
+ if (!buf || umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
+ printaddr(tcp->u_arg[1]);
+ tprintf(", %lu", tcp->u_arg[2]);
free(buf);
return 0;
}
@@ -149,7 +149,8 @@ SYS_FUNC(getdents64)
return 0;
}
if (syserror(tcp) || !verbose(tcp)) {
- tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
+ printaddr(tcp->u_arg[1]);
+ tprintf(", %lu", tcp->u_arg[2]);
return 0;
}
@@ -162,9 +163,10 @@ SYS_FUNC(getdents64)
len = tcp->u_rval;
if (len) {
- buf = xmalloc(len);
- if (umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
- tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
+ buf = malloc(len);
+ if (!buf || umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
+ printaddr(tcp->u_arg[1]);
+ tprintf(", %lu", tcp->u_arg[2]);
free(buf);
return 0;
}