1 0 stevel /* 2 0 stevel * CDDL HEADER START 3 0 stevel * 4 0 stevel * The contents of this file are subject to the terms of the 5 0 stevel * Common Development and Distribution License, Version 1.0 only 6 0 stevel * (the "License"). You may not use this file except in compliance 7 0 stevel * with the License. 8 0 stevel * 9 0 stevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 0 stevel * or http://www.opensolaris.org/os/licensing. 11 0 stevel * See the License for the specific language governing permissions 12 0 stevel * and limitations under the License. 13 0 stevel * 14 0 stevel * When distributing Covered Code, include this CDDL HEADER in each 15 0 stevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 0 stevel * If applicable, add the following below this CDDL HEADER, with the 17 0 stevel * fields enclosed by brackets "[]" replaced with your own identifying 18 0 stevel * information: Portions Copyright [yyyy] [name of copyright owner] 19 0 stevel * 20 0 stevel * CDDL HEADER END 21 0 stevel */ 22 0 stevel /* 23 0 stevel * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 24 0 stevel * Use is subject to license terms. 25 0 stevel */ 26 0 stevel 27 0 stevel /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 28 0 stevel /* All Rights Reserved */ 29 0 stevel 30 0 stevel 31 0 stevel #pragma ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.3 */ 32 0 stevel 33 0 stevel #define _SYSCALL32 34 0 stevel 35 0 stevel #include <stdio.h> 36 0 stevel #include <stdlib.h> 37 0 stevel #include <unistd.h> 38 0 stevel #include <sys/types.h> 39 0 stevel #include <sys/stat.h> 40 0 stevel #include <sys/signal.h> 41 0 stevel #include <sys/fault.h> 42 0 stevel #include <sys/syscall.h> 43 0 stevel #include <libproc.h> 44 0 stevel #include "ramdata.h" 45 0 stevel #include "proto.h" 46 0 stevel 47 0 stevel void show_stat32(private_t *, long); 48 0 stevel #ifdef _LP64 49 0 stevel void show_stat64(private_t *, long); 50 0 stevel #endif 51 0 stevel 52 0 stevel #if defined(i386) && defined(_STAT_VER) 53 0 stevel 54 0 stevel /* 55 0 stevel * Old SVR3 stat structure. 56 0 stevel */ 57 0 stevel struct o_stat { 58 0 stevel o_dev_t st_dev; 59 0 stevel o_ino_t st_ino; 60 0 stevel o_mode_t st_mode; 61 0 stevel o_nlink_t st_nlink; 62 0 stevel o_uid_t st_uid; 63 0 stevel o_gid_t st_gid; 64 0 stevel o_dev_t st_rdev; 65 0 stevel off32_t st_size; 66 0 stevel time_t st_atim; 67 0 stevel time_t st_mtim; 68 0 stevel time_t st_ctim; 69 0 stevel }; 70 0 stevel 71 0 stevel void 72 0 stevel show_o_stat(private_t *pri, long offset) 73 0 stevel { 74 0 stevel struct o_stat statb; 75 0 stevel timestruc_t ts; 76 0 stevel 77 0 stevel if (offset != NULL && 78 0 stevel Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) { 79 0 stevel (void) printf( 80 0 stevel "%s d=0x%.8X i=%-5u m=0%.6o l=%-2u u=%-5u g=%-5u", 81 0 stevel pri->pname, 82 0 stevel statb.st_dev & 0xffff, 83 0 stevel statb.st_ino, 84 0 stevel statb.st_mode, 85 0 stevel statb.st_nlink % 0xffff, 86 0 stevel statb.st_uid, 87 0 stevel statb.st_gid); 88 0 stevel 89 0 stevel switch (statb.st_mode & S_IFMT) { 90 0 stevel case S_IFCHR: 91 0 stevel case S_IFBLK: 92 0 stevel (void) printf(" rdev=0x%.4X\n", statb.st_rdev & 0xffff); 93 0 stevel break; 94 0 stevel default: 95 0 stevel (void) printf(" sz=%u\n", (uint32_t)statb.st_size); 96 0 stevel break; 97 0 stevel } 98 0 stevel 99 0 stevel ts.tv_nsec = 0; 100 0 stevel ts.tv_sec = statb.st_atim; 101 0 stevel prtimestruc(pri, "at = ", &ts); 102 0 stevel ts.tv_sec = statb.st_atim; 103 0 stevel prtimestruc(pri, "mt = ", &ts); 104 0 stevel ts.tv_sec = statb.st_atim; 105 0 stevel prtimestruc(pri, "ct = ", &ts); 106 0 stevel } 107 0 stevel } 108 0 stevel 109 0 stevel void 110 0 stevel show_stat(private_t *pri, long offset) 111 0 stevel { 112 0 stevel show_o_stat(pri, offset); 113 0 stevel } 114 0 stevel 115 0 stevel void 116 0 stevel show_xstat(private_t *pri, int version, long offset) 117 0 stevel { 118 0 stevel switch (version) { 119 0 stevel case _R3_STAT_VER: 120 0 stevel show_o_stat(pri, offset); 121 0 stevel break; 122 0 stevel case _STAT_VER: 123 0 stevel show_stat32(pri, offset); 124 0 stevel break; 125 0 stevel } 126 0 stevel } 127 0 stevel 128 0 stevel void 129 0 stevel show_statat(private_t *pri, long offset) 130 0 stevel { 131 0 stevel #ifdef _LP64 132 0 stevel if (data_model == PR_MODEL_LP64) 133 0 stevel show_stat64(pri, offset); 134 0 stevel else 135 0 stevel show_stat32(pri, offset); 136 0 stevel #else 137 0 stevel show_stat32(pri, offset); 138 0 stevel #endif 139 0 stevel } 140 0 stevel 141 0 stevel #else 142 0 stevel 143 0 stevel void 144 0 stevel show_stat(private_t *pri, long offset) 145 0 stevel { 146 0 stevel #ifdef _LP64 147 0 stevel if (data_model == PR_MODEL_LP64) 148 0 stevel show_stat64(pri, offset); 149 0 stevel else 150 0 stevel show_stat32(pri, offset); 151 0 stevel #else 152 0 stevel show_stat32(pri, offset); 153 0 stevel #endif 154 0 stevel } 155 0 stevel 156 0 stevel void 157 0 stevel show_statat(private_t *pri, long offset) 158 0 stevel { 159 0 stevel show_stat(pri, offset); 160 0 stevel } 161 0 stevel 162 0 stevel /* ARGSUSED */ 163 0 stevel void 164 0 stevel show_xstat(private_t *pri, int version, long offset) 165 0 stevel { 166 0 stevel show_stat(pri, offset); 167 0 stevel } 168 0 stevel 169 0 stevel #endif 170 0 stevel 171 0 stevel void 172 0 stevel show_stat32(private_t *pri, long offset) 173 0 stevel { 174 0 stevel struct stat32 statb; 175 0 stevel timestruc_t ts; 176 0 stevel 177 0 stevel if (offset != NULL && 178 0 stevel Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) { 179 0 stevel (void) printf( 180 0 stevel "%s d=0x%.8X i=%-5u m=0%.6o l=%-2u u=%-5u g=%-5u", 181 0 stevel pri->pname, 182 0 stevel statb.st_dev, 183 0 stevel statb.st_ino, 184 0 stevel statb.st_mode, 185 0 stevel statb.st_nlink, 186 0 stevel statb.st_uid, 187 0 stevel statb.st_gid); 188 0 stevel 189 0 stevel switch (statb.st_mode & S_IFMT) { 190 0 stevel case S_IFCHR: 191 0 stevel case S_IFBLK: 192 0 stevel (void) printf(" rdev=0x%.8X\n", statb.st_rdev); 193 0 stevel break; 194 0 stevel default: 195 0 stevel (void) printf(" sz=%u\n", statb.st_size); 196 0 stevel break; 197 0 stevel } 198 0 stevel 199 0 stevel TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_atim); 200 0 stevel prtimestruc(pri, "at = ", &ts); 201 0 stevel TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_mtim); 202 0 stevel prtimestruc(pri, "mt = ", &ts); 203 0 stevel TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_ctim); 204 0 stevel prtimestruc(pri, "ct = ", &ts); 205 0 stevel 206 0 stevel (void) printf( 207 0 stevel "%s bsz=%-5d blks=%-5d fs=%.*s\n", 208 0 stevel pri->pname, 209 0 stevel statb.st_blksize, 210 0 stevel statb.st_blocks, 211 0 stevel _ST_FSTYPSZ, 212 0 stevel statb.st_fstype); 213 0 stevel } 214 0 stevel } 215 0 stevel 216 0 stevel void 217 0 stevel show_stat64_32(private_t *pri, long offset) 218 0 stevel { 219 0 stevel struct stat64_32 statb; 220 0 stevel timestruc_t ts; 221 0 stevel 222 0 stevel if (offset != NULL && 223 0 stevel Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) { 224 0 stevel (void) printf( 225 0 stevel "%s d=0x%.8X i=%-5llu m=0%.6o l=%-2u u=%-5u g=%-5u", 226 0 stevel pri->pname, 227 0 stevel statb.st_dev, 228 0 stevel (u_longlong_t)statb.st_ino, 229 0 stevel statb.st_mode, 230 0 stevel statb.st_nlink, 231 0 stevel statb.st_uid, 232 0 stevel statb.st_gid); 233 0 stevel 234 0 stevel switch (statb.st_mode & S_IFMT) { 235 0 stevel case S_IFCHR: 236 0 stevel case S_IFBLK: 237 0 stevel (void) printf(" rdev=0x%.8X\n", statb.st_rdev); 238 0 stevel break; 239 0 stevel default: 240 0 stevel (void) printf(" sz=%llu\n", (long long)statb.st_size); 241 0 stevel break; 242 0 stevel } 243 0 stevel 244 0 stevel TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_atim); 245 0 stevel prtimestruc(pri, "at = ", &ts); 246 0 stevel TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_mtim); 247 0 stevel prtimestruc(pri, "mt = ", &ts); 248 0 stevel TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_ctim); 249 0 stevel prtimestruc(pri, "ct = ", &ts); 250 0 stevel 251 0 stevel (void) printf("%s bsz=%-5d blks=%-5lld fs=%.*s\n", 252 0 stevel pri->pname, 253 0 stevel statb.st_blksize, 254 0 stevel (longlong_t)statb.st_blocks, 255 0 stevel _ST_FSTYPSZ, 256 0 stevel statb.st_fstype); 257 0 stevel } 258 0 stevel } 259 0 stevel 260 0 stevel #ifdef _LP64 261 0 stevel void 262 0 stevel show_stat64(private_t *pri, long offset) 263 0 stevel { 264 0 stevel struct stat64 statb; 265 0 stevel 266 0 stevel if (offset != NULL && 267 0 stevel Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) { 268 0 stevel (void) printf( 269 0 stevel "%s d=0x%.16lX i=%-5lu m=0%.6o l=%-2u u=%-5u g=%-5u", 270 0 stevel pri->pname, 271 0 stevel statb.st_dev, 272 0 stevel statb.st_ino, 273 0 stevel statb.st_mode, 274 0 stevel statb.st_nlink, 275 0 stevel statb.st_uid, 276 0 stevel statb.st_gid); 277 0 stevel 278 0 stevel switch (statb.st_mode & S_IFMT) { 279 0 stevel case S_IFCHR: 280 0 stevel case S_IFBLK: 281 0 stevel (void) printf(" rdev=0x%.16lX\n", statb.st_rdev); 282 0 stevel break; 283 0 stevel default: 284 0 stevel (void) printf(" sz=%lu\n", statb.st_size); 285 0 stevel break; 286 0 stevel } 287 0 stevel 288 0 stevel prtimestruc(pri, "at = ", (timestruc_t *)&statb.st_atim); 289 0 stevel prtimestruc(pri, "mt = ", (timestruc_t *)&statb.st_mtim); 290 0 stevel prtimestruc(pri, "ct = ", (timestruc_t *)&statb.st_ctim); 291 0 stevel 292 0 stevel (void) printf( 293 0 stevel "%s bsz=%-5d blks=%-5ld fs=%.*s\n", 294 0 stevel pri->pname, 295 0 stevel statb.st_blksize, 296 0 stevel statb.st_blocks, 297 0 stevel _ST_FSTYPSZ, 298 0 stevel statb.st_fstype); 299 0 stevel } 300 0 stevel } 301 0 stevel #endif /* _LP64 */ 302