Mercurial > illumos > onarm
comparison usr/src/cmd/fs.d/cachefs/cfstagchk/cfstagchk.c @ 0:c9caec207d52 b86
Initial porting based on b86
author | Koji Uno <koji.uno@sun.com> |
---|---|
date | Tue, 02 Jun 2009 18:56:50 +0900 |
parents | |
children | 1a15d5aaf794 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c9caec207d52 |
---|---|
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, Version 1.0 only | |
6 * (the "License"). You may not use this file except in compliance | |
7 * with the License. | |
8 * | |
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | |
10 * or http://www.opensolaris.org/os/licensing. | |
11 * See the License for the specific language governing permissions | |
12 * and limitations under the License. | |
13 * | |
14 * When distributing Covered Code, include this CDDL HEADER in each | |
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | |
16 * If applicable, add the following below this CDDL HEADER, with the | |
17 * fields enclosed by brackets "[]" replaced with your own identifying | |
18 * information: Portions Copyright [yyyy] [name of copyright owner] | |
19 * | |
20 * CDDL HEADER END | |
21 */ | |
22 /* | |
23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. | |
24 * Use is subject to license terms. | |
25 */ | |
26 | |
27 #pragma ident "@(#)cfstagchk.c 1.7 05/06/08 SMI" | |
28 | |
29 /* | |
30 * ----------------------------------------------------------------- | |
31 * | |
32 * cfstagchk.c | |
33 * | |
34 * Cache FS admin utility. Used to read and/or write a | |
35 * cache tag from/to the specified partition. | |
36 */ | |
37 | |
38 #include <locale.h> | |
39 #include <stdio.h> | |
40 #include <stdlib.h> | |
41 #include <unistd.h> | |
42 #include <string.h> | |
43 #include <errno.h> | |
44 #include <fcntl.h> | |
45 #include <ctype.h> | |
46 #include <stdarg.h> | |
47 #include <sys/param.h> | |
48 #include <sys/types.h> | |
49 #include <sys/vtoc.h> | |
50 | |
51 void pr_err(char *fmt, ...); | |
52 void usage(char *); | |
53 | |
54 /* | |
55 * ----------------------------------------------------------------- | |
56 * | |
57 * main | |
58 * | |
59 * Description: | |
60 * Main routine for the cfstagchk program | |
61 * Arguments: | |
62 * argc number of command line arguments | |
63 * argv command line arguments | |
64 * Returns: | |
65 * Returns 0 for failure, > 0 for an error. | |
66 * Preconditions: | |
67 */ | |
68 | |
69 int | |
70 main(int argc, char **argv) | |
71 { | |
72 int c; | |
73 int which; | |
74 | |
75 char *path; | |
76 | |
77 int wflag; | |
78 int fd, err, slice; | |
79 struct vtoc vtoc; | |
80 struct partition *p; | |
81 | |
82 /* verify root running command */ | |
83 if (getuid() != 0) { | |
84 pr_err(gettext("must be run by root")); | |
85 return (1); | |
86 } | |
87 | |
88 (void) setlocale(LC_ALL, ""); | |
89 #if !defined(TEXT_DOMAIN) | |
90 #define TEXT_DOMAIN "SYS_TEST" | |
91 #endif | |
92 (void) textdomain(TEXT_DOMAIN); | |
93 | |
94 /* set defaults for command line options */ | |
95 wflag = 0; | |
96 | |
97 /* parse the command line arguments */ | |
98 while ((c = getopt(argc, argv, "w")) != EOF) { | |
99 switch (c) { | |
100 | |
101 case 'w': /* write */ | |
102 wflag = 1; | |
103 break; | |
104 | |
105 default: | |
106 usage(gettext("illegal option")); | |
107 return (1); | |
108 } | |
109 } | |
110 argc -= optind; | |
111 argv += optind; | |
112 if (argc != 1) { | |
113 usage(gettext("must specify a single device")); | |
114 return (1); | |
115 } | |
116 | |
117 fd = open(*argv, O_RDWR); | |
118 if (fd < 0) { | |
119 pr_err("can't open %s", *argv); | |
120 return (1); | |
121 } | |
122 | |
123 slice = read_vtoc(fd, &vtoc); | |
124 if (slice < 0) { | |
125 pr_err(gettext("can't read vtoc")); | |
126 return (1); | |
127 } | |
128 p = &vtoc.v_part[slice]; | |
129 if (!wflag) { | |
130 err = 0; | |
131 if (p->p_tag != V_CACHE) | |
132 err++; | |
133 } else { | |
134 p->p_tag = V_CACHE; | |
135 err = write_vtoc(fd, &vtoc); | |
136 if (err < 0) | |
137 pr_err(gettext("write_vtoc failure")); | |
138 } | |
139 return (err); | |
140 } | |
141 | |
142 /* | |
143 * ----------------------------------------------------------------- | |
144 * | |
145 * usage | |
146 * | |
147 * Description: | |
148 * Prints a usage message for this utility. | |
149 * Arguments: | |
150 * msgp message to include with the usage message | |
151 * Returns: | |
152 * Preconditions: | |
153 * precond(msgp) | |
154 */ | |
155 | |
156 void | |
157 usage(char *msgp) | |
158 { | |
159 fprintf(stderr, gettext("cfstagchk: %s\n"), msgp); | |
160 fprintf(stderr, gettext("usage: cfstagchk [-w] device\n")); | |
161 } | |
162 | |
163 /* | |
164 * ----------------------------------------------------------------- | |
165 * | |
166 * pr_err | |
167 * | |
168 * Description: | |
169 * Prints an error message to stderr. | |
170 * Arguments: | |
171 * fmt printf style format | |
172 * ... arguments for fmt | |
173 * Returns: | |
174 * Preconditions: | |
175 * precond(fmt) | |
176 */ | |
177 | |
178 void | |
179 pr_err(char *fmt, ...) | |
180 { | |
181 va_list ap; | |
182 | |
183 va_start(ap, fmt); | |
184 (void) fprintf(stderr, gettext("cfstagchk: ")); | |
185 (void) vfprintf(stderr, fmt, ap); | |
186 (void) fprintf(stderr, "\n"); | |
187 va_end(ap); | |
188 } |