Deleted Added
full compact
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: */