xref: /titanic_51/usr/src/cmd/volrmmount/volrmmount.c (revision 97ddcdce0091922bf2049977a3d42ba4fc0857a6)
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
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
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