]> granicus.if.org Git - strace/blob - readlink.c
process.c: move sched_setaffinity and sched_getaffinity parsers to a separate file
[strace] / readlink.c
1 #include "defs.h"
2
3 static int
4 decode_readlink(struct tcb *tcp, int offset)
5 {
6         if (entering(tcp)) {
7                 printpath(tcp, tcp->u_arg[offset]);
8                 tprints(", ");
9         } else {
10                 if (syserror(tcp))
11                         tprintf("%#lx", tcp->u_arg[offset + 1]);
12                 else
13                         /* Used to use printpathn(), but readlink
14                          * neither includes NUL in the returned count,
15                          * nor actually writes it into memory.
16                          * printpathn() would decide on printing
17                          * "..." continuation based on garbage
18                          * past return buffer's end.
19                          */
20                         printstr(tcp, tcp->u_arg[offset + 1], tcp->u_rval);
21                 tprintf(", %lu", tcp->u_arg[offset + 2]);
22         }
23         return 0;
24 }
25
26 int
27 sys_readlink(struct tcb *tcp)
28 {
29         return decode_readlink(tcp, 0);
30 }
31
32 int
33 sys_readlinkat(struct tcb *tcp)
34 {
35         if (entering(tcp))
36                 print_dirfd(tcp, tcp->u_arg[0]);
37         return decode_readlink(tcp, 1);
38 }