118c2aff7Sartem /*
218c2aff7Sartem * CDDL HEADER START
318c2aff7Sartem *
418c2aff7Sartem * The contents of this file are subject to the terms of the
518c2aff7Sartem * Common Development and Distribution License (the "License").
618c2aff7Sartem * You may not use this file except in compliance with the License.
718c2aff7Sartem *
818c2aff7Sartem * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
918c2aff7Sartem * or http://www.opensolaris.org/os/licensing.
1018c2aff7Sartem * See the License for the specific language governing permissions
1118c2aff7Sartem * and limitations under the License.
1218c2aff7Sartem *
1318c2aff7Sartem * When distributing Covered Code, include this CDDL HEADER in each
1418c2aff7Sartem * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1518c2aff7Sartem * If applicable, add the following below this CDDL HEADER, with the
1618c2aff7Sartem * fields enclosed by brackets "[]" replaced with your own identifying
1718c2aff7Sartem * information: Portions Copyright [yyyy] [name of copyright owner]
1818c2aff7Sartem *
1918c2aff7Sartem * CDDL HEADER END
2018c2aff7Sartem */
2118c2aff7Sartem /*
22*97ddcdceSArtem Kachitchkine * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
2318c2aff7Sartem * Use is subject to license terms.
2418c2aff7Sartem */
2518c2aff7Sartem
2618c2aff7Sartem #include <stdio.h>
2718c2aff7Sartem #include <stdlib.h>
2818c2aff7Sartem #include <unistd.h>
2918c2aff7Sartem #include <fcntl.h>
3018c2aff7Sartem #include <string.h>
3118c2aff7Sartem #include <strings.h>
3218c2aff7Sartem #include <dirent.h>
3318c2aff7Sartem #include <signal.h>
3418c2aff7Sartem #include <errno.h>
3518c2aff7Sartem #include <libintl.h>
3618c2aff7Sartem #include <sys/types.h>
3718c2aff7Sartem
3818c2aff7Sartem #include "vold.h"
3918c2aff7Sartem #include "rmm_common.h"
4018c2aff7Sartem
4118c2aff7Sartem char *progname = "volrmmount";
4218c2aff7Sartem
4318c2aff7Sartem static void
usage()4418c2aff7Sartem usage()
4518c2aff7Sartem {
4618c2aff7Sartem (void) fprintf(stderr,
4718c2aff7Sartem gettext(
4818c2aff7Sartem "\nusage: %s [-i | -e] [DEVICE | NICKNAME]\n"),
4918c2aff7Sartem progname);
5018c2aff7Sartem (void) fprintf(stderr,
5118c2aff7Sartem gettext("or: %s -d\n"), progname);
5218c2aff7Sartem (void) fprintf(stderr,
5318c2aff7Sartem gettext(
5418c2aff7Sartem "options:\t-i simulate volume being put in/inserted\n"));
5518c2aff7Sartem (void) fprintf(stderr,
5618c2aff7Sartem gettext(
5718c2aff7Sartem "options:\t-e simulate volume being taken out/ejected\n"));
5818c2aff7Sartem (void) fprintf(stderr,
5918c2aff7Sartem gettext("options:\t-d show default device\n"));
6018c2aff7Sartem (void) fprintf(stderr,
6118c2aff7Sartem gettext(
6218c2aff7Sartem "\nThis command is deprecated. Use rmmount(1) instead.\n"));
6318c2aff7Sartem }
6418c2aff7Sartem
6518c2aff7Sartem int
main(int argc,char ** argv)6618c2aff7Sartem main(int argc, char **argv)
6718c2aff7Sartem {
6818c2aff7Sartem const char *opts = "ied";
6918c2aff7Sartem int c;
7018c2aff7Sartem boolean_t opt_insert = B_FALSE;
7118c2aff7Sartem boolean_t opt_eject = B_FALSE;
7218c2aff7Sartem boolean_t opt_default = B_FALSE;
7318c2aff7Sartem action_t action;
7418c2aff7Sartem LibHalContext *hal_ctx;
7518c2aff7Sartem DBusError error;
7618c2aff7Sartem rmm_error_t rmm_error;
7718c2aff7Sartem LibHalDrive *d;
7818c2aff7Sartem GSList *volumes;
7918c2aff7Sartem const char *default_name;
8018c2aff7Sartem int ret = 0;
8118c2aff7Sartem
8218c2aff7Sartem while ((c = getopt(argc, argv, opts)) != EOF) {
8318c2aff7Sartem switch (c) {
8418c2aff7Sartem case 'i':
8518c2aff7Sartem opt_insert = B_TRUE;
8618c2aff7Sartem action = REMOUNT;
8718c2aff7Sartem break;
8818c2aff7Sartem case 'e':
8918c2aff7Sartem opt_eject = B_TRUE;
9018c2aff7Sartem action = UNMOUNT;
9118c2aff7Sartem break;
9218c2aff7Sartem case 'd':
9318c2aff7Sartem opt_default = B_TRUE;
9418c2aff7Sartem break;
9518c2aff7Sartem default:
9618c2aff7Sartem usage();
9718c2aff7Sartem return (1);
9818c2aff7Sartem }
9918c2aff7Sartem }
10018c2aff7Sartem if ((opt_insert && opt_eject) ||
10118c2aff7Sartem (!opt_insert && !opt_eject && !opt_default)) {
10218c2aff7Sartem usage();
10318c2aff7Sartem return (1);
10418c2aff7Sartem }
10518c2aff7Sartem
106*97ddcdceSArtem Kachitchkine if ((hal_ctx = rmm_hal_init(0, 0, 0, 0, &error, &rmm_error)) == NULL) {
10718c2aff7Sartem (void) fprintf(stderr,
10818c2aff7Sartem gettext("HAL initialization failed: %s\n"),
10918c2aff7Sartem rmm_strerror(&error, rmm_error));
11018c2aff7Sartem rmm_dbus_error_free(&error);
11118c2aff7Sartem return (1);
11218c2aff7Sartem }
11318c2aff7Sartem
11418c2aff7Sartem if (opt_default) {
11518c2aff7Sartem /* -d: print default name and exit */
11618c2aff7Sartem if ((d = rmm_hal_volume_find_default(hal_ctx, &error,
11718c2aff7Sartem &default_name, &volumes)) == NULL) {
11818c2aff7Sartem default_name = "nothing inserted";
11918c2aff7Sartem } else {
12018c2aff7Sartem rmm_volumes_free(volumes);
12118c2aff7Sartem libhal_drive_free(d);
12218c2aff7Sartem }
12318c2aff7Sartem (void) printf(gettext("Default device is: %s\n"), default_name);
12418c2aff7Sartem } else if (optind == argc) {
12518c2aff7Sartem /* no name provided, use default */
12618c2aff7Sartem if ((d = rmm_hal_volume_find_default(hal_ctx, &error,
12718c2aff7Sartem &default_name, &volumes)) == NULL) {
12818c2aff7Sartem (void) fprintf(stderr,
12918c2aff7Sartem gettext("No default media available\n"));
13018c2aff7Sartem ret = 1;
13118c2aff7Sartem } else {
13218c2aff7Sartem rmm_volumes_free(volumes);
13318c2aff7Sartem libhal_drive_free(d);
13418c2aff7Sartem if (!rmm_action(hal_ctx, default_name, action,
13518c2aff7Sartem 0, 0, 0, 0)) {
13618c2aff7Sartem ret = 1;
13718c2aff7Sartem }
13818c2aff7Sartem }
13918c2aff7Sartem } else {
14018c2aff7Sartem for (; optind < argc; optind++) {
14118c2aff7Sartem if (rmm_action(hal_ctx, argv[optind], action,
14218c2aff7Sartem 0, 0, 0, 0) != 0) {
14318c2aff7Sartem ret = 1;
14418c2aff7Sartem }
14518c2aff7Sartem }
14618c2aff7Sartem }
14718c2aff7Sartem
14818c2aff7Sartem rmm_hal_fini(hal_ctx);
14918c2aff7Sartem
15018c2aff7Sartem return (ret);
15118c2aff7Sartem }
152