geom_concat.c (143586) | geom_concat.c (153190) |
---|---|
1/*- 2 * Copyright (c) 2004-2005 Pawel Jakub Dawidek <pjd@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2004-2005 Pawel Jakub Dawidek <pjd@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/sbin/geom/class/concat/geom_concat.c 143586 2005-03-14 14:25:47Z pjd $"); | 28__FBSDID("$FreeBSD: head/sbin/geom/class/concat/geom_concat.c 153190 2005-12-07 01:38:27Z pjd $"); |
29 30#include <sys/param.h> 31#include <errno.h> 32#include <paths.h> 33#include <stdio.h> 34#include <stdlib.h> 35#include <string.h> 36#include <strings.h> --- 52 unchanged lines hidden (view full) --- 89static void 90concat_main(struct gctl_req *req, unsigned flags) 91{ 92 const char *name; 93 94 if ((flags & G_FLAG_VERBOSE) != 0) 95 verbose = 1; 96 | 29 30#include <sys/param.h> 31#include <errno.h> 32#include <paths.h> 33#include <stdio.h> 34#include <stdlib.h> 35#include <string.h> 36#include <strings.h> --- 52 unchanged lines hidden (view full) --- 89static void 90concat_main(struct gctl_req *req, unsigned flags) 91{ 92 const char *name; 93 94 if ((flags & G_FLAG_VERBOSE) != 0) 95 verbose = 1; 96 |
97 name = gctl_get_asciiparam(req, "verb"); | 97 name = gctl_get_ascii(req, "verb"); |
98 if (name == NULL) { 99 gctl_error(req, "No '%s' argument.", "verb"); 100 return; 101 } 102 if (strcmp(name, "label") == 0) 103 concat_label(req); 104 else if (strcmp(name, "clear") == 0) 105 concat_clear(req); --- 4 unchanged lines hidden (view full) --- 110} 111 112static void 113concat_label(struct gctl_req *req) 114{ 115 struct g_concat_metadata md; 116 u_char sector[512]; 117 const char *name; | 98 if (name == NULL) { 99 gctl_error(req, "No '%s' argument.", "verb"); 100 return; 101 } 102 if (strcmp(name, "label") == 0) 103 concat_label(req); 104 else if (strcmp(name, "clear") == 0) 105 concat_clear(req); --- 4 unchanged lines hidden (view full) --- 110} 111 112static void 113concat_label(struct gctl_req *req) 114{ 115 struct g_concat_metadata md; 116 u_char sector[512]; 117 const char *name; |
118 char param[16]; 119 unsigned i; 120 int *hardcode, *nargs, error; | 118 int error, i, hardcode, nargs; |
121 | 119 |
122 nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); 123 if (nargs == NULL) { 124 gctl_error(req, "No '%s' argument.", "nargs"); 125 return; 126 } 127 if (*nargs <= 2) { | 120 nargs = gctl_get_int(req, "nargs"); 121 if (nargs <= 2) { |
128 gctl_error(req, "Too few arguments."); 129 return; 130 } | 122 gctl_error(req, "Too few arguments."); 123 return; 124 } |
131 hardcode = gctl_get_paraml(req, "hardcode", sizeof(*hardcode)); 132 if (hardcode == NULL) { 133 gctl_error(req, "No '%s' argument.", "hardcode"); 134 return; 135 } | 125 hardcode = gctl_get_int(req, "hardcode"); |
136 137 /* 138 * Clear last sector first to spoil all components if device exists. 139 */ | 126 127 /* 128 * Clear last sector first to spoil all components if device exists. 129 */ |
140 for (i = 1; i < (unsigned)*nargs; i++) { 141 snprintf(param, sizeof(param), "arg%u", i); 142 name = gctl_get_asciiparam(req, param); 143 | 130 for (i = 1; i < nargs; i++) { 131 name = gctl_get_ascii(req, "arg%d", i); |
144 error = g_metadata_clear(name, NULL); 145 if (error != 0) { 146 gctl_error(req, "Can't store metadata on %s: %s.", name, 147 strerror(error)); 148 return; 149 } 150 } 151 152 strlcpy(md.md_magic, G_CONCAT_MAGIC, sizeof(md.md_magic)); 153 md.md_version = G_CONCAT_VERSION; | 132 error = g_metadata_clear(name, NULL); 133 if (error != 0) { 134 gctl_error(req, "Can't store metadata on %s: %s.", name, 135 strerror(error)); 136 return; 137 } 138 } 139 140 strlcpy(md.md_magic, G_CONCAT_MAGIC, sizeof(md.md_magic)); 141 md.md_version = G_CONCAT_VERSION; |
154 name = gctl_get_asciiparam(req, "arg0"); 155 if (name == NULL) { 156 gctl_error(req, "No 'arg%u' argument.", 0); 157 return; 158 } | 142 name = gctl_get_ascii(req, "arg0"); |
159 strlcpy(md.md_name, name, sizeof(md.md_name)); 160 md.md_id = arc4random(); | 143 strlcpy(md.md_name, name, sizeof(md.md_name)); 144 md.md_id = arc4random(); |
161 md.md_all = *nargs - 1; | 145 md.md_all = nargs - 1; |
162 163 /* 164 * Ok, store metadata. 165 */ | 146 147 /* 148 * Ok, store metadata. 149 */ |
166 for (i = 1; i < (unsigned)*nargs; i++) { 167 snprintf(param, sizeof(param), "arg%u", i); 168 name = gctl_get_asciiparam(req, param); 169 | 150 for (i = 1; i < nargs; i++) { 151 name = gctl_get_ascii(req, "arg%d", i); |
170 md.md_no = i - 1; | 152 md.md_no = i - 1; |
171 if (!*hardcode) | 153 if (!hardcode) |
172 bzero(md.md_provider, sizeof(md.md_provider)); 173 else { 174 if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) 175 name += strlen(_PATH_DEV); 176 strlcpy(md.md_provider, name, sizeof(md.md_provider)); 177 } 178 md.md_provsize = g_get_mediasize(name); 179 if (md.md_provsize == 0) { --- 14 unchanged lines hidden (view full) --- 194 printf("Metadata value stored on %s.\n", name); 195 } 196} 197 198static void 199concat_clear(struct gctl_req *req) 200{ 201 const char *name; | 154 bzero(md.md_provider, sizeof(md.md_provider)); 155 else { 156 if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) 157 name += strlen(_PATH_DEV); 158 strlcpy(md.md_provider, name, sizeof(md.md_provider)); 159 } 160 md.md_provsize = g_get_mediasize(name); 161 if (md.md_provsize == 0) { --- 14 unchanged lines hidden (view full) --- 176 printf("Metadata value stored on %s.\n", name); 177 } 178} 179 180static void 181concat_clear(struct gctl_req *req) 182{ 183 const char *name; |
202 char param[16]; 203 unsigned i; 204 int *nargs, error; | 184 int error, i, nargs; |
205 | 185 |
206 nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); 207 if (nargs == NULL) { 208 gctl_error(req, "No '%s' argument.", "nargs"); 209 return; 210 } 211 if (*nargs < 1) { | 186 nargs = gctl_get_int(req, "nargs"); 187 if (nargs < 1) { |
212 gctl_error(req, "Too few arguments."); 213 return; 214 } 215 | 188 gctl_error(req, "Too few arguments."); 189 return; 190 } 191 |
216 for (i = 0; i < (unsigned)*nargs; i++) { 217 snprintf(param, sizeof(param), "arg%u", i); 218 name = gctl_get_asciiparam(req, param); 219 | 192 for (i = 0; i < nargs; i++) { 193 name = gctl_get_ascii(req, "arg%d", i); |
220 error = g_metadata_clear(name, G_CONCAT_MAGIC); 221 if (error != 0) { 222 fprintf(stderr, "Can't clear metadata on %s: %s.\n", 223 name, strerror(error)); 224 gctl_error(req, "Not fully done."); 225 continue; 226 } 227 if (verbose) --- 14 unchanged lines hidden (view full) --- 242 printf(" Hardcoded provider: %s\n", md->md_provider); 243} 244 245static void 246concat_dump(struct gctl_req *req) 247{ 248 struct g_concat_metadata md, tmpmd; 249 const char *name; | 194 error = g_metadata_clear(name, G_CONCAT_MAGIC); 195 if (error != 0) { 196 fprintf(stderr, "Can't clear metadata on %s: %s.\n", 197 name, strerror(error)); 198 gctl_error(req, "Not fully done."); 199 continue; 200 } 201 if (verbose) --- 14 unchanged lines hidden (view full) --- 216 printf(" Hardcoded provider: %s\n", md->md_provider); 217} 218 219static void 220concat_dump(struct gctl_req *req) 221{ 222 struct g_concat_metadata md, tmpmd; 223 const char *name; |
250 char param[16]; 251 int *nargs, error, i; | 224 int error, i, nargs; |
252 | 225 |
253 nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); 254 if (nargs == NULL) { 255 gctl_error(req, "No '%s' argument.", "nargs"); 256 return; 257 } 258 if (*nargs < 1) { | 226 nargs = gctl_get_int(req, "nargs"); 227 if (nargs < 1) { |
259 gctl_error(req, "Too few arguments."); 260 return; 261 } 262 | 228 gctl_error(req, "Too few arguments."); 229 return; 230 } 231 |
263 for (i = 0; i < *nargs; i++) { 264 snprintf(param, sizeof(param), "arg%u", i); 265 name = gctl_get_asciiparam(req, param); 266 | 232 for (i = 0; i < nargs; i++) { 233 name = gctl_get_ascii(req, "arg%d", i); |
267 error = g_metadata_read(name, (u_char *)&tmpmd, sizeof(tmpmd), 268 G_CONCAT_MAGIC); 269 if (error != 0) { 270 fprintf(stderr, "Can't read metadata from %s: %s.\n", 271 name, strerror(error)); 272 gctl_error(req, "Not fully done."); 273 continue; 274 } 275 concat_metadata_decode((u_char *)&tmpmd, &md); 276 printf("Metadata on %s:\n", name); 277 concat_metadata_dump(&md); 278 printf("\n"); 279 } 280} | 234 error = g_metadata_read(name, (u_char *)&tmpmd, sizeof(tmpmd), 235 G_CONCAT_MAGIC); 236 if (error != 0) { 237 fprintf(stderr, "Can't read metadata from %s: %s.\n", 238 name, strerror(error)); 239 gctl_error(req, "Not fully done."); 240 continue; 241 } 242 concat_metadata_decode((u_char *)&tmpmd, &md); 243 printf("Metadata on %s:\n", name); 244 concat_metadata_dump(&md); 245 printf("\n"); 246 } 247} |