134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/*
234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * All rights reserved.
734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *
834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Redistribution and use in source and binary forms, with or without
934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * modification, are permitted provided that the following conditions
1034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * are met:
1134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
1234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
1334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
1434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
1534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *    documentation and/or other materials provided with the distribution.
1634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 3. The name of the author may not be used to endorse or promote products
1734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *    derived from this software without specific prior written permission.
1834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *
1934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
2034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *
30f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown *	$Id$
3134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project */
3234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
3334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include "defs.h"
3434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
3534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <dirent.h>
36f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
37f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
38f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstruct kernel_dirent {
39f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned long   d_ino;
40f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned long   d_off;
41f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned short  d_reclen;
42f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	char            d_name[1];
43f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
44f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#else
45f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# define kernel_dirent dirent
4634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
47f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
4834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_ANDROID_OS
4934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <linux/fadvise.h>
5034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
51f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown// ANDROID: From linux/dirent.h
52f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
53f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstruct dirent64 {
54f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown __u64 d_ino;
55f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown __s64 d_off;
56f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown unsigned short d_reclen;
57f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown unsigned char d_type;
58f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown char d_name[256];
59f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
60f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
6134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project// ANDROID: From kernel_headers/asm/statfs.h
6234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
63f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand#if !defined(MIPS)
6434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/*
6534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * With EABI there is 4 bytes of padding added to this structure.
6634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Let's pack it so the padding goes away to simplify dual ABI support.
6734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Note that user space does NOT have to pack this structure.
6834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project */
6934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct statfs64 {
7034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u32 f_type;
7134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u32 f_bsize;
7234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u64 f_blocks;
7334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u64 f_bfree;
7434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u64 f_bavail;
7534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u64 f_files;
7634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u64 f_ffree;
7734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __kernel_fsid_t f_fsid;
7834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u32 f_namelen;
7934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u32 f_frsize;
8034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u32 f_spare[5];
8134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project} __attribute__ ((packed,aligned(4)));
82f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand#else
83f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sandstruct statfs64 {
84f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	__u32 f_type;
85f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	__u32 f_bsize;
86f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	__u32 f_frsize;
87f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	__u32 __pad;
88f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	__u64 f_blocks;
89f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	__u64 f_bfree;
90f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	__u64 f_files;
91f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	__u64 f_ffree;
92f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	__u64 f_bavail;
93f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	__kernel_fsid_t f_fsid;
94f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	__u32 f_namelen;
95f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	__u32 f_spare[6];
96f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand};
97f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand#endif
98f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand
99f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand
10034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_ANDROID_OS */
10134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
10234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
10334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  ifdef LINUXSPARC
10434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct stat {
10534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned short	st_dev;
10634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_ino;
10734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned short	st_mode;
10834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	short		st_nlink;
10934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned short	st_uid;
11034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned short	st_gid;
11134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned short	st_rdev;
11234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_size;
11334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int		st_atime;
11434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	__unused1;
11534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int		st_mtime;
11634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	__unused2;
11734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int		st_ctime;
11834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	__unused3;
11934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int		st_blksize;
12034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int		st_blocks;
12134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	__unused4[2];
12234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
12334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(SPARC64)
12434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct stat_sparc64 {
12534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_dev;
12634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned long	st_ino;
12734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_mode;
12834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_nlink;
12934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_uid;
13034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_gid;
13134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_rdev;
13234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long		st_size;
13334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long		st_atime;
13434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long		st_mtime;
13534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long		st_ctime;
13634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long		st_blksize;
13734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long		st_blocks;
13834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned long	__unused4[2];
13934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
14034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SPARC64 */
14134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define stat kernel_stat
14234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    include <asm/stat.h>
14334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef stat
14434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  else
14534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef dev_t
14634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef ino_t
14734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef mode_t
14834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef nlink_t
14934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef uid_t
15034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef gid_t
15134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef off_t
15234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef loff_t
15334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
15434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define dev_t __kernel_dev_t
15534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define ino_t __kernel_ino_t
15634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define mode_t __kernel_mode_t
15734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define nlink_t __kernel_nlink_t
15834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define uid_t __kernel_uid_t
15934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define gid_t __kernel_gid_t
16034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define off_t __kernel_off_t
16134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define loff_t __kernel_loff_t
16234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
16334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    include <asm/stat.h>
16434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
16534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef dev_t
16634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef ino_t
16734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef mode_t
16834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef nlink_t
16934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef uid_t
17034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef gid_t
17134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef off_t
17234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef loff_t
17334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
17434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define dev_t dev_t
17534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define ino_t ino_t
17634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define mode_t mode_t
17734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define nlink_t nlink_t
17834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define uid_t uid_t
17934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define gid_t gid_t
18034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define off_t off_t
18134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define loff_t loff_t
18234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  endif
18334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  ifdef HPPA	/* asm-parisc/stat.h defines stat64 */
18434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef stat64
18534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  endif
18634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  define stat libc_stat
18734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  define stat64 libc_stat64
18834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  include <sys/stat.h>
18934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  undef stat
19034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  undef stat64
19134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project   /* These might be macros. */
19234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  undef st_atime
19334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  undef st_mtime
19434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  undef st_ctime
19534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  ifdef HPPA
19634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define stat64 hpux_stat64
19734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  endif
19834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
19934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  include <sys/stat.h>
20034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
20134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
20234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <fcntl.h>
20334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
20434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SVR4
20534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  include <sys/cred.h>
20634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SVR4 */
20734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
20834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_SYS_VFS_H
20934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/vfs.h>
21034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
21134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
21234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_LINUX_XATTR_H
21334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <linux/xattr.h>
21434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#elif defined linux
21534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define XATTR_CREATE 1
21634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define XATTR_REPLACE 2
21734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
21834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
21934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD
22034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/param.h>
22134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/mount.h>
22234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/stat.h>
22334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
22434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
225f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if _LFS64_LARGEFILE && (defined(LINUX) || defined(SVR4))
226f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# ifdef HAVE_INTTYPES_H
227f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#  include <inttypes.h>
228f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# else
229f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#  define PRId64 "lld"
230f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#  define PRIu64 "llu"
231f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# endif
232f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
233f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
23434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_LONG_LONG_OFF_T
23534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/*
23634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Ugly hacks for systems that have typedef long long off_t
23734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project */
23834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
23934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define stat64 stat
24034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define HAVE_STAT64 1	/* Ugly hack */
24134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
24234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define	sys_stat64	sys_stat
24334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define sys_fstat64	sys_fstat
24434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define sys_lstat64	sys_lstat
24534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define sys_lseek64	sys_lseek
24634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define sys_truncate64	sys_truncate
24734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define sys_ftruncate64	sys_ftruncate
24834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
24934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
25034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAJOR_IN_SYSMACROS
25134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/sysmacros.h>
25234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
25334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
25434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAJOR_IN_MKDEV
25534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/mkdev.h>
25634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
25734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
25834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_SYS_ASYNCH_H
25934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/asynch.h>
26034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
26134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
26234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SUNOS4
26334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <ustat.h>
26434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
26534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
266f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownconst struct xlat open_access_modes[] = {
267f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_RDONLY,	"O_RDONLY"	},
268f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_WRONLY,	"O_WRONLY"	},
269f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_RDWR,	"O_RDWR"	},
270f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef O_ACCMODE
271f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_ACCMODE,	"O_ACCMODE"	},
272f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
273f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0,		NULL		},
274f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
275f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
276f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownconst struct xlat open_mode_flags[] = {
27734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_CREAT,	"O_CREAT"	},
27834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_EXCL,	"O_EXCL"	},
27934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_NOCTTY,	"O_NOCTTY"	},
280f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_TRUNC,	"O_TRUNC"	},
281f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_APPEND,	"O_APPEND"	},
282f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_NONBLOCK,	"O_NONBLOCK"	},
28334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_SYNC
28434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_SYNC,	"O_SYNC"	},
28534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
28634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_ASYNC
28734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_ASYNC,	"O_ASYNC"	},
28834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
28934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_DSYNC
29034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_DSYNC,	"O_DSYNC"	},
29134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
29234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_RSYNC
29334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_RSYNC,	"O_RSYNC"	},
29434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
295f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(O_NDELAY) && (O_NDELAY != O_NONBLOCK)
29634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_NDELAY,	"O_NDELAY"	},
29734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
29834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_PRIV
29934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_PRIV,	"O_PRIV"	},
30034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
30134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_DIRECT
30234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_DIRECT,	"O_DIRECT"	},
30334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
30434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_LARGEFILE
30534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project# if O_LARGEFILE == 0		/* biarch platforms in 64-bit mode */
30634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  undef O_LARGEFILE
30734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  ifdef SPARC64
30834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#   define O_LARGEFILE	0x40000
30934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  elif defined X86_64 || defined S390X
31034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#   define O_LARGEFILE	0100000
31134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  endif
31234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project# endif
31334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project# ifdef O_LARGEFILE
31434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_LARGEFILE,	"O_LARGEFILE"   },
31534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project# endif
31634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
31734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_DIRECTORY
31834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_DIRECTORY,	"O_DIRECTORY"   },
31934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
32034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_NOFOLLOW
32134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_NOFOLLOW, 	"O_NOFOLLOW"	},
32234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
32334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_NOATIME
32434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_NOATIME, 	"O_NOATIME"	},
32534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
326f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef O_CLOEXEC
327f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_CLOEXEC,	"O_CLOEXEC"	},
328f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
32934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
33034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FNDELAY
33134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FNDELAY,	"FNDELAY"	},
33234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
33334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FAPPEND
33434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FAPPEND,	"FAPPEND"	},
33534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
33634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FMARK
33734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FMARK,	"FMARK"		},
33834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
33934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FDEFER
34034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FDEFER,	"FDEFER"	},
34134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
34234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FASYNC
34334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FASYNC,	"FASYNC"	},
34434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
34534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FSHLOCK
34634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FSHLOCK,	"FSHLOCK"	},
34734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
34834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FEXLOCK
34934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FEXLOCK,	"FEXLOCK"	},
35034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
35134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FCREAT
35234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FCREAT,	"FCREAT"	},
35334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
35434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FTRUNC
35534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FTRUNC,	"FTRUNC"	},
35634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
35734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FEXCL
35834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FEXCL,	"FEXCL"		},
35934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
36034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FNBIO
36134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FNBIO,	"FNBIO"		},
36234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
36334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FSYNC
36434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FSYNC,	"FSYNC"		},
36534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
36634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FNOCTTY
36734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FNOCTTY,	"FNOCTTY"	},
36834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
36934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_SHLOCK
37034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_SHLOCK,	"O_SHLOCK"	},
37134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
37234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_EXLOCK
37334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_EXLOCK,	"O_EXLOCK"	},
37434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
37534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
37634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
37734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
378f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
379f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
380f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifndef AT_FDCWD
381f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# define AT_FDCWD                -100
382f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
383f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
384f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown/* The fd is an "int", so when decoding x86 on x86_64, we need to force sign
385f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * extension to get the right value.  We do this by declaring fd as int here.
386f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown */
387f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic void
388f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprint_dirfd(struct tcb *tcp, int fd)
389f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
390f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (fd == AT_FDCWD)
391f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("AT_FDCWD, ");
392f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
393f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{
394f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, fd);
395f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
396f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
397f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
398f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
399f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
400f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown/*
401f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * Pity stpcpy() is not standardized...
402f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown */
403f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic char *
404f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstr_append(char *dst, const char *src)
405f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
406f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	while ((*dst = *src++) != '\0')
407f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		dst++;
408f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return dst;
409f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
410f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
411f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown/*
412f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * low bits of the open(2) flags define access mode,
413f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * other bits are real flags.
414f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown */
415f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownconst char *
416f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsprint_open_modes(mode_t flags)
417f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
418f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	static char outstr[1024];
419f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	char *p;
420f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	char sep = 0;
421f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	const char *str;
422f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	const struct xlat *x;
423f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
424f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	p = str_append(outstr, "flags ");
425f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	str = xlookup(open_access_modes, flags & 3);
426f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (str) {
427f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		p = str_append(p, str);
428f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		flags &= ~3;
429f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (!flags)
430f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			return outstr;
431f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		sep = '|';
432f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
433f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
434f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	for (x = open_mode_flags; x->str; x++) {
435f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if ((flags & x->val) == x->val) {
436f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if (sep)
437f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				*p++ = sep;
438f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			p = str_append(p, x->str);
439f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			flags &= ~x->val;
440f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if (!flags)
441f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				return outstr;
442f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			sep = '|';
443f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
444f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
445f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	/* flags is still nonzero */
446f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (sep)
447f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		*p++ = sep;
448f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	sprintf(p, "%#x", flags);
449f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return outstr;
450f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
451f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
452f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownvoid
453f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browntprint_open_modes(mode_t flags)
454f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
455f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("%s", sprint_open_modes(flags) + sizeof("flags"));
456f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
457f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
458f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
459f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_open(struct tcb *tcp, int offset)
46034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
46134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
462f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
46334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
46434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* flags */
465f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprint_open_modes(tcp->u_arg[offset + 1]);
466f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (tcp->u_arg[offset + 1] & O_CREAT) {
46734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			/* mode */
468f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(", %#lo", tcp->u_arg[offset + 2]);
46934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
47034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
47134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
47234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
47334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
474f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
475f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_open(struct tcb *tcp)
476f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
477f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_open(tcp, 0);
478f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
479f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
480f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
481f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
482f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_openat(struct tcb *tcp)
483f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
484f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
485f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
486f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_open(tcp, 1);
487f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
488f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
489f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
49034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUXSPARC
49134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat openmodessol[] = {
49234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		"O_RDWR"	},
49334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 1,		"O_RDONLY"	},
49434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 2,		"O_WRONLY"	},
49534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x80,		"O_NONBLOCK"	},
49634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 8,		"O_APPEND"	},
49734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x100,	"O_CREAT"	},
49834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x200,	"O_TRUNC"	},
49934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x400,	"O_EXCL"	},
50034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x800,	"O_NOCTTY"	},
50134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x10,		"O_SYNC"	},
50234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x40,		"O_DSYNC"	},
50334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x8000,	"O_RSYNC"	},
50434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 4,		"O_NDELAY"	},
50534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x1000,	"O_PRIV"	},
50634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
50734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
50834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
50934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
510f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsolaris_open(struct tcb *tcp)
51134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
51234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
51334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
51434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
51534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* flags */
51634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(openmodessol, tcp->u_arg[1] + 1, "O_???");
51734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[1] & 0x100) {
51834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			/* mode */
51934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lo", tcp->u_arg[2]);
52034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
52134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
52234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
52334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
52434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
52534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
52634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
52734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
528f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_creat(struct tcb *tcp)
52934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
53034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
53134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
53234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %#lo", tcp->u_arg[1]);
53334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
53434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
53534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
53634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
53734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat access_flags[] = {
53834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ F_OK,		"F_OK",		},
53934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ R_OK,		"R_OK"		},
54034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ W_OK,		"W_OK"		},
54134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ X_OK,		"X_OK"		},
54234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef EFF_ONLY_OK
54334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ EFF_ONLY_OK,	"EFF_ONLY_OK"	},
54434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
54534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef EX_OK
54634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ EX_OK,	"EX_OK"		},
54734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
54834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
54934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
55034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
551f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
552f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_access(struct tcb *tcp, int offset)
55334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
55434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
555f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
55634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
557f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(access_flags, tcp->u_arg[offset + 1], "?_OK");
55834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
55934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
56034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
56134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
56234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
563f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_access(struct tcb *tcp)
564f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
565f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_access(tcp, 0);
566f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
567f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
568f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
569f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
570f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_faccessat(struct tcb *tcp)
571f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
572f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
573f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
574f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_access(tcp, 1);
575f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
576f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
577f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
578f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
579f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_umask(struct tcb *tcp)
58034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
58134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
58234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lo", tcp->u_arg[0]);
58334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
58434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return RVAL_OCTAL;
58534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
58634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
58734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat whence[] = {
58834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SEEK_SET,	"SEEK_SET"	},
58934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SEEK_CUR,	"SEEK_CUR"	},
59034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SEEK_END,	"SEEK_END"	},
59134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
59234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
59334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
59434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
595f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined (LINUX_MIPSN32)
596f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
597f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_lseek(struct tcb *tcp)
598f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
599f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	long long offset;
600f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int _whence;
601f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
602f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
603f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
604f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
605f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		offset = tcp->ext_arg[1];
606f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		_whence = tcp->u_arg[2];
607f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (_whence == SEEK_SET)
608f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%llu, ", offset);
609f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
610f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%lld, ", offset);
611f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(whence, _whence, "SEEK_???");
612f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
613f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return RVAL_UDECIMAL;
614f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
615f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#else /* !LINUX_MIPSN32 */
61634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
617f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_lseek(struct tcb *tcp)
61834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
61934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	off_t offset;
62034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int _whence;
62134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
62234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
623f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
624f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
62534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		offset = tcp->u_arg[1];
62634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		_whence = tcp->u_arg[2];
62734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (_whence == SEEK_SET)
62834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%lu, ", offset);
62934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
63034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%ld, ", offset);
63134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(whence, _whence, "SEEK_???");
63234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
63334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return RVAL_UDECIMAL;
63434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
635f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* LINUX_MIPSN32 */
63634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
63734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
63834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
63934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
640f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_llseek(struct tcb *tcp)
641f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
642f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
643f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
644f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		/*
645f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		 * This one call takes explicitly two 32-bit arguments hi, lo,
646f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		 * rather than one 64-bit argument for which LONG_LONG works
647f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		 * appropriate for the native byte order.
648f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		 */
649f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (tcp->u_arg[4] == SEEK_SET)
650f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(", %llu, ",
651f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				((long long int) tcp->u_arg[1]) << 32 |
652f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(unsigned long long) (unsigned) tcp->u_arg[2]);
653f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
654f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(", %lld, ",
655f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				((long long int) tcp->u_arg[1]) << 32 |
656f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(unsigned long long) (unsigned) tcp->u_arg[2]);
657f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
658f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else {
659f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		long long int off;
660f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (syserror(tcp) || umove(tcp, tcp->u_arg[3], &off) < 0)
661f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx, ", tcp->u_arg[3]);
662f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
663f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("[%llu], ", off);
664f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(whence, tcp->u_arg[4], "SEEK_???");
665f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
666f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
66734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
66834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
66934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
670f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_readahead(struct tcb *tcp)
67134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
672f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
673f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int argn;
674f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
675f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
676f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		argn = printllval(tcp, "%lld", 1);
677f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %ld", tcp->u_arg[argn]);
678f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
679f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
68034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
68134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
68234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
68334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
68434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
685f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_lseek64(struct tcb *tcp)
68634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
68734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
688f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int argn;
689f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
690f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
69134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[3] == SEEK_SET)
692f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			argn = printllval(tcp, "%llu, ", 1);
69334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
694f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			argn = printllval(tcp, "%lld, ", 1);
695f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(whence, tcp->u_arg[argn], "SEEK_???");
69634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
69734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return RVAL_LUDECIMAL;
69834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
69934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
70034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
70134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
70234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
703f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_truncate(struct tcb *tcp)
70434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
70534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
70634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
70734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu", tcp->u_arg[1]);
70834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
70934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
71034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
71134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
71234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
71334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
71434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
715f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_truncate64(struct tcb *tcp)
71634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
71734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
71834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
719f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printllval(tcp, ", %llu", 1);
72034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
72134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
72234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
72334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
72434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
72534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
72634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
727f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_ftruncate(struct tcb *tcp)
72834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
72934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
730f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
731f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %lu", tcp->u_arg[1]);
73234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
73334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
73434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
73534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
73634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
73734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
73834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
739f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_ftruncate64(struct tcb *tcp)
74034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
74134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
742f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
743f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
744f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printllval(tcp, "%llu", 1);
74534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
74634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
74734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
74834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
74934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
75034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/* several stats */
75134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
75234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat modetypes[] = {
75334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFREG,	"S_IFREG"	},
75434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFSOCK,	"S_IFSOCK"	},
75534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFIFO,	"S_IFIFO"	},
75634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFLNK,	"S_IFLNK"	},
75734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFDIR,	"S_IFDIR"	},
75834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFBLK,	"S_IFBLK"	},
75934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFCHR,	"S_IFCHR"	},
76034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
76134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
76234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
76334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const char *
764f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsprintmode(int mode)
76534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
76634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	static char buf[64];
76734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	const char *s;
76834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
76934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if ((mode & S_IFMT) == 0)
77034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		s = "";
77134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else if ((s = xlookup(modetypes, mode & S_IFMT)) == NULL) {
77234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		sprintf(buf, "%#o", mode);
77334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return buf;
77434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
77534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	sprintf(buf, "%s%s%s%s", s,
77634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(mode & S_ISUID) ? "|S_ISUID" : "",
77734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(mode & S_ISGID) ? "|S_ISGID" : "",
77834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(mode & S_ISVTX) ? "|S_ISVTX" : "");
77934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	mode &= ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX);
78034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (mode)
78134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		sprintf(buf + strlen(buf), "|%#o", mode);
78234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	s = (*buf == '|') ? buf + 1 : buf;
78334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return *s ? s : "0";
78434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
78534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
78634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic char *
787f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsprinttime(time_t t)
78834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
78934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct tm *tmp;
79034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	static char buf[32];
79134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
79234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (t == 0) {
793f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		strcpy(buf, "0");
79434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return buf;
79534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
796f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if ((tmp = localtime(&t)))
797f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		snprintf(buf, sizeof buf, "%02d/%02d/%02d-%02d:%02d:%02d",
798f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday,
799f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
800f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
801f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		snprintf(buf, sizeof buf, "%lu", (unsigned long) t);
802f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
80334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return buf;
80434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
80534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
80634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUXSPARC
80734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projecttypedef struct {
808f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int     tv_sec;
809f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int     tv_nsec;
81034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project} timestruct_t;
81134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
81234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct solstat {
813f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_dev;
814f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_pad1[3];     /* network id */
815f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_ino;
816f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_mode;
817f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_nlink;
818f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_uid;
819f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_gid;
820f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_rdev;
821f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_pad2[2];
822f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_size;
823f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_pad3;        /* st_size, off_t expansion */
824f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	timestruct_t    st_atime;
825f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	timestruct_t    st_mtime;
826f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	timestruct_t    st_ctime;
827f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_blksize;
828f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_blocks;
829f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	char            st_fstype[16];
830f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_pad4[8];     /* expansion area */
83134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
83234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
83334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
834f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstatsol(struct tcb *tcp, long addr)
83534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
83634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct solstat statbuf;
83734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
83834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
83934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
84034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
84134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
84234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp)) {
84334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, ",
84434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) ((statbuf.st_dev >> 18) & 0x3fff),
84534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) (statbuf.st_dev & 0x3ffff),
84634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_ino,
84734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			sprintmode(statbuf.st_mode));
84834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
84934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_nlink,
85034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_uid,
85134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_gid);
85234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_blksize=%lu, ", (unsigned long) statbuf.st_blksize);
85334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks);
85434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
85534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
85634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
85734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	switch (statbuf.st_mode & S_IFMT) {
85834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case S_IFCHR: case S_IFBLK:
85934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_rdev=makedev(%lu, %lu), ",
86034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) ((statbuf.st_rdev >> 18) & 0x3fff),
86134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) (statbuf.st_rdev & 0x3ffff));
86234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
86334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	default:
86434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_size=%u, ", statbuf.st_size);
86534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
86634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
86734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp)) {
868f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime.tv_sec));
869f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime.tv_sec));
870f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_ctime=%s}", sprinttime(statbuf.st_ctime.tv_sec));
87134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
87234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
87334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("...}");
87434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
87534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
87634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined (SPARC64)
87734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
878f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstat_sparc64(struct tcb *tcp, long addr)
87934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
88034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct stat_sparc64 statbuf;
88134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
88234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
88334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
88434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
88534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
88634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
88734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp)) {
88834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, ",
88934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) major(statbuf.st_dev),
89034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) minor(statbuf.st_dev),
89134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_ino,
89234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			sprintmode(statbuf.st_mode));
89334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
89434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_nlink,
89534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_uid,
89634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_gid);
89734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_blksize=%lu, ",
89834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_blksize);
89934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_blocks=%lu, ",
90034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_blocks);
90134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
90234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
90334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
90434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	switch (statbuf.st_mode & S_IFMT) {
90534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case S_IFCHR: case S_IFBLK:
90634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_rdev=makedev(%lu, %lu), ",
90734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) major(statbuf.st_rdev),
90834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) minor(statbuf.st_rdev));
90934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
91034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	default:
91134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_size=%lu, ", statbuf.st_size);
91234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
91334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
91434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp)) {
91534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime));
91634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime));
91734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime));
91834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
91934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
92034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
92134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("...}");
92234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
92334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SPARC64 */
92434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUXSPARC */
92534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
926f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined LINUX && defined POWERPC64
927f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstruct stat_powerpc32 {
928f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_dev;
929f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_ino;
930f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_mode;
931f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned short	st_nlink;
932f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_uid;
933f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_gid;
934f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_rdev;
935f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_size;
936f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_blksize;
937f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_blocks;
938f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_atime;
939f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_atime_nsec;
940f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_mtime;
941f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_mtime_nsec;
942f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_ctime;
943f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_ctime_nsec;
944f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	__unused4;
945f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	__unused5;
946f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
947f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
948f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic void
949f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstat_powerpc32(struct tcb *tcp, long addr)
950f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
951f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	struct stat_powerpc32 statbuf;
952f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
953f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (umove(tcp, addr, &statbuf) < 0) {
954f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{...}");
955f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
956f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
957f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
958f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (!abbrev(tcp)) {
959f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{st_dev=makedev(%u, %u), st_ino=%u, st_mode=%s, ",
960f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			major(statbuf.st_dev), minor(statbuf.st_dev),
961f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			statbuf.st_ino,
962f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			sprintmode(statbuf.st_mode));
963f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_nlink=%u, st_uid=%u, st_gid=%u, ",
964f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			statbuf.st_nlink, statbuf.st_uid, statbuf.st_gid);
965f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_blksize=%u, ", statbuf.st_blksize);
966f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_blocks=%u, ", statbuf.st_blocks);
967f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
968f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
969f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
970f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	switch (statbuf.st_mode & S_IFMT) {
971f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	case S_IFCHR: case S_IFBLK:
972f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_rdev=makedev(%lu, %lu), ",
973f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) major(statbuf.st_rdev),
974f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) minor(statbuf.st_rdev));
975f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		break;
976f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	default:
977f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_size=%u, ", statbuf.st_size);
978f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		break;
979f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
980f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (!abbrev(tcp)) {
981f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime));
982f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime));
983f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime));
984f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("}");
985f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
986f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
987f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("...}");
988f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
989f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* LINUX && POWERPC64 */
990f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
99134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat fileflags[] = {
99234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD
99334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ UF_NODUMP,	"UF_NODUMP"	},
99434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ UF_IMMUTABLE,	"UF_IMMUTABLE"	},
99534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ UF_APPEND,	"UF_APPEND"	},
99634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ UF_OPAQUE,	"UF_OPAQUE"	},
99734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ UF_NOUNLINK,	"UF_NOUNLINK"	},
99834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SF_ARCHIVED,	"SF_ARCHIVED"	},
99934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SF_IMMUTABLE,	"SF_IMMUTABLE"	},
100034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SF_APPEND,	"SF_APPEND"	},
100134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SF_NOUNLINK,	"SF_NOUNLINK"	},
100234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#elif UNIXWARE >= 2
100334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef 	_S_ISMLD
100434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ _S_ISMLD, 	"_S_ISMLD"	},
100534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
100634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef 	_S_ISMOUNTED
100734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ _S_ISMOUNTED, "_S_ISMOUNTED"	},
100834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
100934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
101034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
101134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
101234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
101334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD
101434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1015f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_chflags(struct tcb *tcp)
101634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
101734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
101834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
101934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
102034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(fileflags, tcp->u_arg[1], "UF_???");
102134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
102234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
102334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
102434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
102534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1026f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchflags(struct tcb *tcp)
102734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
102834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
102934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld, ", tcp->u_arg[0]);
103034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(fileflags, tcp->u_arg[1], "UF_???");
103134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
103234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
103334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
103434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
103534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
103634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
103734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1038f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownrealprintstat(struct tcb *tcp, struct stat *statbuf)
1039f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
1040f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (!abbrev(tcp)) {
1041f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, ",
1042f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) major(statbuf->st_dev),
1043f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) minor(statbuf->st_dev),
1044f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) statbuf->st_ino,
1045f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			sprintmode(statbuf->st_mode));
1046f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
1047f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) statbuf->st_nlink,
1048f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) statbuf->st_uid,
1049f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) statbuf->st_gid);
105034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
1051f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_blksize=%lu, ", (unsigned long) statbuf->st_blksize);
1052f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
105334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
1054f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_blocks=%lu, ", (unsigned long) statbuf->st_blocks);
1055f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1056f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1057f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
1058f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{st_mode=%s, ", sprintmode(statbuf->st_mode));
1059f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	switch (statbuf->st_mode & S_IFMT) {
1060f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	case S_IFCHR: case S_IFBLK:
106134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STRUCT_STAT_ST_RDEV
1062f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_rdev=makedev(%lu, %lu), ",
1063f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) major(statbuf->st_rdev),
1064f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) minor(statbuf->st_rdev));
106534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else /* !HAVE_STRUCT_STAT_ST_RDEV */
1066f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_size=makedev(%lu, %lu), ",
1067f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) major(statbuf->st_size),
1068f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) minor(statbuf->st_size));
106934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !HAVE_STRUCT_STAT_ST_RDEV */
1070f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		break;
1071f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	default:
1072f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_size=%lu, ", (unsigned long) statbuf->st_size);
1073f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		break;
1074f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1075f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (!abbrev(tcp)) {
1076f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_atime=%s, ", sprinttime(statbuf->st_atime));
1077f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_mtime=%s, ", sprinttime(statbuf->st_mtime));
1078f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_ctime=%s", sprinttime(statbuf->st_ctime));
107934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_FLAGS
108034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_flags=");
108134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(fileflags, statbuf->st_flags, "UF_???");
108234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
108334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_ACLCNT
108434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_aclcnt=%d", statbuf->st_aclcnt);
108534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
108634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_LEVEL
108734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_level=%ld", statbuf->st_level);
108834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
108934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_FSTYPE
109034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_fstype=%.*s",
109134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(int) sizeof statbuf->st_fstype, statbuf->st_fstype);
109234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
109334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_GEN
109434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_gen=%u", statbuf->st_gen);
109534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
109634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
1097f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1098f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
1099f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("...}");
110034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
110134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
110234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
110334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1104f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstat(struct tcb *tcp, long addr)
110534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
110634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct stat statbuf;
110734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1108f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (!addr) {
1109f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("NULL");
1110f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1111f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1112f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (syserror(tcp) || !verbose(tcp)) {
1113f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("%#lx", addr);
1114f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1115f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1116f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
111734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUXSPARC
1118f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (current_personality == 1) {
1119f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstatsol(tcp, addr);
1120f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1121f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
112234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SPARC64
112334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else if (current_personality == 2) {
112434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat_sparc64(tcp, addr);
112534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
112634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
112734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
112834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUXSPARC */
112934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1130f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined LINUX && defined POWERPC64
1131f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (current_personality == 1) {
1132f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstat_powerpc32(tcp, addr);
113334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
113434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
1135f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1136f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
113734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
113834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
113934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
114034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
114134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
114234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	realprintstat(tcp, &statbuf);
114334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
114434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif	/* !HAVE_LONG_LONG_OFF_T */
114534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1146f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if !defined HAVE_STAT64 && defined LINUX && defined X86_64
1147f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown/*
1148f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * Linux x86_64 has unified `struct stat' but its i386 biarch needs
1149f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * `struct stat64'.  Its <asm-i386/stat.h> definition expects 32-bit `long'.
1150f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * <linux/include/asm-x86_64/ia32.h> is not in the public includes set.
1151f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * __GNUC__ is needed for the required __attribute__ below.
1152f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown */
1153f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstruct stat64 {
1154f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned long long	st_dev;
1155f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned char	__pad0[4];
1156f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	__st_ino;
1157f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_mode;
1158f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_nlink;
1159f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_uid;
1160f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_gid;
1161f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned long long	st_rdev;
1162f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned char	__pad3[4];
1163f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	long long	st_size;
1164f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_blksize;
1165f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned long long	st_blocks;
1166f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_atime;
1167f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_atime_nsec;
1168f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_mtime;
1169f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_mtime_nsec;
1170f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_ctime;
1171f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_ctime_nsec;
1172f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned long long	st_ino;
1173f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown} __attribute__((packed));
1174f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# define HAVE_STAT64	1
1175f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# define STAT64_SIZE	96
1176f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1177f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
117834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STAT64
117934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1180f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstat64(struct tcb *tcp, long addr)
118134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
118234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct stat64 statbuf;
118334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1184f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STAT64_SIZE
1185f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	(void) sizeof(char[sizeof statbuf == STAT64_SIZE ? 1 : -1]);
118634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
118734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
118834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!addr) {
118934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("NULL");
119034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
119134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
119234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
119334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", addr);
119434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
119534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
1196f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1197f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUXSPARC
1198f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (current_personality == 1) {
1199f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstatsol(tcp, addr);
1200f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1201f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1202f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# ifdef SPARC64
1203f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else if (current_personality == 2) {
1204f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstat_sparc64(tcp, addr);
1205f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1206f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1207f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# endif
1208f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* LINUXSPARC */
1209f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1210f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined LINUX && defined X86_64
1211f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (current_personality == 0) {
1212f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstat(tcp, addr);
1213f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1214f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1215f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1216f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
121734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
121834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
121934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
122034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
122134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
122234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp)) {
122334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_LONG_LONG
122434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, ",
122534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
122634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, ",
122734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
122834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) major(statbuf.st_dev),
122934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) minor(statbuf.st_dev),
123034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_LONG_LONG
123134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long long) statbuf.st_ino,
123234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
123334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_ino,
123434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
123534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			sprintmode(statbuf.st_mode));
123634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
123734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_nlink,
123834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_uid,
123934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_gid);
124034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
124134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_blksize=%lu, ",
124234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_blksize);
124334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */
124434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
124534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks);
124634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_STRUCT_STAT_ST_BLOCKS */
124734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
124834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
124934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
125034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	switch (statbuf.st_mode & S_IFMT) {
125134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case S_IFCHR: case S_IFBLK:
125234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STRUCT_STAT_ST_RDEV
125334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_rdev=makedev(%lu, %lu), ",
125434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) major(statbuf.st_rdev),
125534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) minor(statbuf.st_rdev));
125634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else /* !HAVE_STRUCT_STAT_ST_RDEV */
125734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_size=makedev(%lu, %lu), ",
125834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) major(statbuf.st_size),
125934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) minor(statbuf.st_size));
126034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !HAVE_STRUCT_STAT_ST_RDEV */
126134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
126234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	default:
1263f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef HAVE_LONG_LONG
1264f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_size=%llu, ", (unsigned long long) statbuf.st_size);
1265f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#else
1266f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_size=%lu, ", (unsigned long) statbuf.st_size);
1267f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1268f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		break;
126934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
127034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp)) {
127134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime));
127234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime));
127334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime));
127434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_FLAGS
127534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_flags=");
127634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(fileflags, statbuf.st_flags, "UF_???");
127734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
127834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_ACLCNT
127934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_aclcnt=%d", statbuf.st_aclcnt);
128034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
128134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_LEVEL
128234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_level=%ld", statbuf.st_level);
128334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
128434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_FSTYPE
128534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_fstype=%.*s",
128634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(int) sizeof statbuf.st_fstype, statbuf.st_fstype);
128734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
128834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_GEN
128934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_gen=%u", statbuf.st_gen);
129034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
129134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
129234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
129334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
129434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("...}");
129534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
129634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_STAT64 */
129734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
129834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(HAVE_STRUCT___OLD_KERNEL_STAT)
129934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1300f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownconvertoldstat(const struct __old_kernel_stat *oldbuf, struct stat *newbuf)
1301f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
1302f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_dev = oldbuf->st_dev;
1303f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_ino = oldbuf->st_ino;
1304f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_mode = oldbuf->st_mode;
1305f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_nlink = oldbuf->st_nlink;
1306f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_uid = oldbuf->st_uid;
1307f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_gid = oldbuf->st_gid;
1308f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_rdev = oldbuf->st_rdev;
1309f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_size = oldbuf->st_size;
1310f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_atime = oldbuf->st_atime;
1311f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_mtime = oldbuf->st_mtime;
1312f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_ctime = oldbuf->st_ctime;
1313f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_blksize = 0; /* not supported in old_stat */
1314f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_blocks = 0; /* not supported in old_stat */
131534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
131634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
131734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
131834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1319f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintoldstat(struct tcb *tcp, long addr)
132034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
132134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct __old_kernel_stat statbuf;
132234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct stat newstatbuf;
132334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
132434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!addr) {
132534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("NULL");
132634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
132734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
132834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
132934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", addr);
133034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
133134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
1332f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1333f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUXSPARC
1334f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (current_personality == 1) {
1335f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstatsol(tcp, addr);
1336f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1337f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1338f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* LINUXSPARC */
1339f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
134034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
134134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
134234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
134334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
134434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
134534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	convertoldstat(&statbuf, &newstatbuf);
134634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	realprintstat(tcp, &newstatbuf);
134734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
134834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX && !IA64 && !HPPA && !X86_64 && !S390 && !S390X */
134934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
135034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
135134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1352f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_stat(struct tcb *tcp)
135334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
135434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
135534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
135634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
135734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
135834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat(tcp, tcp->u_arg[1]);
135934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
136034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
136134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
136234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
136334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
136434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1365f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_stat64(struct tcb *tcp)
136634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
136734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STAT64
136834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
136934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
137034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
137134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
137234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat64(tcp, tcp->u_arg[1]);
137334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
137434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
137534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
137634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return printargs(tcp);
137734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
137834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
137934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1380f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
1381f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat fstatatflags[] = {
1382f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifndef AT_SYMLINK_NOFOLLOW
1383f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# define AT_SYMLINK_NOFOLLOW     0x100
1384f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1385f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ AT_SYMLINK_NOFOLLOW,	"AT_SYMLINK_NOFOLLOW"	},
1386f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0,			NULL			},
1387f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
1388f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#define utimensatflags fstatatflags
1389f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1390f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
1391f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_newfstatat(struct tcb *tcp)
1392f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
1393f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
1394f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
1395f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[1]);
1396f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1397f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
1398f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef POWERPC64
1399f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (current_personality == 0)
1400f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printstat(tcp, tcp->u_arg[2]);
1401f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
1402f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printstat64(tcp, tcp->u_arg[2]);
1403f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#elif defined HAVE_STAT64
1404f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstat64(tcp, tcp->u_arg[2]);
1405f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#else
1406f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstat(tcp, tcp->u_arg[2]);
1407f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1408f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1409f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(fstatatflags, tcp->u_arg[3], "AT_???");
1410f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1411f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
1412f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
1413f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1414f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
141534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(HAVE_STRUCT___OLD_KERNEL_STAT)
141634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1417f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_oldstat(struct tcb *tcp)
141834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
141934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
142034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
142134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
142234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
142334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printoldstat(tcp, tcp->u_arg[1]);
142434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
142534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
142634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
142734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX && HAVE_STRUCT___OLD_KERNEL_STAT */
142834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
142934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
143034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1431f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fstat(struct tcb *tcp)
143234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
1433f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
1434f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
1435f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1436f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
143734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat(tcp, tcp->u_arg[1]);
143834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
143934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
144034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
144134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
144234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
144334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1444f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fstat64(struct tcb *tcp)
144534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
144634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STAT64
1447f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
1448f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
1449f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1450f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
145134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat64(tcp, tcp->u_arg[1]);
145234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
145334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
145434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
145534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return printargs(tcp);
145634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
145734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
145834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
145934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(HAVE_STRUCT___OLD_KERNEL_STAT)
146034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1461f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_oldfstat(struct tcb *tcp)
146234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
1463f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
1464f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
1465f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1466f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
146734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printoldstat(tcp, tcp->u_arg[1]);
146834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
146934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
147034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
147134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX && HAVE_STRUCT___OLD_KERNEL_STAT */
147234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
147334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
147434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1475f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_lstat(struct tcb *tcp)
147634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
147734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
147834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
147934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
148034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
148134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat(tcp, tcp->u_arg[1]);
148234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
148334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
148434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
148534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
148634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
148734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1488f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_lstat64(struct tcb *tcp)
148934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
149034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STAT64
149134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
149234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
149334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
149434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
149534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat64(tcp, tcp->u_arg[1]);
149634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
149734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
149834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
149934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return printargs(tcp);
150034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
150134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
150234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
150334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(HAVE_STRUCT___OLD_KERNEL_STAT)
150434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1505f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_oldlstat(struct tcb *tcp)
150634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
150734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
150834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
150934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
151034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
151134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printoldstat(tcp, tcp->u_arg[1]);
151234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
151334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
151434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
151534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX && HAVE_STRUCT___OLD_KERNEL_STAT */
151634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
151734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
151834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(SVR4) || defined(LINUXSPARC)
151934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
152034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1521f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_xstat(struct tcb *tcp)
152234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
152334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
152434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld, ", tcp->u_arg[0]);
152534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
152634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
152734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
152834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef _STAT64_VER
152934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[0] == _STAT64_VER)
153034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printstat64 (tcp, tcp->u_arg[2]);
153134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
153234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
153334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat(tcp, tcp->u_arg[2]);
153434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
153534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
153634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
153734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
153834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1539f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fxstat(struct tcb *tcp)
154034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
154134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp))
154234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld, %ld, ", tcp->u_arg[0], tcp->u_arg[1]);
154334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else {
154434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef _STAT64_VER
154534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[0] == _STAT64_VER)
154634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printstat64 (tcp, tcp->u_arg[2]);
154734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
154834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
154934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat(tcp, tcp->u_arg[2]);
155034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
155134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
155234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
155334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
155434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1555f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_lxstat(struct tcb *tcp)
155634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
155734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
155834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld, ", tcp->u_arg[0]);
155934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
156034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
156134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
156234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef _STAT64_VER
156334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[0] == _STAT64_VER)
156434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printstat64 (tcp, tcp->u_arg[2]);
156534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
156634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
156734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat(tcp, tcp->u_arg[2]);
156834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
156934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
157034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
157134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
157234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1573f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_xmknod(struct tcb *tcp)
157434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
157534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int mode = tcp->u_arg[2];
157634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
157734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
157834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld, ", tcp->u_arg[0]);
157934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
158034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %s", sprintmode(mode));
158134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		switch (mode & S_IFMT) {
158234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		case S_IFCHR: case S_IFBLK:
158334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUXSPARC
158434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", makedev(%lu, %lu)",
158534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(unsigned long) ((tcp->u_arg[3] >> 18) & 0x3fff),
158634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(unsigned long) (tcp->u_arg[3] & 0x3ffff));
158734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
158834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", makedev(%lu, %lu)",
158934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(unsigned long) major(tcp->u_arg[3]),
159034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(unsigned long) minor(tcp->u_arg[3]));
159134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
159234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
159334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		default:
159434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
159534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
159634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
159734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
159834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
159934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
160034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_SYS_ACL_H
160134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
160234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/acl.h>
160334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
160434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat aclcmds[] = {
160534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SETACL
160634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SETACL,	"SETACL"	},
160734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
160834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef GETACL
160934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ GETACL,	"GETACL"	},
161034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
161134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef GETACLCNT
161234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ GETACLCNT,	"GETACLCNT"	},
161334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
161434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ACL_GET
161534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ ACL_GET,	"ACL_GET"	},
161634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
161734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ACL_SET
161834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ ACL_SET,	"ACL_SET"	},
161934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
162034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ACL_CNT
162134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ ACL_CNT,	"ACL_CNT"	},
162234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
162334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
162434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
162534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
162634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1627f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_acl(struct tcb *tcp)
162834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
162934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
163034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
163134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
163234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(aclcmds, tcp->u_arg[1], "???ACL???");
163334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %ld", tcp->u_arg[2]);
163434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/*
163534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 * FIXME - dump out the list of aclent_t's pointed to
163634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 * by "tcp->u_arg[3]" if it's not NULL.
163734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 */
163834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[3])
163934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lx", tcp->u_arg[3]);
164034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
164134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", NULL");
164234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
164334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
164434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
164534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
164634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
164734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1648f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_facl(struct tcb *tcp)
164934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
165034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
165134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld, ", tcp->u_arg[0]);
165234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(aclcmds, tcp->u_arg[1], "???ACL???");
165334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %ld", tcp->u_arg[2]);
165434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/*
165534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 * FIXME - dump out the list of aclent_t's pointed to
165634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 * by "tcp->u_arg[3]" if it's not NULL.
165734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 */
165834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[3])
165934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lx", tcp->u_arg[3]);
166034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
166134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", NULL");
166234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
166334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
166434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
166534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
166634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
166734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat aclipc[] = {
166834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef IPC_SHM
166934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ IPC_SHM,	"IPC_SHM"	},
167034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
167134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef IPC_SEM
167234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ IPC_SEM,	"IPC_SEM"	},
167334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
167434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef IPC_MSG
167534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ IPC_MSG,	"IPC_MSG"	},
167634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
167734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
167834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
167934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
168034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
168134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1682f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_aclipc(struct tcb *tcp)
168334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
168434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
168534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(aclipc, tcp->u_arg[0], "???IPC???");
168634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %#lx, ", tcp->u_arg[1]);
168734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(aclcmds, tcp->u_arg[2], "???ACL???");
168834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %ld", tcp->u_arg[3]);
168934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/*
169034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 * FIXME - dump out the list of aclent_t's pointed to
169134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 * by "tcp->u_arg[4]" if it's not NULL.
169234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 */
169334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[4])
169434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lx", tcp->u_arg[4]);
169534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
169634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", NULL");
169734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
169834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
169934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
170034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
170134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_SYS_ACL_H */
170234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
170334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SVR4 || LINUXSPARC */
170434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
170534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
170634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
170734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat fsmagic[] = {
170834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x73757245,	"CODA_SUPER_MAGIC"	},
170934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x012ff7b7,	"COH_SUPER_MAGIC"	},
171034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x1373,	"DEVFS_SUPER_MAGIC"	},
171134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x1cd1,	"DEVPTS_SUPER_MAGIC"	},
171234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x414A53,	"EFS_SUPER_MAGIC"	},
171334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0xef51,	"EXT2_OLD_SUPER_MAGIC"	},
171434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0xef53,	"EXT2_SUPER_MAGIC"	},
171534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x137d,	"EXT_SUPER_MAGIC"	},
171634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0xf995e849,	"HPFS_SUPER_MAGIC"	},
171734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x9660,	"ISOFS_SUPER_MAGIC"	},
171834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x137f,	"MINIX_SUPER_MAGIC"	},
171934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x138f,	"MINIX_SUPER_MAGIC2"	},
172034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x2468,	"MINIX2_SUPER_MAGIC"	},
172134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x2478,	"MINIX2_SUPER_MAGIC2"	},
172234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x4d44,	"MSDOS_SUPER_MAGIC"	},
172334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x564c,	"NCP_SUPER_MAGIC"	},
172434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x6969,	"NFS_SUPER_MAGIC"	},
172534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x9fa0,	"PROC_SUPER_MAGIC"	},
172634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x002f,	"QNX4_SUPER_MAGIC"	},
172734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x52654973,	"REISERFS_SUPER_MAGIC"	},
172834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x02011994,	"SHMFS_SUPER_MAGIC"	},
172934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x517b,	"SMB_SUPER_MAGIC"	},
173034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x012ff7b6,	"SYSV2_SUPER_MAGIC"	},
173134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x012ff7b5,	"SYSV4_SUPER_MAGIC"	},
173234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x00011954,	"UFS_MAGIC"		},
173334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x54190100,	"UFS_CIGAM"		},
173434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x012ff7b4,	"XENIX_SUPER_MAGIC"	},
173534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x012fd16d,	"XIAFS_SUPER_MAGIC"	},
173634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x62656572,	"SYSFS_MAGIC"		},
173734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL			},
173834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
173934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
174034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
174134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
174234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef SVR4
174334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
174434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const char *
1745f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsprintfstype(int magic)
174634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
174734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	static char buf[32];
174834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
174934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	const char *s;
175034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
175134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	s = xlookup(fsmagic, magic);
175234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (s) {
175334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		sprintf(buf, "\"%s\"", s);
175434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return buf;
175534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
175634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
175734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	sprintf(buf, "%#x", magic);
175834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return buf;
175934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
176034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
176134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1762f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstatfs(struct tcb *tcp, long addr)
176334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
176434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct statfs statbuf;
176534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
176634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
176734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", addr);
176834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
176934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
177034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
177134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
177234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
177334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
177434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ALPHA
177534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
177634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("{f_type=%s, f_fbsize=%u, f_blocks=%u, f_bfree=%u, ",
177734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		sprintfstype(statbuf.f_type),
177834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		statbuf.f_bsize, statbuf.f_blocks, statbuf.f_bfree);
177934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("f_bavail=%u, f_files=%u, f_ffree=%u, f_fsid={%d, %d}, f_namelen=%u",
178034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		statbuf.f_bavail,statbuf.f_files, statbuf.f_ffree,
178134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1],
178234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		statbuf.f_namelen);
178334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else /* !ALPHA */
178434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("{f_type=%s, f_bsize=%lu, f_blocks=%lu, f_bfree=%lu, ",
178534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		sprintfstype(statbuf.f_type),
178634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long)statbuf.f_bsize,
178734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long)statbuf.f_blocks,
178834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long)statbuf.f_bfree);
1789f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand#ifdef MIPS
1790f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	tprintf("f_bavail=%lu, f_files=%lu, f_ffree=%lu, f_fsid={%ld, %ld}",
1791f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand		(unsigned long)statbuf.f_bavail,
1792f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand		(unsigned long)statbuf.f_files,
1793f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand		(unsigned long)statbuf.f_ffree,
1794f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand		statbuf.f_fsid.val[0], statbuf.f_fsid.val[1]);
1795f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand#else
179634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("f_bavail=%lu, f_files=%lu, f_ffree=%lu, f_fsid={%d, %d}",
179734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long)statbuf.f_bavail,
179834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long)statbuf.f_files,
179934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long)statbuf.f_ffree,
180034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1]);
1801f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand#endif
180234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
180334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", f_namelen=%lu", (unsigned long)statbuf.f_namelen);
180434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
180534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !ALPHA */
180634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef _STATFS_F_FRSIZE
180734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", f_frsize=%lu", (unsigned long)statbuf.f_frsize);
180834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
180934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("}");
181034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
181134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
181234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1813f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_statfs(struct tcb *tcp)
181434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
181534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
181634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
181734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
181834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
181934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstatfs(tcp, tcp->u_arg[1]);
182034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
182134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
182234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
182334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
182434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1825f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fstatfs(struct tcb *tcp)
182634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
182734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
1828f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
1829f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
183034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
183134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstatfs(tcp, tcp->u_arg[1]);
183234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
183334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
183434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
183534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1836f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined LINUX && defined HAVE_STATFS64
183734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1838f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstatfs64(struct tcb *tcp, long addr)
183934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
184034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct statfs64 statbuf;
184134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
184234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
184334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", addr);
184434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
184534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
184634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
184734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
184834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
184934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
185034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("{f_type=%s, f_bsize=%llu, f_blocks=%llu, f_bfree=%llu, ",
185134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		sprintfstype(statbuf.f_type),
185234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long long)statbuf.f_bsize,
185334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long long)statbuf.f_blocks,
185434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long long)statbuf.f_bfree);
1855f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand#ifdef MIPS
1856f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand	tprintf("f_bavail=%llu, f_files=%llu, f_ffree=%llu, f_fsid={%ld, %ld}",
1857f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand		(unsigned long long)statbuf.f_bavail,
1858f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand		(unsigned long long)statbuf.f_files,
1859f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand		(unsigned long long)statbuf.f_ffree,
1860f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand		statbuf.f_fsid.val[0], statbuf.f_fsid.val[1]);
1861f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand#else
186234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("f_bavail=%llu, f_files=%llu, f_ffree=%llu, f_fsid={%d, %d}",
186334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long long)statbuf.f_bavail,
186434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long long)statbuf.f_files,
186534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long long)statbuf.f_ffree,
186634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1]);
1867f20b06e335baf9428a6b5d82648dc862dc4e1b41Duane Sand#endif
186834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", f_namelen=%lu", (unsigned long)statbuf.f_namelen);
186934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef _STATFS_F_FRSIZE
187034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", f_frsize=%llu", (unsigned long long)statbuf.f_frsize);
187134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
187234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("}");
187334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
187434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
187534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1876f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_statfs64(struct tcb *tcp)
187734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
187834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
187934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
188034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu, ", tcp->u_arg[1]);
188134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
188234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[1] == sizeof (struct statfs64))
188334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printstatfs64(tcp, tcp->u_arg[2]);
188434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
188534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{???}");
188634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
188734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
188834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
188934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
189034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1891f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fstatfs64(struct tcb *tcp)
189234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
189334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
1894f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
1895f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %lu, ", tcp->u_arg[1]);
189634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
189734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[1] == sizeof (struct statfs64))
189834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printstatfs64(tcp, tcp->u_arg[2]);
189934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
190034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{???}");
190134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
190234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
190334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
190434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
190534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
190634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(__alpha)
190734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
190834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1909f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownosf_statfs(struct tcb *tcp)
191034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
191134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
191234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
191334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
191434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
191534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstatfs(tcp, tcp->u_arg[1]);
191634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu", tcp->u_arg[2]);
191734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
191834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
191934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
192034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
192134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1922f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownosf_fstatfs(struct tcb *tcp)
192334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
192434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
192534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%lu, ", tcp->u_arg[0]);
192634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
192734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstatfs(tcp, tcp->u_arg[1]);
192834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu", tcp->u_arg[2]);
192934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
193034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
193134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
193234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX && __alpha */
193334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
193434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !SVR4 */
193534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
193634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SUNOS4
193734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1938f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_ustat(struct tcb *tcp)
193934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
194034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct ustat statbuf;
194134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
194234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
194334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("makedev(%lu, %lu), ",
194434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(long) major(tcp->u_arg[0]),
194534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(long) minor(tcp->u_arg[0]));
194634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
194734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else {
194834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp) || !verbose(tcp))
194934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[1]);
195034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else if (umove(tcp, tcp->u_arg[1], &statbuf) < 0)
195134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{...}");
195234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else {
195334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{f_tfree=%lu, f_tinode=%lu, ",
195434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				statbuf.f_tfree, statbuf.f_tinode);
195534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("f_fname=\"%.*s\", ",
195634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(int) sizeof(statbuf.f_fname),
195734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				statbuf.f_fname);
195834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("f_fpack=\"%.*s\"}",
195934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(int) sizeof(statbuf.f_fpack),
196034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				statbuf.f_fpack);
196134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
196234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
196334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
196434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
196534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SUNOS4 */
196634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
196734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1968f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_pivotroot(struct tcb *tcp)
196934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
197034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
197134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
197234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
197334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
197434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
197534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
197634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
197734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
197834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
197934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/* directory */
198034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1981f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_chdir(struct tcb *tcp)
198234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
198334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
198434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
198534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
198634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
198734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
198834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1989f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
1990f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_mkdir(struct tcb *tcp, int offset)
199134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
199234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
1993f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
1994f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %#lo", tcp->u_arg[offset + 1]);
199534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
199634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
199734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
199834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
199934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2000f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_mkdir(struct tcb *tcp)
2001f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2002f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_mkdir(tcp, 0);
2003f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2004f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2005f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
2006f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2007f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_mkdirat(struct tcb *tcp)
2008f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2009f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
2010f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2011f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_mkdir(tcp, 1);
2012f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2013f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2014f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2015f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2016f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_rmdir(struct tcb *tcp)
201734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
201834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
201934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
202034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
202134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
202234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
202334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
202434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2025f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchdir(struct tcb *tcp)
202634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
202734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2028f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
202934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
203034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
203134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
203234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
203334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2034f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_chroot(struct tcb *tcp)
203534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
203634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
203734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
203834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
203934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
204034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
204134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2042f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(SUNOS4) || defined(SVR4)
204334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2044f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchroot(struct tcb *tcp)
204534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
204634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2047f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
204834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
204934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
205034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
2051f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* SUNOS4 || SVR4 */
205234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
205334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2054f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_link(struct tcb *tcp)
205534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
205634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
205734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
205834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
205934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
206034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
206134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
206234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
206334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2064f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
206534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2066f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_linkat(struct tcb *tcp)
2067f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2068f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2069f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2070f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[1]);
2071f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2072f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[2]);
2073f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[3]);
2074f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2075f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[4]);
2076f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2077f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
2078f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2079f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2080f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2081f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2082f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_unlink(struct tcb *tcp)
208334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
208434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
208534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
208634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
208734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
208834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
208934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2090f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
2091f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat unlinkatflags[] = {
2092f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifndef AT_REMOVEDIR
2093f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# define AT_REMOVEDIR            0x200
2094f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2095f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ AT_REMOVEDIR,	"AT_REMOVEDIR"	},
2096f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0,		NULL		},
2097f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
2098f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
209934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2100f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_unlinkat(struct tcb *tcp)
2101f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2102f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2103f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2104f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[1]);
2105f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2106f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(unlinkatflags, tcp->u_arg[2], "AT_???");
2107f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2108f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
2109f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2110f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2111f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2112f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2113f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_symlink(struct tcb *tcp)
211434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
211534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
211634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
211734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
211834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
211934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
212034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
212134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
212234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2123f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
212434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2125f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_symlinkat(struct tcb *tcp)
212634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
212734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
212834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
212934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
2130f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[1]);
2131f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[2]);
2132f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2133f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
2134f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2135f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2136f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2137f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
2138f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_readlink(struct tcb *tcp, int offset)
2139f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2140f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2141f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
2142f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
214334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
214434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp))
2145f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx", tcp->u_arg[offset + 1]);
214634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
2147f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printpathn(tcp, tcp->u_arg[offset + 1], tcp->u_rval);
2148f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %lu", tcp->u_arg[offset + 2]);
214934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
215034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
215134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
215234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
215334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2154f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_readlink(struct tcb *tcp)
2155f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2156f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_readlink(tcp, 0);
2157f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2158f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2159f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
2160f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2161f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_readlinkat(struct tcb *tcp)
2162f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2163f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
2164f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2165f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_readlink(tcp, 1);
2166f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2167f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2168f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2169f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2170f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_rename(struct tcb *tcp)
217134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
217234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
217334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
217434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
217534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
217634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
217734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
217834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
217934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2180f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
218134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2182f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_renameat(struct tcb *tcp)
2183f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2184f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2185f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2186f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[1]);
2187f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2188f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[2]);
2189f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[3]);
2190f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2191f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
2192f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2193f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2194f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2195f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2196f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_chown(struct tcb *tcp)
219734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
219834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
219934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
220034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printuid(", ", tcp->u_arg[1]);
220134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printuid(", ", tcp->u_arg[2]);
220234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
220334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
220434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
220534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2206f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
220734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2208f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchownat(struct tcb *tcp)
220934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
221034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2211f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2212f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[1]);
221334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printuid(", ", tcp->u_arg[2]);
2214f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printuid(", ", tcp->u_arg[3]);
2215f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2216f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(fstatatflags, tcp->u_arg[4], "AT_???");
221734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
221834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
221934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
2220f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
222134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
222234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2223f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchown(struct tcb *tcp)
222434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
222534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2226f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2227f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printuid(", ", tcp->u_arg[1]);
2228f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printuid(", ", tcp->u_arg[2]);
222934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
223034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
223134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
223234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2233f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
2234f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_chmod(struct tcb *tcp, int offset)
2235f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2236f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2237f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
2238f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %#lo", tcp->u_arg[offset + 1]);
2239f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2240f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
2241f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2242f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2243f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2244f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_chmod(struct tcb *tcp)
2245f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2246f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_chmod(tcp, 0);
2247f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2248f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2249f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
2250f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2251f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchmodat(struct tcb *tcp)
2252f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2253f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
2254f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2255f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_chmod(tcp, 1);
2256f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2257f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2258f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
225934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2260f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchmod(struct tcb *tcp)
226134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
226234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2263f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2264f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %#lo", tcp->u_arg[1]);
226534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
226634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
226734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
226834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
226934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ALPHA
227034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2271f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_osf_utimes(struct tcb *tcp)
227234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2273f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2274f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[0]);
2275f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2276f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printtv_bitness(tcp, tcp->u_arg[1], BITNESS_32,  0);
2277f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2278f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
227934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
228034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
228134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2282f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
2283f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_utimes(struct tcb *tcp, int offset, int special)
2284f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2285f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2286f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
2287f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2288f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (tcp->u_arg[offset + 1] == 0)
2289f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("NULL");
2290f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else {
2291f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("{");
2292f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printtv_bitness(tcp, tcp->u_arg[offset + 1],
2293f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					BITNESS_CURRENT, special);
2294f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(", ");
2295f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printtv_bitness(tcp, tcp->u_arg[offset + 1]
2296f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					+ sizeof (struct timeval),
2297f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					BITNESS_CURRENT, special);
2298f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("}");
2299f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
2300f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2301f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
2302f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2303f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
230434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2305f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_utimes(struct tcb *tcp)
2306f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2307f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_utimes(tcp, 0, 0);
2308f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2309f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2310f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
2311f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2312f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_futimesat(struct tcb *tcp)
2313f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2314f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
2315f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2316f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_utimes(tcp, 1, 0);
2317f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2318f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2319f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2320f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_utimensat(struct tcb *tcp)
232134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
232234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2323f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2324f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		decode_utimes(tcp, 1, 1);
232534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
2326f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(utimensatflags, tcp->u_arg[3], "AT_???");
232734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
232834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
232934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
2330f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
233134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
233234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2333f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_utime(struct tcb *tcp)
233434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2335f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	union {
2336f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		long utl[2];
2337f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int uti[2];
2338f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} u;
233934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
234034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
234134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
234234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
234334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!tcp->u_arg[1])
234434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("NULL");
234534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else if (!verbose(tcp))
234634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[1]);
2347f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else if (umoven(tcp, tcp->u_arg[1],
2348f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				2 * personality_wordsize[current_personality],
2349f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(char *) &u) < 0)
235034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("[?, ?]");
2351f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else if (personality_wordsize[current_personality]
2352f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			 == sizeof u.utl[0]) {
2353f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("[%s,", sprinttime(u.utl[0]));
2354f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(" %s]", sprinttime(u.utl[1]));
2355f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
2356f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else if (personality_wordsize[current_personality]
2357f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			 == sizeof u.uti[0]) {
2358f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("[%s,", sprinttime(u.uti[0]));
2359f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(" %s]", sprinttime(u.uti[1]));
236034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
2361f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
2362f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			abort();
236334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
236434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
236534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
236634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2367f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
2368f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_mknod(struct tcb *tcp, int offset)
236934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2370f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int mode = tcp->u_arg[offset + 1];
237134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
237234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2373f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
237434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %s", sprintmode(mode));
237534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		switch (mode & S_IFMT) {
237634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		case S_IFCHR: case S_IFBLK:
237734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUXSPARC
237834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (current_personality == 1)
237934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", makedev(%lu, %lu)",
2380f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(unsigned long) ((tcp->u_arg[offset + 2] >> 18) & 0x3fff),
2381f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(unsigned long) (tcp->u_arg[offset + 2] & 0x3ffff));
238234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			else
238334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
238434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", makedev(%lu, %lu)",
2385f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(unsigned long) major(tcp->u_arg[offset + 2]),
2386f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(unsigned long) minor(tcp->u_arg[offset + 2]));
238734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
238834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		default:
238934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
239034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
239134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
239234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
239334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
239434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
239534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2396f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_mknod(struct tcb *tcp)
2397f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2398f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_mknod(tcp, 0);
2399f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2400f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2401f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
2402f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2403f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_mknodat(struct tcb *tcp)
2404f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2405f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
2406f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2407f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_mknod(tcp, 1);
2408f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2409f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2410f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2411f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef FREEBSD
2412f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2413f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_mkfifo(struct tcb *tcp)
241434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
241534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
241634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
241734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %#lo", tcp->u_arg[1]);
241834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
241934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
242034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
2421f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* FREEBSD */
242234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
242334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2424f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fsync(struct tcb *tcp)
242534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
242634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2427f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
242834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
242934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
243034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
243134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
243234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
243334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
243434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
2435f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintdir(struct tcb *tcp, long addr)
243634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
243734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct dirent d;
243834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
243934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!verbose(tcp)) {
244034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", addr);
244134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
244234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
244334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &d) < 0) {
244434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
244534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
244634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
244734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("{d_ino=%ld, ", (unsigned long) d.d_ino);
244834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("d_name=");
244934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	printpathn(tcp, (long) ((struct dirent *) addr)->d_name, d.d_reclen);
245034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("}");
245134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
245234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
245334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2454f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_readdir(struct tcb *tcp)
245534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
245634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2457f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2458f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
245934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
246034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp) || tcp->u_rval == 0 || !verbose(tcp))
246134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[1]);
246234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
246334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printdir(tcp, tcp->u_arg[1]);
246434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* Not much point in printing this out, it is always 1. */
246534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[2] != 1)
246634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %lu", tcp->u_arg[2]);
246734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
246834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
246934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
247034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
247134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
247234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
247334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined FREEBSD || defined LINUX
247434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat direnttypes[] = {
247534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_UNKNOWN,	"DT_UNKNOWN" 	},
247634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_FIFO,	"DT_FIFO" 	},
247734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_CHR,	"DT_CHR" 	},
247834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_DIR,	"DT_DIR" 	},
247934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_BLK,	"DT_BLK" 	},
248034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_REG,	"DT_REG" 	},
248134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_LNK,	"DT_LNK" 	},
248234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_SOCK,	"DT_SOCK" 	},
248334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_WHT,	"DT_WHT" 	},
248434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
248534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
248634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
248734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
248834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
248934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2490f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_getdents(struct tcb *tcp)
249134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
249234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int i, len, dents = 0;
249334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	char *buf;
249434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
249534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2496f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2497f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
249834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
249934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
250034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
250134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
250234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
250334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
250434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	len = tcp->u_rval;
2505f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	buf = len ? malloc(len) : NULL;
2506f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (len && !buf) {
250734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
250834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		fprintf(stderr, "out of memory\n");
250934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
251034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
251134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
251234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
251334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		free(buf);
251434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
251534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
251634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
251734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{");
251834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	for (i = 0; i < len;) {
251934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		struct kernel_dirent *d = (struct kernel_dirent *) &buf[i];
252034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
252134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
252234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s{d_ino=%lu, d_off=%lu, ",
252334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "", d->d_ino, d->d_off);
252434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("d_reclen=%u, d_name=\"%s\"}",
252534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_reclen, d->d_name);
252634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
252734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
252834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SVR4
252934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
253034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s{d_ino=%lu, d_off=%lu, ",
253134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "",
253234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(unsigned long) d->d_ino,
253334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(unsigned long) d->d_off);
253434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("d_reclen=%u, d_name=\"%s\"}",
253534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_reclen, d->d_name);
253634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
253734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SVR4 */
253834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SUNOS4
253934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
254034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s{d_off=%lu, d_fileno=%lu, d_reclen=%u, ",
254134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "", d->d_off, d->d_fileno,
254234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_reclen);
254334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("d_namlen=%u, d_name=\"%.*s\"}",
254434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_namlen, d->d_namlen, d->d_name);
254534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
254634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SUNOS4 */
254734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD
254834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
254934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s{d_fileno=%u, d_reclen=%u, d_type=",
255034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "", d->d_fileno, d->d_reclen);
255134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printxval(direnttypes, d->d_type, "DT_???");
255234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", d_namlen=%u, d_name=\"%.*s\"}",
255334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_namlen, d->d_namlen, d->d_name);
255434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
255534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* FREEBSD */
255634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!d->d_reclen) {
255734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("/* d_reclen == 0, problem here */");
255834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
255934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
256034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		i += d->d_reclen;
256134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		dents++;
256234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
256334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
256434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
256534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
256634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("/* %u entries */", dents);
256734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", %lu", tcp->u_arg[2]);
256834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	free(buf);
256934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
257034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
257134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
257234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
257334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if _LFS64_LARGEFILE
257434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2575f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_getdents64(struct tcb *tcp)
257634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
257734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int i, len, dents = 0;
257834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	char *buf;
257934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
258034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2581f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2582f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
258334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
258434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
258534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
258634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
258734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
258834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
258934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	len = tcp->u_rval;
2590f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	buf = len ? malloc(len) : NULL;
2591f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (len && !buf) {
259234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
259334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		fprintf(stderr, "out of memory\n");
259434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
259534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
259634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
259734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
259834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		free(buf);
259934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
260034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
260134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
260234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{");
260334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	for (i = 0; i < len;) {
260434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		struct dirent64 *d = (struct dirent64 *) &buf[i];
260534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) || defined(SVR4)
260634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
2607f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%s{d_ino=%" PRIu64 ", d_off=%" PRId64 ", ",
260834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "",
260934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_ino,
261034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_off);
261134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
261234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("d_type=");
261334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printxval(direnttypes, d->d_type, "DT_???");
261434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", ");
261534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
261634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("d_reclen=%u, d_name=\"%s\"}",
261734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_reclen, d->d_name);
261834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
261934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX || SVR4 */
262034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SUNOS4
262134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
262234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s{d_off=%lu, d_fileno=%lu, d_reclen=%u, ",
262334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "", d->d_off, d->d_fileno,
262434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_reclen);
262534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("d_namlen=%u, d_name=\"%.*s\"}",
262634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_namlen, d->d_namlen, d->d_name);
262734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
262834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SUNOS4 */
2629f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (!d->d_reclen) {
2630f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("/* d_reclen == 0, problem here */");
2631f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			break;
2632f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
263334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		i += d->d_reclen;
263434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		dents++;
263534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
263634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
263734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
263834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
263934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("/* %u entries */", dents);
264034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", %lu", tcp->u_arg[2]);
264134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	free(buf);
264234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
264334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
264434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
264534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
264634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD
264734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2648f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_getdirentries(struct tcb *tcp)
264934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
265034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int i, len, dents = 0;
265134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long basep;
265234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	char *buf;
265334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
265434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2655f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2656f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
265734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
265834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
265934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
266034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu, %#lx", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]);
266134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
266234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
266334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	len = tcp->u_rval;
266434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if ((buf = malloc(len)) == NULL) {
266534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu, %#lx", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]);
266634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		fprintf(stderr, "out of memory\n");
266734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
266834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
266934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
267034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu, %#lx", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]);
267134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		free(buf);
267234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
267334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
267434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
267534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{");
267634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	for (i = 0; i < len;) {
267734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		struct kernel_dirent *d = (struct kernel_dirent *) &buf[i];
267834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
267934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s{d_fileno=%u, d_reclen=%u, d_type=",
268034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "", d->d_fileno, d->d_reclen);
268134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printxval(direnttypes, d->d_type, "DT_???");
268234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", d_namlen=%u, d_name=\"%.*s\"}",
268334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_namlen, d->d_namlen, d->d_name);
268434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
2685f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (!d->d_reclen) {
2686f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("/* d_reclen == 0, problem here */");
2687f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			break;
2688f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
268934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		i += d->d_reclen;
269034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		dents++;
269134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
269234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
269334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
269434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
269534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("/* %u entries */", dents);
269634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	free(buf);
269734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", %lu", tcp->u_arg[2]);
269834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, tcp->u_arg[3], &basep) < 0)
269934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %#lx", tcp->u_arg[3]);
270034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
270134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", [%lu]", basep);
270234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
270334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
270434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
270534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
270634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
270734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2708f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_getcwd(struct tcb *tcp)
270934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2710f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (exiting(tcp)) {
2711f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (syserror(tcp))
2712f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx", tcp->u_arg[0]);
2713f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
2714f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printpathn(tcp, tcp->u_arg[0], tcp->u_rval - 1);
2715f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %lu", tcp->u_arg[1]);
2716f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2717f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
271834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
271934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
272034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
272134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD
272234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2723f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys___getcwd(struct tcb *tcp)
272434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2725f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (exiting(tcp)) {
2726f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (syserror(tcp))
2727f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx", tcp->u_arg[0]);
2728f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
2729f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printpathn(tcp, tcp->u_arg[0], tcp->u_arg[1]);
2730f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %lu", tcp->u_arg[1]);
2731f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2732f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
273334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
273434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
273534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
273634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_SYS_ASYNCH_H
273734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
273834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2739f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_aioread(struct tcb *tcp)
274034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
274134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct aio_result_t res;
274234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
274334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
274434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%lu, ", tcp->u_arg[0]);
274534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
274634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp))
274734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[1]);
274834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
274934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
275034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu, %lu, ", tcp->u_arg[2], tcp->u_arg[3]);
275134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(whence, tcp->u_arg[4], "L_???");
275234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp) || tcp->u_arg[5] == 0
275334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		    || umove(tcp, tcp->u_arg[5], &res) < 0)
275434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lx", tcp->u_arg[5]);
275534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
275634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", {aio_return %d aio_errno %d}",
275734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				res.aio_return, res.aio_errno);
275834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
275934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
276034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
276134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
276234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2763f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_aiowrite(struct tcb *tcp)
276434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
276534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct aio_result_t res;
276634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
276734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
276834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%lu, ", tcp->u_arg[0]);
276934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
277034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu, %lu, ", tcp->u_arg[2], tcp->u_arg[3]);
277134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(whence, tcp->u_arg[4], "L_???");
277234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
277334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else {
277434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[5] == 0)
277534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", NULL");
277634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else if (syserror(tcp)
277734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		    || umove(tcp, tcp->u_arg[5], &res) < 0)
277834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lx", tcp->u_arg[5]);
277934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
278034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", {aio_return %d aio_errno %d}",
278134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				res.aio_return, res.aio_errno);
278234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
278334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
278434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
278534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
278634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2787f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_aiowait(struct tcb *tcp)
278834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
278934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp))
279034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printtv(tcp, tcp->u_arg[0]);
279134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
279234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
279334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
279434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2795f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_aiocancel(struct tcb *tcp)
279634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
279734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct aio_result_t res;
279834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
279934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (exiting(tcp)) {
280034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[0] == 0)
280134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("NULL");
280234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else if (syserror(tcp)
280334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		    || umove(tcp, tcp->u_arg[0], &res) < 0)
280434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[0]);
280534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
280634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{aio_return %d aio_errno %d}",
280734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				res.aio_return, res.aio_errno);
280834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
280934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
281034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
281134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
281234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_SYS_ASYNCH_H */
281334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
281434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat xattrflags[] = {
281534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef XATTR_CREATE
281634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ XATTR_CREATE,	 "XATTR_CREATE" },
281734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ XATTR_REPLACE, "XATTR_REPLACE" },
281834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
281934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		 NULL }
282034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
282134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
282234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
2823f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprint_xattr_val(struct tcb *tcp, int failed,
2824f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned long arg,
2825f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned long insize,
2826f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned long size)
2827f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2828f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (!failed) {
2829f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned long capacity = 4 * size + 1;
2830f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned char *buf = (capacity < size) ? NULL : malloc(capacity);
2831f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (buf == NULL || /* probably a bogus size argument */
2832f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			umoven(tcp, arg, size, (char *) &buf[3 * size]) < 0) {
2833f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			failed = 1;
2834f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
283534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else {
2836f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			unsigned char *out = buf;
2837f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			unsigned char *in = &buf[3 * size];
2838f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			size_t i;
2839f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			for (i = 0; i < size; ++i) {
2840f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				if (isprint(in[i]))
2841f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					*out++ = in[i];
2842f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				else {
284334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define tohex(n) "0123456789abcdef"[n]
2844f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					*out++ = '\\';
2845f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					*out++ = 'x';
2846f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					*out++ = tohex(in[i] / 16);
2847f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					*out++ = tohex(in[i] % 16);
2848f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				}
2849f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			}
2850f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			/* Don't print terminating NUL if there is one.  */
2851f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if (i > 0 && in[i - 1] == '\0')
2852f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				out -= 4;
2853f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			*out = '\0';
2854f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(", \"%s\", %ld", buf, insize);
285534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
2856f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		free(buf);
285734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
2858f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (failed)
2859f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", 0x%lx, %ld", arg, insize);
286034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
286134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
286234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2863f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_setxattr(struct tcb *tcp)
286434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2865f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2866f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[0]);
2867f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2868f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstr(tcp, tcp->u_arg[1], -1);
2869f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_xattr_val(tcp, 0, tcp->u_arg[2], tcp->u_arg[3], tcp->u_arg[3]);
2870f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2871f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(xattrflags, tcp->u_arg[4], "XATTR_???");
2872f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2873f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
287434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
287534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
287634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2877f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fsetxattr(struct tcb *tcp)
287834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2879f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2880f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2881f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2882f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstr(tcp, tcp->u_arg[1], -1);
2883f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_xattr_val(tcp, 0, tcp->u_arg[2], tcp->u_arg[3], tcp->u_arg[3]);
2884f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2885f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(xattrflags, tcp->u_arg[4], "XATTR_???");
2886f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2887f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
288834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
288934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
289034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2891f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_getxattr(struct tcb *tcp)
289234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2893f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2894f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[0]);
2895f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2896f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstr(tcp, tcp->u_arg[1], -1);
2897f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
2898f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_xattr_val(tcp, syserror(tcp), tcp->u_arg[2], tcp->u_arg[3],
2899f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tcp->u_rval);
2900f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2901f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
290234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
290334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
290434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2905f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fgetxattr(struct tcb *tcp)
290634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2907f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2908f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2909f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2910f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstr(tcp, tcp->u_arg[1], -1);
2911f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
2912f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_xattr_val(tcp, syserror(tcp), tcp->u_arg[2], tcp->u_arg[3],
2913f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tcp->u_rval);
2914f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2915f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
291634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
291734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
291834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2919f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_listxattr(struct tcb *tcp)
292034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2921f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2922f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[0]);
2923f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
2924f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		/* XXX Print value in format */
2925f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %p, %lu", (void *) tcp->u_arg[1], tcp->u_arg[2]);
2926f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2927f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
292834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
292934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
293034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2931f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_flistxattr(struct tcb *tcp)
293234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2933f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2934f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2935f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
2936f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		/* XXX Print value in format */
2937f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %p, %lu", (void *) tcp->u_arg[1], tcp->u_arg[2]);
2938f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2939f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
294034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
294134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
294234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2943f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_removexattr(struct tcb *tcp)
294434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2945f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2946f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[0]);
2947f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2948f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstr(tcp, tcp->u_arg[1], -1);
2949f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2950f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
295134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
295234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
295334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2954f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fremovexattr(struct tcb *tcp)
295534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2956f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2957f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2958f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2959f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstr(tcp, tcp->u_arg[1], -1);
2960f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2961f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
296234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
296334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2964f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
296534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat advise[] = {
296634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { POSIX_FADV_NORMAL,		"POSIX_FADV_NORMAL"	},
296734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { POSIX_FADV_RANDOM,		"POSIX_FADV_RANDOM"	},
296834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { POSIX_FADV_SEQUENTIAL,	"POSIX_FADV_SEQUENTIAL"	},
296934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { POSIX_FADV_WILLNEED,	"POSIX_FADV_WILLNEED"	},
297034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { POSIX_FADV_DONTNEED,	"POSIX_FADV_DONTNEED"	},
297134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { POSIX_FADV_NOREUSE,		"POSIX_FADV_NOREUSE"	},
297234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { 0,				NULL			}
297334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
297434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
297534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
297634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
297734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2978f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fadvise64(struct tcb *tcp)
297934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2980f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2981f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int argn;
2982f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2983f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2984f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		argn = printllval(tcp, "%lld", 1);
2985f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %ld, ", tcp->u_arg[argn++]);
2986f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(advise, tcp->u_arg[argn], "POSIX_FADV_???");
2987f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2988f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
298934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
299034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
299134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
299234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
299334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2994f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fadvise64_64(struct tcb *tcp)
299534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2996f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2997f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int argn;
2998f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2999f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
3000f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined ARM || defined POWERPC
3001f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		argn = printllval(tcp, "%lld, ", 2);
3002f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#else
3003f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		argn = printllval(tcp, "%lld, ", 1);
3004f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
3005f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		argn = printllval(tcp, "%lld, ", argn);
3006f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined ARM || defined POWERPC
3007f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(advise, tcp->u_arg[1], "POSIX_FADV_???");
300834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
3009f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(advise, tcp->u_arg[argn], "POSIX_FADV_???");
301034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
3011f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
3012f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
301334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
301434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
3015f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
3016f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat inotify_modes[] = {
3017f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000001,	"IN_ACCESS"	},
3018f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000002,	"IN_MODIFY"	},
3019f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000004,	"IN_ATTRIB"	},
3020f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000008,	"IN_CLOSE_WRITE"},
3021f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000010,	"IN_CLOSE_NOWRITE"},
3022f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000020,	"IN_OPEN"	},
3023f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000040,	"IN_MOVED_FROM"	},
3024f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000080,	"IN_MOVED_TO"	},
3025f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000100,	"IN_CREATE"	},
3026f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000200,	"IN_DELETE"	},
3027f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000400,	"IN_DELETE_SELF"},
3028f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000800,	"IN_MOVE_SELF"	},
3029f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00002000,	"IN_UNMOUNT"	},
3030f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00004000,	"IN_Q_OVERFLOW"	},
3031f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00008000,	"IN_IGNORED"	},
3032f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x01000000,	"IN_ONLYDIR"	},
3033f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x02000000,	"IN_DONT_FOLLOW"},
3034f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x20000000,	"IN_MASK_ADD"	},
3035f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x40000000,	"IN_ISDIR"	},
3036f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x80000000,	"IN_ONESHOT"	},
3037f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0,		NULL		}
3038f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
3039f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
3040f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat inotify_init_flags[] = {
3041f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000800,	"IN_NONBLOCK"	},
3042f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00080000,	"IN_CLOEXEC" 	},
3043f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0,		NULL 		}
3044f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
3045f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
3046f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
3047f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_inotify_add_watch(struct tcb *tcp)
3048f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
3049f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
3050f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
3051f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
3052f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[1]);
3053f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
3054f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(inotify_modes, tcp->u_arg[2], "IN_???");
3055f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
3056f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
3057f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
3058f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
3059f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
3060f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_inotify_rm_watch(struct tcb *tcp)
3061f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
3062f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
3063f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
3064f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %ld", tcp->u_arg[1]);
3065f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
3066f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
3067f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
3068f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
3069f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
3070f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_inotify_init1(struct tcb *tcp)
3071f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
3072f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
3073f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(inotify_init_flags, tcp->u_arg[0], "IN_???");
3074f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
3075f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
3076f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
3077f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
3078f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fallocate(struct tcb *tcp)
3079f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
3080f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
3081f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int argn;
3082f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);		/* fd */
3083f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
3084f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("%#lo, ", tcp->u_arg[1]);	/* mode */
3085f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		argn = printllval(tcp, "%llu, ", 2);	/* offset */
3086f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printllval(tcp, "%llu", argn);		/* len */
3087f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
3088f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
3089f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
3090f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
3091