119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * resize2fs.h --- ext2 resizer header file 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 83984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt * 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 <stdio.h> 1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <string.h> 1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef HAVE_UNISTD_H 1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <unistd.h> 1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdlib.h> 2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef HAVE_SYS_TYPES_H 2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <sys/types.h> 2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef HAVE_SYS_TIME_H 2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <sys/time.h> 2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#if HAVE_ERRNO_H 2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <errno.h> 2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#if EXT2_FLAT_INCLUDES 3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "ext2_fs.h" 3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "ext2fs.h" 3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "e2p.h" 3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#else 3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "ext2fs/ext2_fs.h" 3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "ext2fs/ext2fs.h" 3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "e2p/e2p.h" 3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef ENABLE_NLS 4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <libintl.h> 4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <locale.h> 4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define _(a) (gettext (a)) 4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef gettext_noop 4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define N_(a) gettext_noop (a) 4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#else 4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define N_(a) (a) 4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifndef NLS_CAT_NAME 5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define NLS_CAT_NAME "e2fsprogs" 5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifndef LOCALEDIR 5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define LOCALEDIR "/usr/share/locale" 5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#else 5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define _(a) (a) 5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define N_(a) a 5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * For the extent map 6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecttypedef struct _ext2_extent *ext2_extent; 6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * For the simple progress meter 6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecttypedef struct ext2_sim_progress *ext2_sim_progmeter; 7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Flags for the resizer; most are debugging flags only 7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define RESIZE_DEBUG_IO 0x0001 7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define RESIZE_DEBUG_BMOVE 0x0002 7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define RESIZE_DEBUG_INODEMAP 0x0004 7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define RESIZE_DEBUG_ITABLEMOVE 0x0008 7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define RESIZE_PERCENT_COMPLETE 0x0100 8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define RESIZE_VERBOSE 0x0200 8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * The core state structure for the ext2 resizer 8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecttypedef struct ext2_resize_struct *ext2_resize_t; 8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct ext2_resize_struct { 8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2_filsys old_fs; 9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2_filsys new_fs; 9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_block_bitmap reserve_blocks; 9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_block_bitmap move_blocks; 9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2_extent bmap; 9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2_extent imap; 9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int needed_blocks; 9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int flags; 9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char *itable_buf; 9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 9919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project /* 10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * For the block allocator 10119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 10219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project blk_t new_blk; 10319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int alloc_state; 10419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 10519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project /* 10619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * For the progress meter 10719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 10819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project errcode_t (*progress)(ext2_resize_t rfs, int pass, 10919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project unsigned long cur, 11019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project unsigned long max); 11119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project void *prog_data; 11219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}; 11319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 11419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 11519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Progress pass numbers... 11619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 11719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define E2_RSZ_EXTEND_ITABLE_PASS 1 11819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define E2_RSZ_BLOCK_RELOC_PASS 2 11919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define E2_RSZ_INODE_SCAN_PASS 3 12019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define E2_RSZ_INODE_REF_UPD_PASS 4 12119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define E2_RSZ_MOVE_ITABLE_PASS 5 12219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 12319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 12419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* prototypes */ 12519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern errcode_t resize_fs(ext2_filsys fs, blk_t *new_size, int flags, 12619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project errcode_t (*progress)(ext2_resize_t rfs, 12719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int pass, unsigned long cur, 12819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project unsigned long max)); 12919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1303984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidtextern errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs, 1313984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt ext2fs_block_bitmap reserve_blocks, 13219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project blk_t new_size); 1333984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidtextern blk_t calculate_minimum_resize_size(ext2_filsys fs); 13419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 13519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 13619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* extent.c */ 13719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern errcode_t ext2fs_create_extent_table(ext2_extent *ret_extent, 13819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int size); 13919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern void ext2fs_free_extent_table(ext2_extent extent); 14019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern errcode_t ext2fs_add_extent_entry(ext2_extent extent, 14119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project __u32 old_loc, __u32 new_loc); 14219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern __u32 ext2fs_extent_translate(ext2_extent extent, __u32 old_loc); 14319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern void ext2fs_extent_dump(ext2_extent extent, FILE *out); 14419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern errcode_t ext2fs_iterate_extent(ext2_extent extent, __u32 *old_loc, 14519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project __u32 *new_loc, int *size); 14619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 14719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* online.c */ 1483984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidtextern errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt, 14919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project blk_t *new_size, int flags); 15019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 15119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* sim_progress.c */ 15219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern errcode_t ext2fs_progress_init(ext2_sim_progmeter *ret_prog, 15319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project const char *label, 15419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int labelwidth, int barwidth, 15519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project __u32 maxdone, int flags); 15619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern void ext2fs_progress_update(ext2_sim_progmeter prog, 15719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project __u32 current); 15819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern void ext2fs_progress_close(ext2_sim_progmeter prog); 15919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 16019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 161