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