diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2012-03-11 21:25:51 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2012-03-11 21:25:51 +0000 |
commit | 73215473cea2bc53a520b5285775be84501b1f2d (patch) | |
tree | 8e6c146f2282760fa7d6f7219d058a842ebf0a2c /time.c | |
parent | 51dba35d387153c8a2310b92296ba30518df4f88 (diff) | |
download | strace-73215473cea2bc53a520b5285775be84501b1f2d.tar.gz strace-73215473cea2bc53a520b5285775be84501b1f2d.tar.bz2 strace-73215473cea2bc53a520b5285775be84501b1f2d.tar.xz |
Implement clock_adjtime syscall decoder
* linux/dummy.h (sys_clock_adjtime): Remove.
* linux/syscall.h (sys_clock_adjtime): New prototype.
* time.c (do_adjtimex): New function, based on sys_adjtimex.
(sys_adjtimex): Use it.
(sys_clock_adjtime): New function.
Diffstat (limited to 'time.c')
-rw-r--r-- | time.c | 42 |
1 files changed, 29 insertions, 13 deletions
@@ -582,22 +582,28 @@ tprint_timex(struct tcb *tcp, long addr) return 0; } +static int +do_adjtimex(struct tcb *tcp, long addr) +{ + if (addr == 0) + tprints("NULL"); + else if (syserror(tcp) || !verbose(tcp)) + tprintf("%#lx", addr); + else if (tprint_timex(tcp, addr) < 0) + tprints("{...}"); + if (syserror(tcp)) + return 0; + tcp->auxstr = xlookup(adjtimex_state, tcp->u_rval); + if (tcp->auxstr) + return RVAL_STR; + return 0; +} + int sys_adjtimex(struct tcb *tcp) { - if (exiting(tcp)) { - if (tcp->u_arg[0] == 0) - tprints("NULL"); - else if (syserror(tcp) || !verbose(tcp)) - tprintf("%#lx", tcp->u_arg[0]); - else if (tprint_timex(tcp, tcp->u_arg[0]) < 0) - tprints("{...}"); - if (syserror(tcp)) - return 0; - tcp->auxstr = xlookup(adjtimex_state, tcp->u_rval); - if (tcp->auxstr) - return RVAL_STR; - } + if (exiting(tcp)) + return do_adjtimex(tcp, tcp->u_arg[0]); return 0; } @@ -676,6 +682,16 @@ sys_clock_nanosleep(struct tcb *tcp) return 0; } +int +sys_clock_adjtime(struct tcb *tcp) +{ + if (exiting(tcp)) + return do_adjtimex(tcp, tcp->u_arg[1]); + printxval(clocknames, tcp->u_arg[0], "CLOCK_???"); + tprints(", "); + return 0; +} + #ifndef SIGEV_THREAD_ID # define SIGEV_THREAD_ID 4 #endif |