Merge commit '37e84ab74e939caf52150fc3352081786ecc0c29' into merges
[unleashed.git] / usr / src / cmd / volrmmount / volrmmount.c
blobf95af420be304705bac071a0ffc4ae2d97e5b1a8
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <unistd.h>
29 #include <fcntl.h>
30 #include <string.h>
31 #include <strings.h>
32 #include <dirent.h>
33 #include <signal.h>
34 #include <errno.h>
35 #include <libintl.h>
36 #include <sys/types.h>
38 #include "vold.h"
39 #include "rmm_common.h"
41 char *progname = "volrmmount";
43 static void
44 usage()
46 (void) fprintf(stderr,
47 gettext(
48 "\nusage: %s [-i | -e] [DEVICE | NICKNAME]\n"),
49 progname);
50 (void) fprintf(stderr,
51 gettext("or: %s -d\n"), progname);
52 (void) fprintf(stderr,
53 gettext(
54 "options:\t-i simulate volume being put in/inserted\n"));
55 (void) fprintf(stderr,
56 gettext(
57 "options:\t-e simulate volume being taken out/ejected\n"));
58 (void) fprintf(stderr,
59 gettext("options:\t-d show default device\n"));
60 (void) fprintf(stderr,
61 gettext(
62 "\nThis command is deprecated. Use rmmount(1) instead.\n"));
65 int
66 main(int argc, char **argv)
68 const char *opts = "ied";
69 int c;
70 boolean_t opt_insert = B_FALSE;
71 boolean_t opt_eject = B_FALSE;
72 boolean_t opt_default = B_FALSE;
73 action_t action;
74 LibHalContext *hal_ctx;
75 DBusError error;
76 rmm_error_t rmm_error;
77 LibHalDrive *d;
78 GSList *volumes;
79 const char *default_name;
80 int ret = 0;
82 while ((c = getopt(argc, argv, opts)) != EOF) {
83 switch (c) {
84 case 'i':
85 opt_insert = B_TRUE;
86 action = REMOUNT;
87 break;
88 case 'e':
89 opt_eject = B_TRUE;
90 action = UNMOUNT;
91 break;
92 case 'd':
93 opt_default = B_TRUE;
94 break;
95 default:
96 usage();
97 return (1);
100 if ((opt_insert && opt_eject) ||
101 (!opt_insert && !opt_eject && !opt_default)) {
102 usage();
103 return (1);
106 if ((hal_ctx = rmm_hal_init(0, 0, 0, 0, &error, &rmm_error)) == NULL) {
107 (void) fprintf(stderr,
108 gettext("HAL initialization failed: %s\n"),
109 rmm_strerror(&error, rmm_error));
110 rmm_dbus_error_free(&error);
111 return (1);
114 if (opt_default) {
115 /* -d: print default name and exit */
116 if ((d = rmm_hal_volume_find_default(hal_ctx, &error,
117 &default_name, &volumes)) == NULL) {
118 default_name = "nothing inserted";
119 } else {
120 rmm_volumes_free(volumes);
121 libhal_drive_free(d);
123 (void) printf(gettext("Default device is: %s\n"), default_name);
124 } else if (optind == argc) {
125 /* no name provided, use default */
126 if ((d = rmm_hal_volume_find_default(hal_ctx, &error,
127 &default_name, &volumes)) == NULL) {
128 (void) fprintf(stderr,
129 gettext("No default media available\n"));
130 ret = 1;
131 } else {
132 rmm_volumes_free(volumes);
133 libhal_drive_free(d);
134 if (!rmm_action(hal_ctx, default_name, action,
135 0, 0, 0, 0)) {
136 ret = 1;
139 } else {
140 for (; optind < argc; optind++) {
141 if (rmm_action(hal_ctx, argv[optind], action,
142 0, 0, 0, 0) != 0) {
143 ret = 1;
148 rmm_hal_fini(hal_ctx);
150 return (ret);