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