Annotation of src/sbin/gpt/destroy.c, Revision 1.2.2.1
1.1 christos 1: /*-
2: * Copyright (c) 2002 Marcel Moolenaar
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: *
9: * 1. Redistributions of source code must retain the above copyright
10: * notice, this list of conditions and the following disclaimer.
11: * 2. Redistributions in binary form must reproduce the above copyright
12: * notice, this list of conditions and the following disclaimer in the
13: * documentation and/or other materials provided with the distribution.
14: *
15: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25: */
26:
27: #include <sys/cdefs.h>
1.2 christos 28: #ifdef __FBSDID
1.1 christos 29: __FBSDID("$FreeBSD: src/sbin/gpt/destroy.c,v 1.6 2005/08/31 01:47:19 marcel Exp $");
1.2 christos 30: #endif
31: #ifdef __RCSID
1.2.2.1 ! jdc 32: __RCSID("$NetBSD: destroy.c,v 1.2 2006/10/15 22:36:29 christos Exp $");
1.2 christos 33: #endif
1.1 christos 34:
35: #include <sys/types.h>
36:
37: #include <err.h>
38: #include <stddef.h>
39: #include <stdio.h>
40: #include <stdlib.h>
41: #include <string.h>
42: #include <unistd.h>
43:
44: #include "map.h"
45: #include "gpt.h"
46:
47: static int recoverable;
48:
1.2.2.1 ! jdc 49: const char destroymsg[] = "destroy [-r] device ...";
! 50:
1.1 christos 51: static void
52: usage_destroy(void)
53: {
54:
55: fprintf(stderr,
1.2.2.1 ! jdc 56: "usage: %s %s\n", getprogname(), destroymsg);
1.1 christos 57: exit(1);
58: }
59:
60: static void
61: destroy(int fd)
62: {
63: map_t *pri_hdr, *sec_hdr;
64:
65: pri_hdr = map_find(MAP_TYPE_PRI_GPT_HDR);
66: sec_hdr = map_find(MAP_TYPE_SEC_GPT_HDR);
67:
68: if (pri_hdr == NULL && sec_hdr == NULL) {
69: warnx("%s: error: device doesn't contain a GPT", device_name);
70: return;
71: }
72:
73: if (recoverable && sec_hdr == NULL) {
74: warnx("%s: error: recoverability not possible", device_name);
75: return;
76: }
77:
78: if (pri_hdr != NULL) {
79: bzero(pri_hdr->map_data, secsz);
80: gpt_write(fd, pri_hdr);
81: }
82:
83: if (!recoverable && sec_hdr != NULL) {
84: bzero(sec_hdr->map_data, secsz);
85: gpt_write(fd, sec_hdr);
86: }
87: }
88:
89: int
90: cmd_destroy(int argc, char *argv[])
91: {
92: int ch, fd;
93:
94: while ((ch = getopt(argc, argv, "r")) != -1) {
95: switch(ch) {
96: case 'r':
97: recoverable = 1;
98: break;
99: default:
100: usage_destroy();
101: }
102: }
103:
104: if (argc == optind)
105: usage_destroy();
106:
107: while (optind < argc) {
108: fd = gpt_open(argv[optind++]);
109: if (fd == -1) {
110: warn("unable to open device '%s'", device_name);
111: continue;
112: }
113:
114: destroy(fd);
115:
116: gpt_close(fd);
117: }
118:
119: return (0);
120: }
CVSweb <webmaster@jp.NetBSD.org>