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
6334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/*
6434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * With EABI there is 4 bytes of padding added to this structure.
6534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Let's pack it so the padding goes away to simplify dual ABI support.
6634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Note that user space does NOT have to pack this structure.
6734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project */
6834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct statfs64 {
6934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u32 f_type;
7034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u32 f_bsize;
7134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u64 f_blocks;
7234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u64 f_bfree;
7334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u64 f_bavail;
7434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u64 f_files;
7534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u64 f_ffree;
7634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __kernel_fsid_t f_fsid;
7734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u32 f_namelen;
7834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u32 f_frsize;
7934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project        __u32 f_spare[5];
8034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project} __attribute__ ((packed,aligned(4)));
8134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_ANDROID_OS */
8234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
8334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
8434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  ifdef LINUXSPARC
8534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct stat {
8634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned short	st_dev;
8734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_ino;
8834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned short	st_mode;
8934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	short		st_nlink;
9034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned short	st_uid;
9134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned short	st_gid;
9234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned short	st_rdev;
9334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_size;
9434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int		st_atime;
9534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	__unused1;
9634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int		st_mtime;
9734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	__unused2;
9834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int		st_ctime;
9934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	__unused3;
10034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int		st_blksize;
10134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int		st_blocks;
10234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	__unused4[2];
10334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
10434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(SPARC64)
10534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct stat_sparc64 {
10634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_dev;
10734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned long	st_ino;
10834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_mode;
10934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_nlink;
11034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_uid;
11134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_gid;
11234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned int	st_rdev;
11334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long		st_size;
11434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long		st_atime;
11534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long		st_mtime;
11634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long		st_ctime;
11734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long		st_blksize;
11834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long		st_blocks;
11934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned long	__unused4[2];
12034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
12134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SPARC64 */
12234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define stat kernel_stat
12334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    include <asm/stat.h>
12434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef stat
12534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  else
12634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef dev_t
12734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef ino_t
12834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef mode_t
12934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef nlink_t
13034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef uid_t
13134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef gid_t
13234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef off_t
13334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef loff_t
13434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
13534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define dev_t __kernel_dev_t
13634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define ino_t __kernel_ino_t
13734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define mode_t __kernel_mode_t
13834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define nlink_t __kernel_nlink_t
13934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define uid_t __kernel_uid_t
14034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define gid_t __kernel_gid_t
14134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define off_t __kernel_off_t
14234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define loff_t __kernel_loff_t
14334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
14434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    include <asm/stat.h>
14534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
14634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef dev_t
14734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef ino_t
14834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef mode_t
14934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef nlink_t
15034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef uid_t
15134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef gid_t
15234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef off_t
15334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef loff_t
15434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
15534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define dev_t dev_t
15634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define ino_t ino_t
15734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define mode_t mode_t
15834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define nlink_t nlink_t
15934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define uid_t uid_t
16034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define gid_t gid_t
16134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define off_t off_t
16234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define loff_t loff_t
16334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  endif
16434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  ifdef HPPA	/* asm-parisc/stat.h defines stat64 */
16534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    undef stat64
16634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  endif
16734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  define stat libc_stat
16834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  define stat64 libc_stat64
16934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  include <sys/stat.h>
17034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  undef stat
17134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  undef stat64
17234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project   /* These might be macros. */
17334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  undef st_atime
17434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  undef st_mtime
17534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  undef st_ctime
17634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  ifdef HPPA
17734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#    define stat64 hpux_stat64
17834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  endif
17934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
18034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  include <sys/stat.h>
18134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
18234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
18334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <fcntl.h>
18434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
18534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SVR4
18634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  include <sys/cred.h>
18734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SVR4 */
18834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
18934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_SYS_VFS_H
19034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/vfs.h>
19134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
19234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
19334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_LINUX_XATTR_H
19434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <linux/xattr.h>
19534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#elif defined linux
19634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define XATTR_CREATE 1
19734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define XATTR_REPLACE 2
19834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
19934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
20034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD
20134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/param.h>
20234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/mount.h>
20334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/stat.h>
20434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
20534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
206f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if _LFS64_LARGEFILE && (defined(LINUX) || defined(SVR4))
207f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# ifdef HAVE_INTTYPES_H
208f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#  include <inttypes.h>
209f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# else
210f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#  define PRId64 "lld"
211f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#  define PRIu64 "llu"
212f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# endif
213f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
214f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
21534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_LONG_LONG_OFF_T
21634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/*
21734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Ugly hacks for systems that have typedef long long off_t
21834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project */
21934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
22034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define stat64 stat
22134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define HAVE_STAT64 1	/* Ugly hack */
22234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
22334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define	sys_stat64	sys_stat
22434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define sys_fstat64	sys_fstat
22534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define sys_lstat64	sys_lstat
22634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define sys_lseek64	sys_lseek
22734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define sys_truncate64	sys_truncate
22834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define sys_ftruncate64	sys_ftruncate
22934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
23034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
23134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAJOR_IN_SYSMACROS
23234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/sysmacros.h>
23334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
23434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
23534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAJOR_IN_MKDEV
23634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/mkdev.h>
23734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
23834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
23934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_SYS_ASYNCH_H
24034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/asynch.h>
24134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
24234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
24334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SUNOS4
24434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <ustat.h>
24534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
24634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
247f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownconst struct xlat open_access_modes[] = {
248f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_RDONLY,	"O_RDONLY"	},
249f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_WRONLY,	"O_WRONLY"	},
250f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_RDWR,	"O_RDWR"	},
251f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef O_ACCMODE
252f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_ACCMODE,	"O_ACCMODE"	},
253f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
254f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0,		NULL		},
255f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
256f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
257f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownconst struct xlat open_mode_flags[] = {
25834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_CREAT,	"O_CREAT"	},
25934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_EXCL,	"O_EXCL"	},
26034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_NOCTTY,	"O_NOCTTY"	},
261f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_TRUNC,	"O_TRUNC"	},
262f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_APPEND,	"O_APPEND"	},
263f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_NONBLOCK,	"O_NONBLOCK"	},
26434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_SYNC
26534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_SYNC,	"O_SYNC"	},
26634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
26734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_ASYNC
26834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_ASYNC,	"O_ASYNC"	},
26934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
27034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_DSYNC
27134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_DSYNC,	"O_DSYNC"	},
27234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
27334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_RSYNC
27434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_RSYNC,	"O_RSYNC"	},
27534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
276f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(O_NDELAY) && (O_NDELAY != O_NONBLOCK)
27734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_NDELAY,	"O_NDELAY"	},
27834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
27934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_PRIV
28034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_PRIV,	"O_PRIV"	},
28134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
28234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_DIRECT
28334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_DIRECT,	"O_DIRECT"	},
28434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
28534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_LARGEFILE
28634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project# if O_LARGEFILE == 0		/* biarch platforms in 64-bit mode */
28734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  undef O_LARGEFILE
28834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  ifdef SPARC64
28934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#   define O_LARGEFILE	0x40000
29034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  elif defined X86_64 || defined S390X
29134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#   define O_LARGEFILE	0100000
29234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  endif
29334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project# endif
29434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project# ifdef O_LARGEFILE
29534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_LARGEFILE,	"O_LARGEFILE"   },
29634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project# endif
29734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
29834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_DIRECTORY
29934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_DIRECTORY,	"O_DIRECTORY"   },
30034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
30134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_NOFOLLOW
30234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_NOFOLLOW, 	"O_NOFOLLOW"	},
30334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
30434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_NOATIME
30534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_NOATIME, 	"O_NOATIME"	},
30634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
307f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef O_CLOEXEC
308f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ O_CLOEXEC,	"O_CLOEXEC"	},
309f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
31034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
31134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FNDELAY
31234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FNDELAY,	"FNDELAY"	},
31334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
31434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FAPPEND
31534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FAPPEND,	"FAPPEND"	},
31634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
31734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FMARK
31834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FMARK,	"FMARK"		},
31934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
32034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FDEFER
32134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FDEFER,	"FDEFER"	},
32234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
32334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FASYNC
32434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FASYNC,	"FASYNC"	},
32534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
32634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FSHLOCK
32734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FSHLOCK,	"FSHLOCK"	},
32834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
32934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FEXLOCK
33034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FEXLOCK,	"FEXLOCK"	},
33134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
33234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FCREAT
33334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FCREAT,	"FCREAT"	},
33434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
33534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FTRUNC
33634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FTRUNC,	"FTRUNC"	},
33734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
33834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FEXCL
33934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FEXCL,	"FEXCL"		},
34034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
34134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FNBIO
34234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FNBIO,	"FNBIO"		},
34334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
34434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FSYNC
34534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FSYNC,	"FSYNC"		},
34634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
34734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FNOCTTY
34834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ FNOCTTY,	"FNOCTTY"	},
34934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
35034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_SHLOCK
35134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_SHLOCK,	"O_SHLOCK"	},
35234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
35334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef O_EXLOCK
35434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ O_EXLOCK,	"O_EXLOCK"	},
35534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
35634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
35734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
35834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
359f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
360f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
361f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifndef AT_FDCWD
362f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# define AT_FDCWD                -100
363f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
364f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
365f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown/* The fd is an "int", so when decoding x86 on x86_64, we need to force sign
366f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * extension to get the right value.  We do this by declaring fd as int here.
367f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown */
368f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic void
369f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprint_dirfd(struct tcb *tcp, int fd)
370f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
371f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (fd == AT_FDCWD)
372f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("AT_FDCWD, ");
373f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
374f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{
375f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, fd);
376f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
377f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
378f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
379f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
380f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
381f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown/*
382f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * Pity stpcpy() is not standardized...
383f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown */
384f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic char *
385f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstr_append(char *dst, const char *src)
386f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
387f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	while ((*dst = *src++) != '\0')
388f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		dst++;
389f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return dst;
390f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
391f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
392f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown/*
393f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * low bits of the open(2) flags define access mode,
394f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * other bits are real flags.
395f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown */
396f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownconst char *
397f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsprint_open_modes(mode_t flags)
398f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
399f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	static char outstr[1024];
400f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	char *p;
401f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	char sep = 0;
402f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	const char *str;
403f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	const struct xlat *x;
404f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
405f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	p = str_append(outstr, "flags ");
406f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	str = xlookup(open_access_modes, flags & 3);
407f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (str) {
408f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		p = str_append(p, str);
409f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		flags &= ~3;
410f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (!flags)
411f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			return outstr;
412f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		sep = '|';
413f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
414f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
415f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	for (x = open_mode_flags; x->str; x++) {
416f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if ((flags & x->val) == x->val) {
417f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if (sep)
418f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				*p++ = sep;
419f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			p = str_append(p, x->str);
420f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			flags &= ~x->val;
421f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if (!flags)
422f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				return outstr;
423f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			sep = '|';
424f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
425f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
426f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	/* flags is still nonzero */
427f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (sep)
428f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		*p++ = sep;
429f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	sprintf(p, "%#x", flags);
430f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return outstr;
431f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
432f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
433f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownvoid
434f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browntprint_open_modes(mode_t flags)
435f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
436f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("%s", sprint_open_modes(flags) + sizeof("flags"));
437f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
438f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
439f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
440f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_open(struct tcb *tcp, int offset)
44134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
44234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
443f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
44434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
44534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* flags */
446f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprint_open_modes(tcp->u_arg[offset + 1]);
447f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (tcp->u_arg[offset + 1] & O_CREAT) {
44834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			/* mode */
449f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(", %#lo", tcp->u_arg[offset + 2]);
45034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
45134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
45234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
45334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
45434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
455f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
456f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_open(struct tcb *tcp)
457f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
458f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_open(tcp, 0);
459f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
460f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
461f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
462f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
463f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_openat(struct tcb *tcp)
464f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
465f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
466f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
467f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_open(tcp, 1);
468f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
469f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
470f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
47134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUXSPARC
47234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat openmodessol[] = {
47334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		"O_RDWR"	},
47434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 1,		"O_RDONLY"	},
47534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 2,		"O_WRONLY"	},
47634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x80,		"O_NONBLOCK"	},
47734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 8,		"O_APPEND"	},
47834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x100,	"O_CREAT"	},
47934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x200,	"O_TRUNC"	},
48034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x400,	"O_EXCL"	},
48134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x800,	"O_NOCTTY"	},
48234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x10,		"O_SYNC"	},
48334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x40,		"O_DSYNC"	},
48434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x8000,	"O_RSYNC"	},
48534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 4,		"O_NDELAY"	},
48634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x1000,	"O_PRIV"	},
48734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
48834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
48934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
49034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
491f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsolaris_open(struct tcb *tcp)
49234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
49334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
49434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
49534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
49634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* flags */
49734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(openmodessol, tcp->u_arg[1] + 1, "O_???");
49834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[1] & 0x100) {
49934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			/* mode */
50034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lo", tcp->u_arg[2]);
50134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
50234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
50334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
50434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
50534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
50634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
50734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
50834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
509f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_creat(struct tcb *tcp)
51034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
51134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
51234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
51334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %#lo", tcp->u_arg[1]);
51434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
51534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
51634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
51734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
51834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat access_flags[] = {
51934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ F_OK,		"F_OK",		},
52034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ R_OK,		"R_OK"		},
52134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ W_OK,		"W_OK"		},
52234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ X_OK,		"X_OK"		},
52334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef EFF_ONLY_OK
52434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ EFF_ONLY_OK,	"EFF_ONLY_OK"	},
52534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
52634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef EX_OK
52734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ EX_OK,	"EX_OK"		},
52834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
52934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
53034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
53134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
532f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
533f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_access(struct tcb *tcp, int offset)
53434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
53534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
536f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
53734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
538f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(access_flags, tcp->u_arg[offset + 1], "?_OK");
53934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
54034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
54134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
54234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
54334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
544f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_access(struct tcb *tcp)
545f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
546f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_access(tcp, 0);
547f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
548f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
549f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
550f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
551f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_faccessat(struct tcb *tcp)
552f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
553f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
554f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
555f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_access(tcp, 1);
556f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
557f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
558f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
559f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
560f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_umask(struct tcb *tcp)
56134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
56234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
56334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lo", tcp->u_arg[0]);
56434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
56534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return RVAL_OCTAL;
56634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
56734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
56834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat whence[] = {
56934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SEEK_SET,	"SEEK_SET"	},
57034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SEEK_CUR,	"SEEK_CUR"	},
57134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SEEK_END,	"SEEK_END"	},
57234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
57334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
57434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
57534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
576f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined (LINUX_MIPSN32)
577f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
578f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_lseek(struct tcb *tcp)
579f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
580f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	long long offset;
581f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int _whence;
582f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
583f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
584f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
585f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
586f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		offset = tcp->ext_arg[1];
587f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		_whence = tcp->u_arg[2];
588f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (_whence == SEEK_SET)
589f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%llu, ", offset);
590f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
591f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%lld, ", offset);
592f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(whence, _whence, "SEEK_???");
593f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
594f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return RVAL_UDECIMAL;
595f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
596f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#else /* !LINUX_MIPSN32 */
59734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
598f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_lseek(struct tcb *tcp)
59934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
60034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	off_t offset;
60134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int _whence;
60234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
60334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
604f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
605f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
60634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		offset = tcp->u_arg[1];
60734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		_whence = tcp->u_arg[2];
60834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (_whence == SEEK_SET)
60934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%lu, ", offset);
61034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
61134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%ld, ", offset);
61234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(whence, _whence, "SEEK_???");
61334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
61434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return RVAL_UDECIMAL;
61534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
616f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* LINUX_MIPSN32 */
61734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
61834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
61934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
62034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
621f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_llseek(struct tcb *tcp)
622f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
623f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
624f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
625f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		/*
626f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		 * This one call takes explicitly two 32-bit arguments hi, lo,
627f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		 * rather than one 64-bit argument for which LONG_LONG works
628f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		 * appropriate for the native byte order.
629f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		 */
630f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (tcp->u_arg[4] == SEEK_SET)
631f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(", %llu, ",
632f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				((long long int) tcp->u_arg[1]) << 32 |
633f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(unsigned long long) (unsigned) tcp->u_arg[2]);
634f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
635f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(", %lld, ",
636f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				((long long int) tcp->u_arg[1]) << 32 |
637f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(unsigned long long) (unsigned) tcp->u_arg[2]);
638f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
639f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else {
640f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		long long int off;
641f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (syserror(tcp) || umove(tcp, tcp->u_arg[3], &off) < 0)
642f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx, ", tcp->u_arg[3]);
643f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
644f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("[%llu], ", off);
645f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(whence, tcp->u_arg[4], "SEEK_???");
646f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
647f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
64834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
64934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
65034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
651f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_readahead(struct tcb *tcp)
65234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
653f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
654f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int argn;
655f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
656f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
657f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		argn = printllval(tcp, "%lld", 1);
658f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %ld", tcp->u_arg[argn]);
659f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
660f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
66134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
66234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
66334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
66434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
66534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
666f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_lseek64(struct tcb *tcp)
66734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
66834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
669f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int argn;
670f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
671f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
67234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[3] == SEEK_SET)
673f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			argn = printllval(tcp, "%llu, ", 1);
67434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
675f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			argn = printllval(tcp, "%lld, ", 1);
676f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(whence, tcp->u_arg[argn], "SEEK_???");
67734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
67834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return RVAL_LUDECIMAL;
67934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
68034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
68134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
68234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
68334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
684f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_truncate(struct tcb *tcp)
68534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
68634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
68734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
68834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu", tcp->u_arg[1]);
68934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
69034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
69134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
69234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
69334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
69434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
69534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
696f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_truncate64(struct tcb *tcp)
69734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
69834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
69934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
700f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printllval(tcp, ", %llu", 1);
70134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
70234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
70334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
70434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
70534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
70634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
70734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
708f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_ftruncate(struct tcb *tcp)
70934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
71034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
711f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
712f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %lu", tcp->u_arg[1]);
71334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
71434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
71534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
71634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
71734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
71834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
71934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
720f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_ftruncate64(struct tcb *tcp)
72134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
72234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
723f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
724f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
725f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printllval(tcp, "%llu", 1);
72634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
72734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
72834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
72934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
73034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
73134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/* several stats */
73234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
73334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat modetypes[] = {
73434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFREG,	"S_IFREG"	},
73534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFSOCK,	"S_IFSOCK"	},
73634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFIFO,	"S_IFIFO"	},
73734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFLNK,	"S_IFLNK"	},
73834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFDIR,	"S_IFDIR"	},
73934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFBLK,	"S_IFBLK"	},
74034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ S_IFCHR,	"S_IFCHR"	},
74134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
74234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
74334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
74434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const char *
745f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsprintmode(int mode)
74634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
74734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	static char buf[64];
74834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	const char *s;
74934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
75034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if ((mode & S_IFMT) == 0)
75134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		s = "";
75234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else if ((s = xlookup(modetypes, mode & S_IFMT)) == NULL) {
75334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		sprintf(buf, "%#o", mode);
75434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return buf;
75534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
75634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	sprintf(buf, "%s%s%s%s", s,
75734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(mode & S_ISUID) ? "|S_ISUID" : "",
75834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(mode & S_ISGID) ? "|S_ISGID" : "",
75934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(mode & S_ISVTX) ? "|S_ISVTX" : "");
76034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	mode &= ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX);
76134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (mode)
76234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		sprintf(buf + strlen(buf), "|%#o", mode);
76334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	s = (*buf == '|') ? buf + 1 : buf;
76434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return *s ? s : "0";
76534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
76634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
76734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic char *
768f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsprinttime(time_t t)
76934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
77034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct tm *tmp;
77134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	static char buf[32];
77234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
77334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (t == 0) {
774f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		strcpy(buf, "0");
77534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return buf;
77634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
777f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if ((tmp = localtime(&t)))
778f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		snprintf(buf, sizeof buf, "%02d/%02d/%02d-%02d:%02d:%02d",
779f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday,
780f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
781f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
782f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		snprintf(buf, sizeof buf, "%lu", (unsigned long) t);
783f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
78434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return buf;
78534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
78634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
78734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUXSPARC
78834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projecttypedef struct {
789f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int     tv_sec;
790f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int     tv_nsec;
79134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project} timestruct_t;
79234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
79334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct solstat {
794f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_dev;
795f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_pad1[3];     /* network id */
796f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_ino;
797f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_mode;
798f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_nlink;
799f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_uid;
800f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_gid;
801f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned        st_rdev;
802f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_pad2[2];
803f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_size;
804f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_pad3;        /* st_size, off_t expansion */
805f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	timestruct_t    st_atime;
806f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	timestruct_t    st_mtime;
807f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	timestruct_t    st_ctime;
808f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_blksize;
809f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_blocks;
810f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	char            st_fstype[16];
811f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int             st_pad4[8];     /* expansion area */
81234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
81334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
81434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
815f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstatsol(struct tcb *tcp, long addr)
81634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
81734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct solstat statbuf;
81834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
81934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
82034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
82134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
82234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
82334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp)) {
82434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, ",
82534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) ((statbuf.st_dev >> 18) & 0x3fff),
82634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) (statbuf.st_dev & 0x3ffff),
82734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_ino,
82834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			sprintmode(statbuf.st_mode));
82934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
83034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_nlink,
83134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_uid,
83234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_gid);
83334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_blksize=%lu, ", (unsigned long) statbuf.st_blksize);
83434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks);
83534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
83634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
83734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
83834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	switch (statbuf.st_mode & S_IFMT) {
83934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case S_IFCHR: case S_IFBLK:
84034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_rdev=makedev(%lu, %lu), ",
84134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) ((statbuf.st_rdev >> 18) & 0x3fff),
84234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) (statbuf.st_rdev & 0x3ffff));
84334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
84434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	default:
84534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_size=%u, ", statbuf.st_size);
84634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
84734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
84834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp)) {
849f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime.tv_sec));
850f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime.tv_sec));
851f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_ctime=%s}", sprinttime(statbuf.st_ctime.tv_sec));
85234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
85334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
85434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("...}");
85534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
85634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
85734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined (SPARC64)
85834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
859f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstat_sparc64(struct tcb *tcp, long addr)
86034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
86134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct stat_sparc64 statbuf;
86234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
86334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
86434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
86534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
86634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
86734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
86834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp)) {
86934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, ",
87034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) major(statbuf.st_dev),
87134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) minor(statbuf.st_dev),
87234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_ino,
87334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			sprintmode(statbuf.st_mode));
87434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
87534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_nlink,
87634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_uid,
87734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_gid);
87834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_blksize=%lu, ",
87934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_blksize);
88034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_blocks=%lu, ",
88134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_blocks);
88234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
88334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
88434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
88534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	switch (statbuf.st_mode & S_IFMT) {
88634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case S_IFCHR: case S_IFBLK:
88734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_rdev=makedev(%lu, %lu), ",
88834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) major(statbuf.st_rdev),
88934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) minor(statbuf.st_rdev));
89034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
89134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	default:
89234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_size=%lu, ", statbuf.st_size);
89334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
89434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
89534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp)) {
89634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime));
89734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime));
89834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime));
89934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
90034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
90134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
90234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("...}");
90334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
90434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SPARC64 */
90534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUXSPARC */
90634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
907f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined LINUX && defined POWERPC64
908f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstruct stat_powerpc32 {
909f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_dev;
910f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_ino;
911f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_mode;
912f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned short	st_nlink;
913f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_uid;
914f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_gid;
915f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_rdev;
916f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_size;
917f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_blksize;
918f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_blocks;
919f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_atime;
920f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_atime_nsec;
921f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_mtime;
922f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_mtime_nsec;
923f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_ctime;
924f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_ctime_nsec;
925f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	__unused4;
926f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	__unused5;
927f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
928f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
929f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic void
930f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstat_powerpc32(struct tcb *tcp, long addr)
931f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
932f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	struct stat_powerpc32 statbuf;
933f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
934f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (umove(tcp, addr, &statbuf) < 0) {
935f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{...}");
936f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
937f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
938f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
939f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (!abbrev(tcp)) {
940f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{st_dev=makedev(%u, %u), st_ino=%u, st_mode=%s, ",
941f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			major(statbuf.st_dev), minor(statbuf.st_dev),
942f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			statbuf.st_ino,
943f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			sprintmode(statbuf.st_mode));
944f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_nlink=%u, st_uid=%u, st_gid=%u, ",
945f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			statbuf.st_nlink, statbuf.st_uid, statbuf.st_gid);
946f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_blksize=%u, ", statbuf.st_blksize);
947f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_blocks=%u, ", statbuf.st_blocks);
948f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
949f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
950f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
951f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	switch (statbuf.st_mode & S_IFMT) {
952f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	case S_IFCHR: case S_IFBLK:
953f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_rdev=makedev(%lu, %lu), ",
954f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) major(statbuf.st_rdev),
955f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) minor(statbuf.st_rdev));
956f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		break;
957f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	default:
958f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_size=%u, ", statbuf.st_size);
959f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		break;
960f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
961f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (!abbrev(tcp)) {
962f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime));
963f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime));
964f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime));
965f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("}");
966f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
967f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
968f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("...}");
969f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
970f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* LINUX && POWERPC64 */
971f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
97234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat fileflags[] = {
97334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD
97434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ UF_NODUMP,	"UF_NODUMP"	},
97534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ UF_IMMUTABLE,	"UF_IMMUTABLE"	},
97634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ UF_APPEND,	"UF_APPEND"	},
97734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ UF_OPAQUE,	"UF_OPAQUE"	},
97834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ UF_NOUNLINK,	"UF_NOUNLINK"	},
97934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SF_ARCHIVED,	"SF_ARCHIVED"	},
98034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SF_IMMUTABLE,	"SF_IMMUTABLE"	},
98134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SF_APPEND,	"SF_APPEND"	},
98234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SF_NOUNLINK,	"SF_NOUNLINK"	},
98334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#elif UNIXWARE >= 2
98434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef 	_S_ISMLD
98534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ _S_ISMLD, 	"_S_ISMLD"	},
98634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
98734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef 	_S_ISMOUNTED
98834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ _S_ISMOUNTED, "_S_ISMOUNTED"	},
98934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
99034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
99134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
99234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
99334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
99434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD
99534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
996f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_chflags(struct tcb *tcp)
99734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
99834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
99934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
100034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
100134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(fileflags, tcp->u_arg[1], "UF_???");
100234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
100334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
100434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
100534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
100634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1007f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchflags(struct tcb *tcp)
100834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
100934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
101034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld, ", tcp->u_arg[0]);
101134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(fileflags, tcp->u_arg[1], "UF_???");
101234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
101334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
101434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
101534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
101634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
101734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
101834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1019f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownrealprintstat(struct tcb *tcp, struct stat *statbuf)
1020f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
1021f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (!abbrev(tcp)) {
1022f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, ",
1023f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) major(statbuf->st_dev),
1024f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) minor(statbuf->st_dev),
1025f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) statbuf->st_ino,
1026f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			sprintmode(statbuf->st_mode));
1027f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
1028f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) statbuf->st_nlink,
1029f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) statbuf->st_uid,
1030f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) statbuf->st_gid);
103134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
1032f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_blksize=%lu, ", (unsigned long) statbuf->st_blksize);
1033f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
103434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
1035f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_blocks=%lu, ", (unsigned long) statbuf->st_blocks);
1036f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1037f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1038f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
1039f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{st_mode=%s, ", sprintmode(statbuf->st_mode));
1040f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	switch (statbuf->st_mode & S_IFMT) {
1041f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	case S_IFCHR: case S_IFBLK:
104234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STRUCT_STAT_ST_RDEV
1043f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_rdev=makedev(%lu, %lu), ",
1044f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) major(statbuf->st_rdev),
1045f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) minor(statbuf->st_rdev));
104634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else /* !HAVE_STRUCT_STAT_ST_RDEV */
1047f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_size=makedev(%lu, %lu), ",
1048f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) major(statbuf->st_size),
1049f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(unsigned long) minor(statbuf->st_size));
105034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !HAVE_STRUCT_STAT_ST_RDEV */
1051f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		break;
1052f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	default:
1053f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_size=%lu, ", (unsigned long) statbuf->st_size);
1054f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		break;
1055f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1056f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (!abbrev(tcp)) {
1057f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_atime=%s, ", sprinttime(statbuf->st_atime));
1058f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_mtime=%s, ", sprinttime(statbuf->st_mtime));
1059f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_ctime=%s", sprinttime(statbuf->st_ctime));
106034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_FLAGS
106134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_flags=");
106234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(fileflags, statbuf->st_flags, "UF_???");
106334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
106434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_ACLCNT
106534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_aclcnt=%d", statbuf->st_aclcnt);
106634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
106734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_LEVEL
106834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_level=%ld", statbuf->st_level);
106934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
107034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_FSTYPE
107134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_fstype=%.*s",
107234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(int) sizeof statbuf->st_fstype, statbuf->st_fstype);
107334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
107434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_GEN
107534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_gen=%u", statbuf->st_gen);
107634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
107734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
1078f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1079f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
1080f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("...}");
108134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
108234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
108334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
108434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1085f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstat(struct tcb *tcp, long addr)
108634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
108734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct stat statbuf;
108834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1089f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (!addr) {
1090f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("NULL");
1091f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1092f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1093f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (syserror(tcp) || !verbose(tcp)) {
1094f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("%#lx", addr);
1095f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1096f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1097f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
109834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUXSPARC
1099f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (current_personality == 1) {
1100f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstatsol(tcp, addr);
1101f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1102f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
110334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SPARC64
110434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else if (current_personality == 2) {
110534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat_sparc64(tcp, addr);
110634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
110734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
110834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
110934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUXSPARC */
111034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1111f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined LINUX && defined POWERPC64
1112f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (current_personality == 1) {
1113f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstat_powerpc32(tcp, addr);
111434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
111534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
1116f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1117f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
111834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
111934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
112034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
112134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
112234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
112334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	realprintstat(tcp, &statbuf);
112434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
112534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif	/* !HAVE_LONG_LONG_OFF_T */
112634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1127f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if !defined HAVE_STAT64 && defined LINUX && defined X86_64
1128f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown/*
1129f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * Linux x86_64 has unified `struct stat' but its i386 biarch needs
1130f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * `struct stat64'.  Its <asm-i386/stat.h> definition expects 32-bit `long'.
1131f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * <linux/include/asm-x86_64/ia32.h> is not in the public includes set.
1132f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * __GNUC__ is needed for the required __attribute__ below.
1133f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown */
1134f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstruct stat64 {
1135f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned long long	st_dev;
1136f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned char	__pad0[4];
1137f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	__st_ino;
1138f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_mode;
1139f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_nlink;
1140f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_uid;
1141f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_gid;
1142f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned long long	st_rdev;
1143f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned char	__pad3[4];
1144f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	long long	st_size;
1145f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_blksize;
1146f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned long long	st_blocks;
1147f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_atime;
1148f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_atime_nsec;
1149f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_mtime;
1150f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_mtime_nsec;
1151f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_ctime;
1152f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned int	st_ctime_nsec;
1153f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	unsigned long long	st_ino;
1154f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown} __attribute__((packed));
1155f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# define HAVE_STAT64	1
1156f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# define STAT64_SIZE	96
1157f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1158f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
115934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STAT64
116034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1161f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstat64(struct tcb *tcp, long addr)
116234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
116334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct stat64 statbuf;
116434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1165f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STAT64_SIZE
1166f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	(void) sizeof(char[sizeof statbuf == STAT64_SIZE ? 1 : -1]);
116734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
116834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
116934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!addr) {
117034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("NULL");
117134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
117234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
117334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
117434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", addr);
117534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
117634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
1177f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1178f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUXSPARC
1179f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (current_personality == 1) {
1180f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstatsol(tcp, addr);
1181f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1182f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1183f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# ifdef SPARC64
1184f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else if (current_personality == 2) {
1185f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstat_sparc64(tcp, addr);
1186f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1187f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1188f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# endif
1189f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* LINUXSPARC */
1190f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1191f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined LINUX && defined X86_64
1192f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (current_personality == 0) {
1193f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstat(tcp, addr);
1194f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1195f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1196f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1197f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
119834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
119934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
120034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
120134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
120234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
120334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp)) {
120434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_LONG_LONG
120534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, ",
120634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
120734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, ",
120834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
120934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) major(statbuf.st_dev),
121034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) minor(statbuf.st_dev),
121134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_LONG_LONG
121234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long long) statbuf.st_ino,
121334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
121434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_ino,
121534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
121634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			sprintmode(statbuf.st_mode));
121734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
121834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_nlink,
121934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_uid,
122034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_gid);
122134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
122234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_blksize=%lu, ",
122334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) statbuf.st_blksize);
122434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */
122534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
122634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks);
122734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_STRUCT_STAT_ST_BLOCKS */
122834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
122934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
123034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
123134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	switch (statbuf.st_mode & S_IFMT) {
123234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case S_IFCHR: case S_IFBLK:
123334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STRUCT_STAT_ST_RDEV
123434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_rdev=makedev(%lu, %lu), ",
123534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) major(statbuf.st_rdev),
123634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) minor(statbuf.st_rdev));
123734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else /* !HAVE_STRUCT_STAT_ST_RDEV */
123834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_size=makedev(%lu, %lu), ",
123934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) major(statbuf.st_size),
124034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(unsigned long) minor(statbuf.st_size));
124134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !HAVE_STRUCT_STAT_ST_RDEV */
124234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
124334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	default:
1244f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef HAVE_LONG_LONG
1245f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_size=%llu, ", (unsigned long long) statbuf.st_size);
1246f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#else
1247f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("st_size=%lu, ", (unsigned long) statbuf.st_size);
1248f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1249f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		break;
125034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
125134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp)) {
125234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime));
125334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime));
125434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime));
125534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_FLAGS
125634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_flags=");
125734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(fileflags, statbuf.st_flags, "UF_???");
125834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
125934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_ACLCNT
126034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_aclcnt=%d", statbuf.st_aclcnt);
126134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
126234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_LEVEL
126334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_level=%ld", statbuf.st_level);
126434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
126534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_FSTYPE
126634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_fstype=%.*s",
126734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(int) sizeof statbuf.st_fstype, statbuf.st_fstype);
126834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
126934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if HAVE_STRUCT_STAT_ST_GEN
127034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", st_gen=%u", statbuf.st_gen);
127134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
127234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
127334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
127434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
127534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("...}");
127634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
127734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_STAT64 */
127834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
127934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(HAVE_STRUCT___OLD_KERNEL_STAT)
128034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1281f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownconvertoldstat(const struct __old_kernel_stat *oldbuf, struct stat *newbuf)
1282f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
1283f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_dev = oldbuf->st_dev;
1284f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_ino = oldbuf->st_ino;
1285f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_mode = oldbuf->st_mode;
1286f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_nlink = oldbuf->st_nlink;
1287f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_uid = oldbuf->st_uid;
1288f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_gid = oldbuf->st_gid;
1289f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_rdev = oldbuf->st_rdev;
1290f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_size = oldbuf->st_size;
1291f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_atime = oldbuf->st_atime;
1292f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_mtime = oldbuf->st_mtime;
1293f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_ctime = oldbuf->st_ctime;
1294f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_blksize = 0; /* not supported in old_stat */
1295f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	newbuf->st_blocks = 0; /* not supported in old_stat */
129634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
129734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
129834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
129934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1300f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintoldstat(struct tcb *tcp, long addr)
130134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
130234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct __old_kernel_stat statbuf;
130334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct stat newstatbuf;
130434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
130534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!addr) {
130634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("NULL");
130734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
130834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
130934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
131034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", addr);
131134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
131234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
1313f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1314f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUXSPARC
1315f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (current_personality == 1) {
1316f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstatsol(tcp, addr);
1317f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
1318f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1319f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* LINUXSPARC */
1320f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
132134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
132234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
132334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
132434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
132534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
132634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	convertoldstat(&statbuf, &newstatbuf);
132734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	realprintstat(tcp, &newstatbuf);
132834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
132934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX && !IA64 && !HPPA && !X86_64 && !S390 && !S390X */
133034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
133134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
133234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1333f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_stat(struct tcb *tcp)
133434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
133534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
133634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
133734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
133834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
133934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat(tcp, tcp->u_arg[1]);
134034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
134134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
134234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
134334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
134434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
134534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1346f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_stat64(struct tcb *tcp)
134734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
134834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STAT64
134934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
135034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
135134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
135234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
135334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat64(tcp, tcp->u_arg[1]);
135434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
135534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
135634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
135734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return printargs(tcp);
135834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
135934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
136034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1361f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
1362f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat fstatatflags[] = {
1363f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifndef AT_SYMLINK_NOFOLLOW
1364f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# define AT_SYMLINK_NOFOLLOW     0x100
1365f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1366f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ AT_SYMLINK_NOFOLLOW,	"AT_SYMLINK_NOFOLLOW"	},
1367f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0,			NULL			},
1368f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
1369f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#define utimensatflags fstatatflags
1370f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1371f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
1372f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_newfstatat(struct tcb *tcp)
1373f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
1374f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
1375f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
1376f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[1]);
1377f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1378f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
1379f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef POWERPC64
1380f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (current_personality == 0)
1381f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printstat(tcp, tcp->u_arg[2]);
1382f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
1383f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printstat64(tcp, tcp->u_arg[2]);
1384f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#elif defined HAVE_STAT64
1385f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstat64(tcp, tcp->u_arg[2]);
1386f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#else
1387f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstat(tcp, tcp->u_arg[2]);
1388f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1389f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1390f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(fstatatflags, tcp->u_arg[3], "AT_???");
1391f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1392f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
1393f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
1394f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1395f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
139634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(HAVE_STRUCT___OLD_KERNEL_STAT)
139734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1398f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_oldstat(struct tcb *tcp)
139934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
140034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
140134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
140234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
140334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
140434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printoldstat(tcp, tcp->u_arg[1]);
140534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
140634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
140734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
140834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX && HAVE_STRUCT___OLD_KERNEL_STAT */
140934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
141034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
141134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1412f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fstat(struct tcb *tcp)
141334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
1414f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
1415f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
1416f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1417f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
141834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat(tcp, tcp->u_arg[1]);
141934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
142034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
142134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
142234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
142334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
142434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1425f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fstat64(struct tcb *tcp)
142634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
142734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STAT64
1428f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
1429f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
1430f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1431f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
143234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat64(tcp, tcp->u_arg[1]);
143334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
143434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
143534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
143634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return printargs(tcp);
143734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
143834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
143934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
144034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(HAVE_STRUCT___OLD_KERNEL_STAT)
144134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1442f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_oldfstat(struct tcb *tcp)
144334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
1444f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
1445f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
1446f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1447f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
144834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printoldstat(tcp, tcp->u_arg[1]);
144934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
145034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
145134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
145234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX && HAVE_STRUCT___OLD_KERNEL_STAT */
145334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
145434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_LONG_LONG_OFF_T
145534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1456f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_lstat(struct tcb *tcp)
145734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
145834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
145934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
146034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
146134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
146234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat(tcp, tcp->u_arg[1]);
146334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
146434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
146534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
146634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
146734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
146834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1469f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_lstat64(struct tcb *tcp)
147034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
147134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_STAT64
147234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
147334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
147434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
147534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
147634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat64(tcp, tcp->u_arg[1]);
147734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
147834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
147934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
148034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return printargs(tcp);
148134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
148234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
148334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
148434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(HAVE_STRUCT___OLD_KERNEL_STAT)
148534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1486f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_oldlstat(struct tcb *tcp)
148734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
148834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
148934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
149034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
149134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
149234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printoldstat(tcp, tcp->u_arg[1]);
149334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
149434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
149534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
149634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX && HAVE_STRUCT___OLD_KERNEL_STAT */
149734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
149834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
149934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(SVR4) || defined(LINUXSPARC)
150034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
150134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1502f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_xstat(struct tcb *tcp)
150334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
150434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
150534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld, ", tcp->u_arg[0]);
150634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
150734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
150834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
150934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef _STAT64_VER
151034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[0] == _STAT64_VER)
151134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printstat64 (tcp, tcp->u_arg[2]);
151234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
151334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
151434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat(tcp, tcp->u_arg[2]);
151534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
151634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
151734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
151834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
151934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1520f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fxstat(struct tcb *tcp)
152134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
152234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp))
152334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld, %ld, ", tcp->u_arg[0], tcp->u_arg[1]);
152434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else {
152534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef _STAT64_VER
152634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[0] == _STAT64_VER)
152734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printstat64 (tcp, tcp->u_arg[2]);
152834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
152934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
153034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat(tcp, tcp->u_arg[2]);
153134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
153234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
153334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
153434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
153534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1536f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_lxstat(struct tcb *tcp)
153734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
153834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
153934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld, ", tcp->u_arg[0]);
154034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
154134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
154234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
154334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef _STAT64_VER
154434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[0] == _STAT64_VER)
154534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printstat64 (tcp, tcp->u_arg[2]);
154634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
154734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
154834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstat(tcp, tcp->u_arg[2]);
154934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
155034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
155134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
155234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
155334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1554f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_xmknod(struct tcb *tcp)
155534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
155634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int mode = tcp->u_arg[2];
155734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
155834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
155934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld, ", tcp->u_arg[0]);
156034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
156134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %s", sprintmode(mode));
156234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		switch (mode & S_IFMT) {
156334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		case S_IFCHR: case S_IFBLK:
156434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUXSPARC
156534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", makedev(%lu, %lu)",
156634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(unsigned long) ((tcp->u_arg[3] >> 18) & 0x3fff),
156734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(unsigned long) (tcp->u_arg[3] & 0x3ffff));
156834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
156934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", makedev(%lu, %lu)",
157034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(unsigned long) major(tcp->u_arg[3]),
157134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(unsigned long) minor(tcp->u_arg[3]));
157234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
157334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
157434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		default:
157534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
157634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
157734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
157834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
157934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
158034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
158134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_SYS_ACL_H
158234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
158334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/acl.h>
158434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
158534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat aclcmds[] = {
158634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SETACL
158734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SETACL,	"SETACL"	},
158834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
158934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef GETACL
159034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ GETACL,	"GETACL"	},
159134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
159234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef GETACLCNT
159334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ GETACLCNT,	"GETACLCNT"	},
159434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
159534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ACL_GET
159634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ ACL_GET,	"ACL_GET"	},
159734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
159834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ACL_SET
159934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ ACL_SET,	"ACL_SET"	},
160034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
160134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ACL_CNT
160234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ ACL_CNT,	"ACL_CNT"	},
160334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
160434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
160534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
160634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
160734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1608f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_acl(struct tcb *tcp)
160934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
161034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
161134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
161234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
161334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(aclcmds, tcp->u_arg[1], "???ACL???");
161434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %ld", tcp->u_arg[2]);
161534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/*
161634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 * FIXME - dump out the list of aclent_t's pointed to
161734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 * by "tcp->u_arg[3]" if it's not NULL.
161834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 */
161934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[3])
162034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lx", tcp->u_arg[3]);
162134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
162234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", NULL");
162334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
162434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
162534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
162634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
162734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
162834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1629f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_facl(struct tcb *tcp)
163034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
163134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
163234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld, ", tcp->u_arg[0]);
163334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(aclcmds, tcp->u_arg[1], "???ACL???");
163434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %ld", tcp->u_arg[2]);
163534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/*
163634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 * FIXME - dump out the list of aclent_t's pointed to
163734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 * by "tcp->u_arg[3]" if it's not NULL.
163834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 */
163934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[3])
164034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lx", tcp->u_arg[3]);
164134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
164234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", NULL");
164334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
164434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
164534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
164634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
164734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
164834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat aclipc[] = {
164934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef IPC_SHM
165034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ IPC_SHM,	"IPC_SHM"	},
165134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
165234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef IPC_SEM
165334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ IPC_SEM,	"IPC_SEM"	},
165434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
165534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef IPC_MSG
165634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ IPC_MSG,	"IPC_MSG"	},
165734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
165834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
165934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
166034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
166134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
166234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1663f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_aclipc(struct tcb *tcp)
166434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
166534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
166634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(aclipc, tcp->u_arg[0], "???IPC???");
166734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %#lx, ", tcp->u_arg[1]);
166834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(aclcmds, tcp->u_arg[2], "???ACL???");
166934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %ld", tcp->u_arg[3]);
167034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/*
167134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 * FIXME - dump out the list of aclent_t's pointed to
167234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 * by "tcp->u_arg[4]" if it's not NULL.
167334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		 */
167434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[4])
167534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lx", tcp->u_arg[4]);
167634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
167734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", NULL");
167834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
167934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
168034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
168134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
168234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_SYS_ACL_H */
168334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
168434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SVR4 || LINUXSPARC */
168534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
168634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
168734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
168834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat fsmagic[] = {
168934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x73757245,	"CODA_SUPER_MAGIC"	},
169034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x012ff7b7,	"COH_SUPER_MAGIC"	},
169134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x1373,	"DEVFS_SUPER_MAGIC"	},
169234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x1cd1,	"DEVPTS_SUPER_MAGIC"	},
169334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x414A53,	"EFS_SUPER_MAGIC"	},
169434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0xef51,	"EXT2_OLD_SUPER_MAGIC"	},
169534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0xef53,	"EXT2_SUPER_MAGIC"	},
169634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x137d,	"EXT_SUPER_MAGIC"	},
169734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0xf995e849,	"HPFS_SUPER_MAGIC"	},
169834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x9660,	"ISOFS_SUPER_MAGIC"	},
169934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x137f,	"MINIX_SUPER_MAGIC"	},
170034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x138f,	"MINIX_SUPER_MAGIC2"	},
170134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x2468,	"MINIX2_SUPER_MAGIC"	},
170234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x2478,	"MINIX2_SUPER_MAGIC2"	},
170334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x4d44,	"MSDOS_SUPER_MAGIC"	},
170434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x564c,	"NCP_SUPER_MAGIC"	},
170534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x6969,	"NFS_SUPER_MAGIC"	},
170634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x9fa0,	"PROC_SUPER_MAGIC"	},
170734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x002f,	"QNX4_SUPER_MAGIC"	},
170834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x52654973,	"REISERFS_SUPER_MAGIC"	},
170934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x02011994,	"SHMFS_SUPER_MAGIC"	},
171034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x517b,	"SMB_SUPER_MAGIC"	},
171134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x012ff7b6,	"SYSV2_SUPER_MAGIC"	},
171234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x012ff7b5,	"SYSV4_SUPER_MAGIC"	},
171334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x00011954,	"UFS_MAGIC"		},
171434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x54190100,	"UFS_CIGAM"		},
171534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x012ff7b4,	"XENIX_SUPER_MAGIC"	},
171634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x012fd16d,	"XIAFS_SUPER_MAGIC"	},
171734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0x62656572,	"SYSFS_MAGIC"		},
171834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL			},
171934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
172034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
172134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
172234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
172334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef SVR4
172434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
172534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const char *
1726f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsprintfstype(int magic)
172734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
172834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	static char buf[32];
172934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
173034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	const char *s;
173134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
173234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	s = xlookup(fsmagic, magic);
173334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (s) {
173434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		sprintf(buf, "\"%s\"", s);
173534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return buf;
173634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
173734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
173834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	sprintf(buf, "%#x", magic);
173934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return buf;
174034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
174134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
174234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1743f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstatfs(struct tcb *tcp, long addr)
174434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
174534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct statfs statbuf;
174634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
174734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
174834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", addr);
174934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
175034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
175134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
175234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
175334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
175434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
175534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ALPHA
175634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
175734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("{f_type=%s, f_fbsize=%u, f_blocks=%u, f_bfree=%u, ",
175834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		sprintfstype(statbuf.f_type),
175934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		statbuf.f_bsize, statbuf.f_blocks, statbuf.f_bfree);
176034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("f_bavail=%u, f_files=%u, f_ffree=%u, f_fsid={%d, %d}, f_namelen=%u",
176134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		statbuf.f_bavail,statbuf.f_files, statbuf.f_ffree,
176234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1],
176334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		statbuf.f_namelen);
176434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else /* !ALPHA */
176534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("{f_type=%s, f_bsize=%lu, f_blocks=%lu, f_bfree=%lu, ",
176634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		sprintfstype(statbuf.f_type),
176734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long)statbuf.f_bsize,
176834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long)statbuf.f_blocks,
176934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long)statbuf.f_bfree);
177034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("f_bavail=%lu, f_files=%lu, f_ffree=%lu, f_fsid={%d, %d}",
177134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long)statbuf.f_bavail,
177234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long)statbuf.f_files,
177334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long)statbuf.f_ffree,
177434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1]);
177534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
177634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", f_namelen=%lu", (unsigned long)statbuf.f_namelen);
177734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
177834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !ALPHA */
177934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef _STATFS_F_FRSIZE
178034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", f_frsize=%lu", (unsigned long)statbuf.f_frsize);
178134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
178234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("}");
178334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
178434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
178534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1786f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_statfs(struct tcb *tcp)
178734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
178834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
178934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
179034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
179134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
179234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstatfs(tcp, tcp->u_arg[1]);
179334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
179434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
179534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
179634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
179734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1798f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fstatfs(struct tcb *tcp)
179934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
180034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
1801f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
1802f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
180334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
180434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstatfs(tcp, tcp->u_arg[1]);
180534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
180634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
180734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
180834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1809f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined LINUX && defined HAVE_STATFS64
181034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
1811f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintstatfs64(struct tcb *tcp, long addr)
181234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
181334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct statfs64 statbuf;
181434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
181534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
181634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", addr);
181734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
181834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
181934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &statbuf) < 0) {
182034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
182134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
182234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
182334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("{f_type=%s, f_bsize=%llu, f_blocks=%llu, f_bfree=%llu, ",
182434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		sprintfstype(statbuf.f_type),
182534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long long)statbuf.f_bsize,
182634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long long)statbuf.f_blocks,
182734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long long)statbuf.f_bfree);
182834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("f_bavail=%llu, f_files=%llu, f_ffree=%llu, f_fsid={%d, %d}",
182934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long long)statbuf.f_bavail,
183034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long long)statbuf.f_files,
183134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		(unsigned long long)statbuf.f_ffree,
183234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1]);
183334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", f_namelen=%lu", (unsigned long)statbuf.f_namelen);
183434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef _STATFS_F_FRSIZE
183534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", f_frsize=%llu", (unsigned long long)statbuf.f_frsize);
183634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
183734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("}");
183834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
183934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
184034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1841f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_statfs64(struct tcb *tcp)
184234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
184334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
184434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
184534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu, ", tcp->u_arg[1]);
184634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
184734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[1] == sizeof (struct statfs64))
184834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printstatfs64(tcp, tcp->u_arg[2]);
184934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
185034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{???}");
185134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
185234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
185334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
185434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
185534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1856f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fstatfs64(struct tcb *tcp)
185734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
185834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
1859f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
1860f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %lu, ", tcp->u_arg[1]);
186134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
186234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[1] == sizeof (struct statfs64))
186334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printstatfs64(tcp, tcp->u_arg[2]);
186434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
186534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{???}");
186634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
186734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
186834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
186934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
187034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
187134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(__alpha)
187234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
187334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1874f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownosf_statfs(struct tcb *tcp)
187534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
187634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
187734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
187834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
187934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
188034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstatfs(tcp, tcp->u_arg[1]);
188134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu", tcp->u_arg[2]);
188234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
188334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
188434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
188534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
188634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1887f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownosf_fstatfs(struct tcb *tcp)
188834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
188934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
189034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%lu, ", tcp->u_arg[0]);
189134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
189234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstatfs(tcp, tcp->u_arg[1]);
189334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu", tcp->u_arg[2]);
189434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
189534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
189634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
189734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX && __alpha */
189834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
189934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !SVR4 */
190034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
190134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SUNOS4
190234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1903f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_ustat(struct tcb *tcp)
190434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
190534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct ustat statbuf;
190634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
190734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
190834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("makedev(%lu, %lu), ",
190934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(long) major(tcp->u_arg[0]),
191034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(long) minor(tcp->u_arg[0]));
191134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
191234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else {
191334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp) || !verbose(tcp))
191434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[1]);
191534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else if (umove(tcp, tcp->u_arg[1], &statbuf) < 0)
191634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{...}");
191734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else {
191834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{f_tfree=%lu, f_tinode=%lu, ",
191934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				statbuf.f_tfree, statbuf.f_tinode);
192034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("f_fname=\"%.*s\", ",
192134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(int) sizeof(statbuf.f_fname),
192234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				statbuf.f_fname);
192334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("f_fpack=\"%.*s\"}",
192434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(int) sizeof(statbuf.f_fpack),
192534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				statbuf.f_fpack);
192634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
192734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
192834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
192934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
193034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SUNOS4 */
193134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
193234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1933f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_pivotroot(struct tcb *tcp)
193434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
193534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
193634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
193734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
193834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
193934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
194034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
194134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
194234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
194334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
194434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/* directory */
194534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1946f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_chdir(struct tcb *tcp)
194734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
194834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
194934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
195034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
195134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
195234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
195334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
1954f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
1955f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_mkdir(struct tcb *tcp, int offset)
195634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
195734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
1958f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
1959f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %#lo", tcp->u_arg[offset + 1]);
196034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
196134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
196234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
196334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
196434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1965f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_mkdir(struct tcb *tcp)
1966f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
1967f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_mkdir(tcp, 0);
1968f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
1969f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1970f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
1971f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
1972f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_mkdirat(struct tcb *tcp)
1973f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
1974f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
1975f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
1976f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_mkdir(tcp, 1);
1977f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
1978f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
1979f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1980f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
1981f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_rmdir(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
198934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1990f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchdir(struct tcb *tcp)
199134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
199234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
1993f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
199434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
199534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
199634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
199734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
199834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
1999f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_chroot(struct tcb *tcp)
200034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
200134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
200234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
200334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
200434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
200534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
200634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2007f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(SUNOS4) || defined(SVR4)
200834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2009f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchroot(struct tcb *tcp)
201034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
201134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2012f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
201334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
201434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
201534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
2016f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* SUNOS4 || SVR4 */
201734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
201834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2019f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_link(struct tcb *tcp)
202034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
202134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
202234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
202334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
202434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
202534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
202634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
202734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
202834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2029f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
203034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2031f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_linkat(struct tcb *tcp)
2032f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2033f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2034f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2035f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[1]);
2036f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2037f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[2]);
2038f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[3]);
2039f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2040f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[4]);
2041f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2042f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
2043f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2044f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2045f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2046f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2047f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_unlink(struct tcb *tcp)
204834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
204934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
205034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
205134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
205234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
205334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
205434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2055f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
2056f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat unlinkatflags[] = {
2057f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifndef AT_REMOVEDIR
2058f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# define AT_REMOVEDIR            0x200
2059f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2060f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ AT_REMOVEDIR,	"AT_REMOVEDIR"	},
2061f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0,		NULL		},
2062f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
2063f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
206434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2065f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_unlinkat(struct tcb *tcp)
2066f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2067f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2068f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2069f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[1]);
2070f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2071f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(unlinkatflags, tcp->u_arg[2], "AT_???");
2072f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2073f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
2074f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2075f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2076f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2077f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2078f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_symlink(struct tcb *tcp)
207934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
208034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
208134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
208234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
208334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
208434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
208534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
208634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
208734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2088f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
208934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2090f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_symlinkat(struct tcb *tcp)
209134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
209234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
209334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
209434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
2095f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[1]);
2096f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[2]);
2097f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2098f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
2099f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2100f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2101f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2102f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
2103f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_readlink(struct tcb *tcp, int offset)
2104f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2105f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2106f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
2107f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
210834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
210934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp))
2110f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx", tcp->u_arg[offset + 1]);
211134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
2112f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printpathn(tcp, tcp->u_arg[offset + 1], tcp->u_rval);
2113f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %lu", tcp->u_arg[offset + 2]);
211434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
211534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
211634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
211734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
211834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2119f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_readlink(struct tcb *tcp)
2120f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2121f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_readlink(tcp, 0);
2122f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2123f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2124f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
2125f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2126f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_readlinkat(struct tcb *tcp)
2127f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2128f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
2129f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2130f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_readlink(tcp, 1);
2131f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2132f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2133f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2134f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2135f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_rename(struct tcb *tcp)
213634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
213734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
213834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
213934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
214034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[1]);
214134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
214234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
214334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
214434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2145f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
214634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2147f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_renameat(struct tcb *tcp)
2148f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2149f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2150f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2151f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[1]);
2152f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2153f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[2]);
2154f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[3]);
2155f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2156f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
2157f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2158f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2159f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2160f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2161f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_chown(struct tcb *tcp)
216234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
216334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
216434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
216534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printuid(", ", tcp->u_arg[1]);
216634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printuid(", ", tcp->u_arg[2]);
216734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
216834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
216934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
217034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2171f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
217234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2173f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchownat(struct tcb *tcp)
217434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
217534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2176f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2177f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[1]);
217834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printuid(", ", tcp->u_arg[2]);
2179f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printuid(", ", tcp->u_arg[3]);
2180f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2181f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(fstatatflags, tcp->u_arg[4], "AT_???");
218234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
218334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
218434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
2185f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
218634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
218734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2188f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchown(struct tcb *tcp)
218934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
219034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2191f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2192f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printuid(", ", tcp->u_arg[1]);
2193f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printuid(", ", tcp->u_arg[2]);
219434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
219534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
219634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
219734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2198f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
2199f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_chmod(struct tcb *tcp, int offset)
2200f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2201f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2202f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
2203f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %#lo", tcp->u_arg[offset + 1]);
2204f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2205f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
2206f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2207f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2208f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2209f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_chmod(struct tcb *tcp)
2210f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2211f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_chmod(tcp, 0);
2212f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2213f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2214f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
2215f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2216f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchmodat(struct tcb *tcp)
2217f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2218f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
2219f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2220f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_chmod(tcp, 1);
2221f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2222f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2223f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
222434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2225f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fchmod(struct tcb *tcp)
222634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
222734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2228f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2229f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %#lo", tcp->u_arg[1]);
223034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
223134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
223234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
223334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
223434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ALPHA
223534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2236f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_osf_utimes(struct tcb *tcp)
223734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2238f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2239f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[0]);
2240f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2241f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printtv_bitness(tcp, tcp->u_arg[1], BITNESS_32,  0);
2242f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2243f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
224434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
224534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
224634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2247f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
2248f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_utimes(struct tcb *tcp, int offset, int special)
2249f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2250f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2251f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
2252f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2253f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (tcp->u_arg[offset + 1] == 0)
2254f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("NULL");
2255f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else {
2256f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("{");
2257f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printtv_bitness(tcp, tcp->u_arg[offset + 1],
2258f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					BITNESS_CURRENT, special);
2259f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(", ");
2260f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printtv_bitness(tcp, tcp->u_arg[offset + 1]
2261f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					+ sizeof (struct timeval),
2262f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					BITNESS_CURRENT, special);
2263f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("}");
2264f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
2265f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2266f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
2267f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2268f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
226934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2270f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_utimes(struct tcb *tcp)
2271f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2272f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_utimes(tcp, 0, 0);
2273f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2274f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2275f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
2276f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2277f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_futimesat(struct tcb *tcp)
2278f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2279f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
2280f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2281f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_utimes(tcp, 1, 0);
2282f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2283f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2284f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2285f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_utimensat(struct tcb *tcp)
228634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
228734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2288f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2289f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		decode_utimes(tcp, 1, 1);
229034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
2291f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(utimensatflags, tcp->u_arg[3], "AT_???");
229234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
229334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
229434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
2295f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
229634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
229734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2298f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_utime(struct tcb *tcp)
229934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2300f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	union {
2301f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		long utl[2];
2302f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int uti[2];
2303f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} u;
230434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
230534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
230634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
230734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
230834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!tcp->u_arg[1])
230934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("NULL");
231034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else if (!verbose(tcp))
231134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[1]);
2312f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else if (umoven(tcp, tcp->u_arg[1],
2313f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				2 * personality_wordsize[current_personality],
2314f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(char *) &u) < 0)
231534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("[?, ?]");
2316f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else if (personality_wordsize[current_personality]
2317f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			 == sizeof u.utl[0]) {
2318f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("[%s,", sprinttime(u.utl[0]));
2319f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(" %s]", sprinttime(u.utl[1]));
2320f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
2321f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else if (personality_wordsize[current_personality]
2322f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			 == sizeof u.uti[0]) {
2323f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("[%s,", sprinttime(u.uti[0]));
2324f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(" %s]", sprinttime(u.uti[1]));
232534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
2326f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
2327f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			abort();
232834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
232934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
233034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
233134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2332f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
2333f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browndecode_mknod(struct tcb *tcp, int offset)
233434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2335f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int mode = tcp->u_arg[offset + 1];
233634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
233734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2338f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[offset]);
233934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %s", sprintmode(mode));
234034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		switch (mode & S_IFMT) {
234134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		case S_IFCHR: case S_IFBLK:
234234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUXSPARC
234334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (current_personality == 1)
234434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", makedev(%lu, %lu)",
2345f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(unsigned long) ((tcp->u_arg[offset + 2] >> 18) & 0x3fff),
2346f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(unsigned long) (tcp->u_arg[offset + 2] & 0x3ffff));
234734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			else
234834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
234934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", makedev(%lu, %lu)",
2350f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(unsigned long) major(tcp->u_arg[offset + 2]),
2351f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				(unsigned long) minor(tcp->u_arg[offset + 2]));
235234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
235334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		default:
235434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
235534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
235634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
235734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
235834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
235934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
236034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2361f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_mknod(struct tcb *tcp)
2362f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2363f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_mknod(tcp, 0);
2364f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2365f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2366f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
2367f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2368f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_mknodat(struct tcb *tcp)
2369f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2370f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
2371f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_dirfd(tcp, tcp->u_arg[0]);
2372f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return decode_mknod(tcp, 1);
2373f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
2374f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2375f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
2376f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef FREEBSD
2377f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
2378f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_mkfifo(struct tcb *tcp)
237934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
238034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
238134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printpath(tcp, tcp->u_arg[0]);
238234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %#lo", tcp->u_arg[1]);
238334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
238434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
238534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
2386f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* FREEBSD */
238734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
238834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2389f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fsync(struct tcb *tcp)
239034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
239134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2392f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
239334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
239434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
239534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
239634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
239734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
239834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
239934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
2400f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintdir(struct tcb *tcp, long addr)
240134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
240234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct dirent d;
240334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
240434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!verbose(tcp)) {
240534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", addr);
240634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
240734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
240834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, addr, &d) < 0) {
240934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
241034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return;
241134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
241234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("{d_ino=%ld, ", (unsigned long) d.d_ino);
241334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("d_name=");
241434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	printpathn(tcp, (long) ((struct dirent *) addr)->d_name, d.d_reclen);
241534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("}");
241634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
241734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
241834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2419f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_readdir(struct tcb *tcp)
242034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
242134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2422f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2423f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
242434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
242534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp) || tcp->u_rval == 0 || !verbose(tcp))
242634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[1]);
242734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
242834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printdir(tcp, tcp->u_arg[1]);
242934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* Not much point in printing this out, it is always 1. */
243034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[2] != 1)
243134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %lu", tcp->u_arg[2]);
243234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
243334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
243434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
243534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
243634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
243734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
243834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined FREEBSD || defined LINUX
243934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat direnttypes[] = {
244034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_UNKNOWN,	"DT_UNKNOWN" 	},
244134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_FIFO,	"DT_FIFO" 	},
244234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_CHR,	"DT_CHR" 	},
244334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_DIR,	"DT_DIR" 	},
244434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_BLK,	"DT_BLK" 	},
244534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_REG,	"DT_REG" 	},
244634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_LNK,	"DT_LNK" 	},
244734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_SOCK,	"DT_SOCK" 	},
244834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ DT_WHT,	"DT_WHT" 	},
244934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
245034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
245134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
245234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
245334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
245434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2455f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_getdents(struct tcb *tcp)
245634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
245734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int i, len, dents = 0;
245834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	char *buf;
245934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
246034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2461f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2462f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
246334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
246434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
246534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
246634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
246734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
246834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
246934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	len = tcp->u_rval;
2470f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	buf = len ? malloc(len) : NULL;
2471f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (len && !buf) {
247234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
247334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		fprintf(stderr, "out of memory\n");
247434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
247534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
247634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
247734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
247834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		free(buf);
247934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
248034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
248134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
248234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{");
248334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	for (i = 0; i < len;) {
248434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		struct kernel_dirent *d = (struct kernel_dirent *) &buf[i];
248534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
248634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
248734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s{d_ino=%lu, d_off=%lu, ",
248834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "", d->d_ino, d->d_off);
248934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("d_reclen=%u, d_name=\"%s\"}",
249034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_reclen, d->d_name);
249134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
249234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
249334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SVR4
249434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
249534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s{d_ino=%lu, d_off=%lu, ",
249634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "",
249734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(unsigned long) d->d_ino,
249834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(unsigned long) d->d_off);
249934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("d_reclen=%u, d_name=\"%s\"}",
250034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_reclen, d->d_name);
250134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
250234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SVR4 */
250334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SUNOS4
250434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
250534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s{d_off=%lu, d_fileno=%lu, d_reclen=%u, ",
250634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "", d->d_off, d->d_fileno,
250734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_reclen);
250834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("d_namlen=%u, d_name=\"%.*s\"}",
250934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_namlen, d->d_namlen, d->d_name);
251034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
251134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SUNOS4 */
251234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD
251334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
251434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s{d_fileno=%u, d_reclen=%u, d_type=",
251534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "", d->d_fileno, d->d_reclen);
251634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printxval(direnttypes, d->d_type, "DT_???");
251734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", d_namlen=%u, d_name=\"%.*s\"}",
251834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_namlen, d->d_namlen, d->d_name);
251934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
252034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* FREEBSD */
252134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!d->d_reclen) {
252234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("/* d_reclen == 0, problem here */");
252334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
252434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
252534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		i += d->d_reclen;
252634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		dents++;
252734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
252834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
252934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
253034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
253134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("/* %u entries */", dents);
253234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", %lu", tcp->u_arg[2]);
253334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	free(buf);
253434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
253534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
253634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
253734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
253834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if _LFS64_LARGEFILE
253934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2540f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_getdents64(struct tcb *tcp)
254134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
254234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int i, len, dents = 0;
254334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	char *buf;
254434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
254534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2546f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2547f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
254834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
254934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
255034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
255134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
255234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
255334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
255434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	len = tcp->u_rval;
2555f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	buf = len ? malloc(len) : NULL;
2556f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (len && !buf) {
255734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
255834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		fprintf(stderr, "out of memory\n");
255934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
256034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
256134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
256234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
256334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		free(buf);
256434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
256534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
256634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
256734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{");
256834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	for (i = 0; i < len;) {
256934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		struct dirent64 *d = (struct dirent64 *) &buf[i];
257034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) || defined(SVR4)
257134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
2572f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%s{d_ino=%" PRIu64 ", d_off=%" PRId64 ", ",
257334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "",
257434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_ino,
257534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_off);
257634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
257734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("d_type=");
257834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printxval(direnttypes, d->d_type, "DT_???");
257934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", ");
258034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
258134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("d_reclen=%u, d_name=\"%s\"}",
258234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_reclen, d->d_name);
258334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
258434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX || SVR4 */
258534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SUNOS4
258634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
258734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s{d_off=%lu, d_fileno=%lu, d_reclen=%u, ",
258834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "", d->d_off, d->d_fileno,
258934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_reclen);
259034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("d_namlen=%u, d_name=\"%.*s\"}",
259134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_namlen, d->d_namlen, d->d_name);
259234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
259334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SUNOS4 */
2594f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (!d->d_reclen) {
2595f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("/* d_reclen == 0, problem here */");
2596f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			break;
2597f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
259834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		i += d->d_reclen;
259934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		dents++;
260034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
260134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
260234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
260334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
260434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("/* %u entries */", dents);
260534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", %lu", tcp->u_arg[2]);
260634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	free(buf);
260734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
260834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
260934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
261034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
261134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD
261234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2613f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_getdirentries(struct tcb *tcp)
261434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
261534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int i, len, dents = 0;
261634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long basep;
261734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	char *buf;
261834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
261934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
2620f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2621f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
262234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
262334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
262434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (syserror(tcp) || !verbose(tcp)) {
262534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu, %#lx", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]);
262634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
262734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
262834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	len = tcp->u_rval;
262934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if ((buf = malloc(len)) == NULL) {
263034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu, %#lx", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]);
263134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		fprintf(stderr, "out of memory\n");
263234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
263334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
263434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umoven(tcp, tcp->u_arg[1], len, buf) < 0) {
263534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu, %#lx", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]);
263634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		free(buf);
263734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return 0;
263834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
263934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
264034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{");
264134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	for (i = 0; i < len;) {
264234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		struct kernel_dirent *d = (struct kernel_dirent *) &buf[i];
264334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!abbrev(tcp)) {
264434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s{d_fileno=%u, d_reclen=%u, d_type=",
264534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				i ? " " : "", d->d_fileno, d->d_reclen);
264634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printxval(direnttypes, d->d_type, "DT_???");
264734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", d_namlen=%u, d_name=\"%.*s\"}",
264834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				d->d_namlen, d->d_namlen, d->d_name);
264934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
2650f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (!d->d_reclen) {
2651f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("/* d_reclen == 0, problem here */");
2652f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			break;
2653f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
265434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		i += d->d_reclen;
265534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		dents++;
265634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
265734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
265834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
265934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
266034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("/* %u entries */", dents);
266134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	free(buf);
266234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", %lu", tcp->u_arg[2]);
266334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove(tcp, tcp->u_arg[3], &basep) < 0)
266434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %#lx", tcp->u_arg[3]);
266534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
266634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", [%lu]", basep);
266734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
266834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
266934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
267034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
267134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
267234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2673f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_getcwd(struct tcb *tcp)
267434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2675f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (exiting(tcp)) {
2676f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (syserror(tcp))
2677f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx", tcp->u_arg[0]);
2678f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
2679f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printpathn(tcp, tcp->u_arg[0], tcp->u_rval - 1);
2680f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %lu", tcp->u_arg[1]);
2681f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2682f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
268334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
268434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
268534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
268634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD
268734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2688f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys___getcwd(struct tcb *tcp)
268934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2690f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (exiting(tcp)) {
2691f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (syserror(tcp))
2692f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx", tcp->u_arg[0]);
2693f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
2694f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printpathn(tcp, tcp->u_arg[0], tcp->u_arg[1]);
2695f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %lu", tcp->u_arg[1]);
2696f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2697f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
269834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
269934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
270034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
270134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_SYS_ASYNCH_H
270234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
270334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2704f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_aioread(struct tcb *tcp)
270534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
270634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct aio_result_t res;
270734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
270834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
270934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%lu, ", tcp->u_arg[0]);
271034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
271134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp))
271234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[1]);
271334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
271434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
271534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu, %lu, ", tcp->u_arg[2], tcp->u_arg[3]);
271634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(whence, tcp->u_arg[4], "L_???");
271734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp) || tcp->u_arg[5] == 0
271834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		    || umove(tcp, tcp->u_arg[5], &res) < 0)
271934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lx", tcp->u_arg[5]);
272034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
272134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", {aio_return %d aio_errno %d}",
272234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				res.aio_return, res.aio_errno);
272334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
272434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
272534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
272634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
272734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2728f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_aiowrite(struct tcb *tcp)
272934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
273034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct aio_result_t res;
273134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
273234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
273334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%lu, ", tcp->u_arg[0]);
273434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
273534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu, %lu, ", tcp->u_arg[2], tcp->u_arg[3]);
273634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(whence, tcp->u_arg[4], "L_???");
273734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
273834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else {
273934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[5] == 0)
274034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", NULL");
274134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else if (syserror(tcp)
274234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		    || umove(tcp, tcp->u_arg[5], &res) < 0)
274334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lx", tcp->u_arg[5]);
274434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
274534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", {aio_return %d aio_errno %d}",
274634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				res.aio_return, res.aio_errno);
274734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
274834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
274934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
275034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
275134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2752f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_aiowait(struct tcb *tcp)
275334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
275434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp))
275534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printtv(tcp, tcp->u_arg[0]);
275634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
275734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
275834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
275934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2760f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_aiocancel(struct tcb *tcp)
276134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
276234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct aio_result_t res;
276334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
276434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (exiting(tcp)) {
276534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[0] == 0)
276634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("NULL");
276734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else if (syserror(tcp)
276834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		    || umove(tcp, tcp->u_arg[0], &res) < 0)
276934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[0]);
277034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
277134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{aio_return %d aio_errno %d}",
277234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				res.aio_return, res.aio_errno);
277334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
277434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
277534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
277634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
277734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_SYS_ASYNCH_H */
277834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
277934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat xattrflags[] = {
278034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef XATTR_CREATE
278134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ XATTR_CREATE,	 "XATTR_CREATE" },
278234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ XATTR_REPLACE, "XATTR_REPLACE" },
278334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
278434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		 NULL }
278534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
278634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
278734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
2788f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprint_xattr_val(struct tcb *tcp, int failed,
2789f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned long arg,
2790f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned long insize,
2791f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned long size)
2792f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
2793f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (!failed) {
2794f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned long capacity = 4 * size + 1;
2795f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned char *buf = (capacity < size) ? NULL : malloc(capacity);
2796f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (buf == NULL || /* probably a bogus size argument */
2797f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			umoven(tcp, arg, size, (char *) &buf[3 * size]) < 0) {
2798f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			failed = 1;
2799f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
280034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else {
2801f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			unsigned char *out = buf;
2802f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			unsigned char *in = &buf[3 * size];
2803f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			size_t i;
2804f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			for (i = 0; i < size; ++i) {
2805f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				if (isprint(in[i]))
2806f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					*out++ = in[i];
2807f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				else {
280834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define tohex(n) "0123456789abcdef"[n]
2809f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					*out++ = '\\';
2810f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					*out++ = 'x';
2811f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					*out++ = tohex(in[i] / 16);
2812f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					*out++ = tohex(in[i] % 16);
2813f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				}
2814f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			}
2815f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			/* Don't print terminating NUL if there is one.  */
2816f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if (i > 0 && in[i - 1] == '\0')
2817f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				out -= 4;
2818f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			*out = '\0';
2819f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(", \"%s\", %ld", buf, insize);
282034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
2821f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		free(buf);
282234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
2823f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (failed)
2824f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", 0x%lx, %ld", arg, insize);
282534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
282634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
282734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2828f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_setxattr(struct tcb *tcp)
282934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2830f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2831f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[0]);
2832f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2833f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstr(tcp, tcp->u_arg[1], -1);
2834f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_xattr_val(tcp, 0, tcp->u_arg[2], tcp->u_arg[3], tcp->u_arg[3]);
2835f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2836f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(xattrflags, tcp->u_arg[4], "XATTR_???");
2837f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2838f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
283934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
284034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
284134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2842f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fsetxattr(struct tcb *tcp)
284334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2844f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2845f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2846f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2847f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstr(tcp, tcp->u_arg[1], -1);
2848f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_xattr_val(tcp, 0, tcp->u_arg[2], tcp->u_arg[3], tcp->u_arg[3]);
2849f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2850f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(xattrflags, tcp->u_arg[4], "XATTR_???");
2851f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2852f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
285334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
285434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
285534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2856f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_getxattr(struct tcb *tcp)
285734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2858f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2859f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[0]);
2860f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2861f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstr(tcp, tcp->u_arg[1], -1);
2862f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
2863f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_xattr_val(tcp, syserror(tcp), tcp->u_arg[2], tcp->u_arg[3],
2864f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tcp->u_rval);
2865f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2866f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
286734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
286834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
286934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2870f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fgetxattr(struct tcb *tcp)
287134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2872f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2873f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2874f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2875f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstr(tcp, tcp->u_arg[1], -1);
2876f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
2877f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_xattr_val(tcp, syserror(tcp), tcp->u_arg[2], tcp->u_arg[3],
2878f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tcp->u_rval);
2879f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2880f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
288134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
288234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
288334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2884f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_listxattr(struct tcb *tcp)
288534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2886f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2887f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[0]);
2888f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
2889f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		/* XXX Print value in format */
2890f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %p, %lu", (void *) tcp->u_arg[1], tcp->u_arg[2]);
2891f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2892f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
289334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
289434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
289534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2896f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_flistxattr(struct tcb *tcp)
289734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2898f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2899f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2900f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
2901f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		/* XXX Print value in format */
2902f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %p, %lu", (void *) tcp->u_arg[1], tcp->u_arg[2]);
2903f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2904f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
290534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
290634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
290734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2908f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_removexattr(struct tcb *tcp)
290934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2910f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2911f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[0]);
2912f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2913f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstr(tcp, tcp->u_arg[1], -1);
2914f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2915f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
291634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
291734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
291834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2919f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fremovexattr(struct tcb *tcp)
292034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2921f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2922f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2923f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2924f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printstr(tcp, tcp->u_arg[1], -1);
2925f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2926f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
292734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
292834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2929f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
293034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat advise[] = {
293134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { POSIX_FADV_NORMAL,		"POSIX_FADV_NORMAL"	},
293234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { POSIX_FADV_RANDOM,		"POSIX_FADV_RANDOM"	},
293334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { POSIX_FADV_SEQUENTIAL,	"POSIX_FADV_SEQUENTIAL"	},
293434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { POSIX_FADV_WILLNEED,	"POSIX_FADV_WILLNEED"	},
293534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { POSIX_FADV_DONTNEED,	"POSIX_FADV_DONTNEED"	},
293634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { POSIX_FADV_NOREUSE,		"POSIX_FADV_NOREUSE"	},
293734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { 0,				NULL			}
293834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
293934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
294034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
294134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
294234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2943f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fadvise64(struct tcb *tcp)
294434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2945f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2946f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int argn;
2947f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2948f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2949f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		argn = printllval(tcp, "%lld", 1);
2950f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %ld, ", tcp->u_arg[argn++]);
2951f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(advise, tcp->u_arg[argn], "POSIX_FADV_???");
2952f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2953f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
295434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
295534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
295634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
295734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
295834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
2959f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fadvise64_64(struct tcb *tcp)
296034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
2961f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
2962f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int argn;
2963f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
2964f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
2965f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined ARM || defined POWERPC
2966f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		argn = printllval(tcp, "%lld, ", 2);
2967f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#else
2968f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		argn = printllval(tcp, "%lld, ", 1);
2969f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
2970f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		argn = printllval(tcp, "%lld, ", argn);
2971f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined ARM || defined POWERPC
2972f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(advise, tcp->u_arg[1], "POSIX_FADV_???");
297334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
2974f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(advise, tcp->u_arg[argn], "POSIX_FADV_???");
297534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
2976f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
2977f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
297834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
297934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
2980f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef LINUX
2981f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat inotify_modes[] = {
2982f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000001,	"IN_ACCESS"	},
2983f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000002,	"IN_MODIFY"	},
2984f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000004,	"IN_ATTRIB"	},
2985f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000008,	"IN_CLOSE_WRITE"},
2986f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000010,	"IN_CLOSE_NOWRITE"},
2987f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000020,	"IN_OPEN"	},
2988f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000040,	"IN_MOVED_FROM"	},
2989f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000080,	"IN_MOVED_TO"	},
2990f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000100,	"IN_CREATE"	},
2991f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000200,	"IN_DELETE"	},
2992f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000400,	"IN_DELETE_SELF"},
2993f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000800,	"IN_MOVE_SELF"	},
2994f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00002000,	"IN_UNMOUNT"	},
2995f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00004000,	"IN_Q_OVERFLOW"	},
2996f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00008000,	"IN_IGNORED"	},
2997f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x01000000,	"IN_ONLYDIR"	},
2998f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x02000000,	"IN_DONT_FOLLOW"},
2999f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x20000000,	"IN_MASK_ADD"	},
3000f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x40000000,	"IN_ISDIR"	},
3001f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x80000000,	"IN_ONESHOT"	},
3002f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0,		NULL		}
3003f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
3004f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
3005f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat inotify_init_flags[] = {
3006f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00000800,	"IN_NONBLOCK"	},
3007f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0x00080000,	"IN_CLOEXEC" 	},
3008f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0,		NULL 		}
3009f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
3010f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
3011f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
3012f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_inotify_add_watch(struct tcb *tcp)
3013f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
3014f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
3015f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
3016f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
3017f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printpath(tcp, tcp->u_arg[1]);
3018f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
3019f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(inotify_modes, tcp->u_arg[2], "IN_???");
3020f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
3021f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
3022f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
3023f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
3024f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
3025f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_inotify_rm_watch(struct tcb *tcp)
3026f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
3027f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
3028f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
3029f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %ld", tcp->u_arg[1]);
3030f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
3031f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
3032f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
3033f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
3034f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
3035f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_inotify_init1(struct tcb *tcp)
3036f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
3037f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
3038f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(inotify_init_flags, tcp->u_arg[0], "IN_???");
3039f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
3040f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
3041f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
3042f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
3043f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_fallocate(struct tcb *tcp)
3044f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
3045f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
3046f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int argn;
3047f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);		/* fd */
3048f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
3049f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("%#lo, ", tcp->u_arg[1]);	/* mode */
3050f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		argn = printllval(tcp, "%llu, ", 2);	/* offset */
3051f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printllval(tcp, "%llu", argn);		/* len */
3052f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
3053f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
3054f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
3055f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
3056