3 #ifdef HAVE_LINUX_XATTR_H
4 # include <linux/xattr.h>
6 # define XATTR_CREATE 1
7 # define XATTR_REPLACE 2
10 #include "xlat/xattrflags.h"
13 print_xattr_val(struct tcb *tcp, int failed,
21 unsigned long capacity = 4 * size + 1;
22 unsigned char *buf = (capacity < size) ? NULL : malloc(capacity);
23 if (buf == NULL || /* probably a bogus size argument */
24 umoven(tcp, arg, size, (char *) &buf[3 * size]) < 0) {
28 unsigned char *out = buf;
29 unsigned char *in = &buf[3 * size];
31 for (i = 0; i < size; ++i) {
32 if (in[i] >= ' ' && in[i] <= 0x7e)
35 #define tohex(n) "0123456789abcdef"[n]
38 *out++ = tohex(in[i] / 16);
39 *out++ = tohex(in[i] % 16);
42 /* Don't print terminating NUL if there is one. */
43 if (i > 0 && in[i - 1] == '\0')
46 tprintf(", \"%s\", %ld", buf, insize);
51 tprintf(", 0x%lx, %ld", arg, insize);
55 sys_setxattr(struct tcb *tcp)
58 printpath(tcp, tcp->u_arg[0]);
60 printstr(tcp, tcp->u_arg[1], -1);
61 print_xattr_val(tcp, 0, tcp->u_arg[2], tcp->u_arg[3], tcp->u_arg[3]);
63 printflags(xattrflags, tcp->u_arg[4], "XATTR_???");
69 sys_fsetxattr(struct tcb *tcp)
72 printfd(tcp, tcp->u_arg[0]);
74 printstr(tcp, tcp->u_arg[1], -1);
75 print_xattr_val(tcp, 0, tcp->u_arg[2], tcp->u_arg[3], tcp->u_arg[3]);
77 printflags(xattrflags, tcp->u_arg[4], "XATTR_???");
83 sys_getxattr(struct tcb *tcp)
86 printpath(tcp, tcp->u_arg[0]);
88 printstr(tcp, tcp->u_arg[1], -1);
90 print_xattr_val(tcp, syserror(tcp), tcp->u_arg[2], tcp->u_arg[3],
97 sys_fgetxattr(struct tcb *tcp)
100 printfd(tcp, tcp->u_arg[0]);
102 printstr(tcp, tcp->u_arg[1], -1);
104 print_xattr_val(tcp, syserror(tcp), tcp->u_arg[2], tcp->u_arg[3],
111 print_xattr_list(struct tcb *tcp, unsigned long addr, unsigned long size)
114 tprintf("%#lx", addr);
120 (size < (unsigned long) tcp->u_rval) ?
121 size : (unsigned long) tcp->u_rval;
122 printstr(tcp, addr, len);
125 tprintf(", %lu", size);
129 sys_listxattr(struct tcb *tcp)
132 printpath(tcp, tcp->u_arg[0]);
135 print_xattr_list(tcp, tcp->u_arg[1], tcp->u_arg[2]);
141 sys_flistxattr(struct tcb *tcp)
144 printfd(tcp, tcp->u_arg[0]);
147 print_xattr_list(tcp, tcp->u_arg[1], tcp->u_arg[2]);
153 sys_removexattr(struct tcb *tcp)
156 printpath(tcp, tcp->u_arg[0]);
158 printstr(tcp, tcp->u_arg[1], -1);
164 sys_fremovexattr(struct tcb *tcp)
167 printfd(tcp, tcp->u_arg[0]);
169 printstr(tcp, tcp->u_arg[1], -1);