ccdconfig.c (83329) | ccdconfig.c (92539) |
---|---|
1/* $NetBSD: ccdconfig.c,v 1.2.2.1 1995/11/11 02:43:35 thorpej Exp $ */ 2 3/* 4 * Copyright (c) 1995 Jason R. Thorpe. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 20 unchanged lines hidden (view full) --- 29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * SUCH DAMAGE. 33 */ 34 35#ifndef lint 36static const char rcsid[] = | 1/* $NetBSD: ccdconfig.c,v 1.2.2.1 1995/11/11 02:43:35 thorpej Exp $ */ 2 3/* 4 * Copyright (c) 1995 Jason R. Thorpe. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 20 unchanged lines hidden (view full) --- 29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * SUCH DAMAGE. 33 */ 34 35#ifndef lint 36static const char rcsid[] = |
37 "$FreeBSD: head/sbin/ccdconfig/ccdconfig.c 83329 2001-09-11 09:49:36Z ru $"; | 37 "$FreeBSD: head/sbin/ccdconfig/ccdconfig.c 92539 2002-03-18 05:00:52Z imp $"; |
38#endif /* not lint */ 39 40#include <sys/param.h> 41#include <sys/linker.h> 42#include <sys/disklabel.h> 43#include <sys/stat.h> 44#include <sys/module.h> 45#include <ctype.h> --- 28 unchanged lines hidden (view full) --- 74}; 75 76#define CCD_CONFIG 0 /* configure a device */ 77#define CCD_CONFIGALL 1 /* configure all devices */ 78#define CCD_UNCONFIG 2 /* unconfigure a device */ 79#define CCD_UNCONFIGALL 3 /* unconfigure all devices */ 80#define CCD_DUMP 4 /* dump a ccd's configuration */ 81 | 38#endif /* not lint */ 39 40#include <sys/param.h> 41#include <sys/linker.h> 42#include <sys/disklabel.h> 43#include <sys/stat.h> 44#include <sys/module.h> 45#include <ctype.h> --- 28 unchanged lines hidden (view full) --- 74}; 75 76#define CCD_CONFIG 0 /* configure a device */ 77#define CCD_CONFIGALL 1 /* configure all devices */ 78#define CCD_UNCONFIG 2 /* unconfigure a device */ 79#define CCD_UNCONFIGALL 3 /* unconfigure all devices */ 80#define CCD_DUMP 4 /* dump a ccd's configuration */ 81 |
82static int checkdev __P((char *)); 83static int do_io __P((char *, u_long, struct ccd_ioctl *)); 84static int do_single __P((int, char **, int)); 85static int do_all __P((int)); 86static int dump_ccd __P((int, char **)); 87static int getmaxpartitions __P((void)); 88static int getrawpartition __P((void)); 89static int flags_to_val __P((char *)); 90static void print_ccd_info __P((struct ccd_s *)); 91static char *resolve_ccdname __P((char *)); 92static void usage __P((void)); | 82static int checkdev(char *); 83static int do_io(char *, u_long, struct ccd_ioctl *); 84static int do_single(int, char **, int); 85static int do_all(int); 86static int dump_ccd(int, char **); 87static int getmaxpartitions(void); 88static int getrawpartition(void); 89static int flags_to_val(char *); 90static void print_ccd_info(struct ccd_s *); 91static char *resolve_ccdname(char *); 92static void usage(void); |
93 94int | 93 94int |
95main(argc, argv) 96 int argc; 97 char **argv; | 95main(int argc, char *argv[]) |
98{ 99 int ch, options = 0, action = CCD_CONFIG; 100 101 while ((ch = getopt(argc, argv, "cCf:guUv")) != -1) { 102 switch (ch) { 103 case 'c': 104 action = CCD_CONFIG; 105 ++options; --- 57 unchanged lines hidden (view full) --- 163 exit(dump_ccd(argc, argv)); 164 /* NOTREACHED */ 165 } 166 /* NOTREACHED */ 167 return (0); 168} 169 170static int | 96{ 97 int ch, options = 0, action = CCD_CONFIG; 98 99 while ((ch = getopt(argc, argv, "cCf:guUv")) != -1) { 100 switch (ch) { 101 case 'c': 102 action = CCD_CONFIG; 103 ++options; --- 57 unchanged lines hidden (view full) --- 161 exit(dump_ccd(argc, argv)); 162 /* NOTREACHED */ 163 } 164 /* NOTREACHED */ 165 return (0); 166} 167 168static int |
171do_single(argc, argv, action) 172 int argc; 173 char **argv; 174 int action; | 169do_single(int argc, char **argv, int action) |
175{ 176 struct ccd_ioctl ccio; 177 char *ccd, *cp, *cp2, **disks; 178 int noflags = 0, i, ileave, flags = 0, j; 179 180 bzero(&ccio, sizeof(ccio)); 181 182 /* --- 101 unchanged lines hidden (view full) --- 284 printf("concatenated\n"); 285 } 286 287 free(disks); 288 return (0); 289} 290 291static int | 170{ 171 struct ccd_ioctl ccio; 172 char *ccd, *cp, *cp2, **disks; 173 int noflags = 0, i, ileave, flags = 0, j; 174 175 bzero(&ccio, sizeof(ccio)); 176 177 /* --- 101 unchanged lines hidden (view full) --- 279 printf("concatenated\n"); 280 } 281 282 free(disks); 283 return (0); 284} 285 286static int |
292do_all(action) 293 int action; | 287do_all(int action) |
294{ 295 FILE *f; 296 char line[_POSIX2_LINE_MAX]; 297 char *cp, **argv; 298 int argc, rval; 299 gid_t egid; 300 301 rval = 0; --- 47 unchanged lines hidden (view full) --- 349 free(argv); 350 } 351 352 (void)fclose(f); 353 return (rval); 354} 355 356static int | 288{ 289 FILE *f; 290 char line[_POSIX2_LINE_MAX]; 291 char *cp, **argv; 292 int argc, rval; 293 gid_t egid; 294 295 rval = 0; --- 47 unchanged lines hidden (view full) --- 343 free(argv); 344 } 345 346 (void)fclose(f); 347 return (rval); 348} 349 350static int |
357checkdev(path) 358 char *path; | 351checkdev(char *path) |
359{ 360 struct stat st; 361 362 if (stat(path, &st) != 0) 363 return (errno); 364 365 if (!S_ISBLK(st.st_mode) && !S_ISCHR(st.st_mode)) 366 return (EINVAL); 367 368 return (0); 369} 370 371static int | 352{ 353 struct stat st; 354 355 if (stat(path, &st) != 0) 356 return (errno); 357 358 if (!S_ISBLK(st.st_mode) && !S_ISCHR(st.st_mode)) 359 return (EINVAL); 360 361 return (0); 362} 363 364static int |
372pathtounit(path, unitp) 373 char *path; 374 int *unitp; | 365pathtounit(char *path, int *unitp) |
375{ 376 struct stat st; 377 int maxpartitions; 378 379 if (stat(path, &st) != 0) 380 return (errno); 381 382 if (!S_ISBLK(st.st_mode) && !S_ISCHR(st.st_mode)) 383 return (EINVAL); 384 385 if ((maxpartitions = getmaxpartitions()) < 0) 386 return (errno); 387 388 *unitp = minor(st.st_rdev) / maxpartitions; 389 390 return (0); 391} 392 393static char * | 366{ 367 struct stat st; 368 int maxpartitions; 369 370 if (stat(path, &st) != 0) 371 return (errno); 372 373 if (!S_ISBLK(st.st_mode) && !S_ISCHR(st.st_mode)) 374 return (EINVAL); 375 376 if ((maxpartitions = getmaxpartitions()) < 0) 377 return (errno); 378 379 *unitp = minor(st.st_rdev) / maxpartitions; 380 381 return (0); 382} 383 384static char * |
394resolve_ccdname(name) 395 char *name; | 385resolve_ccdname(char *name) |
396{ 397 char c, *path; 398 size_t len, newlen; 399 int rawpart; 400 401 if (name[0] == '/' || name[0] == '.') { 402 /* Assume they gave the correct pathname. */ 403 return (strdup(name)); --- 15 unchanged lines hidden (view full) --- 419 (void)sprintf(path, "%s%s%c", _PATH_DEV, name, 'a' + rawpart); 420 } else 421 (void)sprintf(path, "%s%s", _PATH_DEV, name); 422 423 return (path); 424} 425 426static int | 386{ 387 char c, *path; 388 size_t len, newlen; 389 int rawpart; 390 391 if (name[0] == '/' || name[0] == '.') { 392 /* Assume they gave the correct pathname. */ 393 return (strdup(name)); --- 15 unchanged lines hidden (view full) --- 409 (void)sprintf(path, "%s%s%c", _PATH_DEV, name, 'a' + rawpart); 410 } else 411 (void)sprintf(path, "%s%s", _PATH_DEV, name); 412 413 return (path); 414} 415 416static int |
427do_io(path, cmd, cciop) 428 char *path; 429 u_long cmd; 430 struct ccd_ioctl *cciop; | 417do_io(char *path, u_long cmd, struct ccd_ioctl *cciop) |
431{ 432 int fd; 433 char *cp; 434 435 if ((fd = open(path, O_RDWR, 0640)) < 0) { 436 warn("open: %s", path); 437 return (1); 438 } --- 22 unchanged lines hidden (view full) --- 461 warn("ioctl (%s): %s", cp, path); 462 return (1); 463 } 464 465 return (0); 466} 467 468static int | 418{ 419 int fd; 420 char *cp; 421 422 if ((fd = open(path, O_RDWR, 0640)) < 0) { 423 warn("open: %s", path); 424 return (1); 425 } --- 22 unchanged lines hidden (view full) --- 448 warn("ioctl (%s): %s", cp, path); 449 return (1); 450 } 451 452 return (0); 453} 454 455static int |
469dump_ccd(argc, argv) 470 int argc; 471 char **argv; | 456dump_ccd(int argc, char **argv) |
472{ 473 char *ccd, *cp; 474 int i, error, numccd, numconfiged = 0; 475 struct ccdconf conf; 476 477 /* 478 * Read the ccd configuration data from the kernel and dump 479 * it to stdout. --- 48 unchanged lines hidden (view full) --- 528 } 529 } 530 } 531 532 return (0); 533} 534 535static void | 457{ 458 char *ccd, *cp; 459 int i, error, numccd, numconfiged = 0; 460 struct ccdconf conf; 461 462 /* 463 * Read the ccd configuration data from the kernel and dump 464 * it to stdout. --- 48 unchanged lines hidden (view full) --- 513 } 514 } 515 } 516 517 return (0); 518} 519 520static void |
536print_ccd_info(cs) 537 struct ccd_s *cs; | 521print_ccd_info(struct ccd_s *cs) |
538{ 539 char *cp, *ccd; 540 static int header_printed = 0; 541 struct ccdcpps cpps; 542 543 /* Print out header if necessary*/ 544 if (header_printed == 0 && verbose) { 545 printf("# ccd\t\tileave\tflags\tcompnent devices\n"); --- 44 unchanged lines hidden (view full) --- 590 printf((cp + strlen(cp) + 1) < (cpps.buffer + cpps.size) ? 591 "%s " : "%s\n", cp); 592 fflush(stdout); 593 } 594 return; 595} 596 597static int | 522{ 523 char *cp, *ccd; 524 static int header_printed = 0; 525 struct ccdcpps cpps; 526 527 /* Print out header if necessary*/ 528 if (header_printed == 0 && verbose) { 529 printf("# ccd\t\tileave\tflags\tcompnent devices\n"); --- 44 unchanged lines hidden (view full) --- 574 printf((cp + strlen(cp) + 1) < (cpps.buffer + cpps.size) ? 575 "%s " : "%s\n", cp); 576 fflush(stdout); 577 } 578 return; 579} 580 581static int |
598getmaxpartitions() | 582getmaxpartitions(void) |
599{ 600 return (MAXPARTITIONS); 601} 602 603static int | 583{ 584 return (MAXPARTITIONS); 585} 586 587static int |
604getrawpartition() | 588getrawpartition(void) |
605{ 606 return (RAW_PART); 607} 608 609static int | 589{ 590 return (RAW_PART); 591} 592 593static int |
610flags_to_val(flags) 611 char *flags; | 594flags_to_val(char *flags) |
612{ 613 char *cp, *tok; 614 int i, tmp, val = ~CCDF_USERMASK; 615 size_t flagslen; 616 617 /* 618 * The most common case is that of NIL flags, so check for 619 * those first. --- 41 unchanged lines hidden (view full) --- 661 if ((errno == ERANGE) || (*cp != '\0')) 662 return (-1); 663 664 out: 665 return (((val & ~CCDF_USERMASK) == 0) ? val : -1); 666} 667 668static void | 595{ 596 char *cp, *tok; 597 int i, tmp, val = ~CCDF_USERMASK; 598 size_t flagslen; 599 600 /* 601 * The most common case is that of NIL flags, so check for 602 * those first. --- 41 unchanged lines hidden (view full) --- 644 if ((errno == ERANGE) || (*cp != '\0')) 645 return (-1); 646 647 out: 648 return (((val & ~CCDF_USERMASK) == 0) ? val : -1); 649} 650 651static void |
669usage() | 652usage(void) |
670{ 671 fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n", 672 "usage: ccdconfig [-cv] ccd ileave [flags] dev [...]", 673 " ccdconfig -C [-v] [-f config_file]", 674 " ccdconfig -u [-v] ccd [...]", 675 " ccdconfig -U [-v] [-f config_file]", 676 " ccdconfig -g [ccd [...]]"); 677 exit(1); 678} 679 680/* Local Variables: */ 681/* c-argdecl-indent: 8 */ 682/* c-indent-level: 8 */ 683/* End: */ | 653{ 654 fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n", 655 "usage: ccdconfig [-cv] ccd ileave [flags] dev [...]", 656 " ccdconfig -C [-v] [-f config_file]", 657 " ccdconfig -u [-v] ccd [...]", 658 " ccdconfig -U [-v] [-f config_file]", 659 " ccdconfig -g [ccd [...]]"); 660 exit(1); 661} 662 663/* Local Variables: */ 664/* c-argdecl-indent: 8 */ 665/* c-indent-level: 8 */ 666/* End: */ |