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 }