17574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall/* 27574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * Copyright (C) 2012 The Android Open Source Project 37574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * 47574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * Licensed under the Apache License, Version 2.0 (the "License"); 57574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * you may not use this file except in compliance with the License. 67574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * You may obtain a copy of the License at 77574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * 87574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * http://www.apache.org/licenses/LICENSE-2.0 97574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * 107574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * Unless required by applicable law or agreed to in writing, software 117574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * distributed under the License is distributed on an "AS IS" BASIS, 127574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * See the License for the specific language governing permissions and 147574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * limitations under the License. 157574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall */ 167574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 177574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall#include <stdio.h> 187574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall#include <string.h> 197574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall#include <stdlib.h> 207574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall#include <libgen.h> 217574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall#include "fs_mgr_priv.h" 227574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 237574c035b2dcf8316c562c648113be6be65cb061Ken Sumrallchar *me = ""; 247574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 257574c035b2dcf8316c562c648113be6be65cb061Ken Sumrallstatic void usage(void) 267574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall{ 277574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall ERROR("%s: usage: %s <-a | -n mnt_point blk_dev | -u> <fstab_file>\n", me, me); 287574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall exit(1); 297574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall} 307574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 317574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall/* Parse the command line. If an error is encountered, print an error message 327574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * and exit the program, do not return to the caller. 337574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall * Return the number of argv[] entries consumed. 347574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall */ 357574c035b2dcf8316c562c648113be6be65cb061Ken Sumrallstatic void parse_options(int argc, char *argv[], int *a_flag, int *u_flag, int *n_flag, 367574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall char **n_name, char **n_blk_dev) 377574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall{ 387574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall me = basename(strdup(argv[0])); 397574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 407574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall if (argc <= 1) { 417574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall usage(); 427574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } 437574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 447574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall if (!strcmp(argv[1], "-a")) { 457574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall if (argc != 3) { 467574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall usage(); 477574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } 487574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall *a_flag = 1; 497574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } 507574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall if (!strcmp(argv[1], "-n")) { 517574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall if (argc != 5) { 527574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall usage(); 537574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } 547574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall *n_flag = 1; 557574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall *n_name = argv[2]; 567574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall *n_blk_dev = argv[3]; 577574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } 587574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall if (!strcmp(argv[1], "-u")) { 597574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall if (argc != 3) { 607574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall usage(); 617574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } 627574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall *u_flag = 1; 637574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } 647574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 657574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall /* If no flag is specified, it's an error */ 667574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall if (!(*a_flag | *n_flag | *u_flag)) { 677574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall usage(); 687574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } 697574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 707574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall /* If more than one flag is specified, it's an error */ 717574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall if ((*a_flag + *n_flag + *u_flag) > 1) { 727574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall usage(); 737574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } 747574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 757574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall return; 767574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall} 777574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 787574c035b2dcf8316c562c648113be6be65cb061Ken Sumrallint main(int argc, char *argv[]) 797574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall{ 807574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall int a_flag=0; 817574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall int u_flag=0; 827574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall int n_flag=0; 83cdc1cfb3e51f3caddc1f290b46dc789c036f22edSasha Levitskiy char *n_name=NULL; 84cdc1cfb3e51f3caddc1f290b46dc789c036f22edSasha Levitskiy char *n_blk_dev=NULL; 85cdc1cfb3e51f3caddc1f290b46dc789c036f22edSasha Levitskiy char *fstab_file=NULL; 86cdc1cfb3e51f3caddc1f290b46dc789c036f22edSasha Levitskiy struct fstab *fstab=NULL; 877574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 887574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall klog_init(); 897574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall klog_set_level(6); 907574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 917574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall parse_options(argc, argv, &a_flag, &u_flag, &n_flag, &n_name, &n_blk_dev); 927574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 937574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall /* The name of the fstab file is last, after the option */ 94ab6b852235d99d752678312c155a3f1c140fb483Ken Sumrall fstab_file = argv[argc - 1]; 95ab6b852235d99d752678312c155a3f1c140fb483Ken Sumrall 96ab6b852235d99d752678312c155a3f1c140fb483Ken Sumrall fstab = fs_mgr_read_fstab(fstab_file); 977574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 987574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall if (a_flag) { 997574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall return fs_mgr_mount_all(fstab); 1007574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } else if (n_flag) { 1017574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall return fs_mgr_do_mount(fstab, n_name, n_blk_dev, 0); 1027574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } else if (u_flag) { 1037574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall return fs_mgr_unmount_all(fstab); 1047574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } else { 1057574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall ERROR("%s: Internal error, unknown option\n", me); 1067574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall exit(1); 1077574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall } 1087574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 109ab6b852235d99d752678312c155a3f1c140fb483Ken Sumrall fs_mgr_free_fstab(fstab); 110ab6b852235d99d752678312c155a3f1c140fb483Ken Sumrall 1117574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall /* Should not get here */ 1127574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall exit(1); 1137574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall} 1147574c035b2dcf8316c562c648113be6be65cb061Ken Sumrall 115