119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * test_extent.c --- tester for the extent abstraction 319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * 419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Copyright (C) 1997, 1998 by Theodore Ts'o and 519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * PowerQuest, Inc. 619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * 719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Copyright (C) 1999, 2000 by Theosore Ts'o 819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * 919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * %Begin-Header% 1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * This file may be redistributed under the terms of the GNU Public 1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * License. 1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * %End-Header% 1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "resize2fs.h" 1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid do_test(FILE *in, FILE *out); 1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid do_test(FILE *in, FILE *out) 2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char buf[128]; 2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char *cp, *cmd, *arg1, *arg2; 2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project __u32 num1, num2; 2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int size; 2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project errcode_t retval; 2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2_extent extent = 0; 2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project const char *no_table = "# No extent table\n"; 2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project while (!feof(in)) { 3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (!fgets(buf, sizeof(buf), in)) 3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project break; 3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project /* 3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Ignore comments 3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (buf[0] =='#') 3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project continue; 3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project /* 3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Echo command 4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fputs(buf, out); 4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project cp = strchr(buf, '\n'); 4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (cp) 4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project *cp = '\0'; 4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project /* 4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Parse command line; simple, at most two arguments 4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project cmd = buf; 5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project num1 = num2 = 0; 5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project arg1 = arg2 = 0; 5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project cp = strchr(buf, ' '); 5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (cp) { 5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project *cp++ = '\0'; 5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project arg1 = cp; 5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project num1 = strtoul(arg1, 0, 0); 5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project cp = strchr(cp, ' '); 6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (cp) { 6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project *cp++ = '\0'; 6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project arg2 = cp; 6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project num2 = strtoul(arg2, 0, 0); 6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (!strcmp(cmd, "create")) { 6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project retval = ext2fs_create_extent_table(&extent, num1); 6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (retval) { 7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project handle_error: 7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fprintf(out, "# Error: %s\n", 7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project error_message(retval)); 7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project continue; 7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project continue; 7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (!extent) { 7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fputs(no_table, out); 7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project continue; 8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (!strcmp(cmd, "free")) { 8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_extent_table(extent); 8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project extent = 0; 8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } else if (!strcmp(cmd, "add")) { 8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project retval = ext2fs_add_extent_entry(extent, num1, num2); 8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (retval) 8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project goto handle_error; 8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } else if (!strcmp(cmd, "lookup")) { 8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project num2 = ext2fs_extent_translate(extent, num1); 9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fprintf(out, "# Answer: %u%s\n", num2, 9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project num2 ? "" : " (not found)"); 9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } else if (!strcmp(cmd, "dump")) { 9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_extent_dump(extent, out); 9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } else if (!strcmp(cmd, "iter_test")) { 9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project retval = ext2fs_iterate_extent(extent, 0, 0, 0); 9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (retval) 9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project goto handle_error; 9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project while (1) { 9919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project retval = ext2fs_iterate_extent(extent, 10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project &num1, &num2, &size); 10119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (retval) 10219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project goto handle_error; 10319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (!size) 10419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project break; 10519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fprintf(out, "# %u -> %u (%d)\n", 10619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project num1, num2, size); 10719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 10819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } else 10919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fputs("# Syntax error\n", out); 11019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 11119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 11219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 11319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint main(int argc, char **argv) 11419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 11519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project do_test(stdin, stdout); 11619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project exit(0); 11719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 118