1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26
27 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
28 /* All Rights Reserved */
29
30 #define _SYSCALL32
31
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <unistd.h>
35 #include <sys/types.h>
36 #include <sys/stat.h>
37 #include <sys/signal.h>
38 #include <sys/fault.h>
39 #include <sys/syscall.h>
40 #include <libproc.h>
41 #include "ramdata.h"
42 #include "proto.h"
43
44 void show_stat32(private_t *, long);
45 void show_stat64(private_t *, long);
46
47 void
show_stat(private_t * pri,long offset)48 show_stat(private_t *pri, long offset)
49 {
50 if (data_model == PR_MODEL_LP64)
51 show_stat64(pri, offset);
52 else
53 show_stat32(pri, offset);
54 }
55
56 void
show_stat32(private_t * pri,long offset)57 show_stat32(private_t *pri, long offset)
58 {
59 struct stat32 statb;
60 timestruc_t ts;
61
62 if (offset != 0 &&
63 Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
64 (void) printf(
65 "%s d=0x%.8X i=%-5u m=0%.6o l=%-2u u=%-5u g=%-5u",
66 pri->pname,
67 statb.st_dev,
68 statb.st_ino,
69 statb.st_mode,
70 statb.st_nlink,
71 statb.st_uid,
72 statb.st_gid);
73
74 switch (statb.st_mode & S_IFMT) {
75 case S_IFCHR:
76 case S_IFBLK:
77 (void) printf(" rdev=0x%.8X\n", statb.st_rdev);
78 break;
79 default:
80 (void) printf(" sz=%u\n", statb.st_size);
81 break;
82 }
83
84 TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_atim);
85 prtimestruc(pri, "at = ", &ts);
86 TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_mtim);
87 prtimestruc(pri, "mt = ", &ts);
88 TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_ctim);
89 prtimestruc(pri, "ct = ", &ts);
90
91 (void) printf(
92 "%s bsz=%-5d blks=%-5d fs=%.*s\n",
93 pri->pname,
94 statb.st_blksize,
95 statb.st_blocks,
96 _ST_FSTYPSZ,
97 statb.st_fstype);
98 }
99 }
100
101 void
show_stat64_32(private_t * pri,long offset)102 show_stat64_32(private_t *pri, long offset)
103 {
104 struct stat64_32 statb;
105 timestruc_t ts;
106
107 if (offset != 0 &&
108 Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
109 (void) printf(
110 "%s d=0x%.8X i=%-5llu m=0%.6o l=%-2u u=%-5u g=%-5u",
111 pri->pname,
112 statb.st_dev,
113 (u_longlong_t)statb.st_ino,
114 statb.st_mode,
115 statb.st_nlink,
116 statb.st_uid,
117 statb.st_gid);
118
119 switch (statb.st_mode & S_IFMT) {
120 case S_IFCHR:
121 case S_IFBLK:
122 (void) printf(" rdev=0x%.8X\n", statb.st_rdev);
123 break;
124 default:
125 (void) printf(" sz=%llu\n", (long long)statb.st_size);
126 break;
127 }
128
129 TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_atim);
130 prtimestruc(pri, "at = ", &ts);
131 TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_mtim);
132 prtimestruc(pri, "mt = ", &ts);
133 TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_ctim);
134 prtimestruc(pri, "ct = ", &ts);
135
136 (void) printf("%s bsz=%-5d blks=%-5lld fs=%.*s\n",
137 pri->pname,
138 statb.st_blksize,
139 (longlong_t)statb.st_blocks,
140 _ST_FSTYPSZ,
141 statb.st_fstype);
142 }
143 }
144
145 void
show_stat64(private_t * pri,long offset)146 show_stat64(private_t *pri, long offset)
147 {
148 struct stat64 statb;
149
150 if (offset != 0 &&
151 Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
152 (void) printf(
153 "%s d=0x%.16lX i=%-5lu m=0%.6o l=%-2u u=%-5u g=%-5u",
154 pri->pname,
155 statb.st_dev,
156 statb.st_ino,
157 statb.st_mode,
158 statb.st_nlink,
159 statb.st_uid,
160 statb.st_gid);
161
162 switch (statb.st_mode & S_IFMT) {
163 case S_IFCHR:
164 case S_IFBLK:
165 (void) printf(" rdev=0x%.16lX\n", statb.st_rdev);
166 break;
167 default:
168 (void) printf(" sz=%lu\n", statb.st_size);
169 break;
170 }
171
172 prtimestruc(pri, "at = ", (timestruc_t *)&statb.st_atim);
173 prtimestruc(pri, "mt = ", (timestruc_t *)&statb.st_mtim);
174 prtimestruc(pri, "ct = ", (timestruc_t *)&statb.st_ctim);
175
176 (void) printf(
177 "%s bsz=%-5d blks=%-5ld fs=%.*s\n",
178 pri->pname,
179 statb.st_blksize,
180 statb.st_blocks,
181 _ST_FSTYPSZ,
182 statb.st_fstype);
183 }
184 }
185