/*
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
print_timeval_t(&t);
}
-static bool
-print_timeval_item(struct tcb *tcp, void *elem_buf, size_t size, void *data)
-{
- timeval_t *t = elem_buf;
-
- print_timeval_t(t);
-
- return true;
-}
-
-MPERS_PRINTER_DECL(void, print_timeval_pair,
+MPERS_PRINTER_DECL(void, print_timeval_utimes,
struct tcb *const tcp, const kernel_ulong_t addr)
{
- timeval_t t;
+ timeval_t t[2];
- print_array(tcp, addr, 2, &t, sizeof(t), umoven_or_printaddr,
- print_timeval_item, NULL);
+ if (umove_or_printaddr(tcp, addr, &t))
+ return;
+
+ tprints("[");
+ print_timeval_t(&t[0]);
+ tprints(", ");
+ print_timeval_t(&t[1]);
+ tprints("]");
}
MPERS_PRINTER_DECL(const char *, sprint_timeval,
/*
* Check decoding of futimesat syscall.
*
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
unsigned long dirfd = (unsigned long) 0xdeadbeef00000000ULL | -100U;
long rc = syscall(__NR_futimesat, dirfd, sample, 0);
- printf("futimesat(AT_FDCWD, \"%s\", NULL) = %ld %s (%m)\n",
- sample, rc, errno2name());
+ printf("futimesat(AT_FDCWD, \"%s\", NULL) = %s\n",
+ sample, sprintrc(rc));
struct timeval *const ts = tail_alloc(sizeof(*ts) * 2);
dirfd = (unsigned long) 0xdeadbeefffffffffULL;
ts[1].tv_usec = 678902345;
rc = syscall(__NR_futimesat, dirfd, 0, ts + 2);
- printf("futimesat(%d, NULL, %p) = %ld %s (%m)\n",
- (int) dirfd, ts + 2, rc, errno2name());
+ printf("futimesat(%d, NULL, %p) = %s\n",
+ (int) dirfd, ts + 2, sprintrc(rc));
rc = syscall(__NR_futimesat, dirfd, 0, ts + 1);
- printf("futimesat(%d, NULL, [{tv_sec=%jd, tv_usec=%jd}, %p]) = "
- "%ld %s (%m)\n", (int) dirfd,
- (intmax_t) ts[1].tv_sec, (intmax_t) ts[1].tv_usec,
- ts + 2, rc, errno2name());
+ printf("futimesat(%d, NULL, %p) = %s\n",
+ (int) dirfd, ts + 1, sprintrc(rc));
(void) close(0);
rc = syscall(__NR_futimesat, 0, "", ts);
printf("futimesat(0, \"\", [{tv_sec=%jd, tv_usec=%jd}, "
- "{tv_sec=%jd, tv_usec=%jd}]) = %ld %s (%m)\n",
+ "{tv_sec=%jd, tv_usec=%jd}]) = %s\n",
(intmax_t) ts[0].tv_sec, (intmax_t) ts[0].tv_usec,
(intmax_t) ts[1].tv_sec, (intmax_t) ts[1].tv_usec,
- rc, errno2name());
+ sprintrc(rc));
puts("+++ exited with 0 +++");
return 0;
/*
* Check decoding of utimes syscall.
*
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
static const char sample[] = "utimes_sample";
long rc = syscall(__NR_utimes, sample, 0);
- printf("utimes(\"%s\", NULL) = %ld %s (%m)\n",
- sample, rc, errno2name());
+ printf("utimes(\"%s\", NULL) = %s\n", sample, sprintrc(rc));
struct timeval *const ts = tail_alloc(sizeof(*ts) * 2);
ts[1].tv_usec = 456789023;
rc = syscall(__NR_utimes, 0, ts + 2);
- printf("utimes(NULL, %p) = %ld %s (%m)\n", ts + 2, rc, errno2name());
+ printf("utimes(NULL, %p) = %s\n", ts + 2, sprintrc(rc));
rc = syscall(__NR_utimes, 0, ts + 1);
- printf("utimes(NULL, [{tv_sec=%jd, tv_usec=%jd}, %p]) = "
- "%ld %s (%m)\n",
- (intmax_t) ts[1].tv_sec, (intmax_t) ts[1].tv_usec,
- ts + 2, rc, errno2name());
+ printf("utimes(NULL, %p) = %s\n", ts + 1, sprintrc(rc));
rc = syscall(__NR_utimes, "", ts);
printf("utimes(\"\", [{tv_sec=%jd, tv_usec=%jd}, "
- "{tv_sec=%jd, tv_usec=%jd}]) = %ld %s (%m)\n",
+ "{tv_sec=%jd, tv_usec=%jd}]) = %s\n",
(intmax_t) ts[0].tv_sec, (intmax_t) ts[0].tv_usec,
(intmax_t) ts[1].tv_sec, (intmax_t) ts[1].tv_usec,
- rc, errno2name());
+ sprintrc(rc));
puts("+++ exited with 0 +++");
return 0;
{
printpath(tcp, tcp->u_arg[0]);
tprints(", ");
- print_timeval_pair(tcp, tcp->u_arg[1]);
+ print_timeval_utimes(tcp, tcp->u_arg[1]);
return RVAL_DECODED;
}
print_dirfd(tcp, tcp->u_arg[0]);
printpath(tcp, tcp->u_arg[1]);
tprints(", ");
- print_timeval_pair(tcp, tcp->u_arg[2]);
+ print_timeval_utimes(tcp, tcp->u_arg[2]);
return RVAL_DECODED;
}