1#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 26SYS_FUNC(readlink) 27{ 28 return decode_readlink(tcp, 0); 29} 30 31SYS_FUNC(readlinkat) 32{ 33 if (entering(tcp)) 34 print_dirfd(tcp, tcp->u_arg[0]); 35 return decode_readlink(tcp, 1); 36} 37