1671cd2188e2f224aaeac4955785199f228235719Ken Sumrall/* 2671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * Copyright (C) 2010 The Android Open Source Project 3671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * 4671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * Licensed under the Apache License, Version 2.0 (the "License"); 5671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * you may not use this file except in compliance with the License. 6671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * You may obtain a copy of the License at 7671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * 8671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * http://www.apache.org/licenses/LICENSE-2.0 9671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * 10671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * Unless required by applicable law or agreed to in writing, software 11671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * distributed under the License is distributed on an "AS IS" BASIS, 12671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * See the License for the specific language governing permissions and 14671cd2188e2f224aaeac4955785199f228235719Ken Sumrall * limitations under the License. 15671cd2188e2f224aaeac4955785199f228235719Ken Sumrall */ 16671cd2188e2f224aaeac4955785199f228235719Ken Sumrall 17671cd2188e2f224aaeac4955785199f228235719Ken Sumrall#include <unistd.h> 18671cd2188e2f224aaeac4955785199f228235719Ken Sumrall#include <libgen.h> 19671cd2188e2f224aaeac4955785199f228235719Ken Sumrall#include <stdio.h> 20671cd2188e2f224aaeac4955785199f228235719Ken Sumrall#include <stdlib.h> 21671cd2188e2f224aaeac4955785199f228235719Ken Sumrall#include "ext4fixup.h" 22671cd2188e2f224aaeac4955785199f228235719Ken Sumrall 23671cd2188e2f224aaeac4955785199f228235719Ken Sumrallstatic void usage(char *me) 24671cd2188e2f224aaeac4955785199f228235719Ken Sumrall{ 25671cd2188e2f224aaeac4955785199f228235719Ken Sumrall fprintf(stderr, "%s: usage: %s [-vn] <image or block device>\n", me, me); 26671cd2188e2f224aaeac4955785199f228235719Ken Sumrall} 27671cd2188e2f224aaeac4955785199f228235719Ken Sumrall 28671cd2188e2f224aaeac4955785199f228235719Ken Sumrallint main(int argc, char **argv) 29671cd2188e2f224aaeac4955785199f228235719Ken Sumrall{ 30671cd2188e2f224aaeac4955785199f228235719Ken Sumrall int opt; 31671cd2188e2f224aaeac4955785199f228235719Ken Sumrall int verbose = 0; 32671cd2188e2f224aaeac4955785199f228235719Ken Sumrall int no_write = 0; 33671cd2188e2f224aaeac4955785199f228235719Ken Sumrall char *fsdev; 34671cd2188e2f224aaeac4955785199f228235719Ken Sumrall char *me; 357e5ff13c55eb29748c07768bd7134819cbcbd4b0Ken Sumrall int stop_phase = 0, stop_loc = 0, stop_count = 0; 36671cd2188e2f224aaeac4955785199f228235719Ken Sumrall 37671cd2188e2f224aaeac4955785199f228235719Ken Sumrall me = basename(argv[0]); 38671cd2188e2f224aaeac4955785199f228235719Ken Sumrall 397e5ff13c55eb29748c07768bd7134819cbcbd4b0Ken Sumrall while ((opt = getopt(argc, argv, "vnd:")) != -1) { 40671cd2188e2f224aaeac4955785199f228235719Ken Sumrall switch (opt) { 41671cd2188e2f224aaeac4955785199f228235719Ken Sumrall case 'v': 42671cd2188e2f224aaeac4955785199f228235719Ken Sumrall verbose = 1; 43671cd2188e2f224aaeac4955785199f228235719Ken Sumrall break; 44671cd2188e2f224aaeac4955785199f228235719Ken Sumrall case 'n': 45671cd2188e2f224aaeac4955785199f228235719Ken Sumrall no_write = 1; 46671cd2188e2f224aaeac4955785199f228235719Ken Sumrall break; 477e5ff13c55eb29748c07768bd7134819cbcbd4b0Ken Sumrall case 'd': 487e5ff13c55eb29748c07768bd7134819cbcbd4b0Ken Sumrall sscanf(optarg, "%d,%d,%d", &stop_phase, &stop_loc, &stop_count); 497e5ff13c55eb29748c07768bd7134819cbcbd4b0Ken Sumrall break; 50671cd2188e2f224aaeac4955785199f228235719Ken Sumrall } 51671cd2188e2f224aaeac4955785199f228235719Ken Sumrall } 52671cd2188e2f224aaeac4955785199f228235719Ken Sumrall 53671cd2188e2f224aaeac4955785199f228235719Ken Sumrall if (optind >= argc) { 54671cd2188e2f224aaeac4955785199f228235719Ken Sumrall fprintf(stderr, "expected image or block device after options\n"); 55671cd2188e2f224aaeac4955785199f228235719Ken Sumrall usage(me); 56671cd2188e2f224aaeac4955785199f228235719Ken Sumrall exit(EXIT_FAILURE); 57671cd2188e2f224aaeac4955785199f228235719Ken Sumrall } 58671cd2188e2f224aaeac4955785199f228235719Ken Sumrall 59671cd2188e2f224aaeac4955785199f228235719Ken Sumrall fsdev = argv[optind++]; 60671cd2188e2f224aaeac4955785199f228235719Ken Sumrall 61671cd2188e2f224aaeac4955785199f228235719Ken Sumrall if (optind < argc) { 62671cd2188e2f224aaeac4955785199f228235719Ken Sumrall fprintf(stderr, "Unexpected argument: %s\n", argv[optind]); 63671cd2188e2f224aaeac4955785199f228235719Ken Sumrall usage(me); 64671cd2188e2f224aaeac4955785199f228235719Ken Sumrall exit(EXIT_FAILURE); 65671cd2188e2f224aaeac4955785199f228235719Ken Sumrall } 66671cd2188e2f224aaeac4955785199f228235719Ken Sumrall 677e5ff13c55eb29748c07768bd7134819cbcbd4b0Ken Sumrall return ext4fixup_internal(fsdev, verbose, no_write, stop_phase, stop_loc, stop_count); 68671cd2188e2f224aaeac4955785199f228235719Ken Sumrall} 69