blob: a8aecf5d8813ef76493cf074a953987458e8dc43 [file] [log] [blame]
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001/*
Michal Ludvig53b320f2002-09-23 13:30:09 +00002#ifdef LINUX
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00003 * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
4 * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
5 * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
Wichert Akkerman4dc8a2a1999-12-23 14:20:14 +00006 * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00007 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. The name of the author may not be used to endorse or promote products
18 * derived from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 *
31 * $Id$
32 */
33
34#include "defs.h"
35
36#include <dirent.h>
Michal Ludvig53b320f2002-09-23 13:30:09 +000037#ifdef LINUX
Wichert Akkerman9524bb91999-05-25 23:11:18 +000038#define dirent kernel_dirent
Wichert Akkerman9b0c31d2000-09-03 21:56:29 +000039#define dirent64 kernel_dirent64
Wichert Akkerman9524bb91999-05-25 23:11:18 +000040#include <linux/types.h>
41#include <linux/dirent.h>
42#undef dirent
Michal Ludvig10a88d02002-10-07 14:31:00 +000043#undef dirent64
Wichert Akkerman9524bb91999-05-25 23:11:18 +000044#else
45#define kernel_dirent dirent
46#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +000047
Michal Ludvig53b320f2002-09-23 13:30:09 +000048#ifdef LINUX
Wichert Akkermandacfb6e1999-06-03 14:21:07 +000049# ifdef LINUXSPARC
50struct stat {
51 unsigned short st_dev;
52 unsigned int st_ino;
53 unsigned short st_mode;
54 short st_nlink;
55 unsigned short st_uid;
56 unsigned short st_gid;
57 unsigned short st_rdev;
58 unsigned int st_size;
59 int st_atime;
60 unsigned int __unused1;
61 int st_mtime;
62 unsigned int __unused2;
63 int st_ctime;
64 unsigned int __unused3;
65 int st_blksize;
66 int st_blocks;
67 unsigned int __unused4[2];
68};
69# define stat kernel_stat
70# include <asm/stat.h>
71# undef stat
72# else
Wichert Akkerman5b4d1281999-07-09 00:32:54 +000073# undef dev_t
74# undef ino_t
75# undef mode_t
76# undef nlink_t
77# undef uid_t
78# undef gid_t
79# undef off_t
80# undef loff_t
81
Wichert Akkermana6013701999-07-08 14:00:58 +000082# define dev_t __kernel_dev_t
83# define ino_t __kernel_ino_t
84# define mode_t __kernel_mode_t
85# define nlink_t __kernel_nlink_t
86# define uid_t __kernel_uid_t
87# define gid_t __kernel_gid_t
88# define off_t __kernel_off_t
89# define loff_t __kernel_loff_t
90
Wichert Akkermandacfb6e1999-06-03 14:21:07 +000091# include <asm/stat.h>
Wichert Akkermana6013701999-07-08 14:00:58 +000092
93# undef dev_t
94# undef ino_t
95# undef mode_t
96# undef nlink_t
97# undef uid_t
98# undef gid_t
99# undef off_t
100# undef loff_t
Wichert Akkerman5b4d1281999-07-09 00:32:54 +0000101
102# define dev_t dev_t
103# define ino_t ino_t
104# define mode_t mode_t
105# define nlink_t nlink_t
106# define uid_t uid_t
107# define gid_t gid_t
108# define off_t off_t
109# define loff_t loff_t
Wichert Akkermandacfb6e1999-06-03 14:21:07 +0000110# endif
Wichert Akkermanc1652e22001-03-27 12:17:16 +0000111# ifdef HPPA /* asm-parisc/stat.h defines stat64 */
112# undef stat64
113# endif
Wichert Akkermand4d8e921999-04-18 23:30:29 +0000114# define stat libc_stat
Ulrich Drepper0fa01d71999-12-24 07:18:28 +0000115# define stat64 libc_stat64
Wichert Akkermand4d8e921999-04-18 23:30:29 +0000116# include <sys/stat.h>
117# undef stat
Ulrich Drepper0fa01d71999-12-24 07:18:28 +0000118# undef stat64
Roland McGrathca16a402003-01-09 06:53:22 +0000119 /* These might be macros. */
120# undef st_atime
121# undef st_mtime
122# undef st_ctime
Wichert Akkermanc1652e22001-03-27 12:17:16 +0000123# ifdef HPPA
124# define stat64 hpux_stat64
125# endif
Wichert Akkermand4d8e921999-04-18 23:30:29 +0000126#else
127# include <sys/stat.h>
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000128#endif
Wichert Akkermand4d8e921999-04-18 23:30:29 +0000129
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000130#include <fcntl.h>
131
132#ifdef SVR4
133# include <sys/cred.h>
134#endif /* SVR4 */
135
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +0000136#ifdef HAVE_SYS_VFS_H
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000137#include <sys/vfs.h>
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +0000138#endif
139
Roland McGrath186c5ac2002-12-15 23:58:23 +0000140#ifdef HAVE_LINUX_XATTR_H
141#include <linux/xattr.h>
142#elif defined linux
143#define XATTR_CREATE 1
144#define XATTR_REPLACE 2
145#endif
146
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +0000147#ifdef FREEBSD
148#include <sys/param.h>
149#include <sys/mount.h>
150#include <sys/stat.h>
John Hughes70623be2001-03-08 13:59:00 +0000151#endif
152
153#if HAVE_LONG_LONG_OFF_T
154/*
155 * Ugly hacks for systems that have typedef long long off_t
156 */
John Hughesb8c9f772001-03-07 16:53:07 +0000157
158#define stat64 stat
159#define HAVE_STAT64 1 /* Ugly hack */
John Hughes70623be2001-03-08 13:59:00 +0000160
161#define sys_stat64 sys_stat
162#define sys_fstat64 sys_fstat
163#define sys_lstat64 sys_lstat
164#define sys_lseek64 sys_lseek
165#define sys_truncate64 sys_truncate
166#define sys_ftruncate64 sys_ftruncate
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +0000167#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000168
169#ifdef MAJOR_IN_SYSMACROS
170#include <sys/sysmacros.h>
171#endif
172
173#ifdef MAJOR_IN_MKDEV
174#include <sys/mkdev.h>
175#endif
176
177#ifdef HAVE_SYS_ASYNCH_H
178#include <sys/asynch.h>
179#endif
180
181#ifdef SUNOS4
182#include <ustat.h>
183#endif
184
185/*
186 * This is a really dirty trick but it should always work. Traditional
187 * Unix says r/w/rw are 0/1/2, so we make them true flags 1/2/3 by
188 * adding 1. Just remember to add 1 to any arg decoded with openmodes.
189 */
190struct xlat openmodes[] = {
191 { O_RDWR+1, "O_RDWR" },
192 { O_RDONLY+1, "O_RDONLY" },
193 { O_WRONLY+1, "O_WRONLY" },
194 { O_NONBLOCK, "O_NONBLOCK" },
195 { O_APPEND, "O_APPEND" },
196 { O_CREAT, "O_CREAT" },
197 { O_TRUNC, "O_TRUNC" },
198 { O_EXCL, "O_EXCL" },
199 { O_NOCTTY, "O_NOCTTY" },
200#ifdef O_SYNC
201 { O_SYNC, "O_SYNC" },
202#endif
203#ifdef O_ASYNC
204 { O_ASYNC, "O_ASYNC" },
205#endif
206#ifdef O_DSYNC
207 { O_DSYNC, "O_DSYNC" },
208#endif
209#ifdef O_RSYNC
210 { O_RSYNC, "O_RSYNC" },
211#endif
212#ifdef O_NDELAY
213 { O_NDELAY, "O_NDELAY" },
214#endif
215#ifdef O_PRIV
216 { O_PRIV, "O_PRIV" },
217#endif
218#ifdef O_DIRECT
Wichert Akkerman5ae21ea2000-05-01 01:53:59 +0000219 { O_DIRECT, "O_DIRECT" },
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000220#endif
221#ifdef O_LARGEFILE
Wichert Akkerman5ae21ea2000-05-01 01:53:59 +0000222 { O_LARGEFILE, "O_LARGEFILE" },
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000223#endif
224#ifdef O_DIRECTORY
Wichert Akkerman5ae21ea2000-05-01 01:53:59 +0000225 { O_DIRECTORY, "O_DIRECTORY" },
226#endif
227#ifdef O_NOFOLLOW
228 { O_NOFOLLOW, "O_NOFOLLOW" },
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000229#endif
230
231#ifdef FNDELAY
232 { FNDELAY, "FNDELAY" },
233#endif
234#ifdef FAPPEND
235 { FAPPEND, "FAPPEND" },
236#endif
237#ifdef FMARK
238 { FMARK, "FMARK" },
239#endif
240#ifdef FDEFER
241 { FDEFER, "FDEFER" },
242#endif
243#ifdef FASYNC
244 { FASYNC, "FASYNC" },
245#endif
246#ifdef FSHLOCK
247 { FSHLOCK, "FSHLOCK" },
248#endif
249#ifdef FEXLOCK
250 { FEXLOCK, "FEXLOCK" },
251#endif
252#ifdef FCREAT
253 { FCREAT, "FCREAT" },
254#endif
255#ifdef FTRUNC
256 { FTRUNC, "FTRUNC" },
257#endif
258#ifdef FEXCL
259 { FEXCL, "FEXCL" },
260#endif
261#ifdef FNBIO
262 { FNBIO, "FNBIO" },
263#endif
264#ifdef FSYNC
265 { FSYNC, "FSYNC" },
266#endif
267#ifdef FNOCTTY
268 { FNOCTTY, "FNOCTTY" },
Roland McGrath186c5ac2002-12-15 23:58:23 +0000269#endif
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +0000270#ifdef O_SHLOCK
271 { O_SHLOCK, "O_SHLOCK" },
272#endif
273#ifdef O_EXLOCK
274 { O_EXLOCK, "O_EXLOCK" },
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000275#endif
276 { 0, NULL },
277};
278
279int
280sys_open(tcp)
281struct tcb *tcp;
282{
283 if (entering(tcp)) {
284 printpath(tcp, tcp->u_arg[0]);
285 tprintf(", ");
286 /* flags */
287 printflags(openmodes, tcp->u_arg[1] + 1);
288 if (tcp->u_arg[1] & O_CREAT) {
289 /* mode */
290 tprintf(", %#lo", tcp->u_arg[2]);
291 }
292 }
293 return 0;
294}
295
296#ifdef LINUXSPARC
297struct xlat openmodessol[] = {
298 { 0, "O_RDWR" },
299 { 1, "O_RDONLY" },
300 { 2, "O_WRONLY" },
301 { 0x80, "O_NONBLOCK" },
302 { 8, "O_APPEND" },
303 { 0x100, "O_CREAT" },
304 { 0x200, "O_TRUNC" },
305 { 0x400, "O_EXCL" },
306 { 0x800, "O_NOCTTY" },
307 { 0x10, "O_SYNC" },
308 { 0x40, "O_DSYNC" },
309 { 0x8000, "O_RSYNC" },
310 { 4, "O_NDELAY" },
311 { 0x1000, "O_PRIV" },
312 { 0, NULL },
313};
314
315int
316solaris_open(tcp)
317struct tcb *tcp;
318{
319 if (entering(tcp)) {
320 printpath(tcp, tcp->u_arg[0]);
321 tprintf(", ");
322 /* flags */
323 printflags(openmodessol, tcp->u_arg[1] + 1);
324 if (tcp->u_arg[1] & 0x100) {
325 /* mode */
326 tprintf(", %#lo", tcp->u_arg[2]);
327 }
328 }
329 return 0;
330}
331
332#endif
333
334int
335sys_creat(tcp)
336struct tcb *tcp;
337{
338 if (entering(tcp)) {
339 printpath(tcp, tcp->u_arg[0]);
340 tprintf(", %#lo", tcp->u_arg[1]);
341 }
342 return 0;
343}
344
345static struct xlat access_flags[] = {
346 { F_OK, "F_OK", },
347 { R_OK, "R_OK" },
348 { W_OK, "W_OK" },
349 { X_OK, "X_OK" },
350#ifdef EFF_ONLY_OK
351 { EFF_ONLY_OK, "EFF_ONLY_OK" },
352#endif
353#ifdef EX_OK
354 { EX_OK, "EX_OK" },
355#endif
356 { 0, NULL },
357};
358
359int
360sys_access(tcp)
361struct tcb *tcp;
362{
363 if (entering(tcp)) {
364 printpath(tcp, tcp->u_arg[0]);
365 tprintf(", ");
366 printflags(access_flags, tcp->u_arg[1]);
367 }
368 return 0;
369}
370
371int
372sys_umask(tcp)
373struct tcb *tcp;
374{
375 if (entering(tcp)) {
376 tprintf("%#lo", tcp->u_arg[0]);
377 }
378 return RVAL_OCTAL;
379}
380
381static struct xlat whence[] = {
382 { SEEK_SET, "SEEK_SET" },
383 { SEEK_CUR, "SEEK_CUR" },
384 { SEEK_END, "SEEK_END" },
385 { 0, NULL },
386};
387
John Hughes70623be2001-03-08 13:59:00 +0000388#ifndef HAVE_LONG_LONG_OFF_T
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000389int
390sys_lseek(tcp)
391struct tcb *tcp;
392{
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +0000393 off_t offset;
394 int _whence;
395
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000396 if (entering(tcp)) {
397 tprintf("%ld, ", tcp->u_arg[0]);
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +0000398 offset = tcp->u_arg[1];
399 _whence = tcp->u_arg[2];
400 if (_whence == SEEK_SET)
401 tprintf("%lu, ", offset);
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000402 else
Roland McGrath186c5ac2002-12-15 23:58:23 +0000403 tprintf("%ld, ", offset);
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +0000404 printxval(whence, _whence, "SEEK_???");
Roland McGrath186c5ac2002-12-15 23:58:23 +0000405 }
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000406 return RVAL_UDECIMAL;
407}
John Hughes5a826b82001-03-07 13:21:24 +0000408#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000409
Michal Ludvig53b320f2002-09-23 13:30:09 +0000410#ifdef LINUX
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000411int
412sys_llseek (tcp)
413struct tcb *tcp;
414{
415 if (entering(tcp)) {
416 if (tcp->u_arg[4] == SEEK_SET)
417 tprintf("%ld, %llu, ", tcp->u_arg[0],
Wichert Akkerman2e2553a1999-05-09 00:29:58 +0000418 (((long long int) tcp->u_arg[1]) << 32
Wichert Akkerman7ab47b62002-03-31 19:00:02 +0000419 | (unsigned long long) (unsigned) tcp->u_arg[2]));
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000420 else
421 tprintf("%ld, %lld, ", tcp->u_arg[0],
422 (((long long int) tcp->u_arg[1]) << 32
Wichert Akkerman7ab47b62002-03-31 19:00:02 +0000423 | (unsigned long long) (unsigned) tcp->u_arg[2]));
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000424 }
425 else {
Wichert Akkerman2e2553a1999-05-09 00:29:58 +0000426 long long int off;
427 if (syserror(tcp) || umove(tcp, tcp->u_arg[3], &off) < 0)
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000428 tprintf("%#lx, ", tcp->u_arg[3]);
Wichert Akkerman2e2553a1999-05-09 00:29:58 +0000429 else
430 tprintf("[%llu], ", off);
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000431 printxval(whence, tcp->u_arg[4], "SEEK_???");
432 }
433 return 0;
434}
Roland McGrath186c5ac2002-12-15 23:58:23 +0000435
436int
437sys_readahead (tcp)
438struct tcb *tcp;
439{
440 if (entering(tcp)) {
441 tprintf("%ld, %lld, %ld", tcp->u_arg[0],
442# if defined IA64 || defined X86_64 || defined ALPHA
443 (long long int) tcp->u_arg[1], tcp->u_arg[2]
444# else
445 (((long long int) tcp->u_arg[1]) << 32
446 | ((unsigned long *) tcp->u_arg)[2]),
447 tcp->u_arg[3]
448# endif
449 );
450 }
451 return 0;
452}
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000453#endif
454
John Hughes70623be2001-03-08 13:59:00 +0000455#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
John Hughesbdf48f52001-03-06 15:08:09 +0000456int
457sys_lseek64 (tcp)
458struct tcb *tcp;
459{
460 if (entering(tcp)) {
John Hughes5a826b82001-03-07 13:21:24 +0000461 long long offset;
462 ALIGN64 (tcp, 1); /* FreeBSD aligns off_t args */
John Hughes0c79e012001-03-08 14:40:06 +0000463 offset = LONG_LONG(tcp->u_arg [1], tcp->u_arg[2]);
John Hughesbdf48f52001-03-06 15:08:09 +0000464 if (tcp->u_arg[3] == SEEK_SET)
465 tprintf("%ld, %llu, ", tcp->u_arg[0], offset);
466 else
467 tprintf("%ld, %lld, ", tcp->u_arg[0], offset);
468 printxval(whence, tcp->u_arg[3], "SEEK_???");
469 }
470 return RVAL_LUDECIMAL;
471}
472#endif
473
John Hughes70623be2001-03-08 13:59:00 +0000474#ifndef HAVE_LONG_LONG_OFF_T
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000475int
476sys_truncate(tcp)
477struct tcb *tcp;
478{
479 if (entering(tcp)) {
480 printpath(tcp, tcp->u_arg[0]);
481 tprintf(", %lu", tcp->u_arg[1]);
482 }
483 return 0;
484}
John Hughes5a826b82001-03-07 13:21:24 +0000485#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000486
John Hughes70623be2001-03-08 13:59:00 +0000487#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
John Hughes96f51472001-03-06 16:50:41 +0000488int
489sys_truncate64(tcp)
490struct tcb *tcp;
491{
492 if (entering(tcp)) {
John Hughes5a826b82001-03-07 13:21:24 +0000493 ALIGN64 (tcp, 1);
John Hughes96f51472001-03-06 16:50:41 +0000494 printpath(tcp, tcp->u_arg[0]);
John Hughes0c79e012001-03-08 14:40:06 +0000495 tprintf(", %llu", LONG_LONG(tcp->u_arg[1],tcp->u_arg[2]));
John Hughes96f51472001-03-06 16:50:41 +0000496 }
497 return 0;
498}
499#endif
500
John Hughes70623be2001-03-08 13:59:00 +0000501#ifndef HAVE_LONG_LONG_OFF_T
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000502int
503sys_ftruncate(tcp)
504struct tcb *tcp;
505{
506 if (entering(tcp)) {
507 tprintf("%ld, %lu", tcp->u_arg[0], tcp->u_arg[1]);
508 }
509 return 0;
510}
John Hughes5a826b82001-03-07 13:21:24 +0000511#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000512
John Hughes70623be2001-03-08 13:59:00 +0000513#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
John Hughes96f51472001-03-06 16:50:41 +0000514int
515sys_ftruncate64(tcp)
516struct tcb *tcp;
517{
518 if (entering(tcp)) {
John Hughes5a826b82001-03-07 13:21:24 +0000519 ALIGN64 (tcp, 1);
John Hughes96f51472001-03-06 16:50:41 +0000520 tprintf("%ld, %llu", tcp->u_arg[0],
John Hughes0c79e012001-03-08 14:40:06 +0000521 LONG_LONG(tcp->u_arg[1] ,tcp->u_arg[2]));
John Hughes96f51472001-03-06 16:50:41 +0000522 }
523 return 0;
524}
525#endif
526
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000527/* several stats */
528
529static struct xlat modetypes[] = {
530 { S_IFREG, "S_IFREG" },
531 { S_IFSOCK, "S_IFSOCK" },
532 { S_IFIFO, "S_IFIFO" },
533 { S_IFLNK, "S_IFLNK" },
534 { S_IFDIR, "S_IFDIR" },
535 { S_IFBLK, "S_IFBLK" },
536 { S_IFCHR, "S_IFCHR" },
537 { 0, NULL },
538};
539
540static char *
541sprintmode(mode)
542int mode;
543{
544 static char buf[64];
545 char *s;
546
547 if ((mode & S_IFMT) == 0)
548 s = "";
549 else if ((s = xlookup(modetypes, mode & S_IFMT)) == NULL) {
550 sprintf(buf, "%#o", mode);
551 return buf;
552 }
553 sprintf(buf, "%s%s%s%s", s,
554 (mode & S_ISUID) ? "|S_ISUID" : "",
555 (mode & S_ISGID) ? "|S_ISGID" : "",
556 (mode & S_ISVTX) ? "|S_ISVTX" : "");
557 mode &= ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX);
558 if (mode)
559 sprintf(buf + strlen(buf), "|%#o", mode);
560 s = (*buf == '|') ? buf + 1 : buf;
561 return *s ? s : "0";
562}
563
564static char *
565sprinttime(t)
566time_t t;
567{
568 struct tm *tmp;
569 static char buf[32];
570
571 if (t == 0) {
572 sprintf(buf, "0");
573 return buf;
574 }
575 tmp = localtime(&t);
576 sprintf(buf, "%02d/%02d/%02d-%02d:%02d:%02d",
Wichert Akkerman3ed6dc22000-01-11 14:41:09 +0000577 tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday,
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000578 tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
579 return buf;
580}
581
582#ifdef LINUXSPARC
583typedef struct {
584 int tv_sec;
585 int tv_nsec;
586} timestruct_t;
587
588struct solstat {
589 unsigned st_dev;
590 int st_pad1[3]; /* network id */
591 unsigned st_ino;
592 unsigned st_mode;
593 unsigned st_nlink;
594 unsigned st_uid;
595 unsigned st_gid;
596 unsigned st_rdev;
597 int st_pad2[2];
598 int st_size;
599 int st_pad3; /* st_size, off_t expansion */
600 timestruct_t st_atime;
601 timestruct_t st_mtime;
602 timestruct_t st_ctime;
603 int st_blksize;
604 int st_blocks;
605 char st_fstype[16];
606 int st_pad4[8]; /* expansion area */
607};
608
609static void
610printstatsol(tcp, addr)
611struct tcb *tcp;
Wichert Akkerman8b1b40c2000-02-03 21:58:30 +0000612long addr;
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000613{
614 struct solstat statbuf;
615
616 if (!addr) {
617 tprintf("NULL");
618 return;
619 }
620 if (syserror(tcp) || !verbose(tcp)) {
Wichert Akkerman8b1b40c2000-02-03 21:58:30 +0000621 tprintf("%#lx", addr);
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000622 return;
623 }
624 if (umove(tcp, addr, &statbuf) < 0) {
625 tprintf("{...}");
626 return;
627 }
628 if (!abbrev(tcp)) {
629 tprintf("{st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, ",
630 (unsigned long) ((statbuf.st_dev >> 18) & 0x3fff),
631 (unsigned long) (statbuf.st_dev & 0x3ffff),
632 (unsigned long) statbuf.st_ino,
633 sprintmode(statbuf.st_mode));
634 tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
635 (unsigned long) statbuf.st_nlink,
636 (unsigned long) statbuf.st_uid,
637 (unsigned long) statbuf.st_gid);
638 tprintf("st_blksize=%lu, ", (unsigned long) statbuf.st_blksize);
639 tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks);
640 }
641 else
642 tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
643 switch (statbuf.st_mode & S_IFMT) {
644 case S_IFCHR: case S_IFBLK:
645 tprintf("st_rdev=makedev(%lu, %lu), ",
646 (unsigned long) ((statbuf.st_rdev >> 18) & 0x3fff),
647 (unsigned long) (statbuf.st_rdev & 0x3ffff));
648 break;
649 default:
650 tprintf("st_size=%u, ", statbuf.st_size);
651 break;
652 }
653 if (!abbrev(tcp)) {
654 tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime));
655 tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime));
656 tprintf("st_ctime=%s}", sprinttime(statbuf.st_ctime));
657 }
658 else
659 tprintf("...}");
660}
Wichert Akkermanb859bea1999-04-18 22:50:50 +0000661#endif /* LINUXSPARC */
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000662
Michal Ludvig53b320f2002-09-23 13:30:09 +0000663struct xlat fileflags[] = {
John Hughesc0fc3fd2001-03-08 16:10:40 +0000664#ifdef FREEBSD
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +0000665 { UF_NODUMP, "UF_NODUMP" },
666 { UF_IMMUTABLE, "UF_IMMUTABLE" },
667 { UF_APPEND, "UF_APPEND" },
668 { UF_OPAQUE, "UF_OPAQUE" },
669 { UF_NOUNLINK, "UF_NOUNLINK" },
670 { SF_ARCHIVED, "SF_ARCHIVED" },
671 { SF_IMMUTABLE, "SF_IMMUTABLE" },
672 { SF_APPEND, "SF_APPEND" },
673 { SF_NOUNLINK, "SF_NOUNLINK" },
John Hughesc0fc3fd2001-03-08 16:10:40 +0000674#elif UNIXWARE >= 2
675#ifdef _S_ISMLD
676 { _S_ISMLD, "_S_ISMLD" },
677#endif
678#ifdef _S_ISMOUNTED
679 { _S_ISMOUNTED, "_S_ISMOUNTED" },
680#endif
681#endif
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +0000682 { 0, NULL },
683};
684
John Hughesc0fc3fd2001-03-08 16:10:40 +0000685#ifdef FREEBSD
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +0000686int
687sys_chflags(tcp)
688struct tcb *tcp;
689{
690 if (entering(tcp)) {
691 printpath(tcp, tcp->u_arg[0]);
692 tprintf(", ");
693 if (tcp->u_arg[1])
694 printflags(fileflags, tcp->u_arg[1]);
695 else
696 tprintf("0");
697 }
698 return 0;
699}
700
701int
702sys_fchflags(tcp)
703struct tcb *tcp;
704{
705 if (entering(tcp)) {
706 tprintf("%ld, ", tcp->u_arg[0]);
707 if (tcp->u_arg[1])
708 printflags(fileflags, tcp->u_arg[1]);
709 else
710 tprintf("0");
711 }
712 return 0;
713}
714#endif
715
John Hughes70623be2001-03-08 13:59:00 +0000716#ifndef HAVE_LONG_LONG_OFF_T
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000717static void
718realprintstat(tcp, statbuf)
719struct tcb *tcp;
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000720struct stat *statbuf;
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000721{
722 if (!abbrev(tcp)) {
723 tprintf("{st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, ",
724 (unsigned long) major(statbuf->st_dev),
725 (unsigned long) minor(statbuf->st_dev),
726 (unsigned long) statbuf->st_ino,
727 sprintmode(statbuf->st_mode));
728 tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
729 (unsigned long) statbuf->st_nlink,
730 (unsigned long) statbuf->st_uid,
731 (unsigned long) statbuf->st_gid);
Roland McGrath6d2b3492002-12-30 00:51:30 +0000732#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000733 tprintf("st_blksize=%lu, ", (unsigned long) statbuf->st_blksize);
Roland McGrath6d2b3492002-12-30 00:51:30 +0000734#endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */
735#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000736 tprintf("st_blocks=%lu, ", (unsigned long) statbuf->st_blocks);
Roland McGrath6d2b3492002-12-30 00:51:30 +0000737#endif /* HAVE_STRUCT_STAT_ST_BLOCKS */
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000738 }
739 else
740 tprintf("{st_mode=%s, ", sprintmode(statbuf->st_mode));
741 switch (statbuf->st_mode & S_IFMT) {
742 case S_IFCHR: case S_IFBLK:
Roland McGrath6d2b3492002-12-30 00:51:30 +0000743#ifdef HAVE_STRUCT_STAT_ST_RDEV
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000744 tprintf("st_rdev=makedev(%lu, %lu), ",
745 (unsigned long) major(statbuf->st_rdev),
746 (unsigned long) minor(statbuf->st_rdev));
Roland McGrath6d2b3492002-12-30 00:51:30 +0000747#else /* !HAVE_STRUCT_STAT_ST_RDEV */
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000748 tprintf("st_size=makedev(%lu, %lu), ",
749 (unsigned long) major(statbuf->st_size),
750 (unsigned long) minor(statbuf->st_size));
Roland McGrath6d2b3492002-12-30 00:51:30 +0000751#endif /* !HAVE_STRUCT_STAT_ST_RDEV */
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000752 break;
753 default:
754 tprintf("st_size=%lu, ", statbuf->st_size);
755 break;
756 }
757 if (!abbrev(tcp)) {
758 tprintf("st_atime=%s, ", sprinttime(statbuf->st_atime));
759 tprintf("st_mtime=%s, ", sprinttime(statbuf->st_mtime));
John Hughesc0fc3fd2001-03-08 16:10:40 +0000760 tprintf("st_ctime=%s", sprinttime(statbuf->st_ctime));
Roland McGrath6d2b3492002-12-30 00:51:30 +0000761#if HAVE_STRUCT_STAT_ST_FLAGS
John Hughesc0fc3fd2001-03-08 16:10:40 +0000762 tprintf(", st_flags=");
763 if (statbuf->st_flags) {
764 printflags(fileflags, statbuf->st_flags);
765 } else
766 tprintf("0");
767#endif
Roland McGrath6d2b3492002-12-30 00:51:30 +0000768#if HAVE_STRUCT_STAT_ST_ACLCNT
John Hughesc0fc3fd2001-03-08 16:10:40 +0000769 tprintf(", st_aclcnt=%d", statbuf->st_aclcnt);
770#endif
Roland McGrath6d2b3492002-12-30 00:51:30 +0000771#if HAVE_STRUCT_STAT_ST_LEVEL
John Hughesc0fc3fd2001-03-08 16:10:40 +0000772 tprintf(", st_level=%ld", statbuf->st_level);
773#endif
Roland McGrath6d2b3492002-12-30 00:51:30 +0000774#if HAVE_STRUCT_STAT_ST_FSTYPE
John Hughesc0fc3fd2001-03-08 16:10:40 +0000775 tprintf(", st_fstype=%.*s",
776 (int) sizeof statbuf->st_fstype, statbuf->st_fstype);
777#endif
Roland McGrath6d2b3492002-12-30 00:51:30 +0000778#if HAVE_STRUCT_STAT_ST_GEN
John Hughesc0fc3fd2001-03-08 16:10:40 +0000779 tprintf(", st_gen=%u", statbuf->st_gen);
780#endif
781 tprintf("}");
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000782 }
783 else
784 tprintf("...}");
785}
786
Nate Sammons771a6ff1999-04-05 22:39:31 +0000787
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000788static void
789printstat(tcp, addr)
790struct tcb *tcp;
Wichert Akkerman8b1b40c2000-02-03 21:58:30 +0000791long addr;
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000792{
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000793 struct stat statbuf;
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000794
795#ifdef LINUXSPARC
796 if (current_personality == 1) {
797 printstatsol(tcp, addr);
798 return;
799 }
800#endif /* LINUXSPARC */
801
802 if (!addr) {
803 tprintf("NULL");
804 return;
805 }
806 if (syserror(tcp) || !verbose(tcp)) {
Wichert Akkerman8b1b40c2000-02-03 21:58:30 +0000807 tprintf("%#lx", addr);
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000808 return;
809 }
810 if (umove(tcp, addr, &statbuf) < 0) {
811 tprintf("{...}");
812 return;
813 }
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000814
815 realprintstat(tcp, &statbuf);
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000816}
John Hughes70623be2001-03-08 13:59:00 +0000817#endif /* !HAVE_LONG_LONG_OFF_T */
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000818
Wichert Akkermanc7926982000-04-10 22:22:31 +0000819#ifdef HAVE_STAT64
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000820static void
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000821printstat64(tcp, addr)
822struct tcb *tcp;
Wichert Akkerman8b1b40c2000-02-03 21:58:30 +0000823long addr;
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000824{
825 struct stat64 statbuf;
826
827#ifdef LINUXSPARC
828 if (current_personality == 1) {
829 printstatsol(tcp, addr);
830 return;
831 }
832#endif /* LINUXSPARC */
833
834 if (!addr) {
835 tprintf("NULL");
836 return;
837 }
838 if (syserror(tcp) || !verbose(tcp)) {
Wichert Akkerman8b1b40c2000-02-03 21:58:30 +0000839 tprintf("%#lx", addr);
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000840 return;
841 }
842 if (umove(tcp, addr, &statbuf) < 0) {
843 tprintf("{...}");
844 return;
845 }
846
847 if (!abbrev(tcp)) {
Wichert Akkermand077c452000-08-10 18:16:15 +0000848#ifdef HAVE_LONG_LONG
849 tprintf("{st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, ",
850#else
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000851 tprintf("{st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, ",
Wichert Akkermand077c452000-08-10 18:16:15 +0000852#endif
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000853 (unsigned long) major(statbuf.st_dev),
854 (unsigned long) minor(statbuf.st_dev),
Wichert Akkermand077c452000-08-10 18:16:15 +0000855#ifdef HAVE_LONG_LONG
856 (unsigned long long) statbuf.st_ino,
857#else
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000858 (unsigned long) statbuf.st_ino,
Wichert Akkermand077c452000-08-10 18:16:15 +0000859#endif
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000860 sprintmode(statbuf.st_mode));
861 tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
862 (unsigned long) statbuf.st_nlink,
863 (unsigned long) statbuf.st_uid,
864 (unsigned long) statbuf.st_gid);
Roland McGrath6d2b3492002-12-30 00:51:30 +0000865#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000866 tprintf("st_blksize=%lu, ",
867 (unsigned long) statbuf.st_blksize);
Roland McGrath6d2b3492002-12-30 00:51:30 +0000868#endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */
869#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000870 tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks);
Roland McGrath6d2b3492002-12-30 00:51:30 +0000871#endif /* HAVE_STRUCT_STAT_ST_BLOCKS */
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000872 }
873 else
874 tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
875 switch (statbuf.st_mode & S_IFMT) {
876 case S_IFCHR: case S_IFBLK:
Roland McGrath6d2b3492002-12-30 00:51:30 +0000877#ifdef HAVE_STRUCT_STAT_ST_RDEV
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000878 tprintf("st_rdev=makedev(%lu, %lu), ",
879 (unsigned long) major(statbuf.st_rdev),
880 (unsigned long) minor(statbuf.st_rdev));
Roland McGrath6d2b3492002-12-30 00:51:30 +0000881#else /* !HAVE_STRUCT_STAT_ST_RDEV */
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000882 tprintf("st_size=makedev(%lu, %lu), ",
883 (unsigned long) major(statbuf.st_size),
884 (unsigned long) minor(statbuf.st_size));
Roland McGrath6d2b3492002-12-30 00:51:30 +0000885#endif /* !HAVE_STRUCT_STAT_ST_RDEV */
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000886 break;
887 default:
888 tprintf("st_size=%llu, ", statbuf.st_size);
889 break;
890 }
891 if (!abbrev(tcp)) {
892 tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime));
893 tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime));
John Hughesc0fc3fd2001-03-08 16:10:40 +0000894 tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime));
Roland McGrath6d2b3492002-12-30 00:51:30 +0000895#if HAVE_STRUCT_STAT_ST_FLAGS
John Hughesc0fc3fd2001-03-08 16:10:40 +0000896 tprintf(", st_flags=");
John Hughesb8c9f772001-03-07 16:53:07 +0000897 if (statbuf.st_flags) {
898 printflags(fileflags, statbuf.st_flags);
899 } else
900 tprintf("0");
John Hughesc0fc3fd2001-03-08 16:10:40 +0000901#endif
Roland McGrath6d2b3492002-12-30 00:51:30 +0000902#if HAVE_STRUCT_STAT_ST_ACLCNT
John Hughesc0fc3fd2001-03-08 16:10:40 +0000903 tprintf(", st_aclcnt=%d", statbuf.st_aclcnt);
904#endif
Roland McGrath6d2b3492002-12-30 00:51:30 +0000905#if HAVE_STRUCT_STAT_ST_LEVEL
John Hughesc0fc3fd2001-03-08 16:10:40 +0000906 tprintf(", st_level=%ld", statbuf.st_level);
907#endif
Roland McGrath6d2b3492002-12-30 00:51:30 +0000908#if HAVE_STRUCT_STAT_ST_FSTYPE
John Hughesc0fc3fd2001-03-08 16:10:40 +0000909 tprintf(", st_fstype=%.*s",
910 (int) sizeof statbuf.st_fstype, statbuf.st_fstype);
911#endif
Roland McGrath6d2b3492002-12-30 00:51:30 +0000912#if HAVE_STRUCT_STAT_ST_GEN
John Hughesc0fc3fd2001-03-08 16:10:40 +0000913 tprintf(", st_gen=%u", statbuf.st_gen);
914#endif
915 tprintf("}");
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000916 }
917 else
918 tprintf("...}");
919}
Wichert Akkermanc7926982000-04-10 22:22:31 +0000920#endif /* HAVE_STAT64 */
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000921
Michal Ludvig10a88d02002-10-07 14:31:00 +0000922#if defined(LINUX) && !defined(IA64) && !defined(HPPA) && !defined(X86_64) \
923 && !defined(S390) && !defined(S390X)
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000924static void
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000925convertoldstat(oldbuf, newbuf)
Wichert Akkerman25d0c4f1999-04-18 19:35:42 +0000926const struct __old_kernel_stat *oldbuf;
927struct stat *newbuf;
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000928{
929 newbuf->st_dev=oldbuf->st_dev;
930 newbuf->st_ino=oldbuf->st_ino;
931 newbuf->st_mode=oldbuf->st_mode;
932 newbuf->st_nlink=oldbuf->st_nlink;
933 newbuf->st_uid=oldbuf->st_uid;
934 newbuf->st_gid=oldbuf->st_gid;
935 newbuf->st_rdev=oldbuf->st_rdev;
936 newbuf->st_size=oldbuf->st_size;
937 newbuf->st_atime=oldbuf->st_atime;
938 newbuf->st_mtime=oldbuf->st_mtime;
939 newbuf->st_ctime=oldbuf->st_ctime;
940 newbuf->st_blksize=0; /* not supported in old_stat */
941 newbuf->st_blocks=0; /* not supported in old_stat */
942}
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000943
944
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000945static void
946printoldstat(tcp, addr)
947struct tcb *tcp;
Wichert Akkerman8b1b40c2000-02-03 21:58:30 +0000948long addr;
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000949{
Wichert Akkerman25d0c4f1999-04-18 19:35:42 +0000950 struct __old_kernel_stat statbuf;
951 struct stat newstatbuf;
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000952
953#ifdef LINUXSPARC
954 if (current_personality == 1) {
955 printstatsol(tcp, addr);
956 return;
957 }
958#endif /* LINUXSPARC */
959
960 if (!addr) {
961 tprintf("NULL");
962 return;
963 }
964 if (syserror(tcp) || !verbose(tcp)) {
Wichert Akkerman8b1b40c2000-02-03 21:58:30 +0000965 tprintf("%#lx", addr);
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000966 return;
967 }
968 if (umove(tcp, addr, &statbuf) < 0) {
969 tprintf("{...}");
970 return;
971 }
972
973 convertoldstat(&statbuf, &newstatbuf);
974 realprintstat(tcp, &newstatbuf);
975}
Michal Ludvig10a88d02002-10-07 14:31:00 +0000976#endif /* LINUX && !IA64 && !HPPA && !X86_64 && !S390 && !S390X */
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000977
John Hughes70623be2001-03-08 13:59:00 +0000978#ifndef HAVE_LONG_LONG_OFF_T
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000979int
980sys_stat(tcp)
981struct tcb *tcp;
982{
983 if (entering(tcp)) {
984 printpath(tcp, tcp->u_arg[0]);
985 tprintf(", ");
986 } else {
987 printstat(tcp, tcp->u_arg[1]);
988 }
989 return 0;
990}
John Hughesb8c9f772001-03-07 16:53:07 +0000991#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000992
Wichert Akkerman328c5e71999-04-16 00:21:26 +0000993int
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +0000994sys_stat64(tcp)
995struct tcb *tcp;
996{
997#ifdef HAVE_STAT64
998 if (entering(tcp)) {
999 printpath(tcp, tcp->u_arg[0]);
1000 tprintf(", ");
1001 } else {
1002 printstat64(tcp, tcp->u_arg[1]);
1003 }
1004 return 0;
1005#else
1006 return printargs(tcp);
1007#endif
1008}
1009
Michal Ludvig53b320f2002-09-23 13:30:09 +00001010#ifdef LINUX
Michal Ludvig10a88d02002-10-07 14:31:00 +00001011# if !defined(IA64) && !defined(HPPA) && !defined(X86_64) \
1012 && !defined(S390) && !defined(S390X)
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +00001013int
Wichert Akkerman328c5e71999-04-16 00:21:26 +00001014sys_oldstat(tcp)
1015struct tcb *tcp;
1016{
1017 if (entering(tcp)) {
1018 printpath(tcp, tcp->u_arg[0]);
1019 tprintf(", ");
1020 } else {
1021 printoldstat(tcp, tcp->u_arg[1]);
1022 }
1023 return 0;
1024}
Wichert Akkerman7b3346b2001-10-09 23:47:38 +00001025# endif /* !IA64 && !HPPA*/
Michal Ludvig53b320f2002-09-23 13:30:09 +00001026#endif /* LINUX */
Wichert Akkerman328c5e71999-04-16 00:21:26 +00001027
John Hughes70623be2001-03-08 13:59:00 +00001028#ifndef HAVE_LONG_LONG_OFF_T
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001029int
1030sys_fstat(tcp)
1031struct tcb *tcp;
1032{
1033 if (entering(tcp))
1034 tprintf("%ld, ", tcp->u_arg[0]);
1035 else {
1036 printstat(tcp, tcp->u_arg[1]);
1037 }
1038 return 0;
1039}
John Hughesb8c9f772001-03-07 16:53:07 +00001040#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001041
Wichert Akkerman328c5e71999-04-16 00:21:26 +00001042int
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +00001043sys_fstat64(tcp)
1044struct tcb *tcp;
1045{
1046#ifdef HAVE_STAT64
1047 if (entering(tcp))
1048 tprintf("%ld, ", tcp->u_arg[0]);
1049 else {
1050 printstat64(tcp, tcp->u_arg[1]);
1051 }
1052 return 0;
1053#else
1054 return printargs(tcp);
1055#endif
1056}
1057
Michal Ludvig53b320f2002-09-23 13:30:09 +00001058#ifdef LINUX
Michal Ludvig10a88d02002-10-07 14:31:00 +00001059# if !defined(IA64) && !defined(HPPA) && !defined(X86_64) \
1060 && !defined(S390) && !defined(S390X)
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +00001061int
Wichert Akkerman328c5e71999-04-16 00:21:26 +00001062sys_oldfstat(tcp)
1063struct tcb *tcp;
1064{
1065 if (entering(tcp))
1066 tprintf("%ld, ", tcp->u_arg[0]);
1067 else {
1068 printoldstat(tcp, tcp->u_arg[1]);
1069 }
1070 return 0;
1071}
Michal Ludvig10a88d02002-10-07 14:31:00 +00001072# endif /* !IA64 && !HPPA && !X86_64 && !S390 && !S390X */
Wichert Akkerman328c5e71999-04-16 00:21:26 +00001073#endif
1074
John Hughes70623be2001-03-08 13:59:00 +00001075#ifndef HAVE_LONG_LONG_OFF_T
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001076int
1077sys_lstat(tcp)
1078struct tcb *tcp;
1079{
1080 if (entering(tcp)) {
1081 printpath(tcp, tcp->u_arg[0]);
1082 tprintf(", ");
1083 } else {
1084 printstat(tcp, tcp->u_arg[1]);
1085 }
1086 return 0;
1087}
John Hughesb8c9f772001-03-07 16:53:07 +00001088#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001089
Wichert Akkerman328c5e71999-04-16 00:21:26 +00001090int
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +00001091sys_lstat64(tcp)
1092struct tcb *tcp;
1093{
1094#ifdef HAVE_STAT64
1095 if (entering(tcp)) {
1096 printpath(tcp, tcp->u_arg[0]);
1097 tprintf(", ");
1098 } else {
1099 printstat64(tcp, tcp->u_arg[1]);
1100 }
1101 return 0;
1102#else
1103 return printargs(tcp);
1104#endif
1105}
1106
Michal Ludvig53b320f2002-09-23 13:30:09 +00001107#ifdef LINUX
Michal Ludvig10a88d02002-10-07 14:31:00 +00001108# if !defined(IA64) && !defined(HPPA) && !defined(X86_64) \
1109 && !defined(S390) && !defined(S390X)
Ulrich Drepper7f02c4d1999-12-24 08:01:34 +00001110int
Wichert Akkerman328c5e71999-04-16 00:21:26 +00001111sys_oldlstat(tcp)
1112struct tcb *tcp;
1113{
1114 if (entering(tcp)) {
1115 printpath(tcp, tcp->u_arg[0]);
1116 tprintf(", ");
1117 } else {
1118 printoldstat(tcp, tcp->u_arg[1]);
1119 }
1120 return 0;
1121}
Michal Ludvig10a88d02002-10-07 14:31:00 +00001122# endif /* !IA64 && !HPPA && !X86_64 && !S390 && !S390X */
Wichert Akkerman328c5e71999-04-16 00:21:26 +00001123#endif
1124
1125
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001126#if defined(SVR4) || defined(LINUXSPARC)
1127
1128int
1129sys_xstat(tcp)
1130struct tcb *tcp;
1131{
1132 if (entering(tcp)) {
1133 tprintf("%ld, ", tcp->u_arg[0]);
1134 printpath(tcp, tcp->u_arg[1]);
1135 tprintf(", ");
1136 } else {
John Hughes8fe2c982001-03-06 09:45:18 +00001137#ifdef _STAT64_VER
1138 if (tcp->u_arg[0] == _STAT64_VER)
1139 printstat64 (tcp, tcp->u_arg[2]);
1140 else
1141#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001142 printstat(tcp, tcp->u_arg[2]);
1143 }
1144 return 0;
1145}
1146
1147int
1148sys_fxstat(tcp)
1149struct tcb *tcp;
1150{
1151 if (entering(tcp))
1152 tprintf("%ld, %ld, ", tcp->u_arg[0], tcp->u_arg[1]);
1153 else {
John Hughes8fe2c982001-03-06 09:45:18 +00001154#ifdef _STAT64_VER
1155 if (tcp->u_arg[0] == _STAT64_VER)
1156 printstat64 (tcp, tcp->u_arg[2]);
1157 else
1158#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001159 printstat(tcp, tcp->u_arg[2]);
1160 }
1161 return 0;
1162}
1163
1164int
1165sys_lxstat(tcp)
1166struct tcb *tcp;
1167{
1168 if (entering(tcp)) {
1169 tprintf("%ld, ", tcp->u_arg[0]);
1170 printpath(tcp, tcp->u_arg[1]);
1171 tprintf(", ");
1172 } else {
John Hughes8fe2c982001-03-06 09:45:18 +00001173#ifdef _STAT64_VER
1174 if (tcp->u_arg[0] == _STAT64_VER)
1175 printstat64 (tcp, tcp->u_arg[2]);
1176 else
1177#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001178 printstat(tcp, tcp->u_arg[2]);
1179 }
1180 return 0;
1181}
1182
1183int
1184sys_xmknod(tcp)
1185struct tcb *tcp;
1186{
1187 int mode = tcp->u_arg[2];
1188
1189 if (entering(tcp)) {
1190 tprintf("%ld, ", tcp->u_arg[0]);
1191 printpath(tcp, tcp->u_arg[1]);
1192 tprintf(", %s", sprintmode(mode));
1193 switch (mode & S_IFMT) {
1194 case S_IFCHR: case S_IFBLK:
1195#ifdef LINUXSPARC
1196 tprintf(", makedev(%lu, %lu)",
1197 (unsigned long) ((tcp->u_arg[3] >> 18) & 0x3fff),
1198 (unsigned long) (tcp->u_arg[3] & 0x3ffff));
Roland McGrath186c5ac2002-12-15 23:58:23 +00001199#else
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001200 tprintf(", makedev(%lu, %lu)",
1201 (unsigned long) major(tcp->u_arg[3]),
1202 (unsigned long) minor(tcp->u_arg[3]));
Roland McGrath186c5ac2002-12-15 23:58:23 +00001203#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001204 break;
1205 default:
1206 break;
1207 }
1208 }
1209 return 0;
1210}
1211
Wichert Akkerman8829a551999-06-11 13:18:40 +00001212#ifdef HAVE_SYS_ACL_H
1213
1214#include <sys/acl.h>
1215
1216struct xlat aclcmds[] = {
Wichert Akkermane4aafd41999-11-26 09:54:08 +00001217#ifdef SETACL
Wichert Akkerman8829a551999-06-11 13:18:40 +00001218 { SETACL, "SETACL" },
Wichert Akkermane4aafd41999-11-26 09:54:08 +00001219#endif
1220#ifdef GETACL
Wichert Akkerman8829a551999-06-11 13:18:40 +00001221 { GETACL, "GETACL" },
Wichert Akkermane4aafd41999-11-26 09:54:08 +00001222#endif
1223#ifdef GETACLCNT
Wichert Akkerman8829a551999-06-11 13:18:40 +00001224 { GETACLCNT, "GETACLCNT" },
Wichert Akkermane4aafd41999-11-26 09:54:08 +00001225#endif
1226#ifdef ACL_GET
1227 { ACL_GET, "ACL_GET" },
Roland McGrath186c5ac2002-12-15 23:58:23 +00001228#endif
Wichert Akkermane4aafd41999-11-26 09:54:08 +00001229#ifdef ACL_SET
1230 { ACL_SET, "ACL_SET" },
Roland McGrath186c5ac2002-12-15 23:58:23 +00001231#endif
Wichert Akkermane4aafd41999-11-26 09:54:08 +00001232#ifdef ACL_CNT
1233 { ACL_CNT, "ACL_CNT" },
Roland McGrath186c5ac2002-12-15 23:58:23 +00001234#endif
Wichert Akkerman8829a551999-06-11 13:18:40 +00001235 { 0, NULL },
1236};
1237
1238int
1239sys_acl(tcp)
1240struct tcb *tcp;
1241{
1242 if (entering(tcp)) {
1243 printpath(tcp, tcp->u_arg[0]);
1244 tprintf(", ");
1245 printxval(aclcmds, tcp->u_arg[1], "???ACL???");
1246 tprintf(", %ld", tcp->u_arg[2]);
1247 /*
1248 * FIXME - dump out the list of aclent_t's pointed to
1249 * by "tcp->u_arg[3]" if it's not NULL.
1250 */
1251 if (tcp->u_arg[3])
1252 tprintf(", %#lx", tcp->u_arg[3]);
1253 else
1254 tprintf(", NULL");
1255 }
1256 return 0;
1257}
1258
1259
1260int
1261sys_facl(tcp)
1262struct tcb *tcp;
1263{
1264 if (entering(tcp)) {
1265 tprintf("%ld, ", tcp->u_arg[0]);
1266 printxval(aclcmds, tcp->u_arg[1], "???ACL???");
1267 tprintf(", %ld", tcp->u_arg[2]);
1268 /*
1269 * FIXME - dump out the list of aclent_t's pointed to
1270 * by "tcp->u_arg[3]" if it's not NULL.
1271 */
1272 if (tcp->u_arg[3])
1273 tprintf(", %#lx", tcp->u_arg[3]);
1274 else
1275 tprintf(", NULL");
1276 }
1277 return 0;
1278}
1279
Wichert Akkermane4aafd41999-11-26 09:54:08 +00001280
1281struct xlat aclipc[] = {
1282#ifdef IPC_SHM
1283 { IPC_SHM, "IPC_SHM" },
Roland McGrath186c5ac2002-12-15 23:58:23 +00001284#endif
Wichert Akkermane4aafd41999-11-26 09:54:08 +00001285#ifdef IPC_SEM
1286 { IPC_SEM, "IPC_SEM" },
Roland McGrath186c5ac2002-12-15 23:58:23 +00001287#endif
Wichert Akkermane4aafd41999-11-26 09:54:08 +00001288#ifdef IPC_MSG
1289 { IPC_MSG, "IPC_MSG" },
Roland McGrath186c5ac2002-12-15 23:58:23 +00001290#endif
Wichert Akkermane4aafd41999-11-26 09:54:08 +00001291 { 0, NULL },
1292};
1293
1294
1295int
1296sys_aclipc(tcp)
1297struct tcb *tcp;
1298{
1299 if (entering(tcp)) {
1300 printxval(aclipc, tcp->u_arg[0], "???IPC???");
1301 tprintf(", %#lx, ", tcp->u_arg[1]);
1302 printxval(aclcmds, tcp->u_arg[2], "???ACL???");
1303 tprintf(", %ld", tcp->u_arg[3]);
1304 /*
1305 * FIXME - dump out the list of aclent_t's pointed to
1306 * by "tcp->u_arg[4]" if it's not NULL.
1307 */
1308 if (tcp->u_arg[4])
1309 tprintf(", %#lx", tcp->u_arg[4]);
1310 else
1311 tprintf(", NULL");
1312 }
1313 return 0;
1314}
1315
1316
1317
Wichert Akkerman8829a551999-06-11 13:18:40 +00001318#endif /* HAVE_SYS_ACL_H */
1319
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001320#endif /* SVR4 || LINUXSPARC */
1321
Michal Ludvig53b320f2002-09-23 13:30:09 +00001322#ifdef LINUX
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001323
1324static struct xlat fsmagic[] = {
Wichert Akkerman43a74822000-06-27 17:33:32 +00001325 { 0x73757245, "CODA_SUPER_MAGIC" },
1326 { 0x012ff7b7, "COH_SUPER_MAGIC" },
1327 { 0x1373, "DEVFS_SUPER_MAGIC" },
1328 { 0x1cd1, "DEVPTS_SUPER_MAGIC" },
1329 { 0x414A53, "EFS_SUPER_MAGIC" },
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001330 { 0xef51, "EXT2_OLD_SUPER_MAGIC" },
1331 { 0xef53, "EXT2_SUPER_MAGIC" },
1332 { 0x137d, "EXT_SUPER_MAGIC" },
Wichert Akkerman43a74822000-06-27 17:33:32 +00001333 { 0xf995e849, "HPFS_SUPER_MAGIC" },
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001334 { 0x9660, "ISOFS_SUPER_MAGIC" },
1335 { 0x137f, "MINIX_SUPER_MAGIC" },
1336 { 0x138f, "MINIX_SUPER_MAGIC2" },
Wichert Akkerman2e2553a1999-05-09 00:29:58 +00001337 { 0x2468, "MINIX2_SUPER_MAGIC" },
1338 { 0x2478, "MINIX2_SUPER_MAGIC2" },
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001339 { 0x4d44, "MSDOS_SUPER_MAGIC" },
Wichert Akkerman43a74822000-06-27 17:33:32 +00001340 { 0x564c, "NCP_SUPER_MAGIC" },
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001341 { 0x6969, "NFS_SUPER_MAGIC" },
1342 { 0x9fa0, "PROC_SUPER_MAGIC" },
Wichert Akkerman43a74822000-06-27 17:33:32 +00001343 { 0x002f, "QNX4_SUPER_MAGIC" },
1344 { 0x52654973, "REISERFS_SUPER_MAGIC" },
1345 { 0x02011994, "SHMFS_SUPER_MAGIC" },
1346 { 0x517b, "SMB_SUPER_MAGIC" },
1347 { 0x012ff7b6, "SYSV2_SUPER_MAGIC" },
1348 { 0x012ff7b5, "SYSV4_SUPER_MAGIC" },
1349 { 0x00011954, "UFS_MAGIC" },
1350 { 0x54190100, "UFS_CIGAM" },
1351 { 0x012ff7b4, "XENIX_SUPER_MAGIC" },
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001352 { 0x012fd16d, "XIAFS_SUPER_MAGIC" },
1353 { 0, NULL },
1354};
1355
Michal Ludvig53b320f2002-09-23 13:30:09 +00001356#endif /* LINUX */
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001357
1358#ifndef SVR4
1359
1360static char *
1361sprintfstype(magic)
1362int magic;
1363{
1364 static char buf[32];
Michal Ludvig53b320f2002-09-23 13:30:09 +00001365#ifdef LINUX
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001366 char *s;
1367
1368 s = xlookup(fsmagic, magic);
1369 if (s) {
1370 sprintf(buf, "\"%s\"", s);
1371 return buf;
1372 }
Michal Ludvig53b320f2002-09-23 13:30:09 +00001373#endif /* LINUX */
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001374 sprintf(buf, "%#x", magic);
1375 return buf;
1376}
1377
1378static void
1379printstatfs(tcp, addr)
1380struct tcb *tcp;
1381long addr;
1382{
1383 struct statfs statbuf;
1384
1385 if (syserror(tcp) || !verbose(tcp)) {
1386 tprintf("%#lx", addr);
1387 return;
1388 }
1389 if (umove(tcp, addr, &statbuf) < 0) {
1390 tprintf("{...}");
1391 return;
1392 }
1393#ifdef ALPHA
1394
1395 tprintf("{f_type=%s, f_fbsize=%u, f_blocks=%u, f_bfree=%u, ",
1396 sprintfstype(statbuf.f_type),
1397 statbuf.f_bsize, statbuf.f_blocks, statbuf.f_bfree);
Wichert Akkerman2e2553a1999-05-09 00:29:58 +00001398 tprintf("f_bavail=%u, f_files=%u, f_ffree=%u, f_namelen=%u",
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001399 statbuf.f_bavail,statbuf.f_files, statbuf.f_ffree, statbuf.f_namelen);
1400#else /* !ALPHA */
1401 tprintf("{f_type=%s, f_bsize=%lu, f_blocks=%lu, f_bfree=%lu, ",
1402 sprintfstype(statbuf.f_type),
Nate Sammons5c74d201999-04-06 01:37:51 +00001403 (unsigned long)statbuf.f_bsize,
1404 (unsigned long)statbuf.f_blocks,
1405 (unsigned long)statbuf.f_bfree);
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001406 tprintf("f_files=%lu, f_ffree=%lu",
Nate Sammons5c74d201999-04-06 01:37:51 +00001407 (unsigned long)statbuf.f_files,
1408 (unsigned long)statbuf.f_ffree);
Michal Ludvig53b320f2002-09-23 13:30:09 +00001409#ifdef LINUX
Wichert Akkerman2e2553a1999-05-09 00:29:58 +00001410 tprintf(", f_namelen=%lu", (unsigned long)statbuf.f_namelen);
Michal Ludvig53b320f2002-09-23 13:30:09 +00001411#endif /* LINUX */
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001412#endif /* !ALPHA */
1413 tprintf("}");
1414}
1415
1416int
1417sys_statfs(tcp)
1418struct tcb *tcp;
1419{
1420 if (entering(tcp)) {
1421 printpath(tcp, tcp->u_arg[0]);
1422 tprintf(", ");
1423 } else {
1424 printstatfs(tcp, tcp->u_arg[1]);
1425 }
1426 return 0;
1427}
1428
1429int
1430sys_fstatfs(tcp)
1431struct tcb *tcp;
1432{
1433 if (entering(tcp)) {
1434 tprintf("%lu, ", tcp->u_arg[0]);
1435 } else {
1436 printstatfs(tcp, tcp->u_arg[1]);
1437 }
1438 return 0;
1439}
1440
Michal Ludvig53b320f2002-09-23 13:30:09 +00001441#if defined(LINUX) && defined(__alpha)
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001442
1443int
1444osf_statfs(tcp)
1445struct tcb *tcp;
1446{
1447 if (entering(tcp)) {
1448 printpath(tcp, tcp->u_arg[0]);
1449 tprintf(", ");
1450 } else {
1451 printstatfs(tcp, tcp->u_arg[1]);
1452 tprintf(", %lu", tcp->u_arg[2]);
1453 }
1454 return 0;
1455}
1456
1457int
1458osf_fstatfs(tcp)
1459struct tcb *tcp;
1460{
1461 if (entering(tcp)) {
1462 tprintf("%lu, ", tcp->u_arg[0]);
1463 } else {
1464 printstatfs(tcp, tcp->u_arg[1]);
1465 tprintf(", %lu", tcp->u_arg[2]);
1466 }
1467 return 0;
1468}
Michal Ludvig53b320f2002-09-23 13:30:09 +00001469#endif /* LINUX && __alpha */
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001470
1471#endif /* !SVR4 */
1472
1473#ifdef SUNOS4
1474
1475int
1476sys_ustat(tcp)
1477struct tcb *tcp;
1478{
1479 struct ustat statbuf;
1480
1481 if (entering(tcp)) {
1482 tprintf("makedev(%lu, %lu), ",
1483 (long) major(tcp->u_arg[0]),
1484 (long) minor(tcp->u_arg[0]));
1485 }
1486 else {
1487 if (syserror(tcp) || !verbose(tcp))
1488 tprintf("%#lx", tcp->u_arg[1]);
1489 else if (umove(tcp, tcp->u_arg[1], &statbuf) < 0)
1490 tprintf("{...}");
1491 else {
1492 tprintf("{f_tfree=%lu, f_tinode=%lu, ",
1493 statbuf.f_tfree, statbuf.f_tinode);
1494 tprintf("f_fname=\"%.*s\", ",
1495 (int) sizeof(statbuf.f_fname),
1496 statbuf.f_fname);
1497 tprintf("f_fpack=\"%.*s\"}",
1498 (int) sizeof(statbuf.f_fpack),
1499 statbuf.f_fpack);
1500 }
1501 }
1502 return 0;
1503}
1504
1505#endif /* SUNOS4 */
1506
Wichert Akkermanc7926982000-04-10 22:22:31 +00001507int
1508sys_pivotroot(tcp)
1509struct tcb *tcp;
1510{
1511 if (entering(tcp)) {
1512 printpath(tcp, tcp->u_arg[0]);
1513 tprintf(", ");
1514 printpath(tcp, tcp->u_arg[1]);
1515 }
1516 return 0;
1517}
1518
1519
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001520/* directory */
1521int
1522sys_chdir(tcp)
1523struct tcb *tcp;
1524{
1525 if (entering(tcp)) {
1526 printpath(tcp, tcp->u_arg[0]);
1527 }
1528 return 0;
1529}
1530
1531int
1532sys_mkdir(tcp)
1533struct tcb *tcp;
1534{
1535 if (entering(tcp)) {
1536 printpath(tcp, tcp->u_arg[0]);
1537 tprintf(", %#lo", tcp->u_arg[1]);
1538 }
1539 return 0;
1540}
1541
1542int
1543sys_rmdir(tcp)
1544struct tcb *tcp;
1545{
1546 if (entering(tcp)) {
1547 printpath(tcp, tcp->u_arg[0]);
1548 }
1549 return 0;
1550}
1551
1552int
1553sys_fchdir(tcp)
1554struct tcb *tcp;
1555{
1556 if (entering(tcp)) {
1557 tprintf("%ld", tcp->u_arg[0]);
1558 }
1559 return 0;
1560}
1561
1562int
1563sys_chroot(tcp)
1564struct tcb *tcp;
1565{
1566 if (entering(tcp)) {
1567 printpath(tcp, tcp->u_arg[0]);
1568 }
1569 return 0;
1570}
1571
1572int
1573sys_fchroot(tcp)
1574struct tcb *tcp;
1575{
1576 if (entering(tcp)) {
1577 tprintf("%ld", tcp->u_arg[0]);
1578 }
1579 return 0;
1580}
1581
1582int
1583sys_link(tcp)
1584struct tcb *tcp;
1585{
1586 if (entering(tcp)) {
1587 printpath(tcp, tcp->u_arg[0]);
1588 tprintf(", ");
1589 printpath(tcp, tcp->u_arg[1]);
1590 }
1591 return 0;
1592}
1593
1594int
1595sys_unlink(tcp)
1596struct tcb *tcp;
1597{
1598 if (entering(tcp)) {
1599 printpath(tcp, tcp->u_arg[0]);
1600 }
1601 return 0;
1602}
1603
1604int
1605sys_symlink(tcp)
1606struct tcb *tcp;
1607{
1608 if (entering(tcp)) {
1609 printpath(tcp, tcp->u_arg[0]);
1610 tprintf(", ");
1611 printpath(tcp, tcp->u_arg[1]);
1612 }
1613 return 0;
1614}
1615
1616int
1617sys_readlink(tcp)
1618struct tcb *tcp;
1619{
1620 if (entering(tcp)) {
1621 printpath(tcp, tcp->u_arg[0]);
1622 tprintf(", ");
1623 } else {
1624 if (syserror(tcp))
1625 tprintf("%#lx", tcp->u_arg[1]);
1626 else
1627 printpathn(tcp, tcp->u_arg[1], tcp->u_rval);
1628 tprintf(", %lu", tcp->u_arg[2]);
1629 }
1630 return 0;
1631}
1632
1633int
1634sys_rename(tcp)
1635struct tcb *tcp;
1636{
1637 if (entering(tcp)) {
1638 printpath(tcp, tcp->u_arg[0]);
1639 tprintf(", ");
1640 printpath(tcp, tcp->u_arg[1]);
1641 }
1642 return 0;
1643}
1644
1645int
1646sys_chown(tcp)
1647struct tcb *tcp;
1648{
1649 if (entering(tcp)) {
1650 printpath(tcp, tcp->u_arg[0]);
1651 tprintf(", %lu, %lu", tcp->u_arg[1], tcp->u_arg[2]);
1652 }
1653 return 0;
1654}
1655
1656int
1657sys_fchown(tcp)
1658struct tcb *tcp;
1659{
1660 if (entering(tcp)) {
1661 tprintf("%ld, %lu, %lu",
1662 tcp->u_arg[0], tcp->u_arg[1], tcp->u_arg[2]);
1663 }
1664 return 0;
1665}
1666
1667int
1668sys_chmod(tcp)
1669struct tcb *tcp;
1670{
1671 if (entering(tcp)) {
1672 printpath(tcp, tcp->u_arg[0]);
1673 tprintf(", %#lo", tcp->u_arg[1]);
1674 }
1675 return 0;
1676}
1677
1678int
1679sys_fchmod(tcp)
1680struct tcb *tcp;
1681{
1682 if (entering(tcp)) {
1683 tprintf("%ld, %#lo", tcp->u_arg[0], tcp->u_arg[1]);
1684 }
1685 return 0;
1686}
1687
Wichert Akkermanf5eeabb1999-11-18 17:09:47 +00001688#ifdef ALPHA
1689int
1690sys_osf_utimes(tcp)
1691struct tcb *tcp;
1692{
1693 if (entering(tcp)) {
1694 printpath(tcp, tcp->u_arg[0]);
1695 tprintf(", ");
1696 printtv32(tcp, tcp->u_arg[1]);
1697 }
1698 return 0;
1699}
1700#endif
1701
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001702int
1703sys_utimes(tcp)
1704struct tcb *tcp;
1705{
1706 if (entering(tcp)) {
1707 printpath(tcp, tcp->u_arg[0]);
1708 tprintf(", ");
1709 printtv(tcp, tcp->u_arg[1]);
1710 }
1711 return 0;
1712}
1713
1714int
1715sys_utime(tcp)
1716struct tcb *tcp;
1717{
1718 long ut[2];
1719
1720 if (entering(tcp)) {
1721 printpath(tcp, tcp->u_arg[0]);
1722 tprintf(", ");
1723 if (!tcp->u_arg[1])
1724 tprintf("NULL");
1725 else if (!verbose(tcp))
1726 tprintf("%#lx", tcp->u_arg[1]);
1727 else if (umoven(tcp, tcp->u_arg[1], sizeof ut,
1728 (char *) ut) < 0)
1729 tprintf("[?, ?]");
1730 else {
1731 tprintf("[%s,", sprinttime(ut[0]));
1732 tprintf(" %s]", sprinttime(ut[1]));
1733 }
1734 }
1735 return 0;
1736}
1737
1738int
1739sys_mknod(tcp)
1740struct tcb *tcp;
1741{
1742 int mode = tcp->u_arg[1];
1743
1744 if (entering(tcp)) {
1745 printpath(tcp, tcp->u_arg[0]);
1746 tprintf(", %s", sprintmode(mode));
1747 switch (mode & S_IFMT) {
1748 case S_IFCHR: case S_IFBLK:
1749#ifdef LINUXSPARC
1750 if (current_personality == 1)
1751 tprintf(", makedev(%lu, %lu)",
1752 (unsigned long) ((tcp->u_arg[2] >> 18) & 0x3fff),
1753 (unsigned long) (tcp->u_arg[2] & 0x3ffff));
1754 else
Roland McGrath186c5ac2002-12-15 23:58:23 +00001755#endif
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001756 tprintf(", makedev(%lu, %lu)",
1757 (unsigned long) major(tcp->u_arg[2]),
1758 (unsigned long) minor(tcp->u_arg[2]));
1759 break;
1760 default:
1761 break;
1762 }
1763 }
1764 return 0;
1765}
1766
1767int
1768sys_mkfifo(tcp)
1769struct tcb *tcp;
1770{
1771 if (entering(tcp)) {
1772 printpath(tcp, tcp->u_arg[0]);
1773 tprintf(", %#lo", tcp->u_arg[1]);
1774 }
1775 return 0;
1776}
1777
1778int
1779sys_fsync(tcp)
1780struct tcb *tcp;
1781{
1782 if (entering(tcp)) {
1783 tprintf("%ld", tcp->u_arg[0]);
1784 }
1785 return 0;
1786}
1787
Michal Ludvig53b320f2002-09-23 13:30:09 +00001788#ifdef LINUX
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001789
1790static void
1791printdir(tcp, addr)
1792struct tcb *tcp;
1793long addr;
1794{
1795 struct dirent d;
1796
1797 if (!verbose(tcp)) {
1798 tprintf("%#lx", addr);
1799 return;
1800 }
1801 if (umove(tcp, addr, &d) < 0) {
1802 tprintf("{...}");
1803 return;
1804 }
1805 tprintf("{d_ino=%ld, ", (unsigned long) d.d_ino);
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001806 tprintf("d_name=");
1807 printpathn(tcp, (long) ((struct dirent *) addr)->d_name, d.d_reclen);
1808 tprintf("}");
1809}
1810
1811int
1812sys_readdir(tcp)
1813struct tcb *tcp;
1814{
1815 if (entering(tcp)) {
1816 tprintf("%lu, ", tcp->u_arg[0]);
1817 } else {
1818 if (syserror(tcp) || tcp->u_rval == 0 || !verbose(tcp))
1819 tprintf("%#lx", tcp->u_arg[1]);
1820 else
1821 printdir(tcp, tcp->u_arg[1]);
1822 /* Not much point in printing this out, it is always 1. */
1823 if (tcp->u_arg[2] != 1)
1824 tprintf(", %lu", tcp->u_arg[2]);
1825 }
1826 return 0;
1827}
1828
Michal Ludvig53b320f2002-09-23 13:30:09 +00001829#endif /* LINUX */
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001830
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +00001831#ifdef FREEBSD
1832struct xlat direnttypes[] = {
1833 { DT_FIFO, "DT_FIFO" },
1834 { DT_CHR, "DT_CHR" },
1835 { DT_DIR, "DT_DIR" },
1836 { DT_BLK, "DT_BLK" },
1837 { DT_REG, "DT_REG" },
1838 { DT_LNK, "DT_LNK" },
1839 { DT_SOCK, "DT_SOCK" },
1840 { DT_WHT, "DT_WHT" },
1841 { 0, NULL },
1842};
1843
1844#endif
1845
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001846int
1847sys_getdents(tcp)
1848struct tcb *tcp;
1849{
1850 int i, len, dents = 0;
1851 char *buf;
1852
1853 if (entering(tcp)) {
1854 tprintf("%lu, ", tcp->u_arg[0]);
1855 return 0;
1856 }
1857 if (syserror(tcp) || !verbose(tcp)) {
1858 tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
1859 return 0;
1860 }
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001861 len = tcp->u_rval;
1862 if ((buf = malloc(len)) == NULL) {
1863 tprintf("out of memory\n");
1864 return 0;
1865 }
1866 if (umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
1867 tprintf("{...}, %lu", tcp->u_arg[2]);
1868 free(buf);
1869 return 0;
1870 }
1871 if (!abbrev(tcp))
1872 tprintf("{");
1873 for (i = 0; i < len;) {
Wichert Akkerman9524bb91999-05-25 23:11:18 +00001874 struct kernel_dirent *d = (struct kernel_dirent *) &buf[i];
Michal Ludvig53b320f2002-09-23 13:30:09 +00001875#ifdef LINUX
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001876 if (!abbrev(tcp)) {
1877 tprintf("%s{d_ino=%lu, d_off=%lu, ",
1878 i ? " " : "", d->d_ino, d->d_off);
1879 tprintf("d_reclen=%u, d_name=\"%s\"}",
1880 d->d_reclen, d->d_name);
1881 }
Michal Ludvig53b320f2002-09-23 13:30:09 +00001882#endif /* LINUX */
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001883#ifdef SVR4
1884 if (!abbrev(tcp)) {
1885 tprintf("%s{d_ino=%lu, d_off=%lu, ",
Roland McGrath186c5ac2002-12-15 23:58:23 +00001886 i ? " " : "",
1887 (unsigned long) d->d_ino,
1888 (unsigned long) d->d_off);
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001889 tprintf("d_reclen=%u, d_name=\"%s\"}",
1890 d->d_reclen, d->d_name);
1891 }
1892#endif /* SVR4 */
1893#ifdef SUNOS4
1894 if (!abbrev(tcp)) {
1895 tprintf("%s{d_off=%lu, d_fileno=%lu, d_reclen=%u, ",
1896 i ? " " : "", d->d_off, d->d_fileno,
1897 d->d_reclen);
1898 tprintf("d_namlen=%u, d_name=\"%.*s\"}",
1899 d->d_namlen, d->d_namlen, d->d_name);
1900 }
1901#endif /* SUNOS4 */
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +00001902#ifdef FREEBSD
1903 if (!abbrev(tcp)) {
1904 tprintf("%s{d_fileno=%u, d_reclen=%u, d_type=",
1905 i ? " " : "", d->d_fileno, d->d_reclen);
1906 printxval(direnttypes, d->d_type, "DT_???");
1907 tprintf(", d_namlen=%u, d_name=\"%.*s\"}",
1908 d->d_namlen, d->d_namlen, d->d_name);
1909 }
Roland McGrath186c5ac2002-12-15 23:58:23 +00001910#endif /* FREEBSD */
Pavel Machek9a9f10b2000-02-01 16:22:52 +00001911 if (!d->d_reclen) {
1912 tprintf("/* d_reclen == 0, problem here */");
1913 break;
1914 }
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001915 i += d->d_reclen;
1916 dents++;
1917 }
1918 if (!abbrev(tcp))
1919 tprintf("}");
1920 else
1921 tprintf("/* %u entries */", dents);
1922 tprintf(", %lu", tcp->u_arg[2]);
1923 free(buf);
1924 return 0;
1925}
1926
John Hughesbdf48f52001-03-06 15:08:09 +00001927
1928#if _LFS64_LARGEFILE
1929int
1930sys_getdents64(tcp)
1931struct tcb *tcp;
1932{
1933 int i, len, dents = 0;
1934 char *buf;
1935
1936 if (entering(tcp)) {
1937 tprintf("%lu, ", tcp->u_arg[0]);
1938 return 0;
1939 }
1940 if (syserror(tcp) || !verbose(tcp)) {
1941 tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
1942 return 0;
1943 }
1944 len = tcp->u_rval;
1945 if ((buf = malloc(len)) == NULL) {
1946 tprintf("out of memory\n");
1947 return 0;
1948 }
1949 if (umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
1950 tprintf("{...}, %lu", tcp->u_arg[2]);
1951 free(buf);
1952 return 0;
1953 }
1954 if (!abbrev(tcp))
1955 tprintf("{");
1956 for (i = 0; i < len;) {
1957 struct dirent64 *d = (struct dirent64 *) &buf[i];
Michal Ludvig53b320f2002-09-23 13:30:09 +00001958#if defined(LINUX) || defined(SVR4)
John Hughesbdf48f52001-03-06 15:08:09 +00001959 if (!abbrev(tcp)) {
1960 tprintf("%s{d_ino=%lu, d_off=%lu, ",
Roland McGrath186c5ac2002-12-15 23:58:23 +00001961 i ? " " : "",
1962 (unsigned long)d->d_ino,
Michal Ludvig53b320f2002-09-23 13:30:09 +00001963 (unsigned long)d->d_off);
John Hughesbdf48f52001-03-06 15:08:09 +00001964 tprintf("d_reclen=%u, d_name=\"%s\"}",
1965 d->d_reclen, d->d_name);
1966 }
Michal Ludvig53b320f2002-09-23 13:30:09 +00001967#endif /* LINUX || SVR4 */
John Hughesbdf48f52001-03-06 15:08:09 +00001968#ifdef SUNOS4
1969 if (!abbrev(tcp)) {
1970 tprintf("%s{d_off=%lu, d_fileno=%lu, d_reclen=%u, ",
1971 i ? " " : "", d->d_off, d->d_fileno,
1972 d->d_reclen);
1973 tprintf("d_namlen=%u, d_name=\"%.*s\"}",
1974 d->d_namlen, d->d_namlen, d->d_name);
1975 }
1976#endif /* SUNOS4 */
1977 i += d->d_reclen;
1978 dents++;
1979 }
1980 if (!abbrev(tcp))
1981 tprintf("}");
1982 else
1983 tprintf("/* %u entries */", dents);
1984 tprintf(", %lu", tcp->u_arg[2]);
1985 free(buf);
1986 return 0;
1987}
1988#endif
Roland McGrath186c5ac2002-12-15 23:58:23 +00001989
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +00001990#ifdef FREEBSD
1991int
1992sys_getdirentries(tcp)
1993struct tcb * tcp;
1994{
1995 int i, len, dents = 0;
1996 long basep;
1997 char *buf;
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001998
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +00001999 if (entering(tcp)) {
2000 tprintf("%lu, ", tcp->u_arg[0]);
2001 return 0;
2002 }
2003 if (syserror(tcp) || !verbose(tcp)) {
2004 tprintf("%#lx, %lu, %#lx", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]);
2005 return 0;
2006 }
2007 len = tcp->u_rval;
2008 if ((buf = malloc(len)) == NULL) {
2009 tprintf("out of memory\n");
2010 return 0;
2011 }
2012 if (umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
2013 tprintf("{...}, %lu, %#lx", tcp->u_arg[2], tcp->u_arg[3]);
2014 free(buf);
2015 return 0;
2016 }
2017 if (!abbrev(tcp))
2018 tprintf("{");
2019 for (i = 0; i < len;) {
2020 struct kernel_dirent *d = (struct kernel_dirent *) &buf[i];
2021 if (!abbrev(tcp)) {
2022 tprintf("%s{d_fileno=%u, d_reclen=%u, d_type=",
2023 i ? " " : "", d->d_fileno, d->d_reclen);
2024 printxval(direnttypes, d->d_type, "DT_???");
2025 tprintf(", d_namlen=%u, d_name=\"%.*s\"}",
2026 d->d_namlen, d->d_namlen, d->d_name);
2027 }
2028 i += d->d_reclen;
2029 dents++;
2030 }
2031 if (!abbrev(tcp))
2032 tprintf("}");
2033 else
2034 tprintf("/* %u entries */", dents);
2035 free(buf);
2036 tprintf(", %lu", tcp->u_arg[2]);
2037 if (umove(tcp, tcp->u_arg[3], &basep) < 0)
2038 tprintf(", %#lx", tcp->u_arg[3]);
2039 else
2040 tprintf(", [%lu]", basep);
2041 return 0;
2042}
2043#endif
2044
Michal Ludvig53b320f2002-09-23 13:30:09 +00002045#ifdef LINUX
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00002046int
2047sys_getcwd(tcp)
2048struct tcb *tcp;
2049{
2050 if (exiting(tcp)) {
2051 if (syserror(tcp))
2052 tprintf("%#lx", tcp->u_arg[0]);
2053 else
Wichert Akkerman2e2553a1999-05-09 00:29:58 +00002054 printpathn(tcp, tcp->u_arg[0], tcp->u_rval - 1);
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00002055 tprintf(", %lu", tcp->u_arg[1]);
2056 }
2057 return 0;
2058}
Michal Ludvig53b320f2002-09-23 13:30:09 +00002059#endif /* LINUX */
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00002060
Wichert Akkermanbf79f2e2000-09-01 21:03:06 +00002061#ifdef FREEBSD
2062int
2063sys___getcwd(tcp)
2064struct tcb *tcp;
2065{
2066 if (exiting(tcp)) {
2067 if (syserror(tcp))
2068 tprintf("%#lx", tcp->u_arg[0]);
2069 else
2070 printpathn(tcp, tcp->u_arg[0], tcp->u_arg[1]);
2071 tprintf(", %lu", tcp->u_arg[1]);
2072 }
2073 return 0;
2074}
2075#endif
2076
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00002077#ifdef HAVE_SYS_ASYNCH_H
2078
2079int
2080sys_aioread(tcp)
2081struct tcb *tcp;
2082{
2083 struct aio_result_t res;
2084
2085 if (entering(tcp)) {
2086 tprintf("%lu, ", tcp->u_arg[0]);
2087 } else {
2088 if (syserror(tcp))
2089 tprintf("%#lx", tcp->u_arg[1]);
2090 else
2091 printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
2092 tprintf(", %lu, %lu, ", tcp->u_arg[2], tcp->u_arg[3]);
2093 printxval(whence, tcp->u_arg[4], "L_???");
2094 if (syserror(tcp) || tcp->u_arg[5] == 0
2095 || umove(tcp, tcp->u_arg[5], &res) < 0)
2096 tprintf(", %#lx", tcp->u_arg[5]);
2097 else
2098 tprintf(", {aio_return %d aio_errno %d}",
2099 res.aio_return, res.aio_errno);
2100 }
2101 return 0;
2102}
2103
2104int
2105sys_aiowrite(tcp)
2106struct tcb *tcp;
2107{
2108 struct aio_result_t res;
2109
2110 if (entering(tcp)) {
2111 tprintf("%lu, ", tcp->u_arg[0]);
2112 printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
2113 tprintf(", %lu, %lu, ", tcp->u_arg[2], tcp->u_arg[3]);
2114 printxval(whence, tcp->u_arg[4], "L_???");
2115 }
2116 else {
2117 if (tcp->u_arg[5] == 0)
2118 tprintf(", NULL");
2119 else if (syserror(tcp)
2120 || umove(tcp, tcp->u_arg[5], &res) < 0)
2121 tprintf(", %#lx", tcp->u_arg[5]);
2122 else
2123 tprintf(", {aio_return %d aio_errno %d}",
2124 res.aio_return, res.aio_errno);
2125 }
2126 return 0;
2127}
2128
2129int
2130sys_aiowait(tcp)
2131struct tcb *tcp;
2132{
2133 if (entering(tcp))
2134 printtv(tcp, tcp->u_arg[0]);
2135 return 0;
2136}
2137
2138int
2139sys_aiocancel(tcp)
2140struct tcb *tcp;
2141{
2142 struct aio_result_t res;
2143
2144 if (exiting(tcp)) {
2145 if (tcp->u_arg[0] == 0)
2146 tprintf("NULL");
2147 else if (syserror(tcp)
2148 || umove(tcp, tcp->u_arg[0], &res) < 0)
2149 tprintf("%#lx", tcp->u_arg[0]);
2150 else
2151 tprintf("{aio_return %d aio_errno %d}",
2152 res.aio_return, res.aio_errno);
2153 }
2154 return 0;
2155}
2156
2157#endif /* HAVE_SYS_ASYNCH_H */
Roland McGrath186c5ac2002-12-15 23:58:23 +00002158
2159#ifdef XATTR_CREATE
2160
2161struct xlat xattrflags[] = {
2162 { XATTR_CREATE, "XATTR_CREATE" },
2163 { XATTR_REPLACE, "XATTR_REPLACE" },
2164 { 0, NULL }
2165};
2166
2167int
2168sys_setxattr(tcp)
2169struct tcb *tcp;
2170{
2171 if (entering(tcp)) {
2172 printpath(tcp, tcp->u_arg[0]);
2173 tprintf(", ");
2174 printstr(tcp, tcp->u_arg[1], -1);
2175 /* XXX Print value in format */
2176 tprintf(", %p, %ld, ", (void *) tcp->u_arg[2], tcp->u_arg[3]);
2177 printflags(xattrflags, tcp->u_arg[4]);
2178 }
2179 return 0;
2180}
2181
2182int
2183sys_fsetxattr(tcp)
2184struct tcb *tcp;
2185{
2186 if (entering(tcp)) {
2187 tprintf("%ld, ", tcp->u_arg[0]);
2188 printstr(tcp, tcp->u_arg[1], -1);
2189 /* XXX Print value in format */
2190 tprintf(", %p, %ld, ", (void *) tcp->u_arg[2], tcp->u_arg[3]);
2191 printflags(xattrflags, tcp->u_arg[4]);
2192 }
2193 return 0;
2194}
2195
2196int
2197sys_getxattr(tcp)
2198struct tcb *tcp;
2199{
2200 if (entering(tcp)) {
2201 printpath(tcp, tcp->u_arg[0]);
2202 tprintf(", ");
2203 printstr(tcp, tcp->u_arg[1], -1);
2204 } else {
2205 /* XXX Print value in format */
2206 tprintf(", %p, %ld", (void *) tcp->u_arg[2], tcp->u_arg[3]);
2207 }
2208 return 0;
2209}
2210
2211int
2212sys_fgetxattr(tcp)
2213struct tcb *tcp;
2214{
2215 if (entering(tcp)) {
2216 tprintf("%ld, ", tcp->u_arg[0]);
2217 printstr(tcp, tcp->u_arg[1], -1);
2218 } else {
2219 /* XXX Print value in format */
2220 tprintf(", %p, %ld", (void *) tcp->u_arg[2], tcp->u_arg[3]);
2221 }
2222 return 0;
2223}
2224
2225int
2226sys_listxattr(tcp)
2227struct tcb *tcp;
2228{
2229 if (entering(tcp)) {
2230 printpath(tcp, tcp->u_arg[0]);
2231 } else {
2232 /* XXX Print value in format */
2233 tprintf(", %p, %lu", (void *) tcp->u_arg[1], tcp->u_arg[2]);
2234 }
2235 return 0;
2236}
2237
2238int
2239sys_flistxattr(tcp)
2240struct tcb *tcp;
2241{
2242 if (entering(tcp)) {
2243 tprintf("%ld", tcp->u_arg[0]);
2244 } else {
2245 /* XXX Print value in format */
2246 tprintf(", %p, %lu", (void *) tcp->u_arg[1], tcp->u_arg[2]);
2247 }
2248 return 0;
2249}
2250
2251int
2252sys_removexattr(tcp)
2253struct tcb *tcp;
2254{
2255 if (entering(tcp)) {
2256 printpath(tcp, tcp->u_arg[0]);
2257 tprintf(", ");
2258 printstr(tcp, tcp->u_arg[1], -1);
2259 }
2260 return 0;
2261}
2262
2263int
2264sys_fremovexattr(tcp)
2265struct tcb *tcp;
2266{
2267 if (entering(tcp)) {
2268 tprintf("%ld, ", tcp->u_arg[0]);
2269 printstr(tcp, tcp->u_arg[1], -1);
2270 }
2271 return 0;
2272}
2273
2274#endif