blob: fcb415334c7e93bc0e2acc5c7171fb553a53637e [file] [log] [blame]
Dmitry V. Levin46245b32014-12-06 03:53:16 +00001#include "defs.h"
2
3static int
4decode_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
Dmitry V. Levina0bd3742015-04-07 01:36:50 +000026SYS_FUNC(readlink)
Dmitry V. Levin46245b32014-12-06 03:53:16 +000027{
28 return decode_readlink(tcp, 0);
29}
30
Dmitry V. Levina0bd3742015-04-07 01:36:50 +000031SYS_FUNC(readlinkat)
Dmitry V. Levin46245b32014-12-06 03:53:16 +000032{
33 if (entering(tcp))
34 print_dirfd(tcp, tcp->u_arg[0]);
35 return decode_readlink(tcp, 1);
36}