ext2fs.h revision f9190c8a95c6b76eac567d5896b3ed06ed2a3ada
14b95526e5c4eb4fecde1cd642cf991a82c51b9f2johannkoenig@chromium.org/* 24b95526e5c4eb4fecde1cd642cf991a82c51b9f2johannkoenig@chromium.org * ext2fs.h --- ext2fs 36fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * 46fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o. 56fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * 66fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * %Begin-Header% 76fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * This file may be redistributed under the terms of the GNU Public 86fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * License. 96fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * %End-Header% 10dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org */ 11dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org 12dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#ifndef _EXT2FS_EXT2FS_H 13dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#define _EXT2FS_EXT2FS_H 146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#ifdef __cplusplus 166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern "C" { 176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif 186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Non-GNU C compilers won't necessarily understand inline 216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#if (!defined(__GNUC__) && !defined(__WATCOMC__)) 236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define NO_INLINE_FUNCS 246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif 256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Build in support for byte-swapping filesystems if we the feature 286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * has been configured or if we're being built on a CPU architecture 29c5f1170a5e91ab6e48cc9d66a6b21e9a1088b229johannkoenig@chromium.org * with a non-native byte order. 30c5f1170a5e91ab6e48cc9d66a6b21e9a1088b229johannkoenig@chromium.org */ 31c5f1170a5e91ab6e48cc9d66a6b21e9a1088b229johannkoenig@chromium.org#if defined(ENABLE_SWAPFS) || defined(WORDS_BIGENDIAN) 32c5f1170a5e91ab6e48cc9d66a6b21e9a1088b229johannkoenig@chromium.org#define EXT2FS_ENABLE_SWAPFS 336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif 346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Where the master copy of the superblock is located, and how big 376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * superblocks are supposed to be. We define SUPERBLOCK_SIZE because 386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * the size of the superblock structure is not necessarily trustworthy 396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * (some versions have the padding set up so that the superblock is 406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * 1032 bytes long). 416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define SUPERBLOCK_OFFSET 1024 436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define SUPERBLOCK_SIZE 1024 446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * The last ext2fs revision level that this version of the library is 476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * able to support. 486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_LIB_CURRENT_REV EXT2_DYNAMIC_REV 506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#ifdef HAVE_SYS_TYPES_H 526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include <sys/types.h> 536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif 546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include <stdlib.h> 566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#if EXT2_FLAT_INCLUDES 586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "e2_types.h" 596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#else 606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include <ext2fs/ext2_types.h> 616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif /* EXT2_FLAT_INCLUDES */ 626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef __u32 ext2_ino_t; 646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef __u32 blk_t; 656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef __u32 dgrp_t; 666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef __u32 ext2_off_t; 676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef __s64 e2_blkcnt_t; 686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef __u32 ext2_dirhash_t; 696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#if EXT2_FLAT_INCLUDES 716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "com_err.h" 726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "ext2_io.h" 736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "ext2_err.h" 746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#else 756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include <et/com_err.h> 766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include <ext2fs/ext2_io.h> 776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include <ext2fs/ext2_err.h> 786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif 796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Portability help for Microsoft Visual C++ 826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#ifdef _MSC_VER 846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_QSORT_TYPE int __cdecl 856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#else 866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_QSORT_TYPE int 876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif 886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef struct struct_ext2_filsys *ext2_filsys; 906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstruct ext2fs_struct_generic_bitmap { 926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org errcode_t magic; 936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_filsys fs; 946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u32 start, end; 956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u32 real_end; 966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char * description; 976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char * bitmap; 986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org errcode_t base_error_code; 996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u32 reserved[7]; 1006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org}; 1016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2FS_MARK_ERROR 0 1036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2FS_UNMARK_ERROR 1 1046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2FS_TEST_ERROR 2 1056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef struct ext2fs_struct_generic_bitmap *ext2fs_generic_bitmap; 1076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef struct ext2fs_struct_generic_bitmap *ext2fs_inode_bitmap; 1086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef struct ext2fs_struct_generic_bitmap *ext2fs_block_bitmap; 1096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#ifdef EXT2_DYNAMIC_REV 1116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FIRST_INODE(s) EXT2_FIRST_INO(s) 1126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#else 1136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FIRST_INODE(s) EXT2_FIRST_INO 1146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_INODE_SIZE(s) sizeof(struct ext2_inode) 1156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif 1166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 1186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * badblocks list definitions 1196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 1206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef struct ext2_struct_badblocks_list *ext2_badblocks_list; 1226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef struct ext2_struct_badblocks_iterate *ext2_badblocks_iterate; 1236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* old */ 1256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef struct ext2_struct_badblocks_list *badblocks_list; 1266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef struct ext2_struct_badblocks_iterate *badblocks_iterate; 1276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BADBLOCKS_FLAG_DIRTY 1 1296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 1316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * ext2_dblist structure and abstractions (see dblist.c) 1326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 1336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstruct ext2_db_entry { 1346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_ino_t ino; 1356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t blk; 1366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int blockcnt; 1376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org}; 1386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef struct ext2_struct_dblist *ext2_dblist; 1406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define DBLIST_ABORT 1 1426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 1446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * ext2_fileio definitions 1456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 1466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FILE_WRITE 0x0001 1486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FILE_CREATE 0x0002 1496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FILE_MASK 0x00FF 1516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FILE_BUF_DIRTY 0x4000 1536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FILE_BUF_VALID 0x2000 1546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef struct ext2_file *ext2_file_t; 1566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_SEEK_SET 0 1586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_SEEK_CUR 1 1596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_SEEK_END 2 1606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 1626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Flags for the ext2_filsys structure and for ext2fs_open() 1636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 1646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_RW 0x01 1656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_CHANGED 0x02 1666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_DIRTY 0x04 1676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_VALID 0x08 1686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_IB_DIRTY 0x10 1696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_BB_DIRTY 0x20 1706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_SWAP_BYTES 0x40 1716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_SWAP_BYTES_READ 0x80 1726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_SWAP_BYTES_WRITE 0x100 1736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_MASTER_SB_ONLY 0x200 1746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_FORCE 0x400 1756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_SUPER_ONLY 0x800 1766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_JOURNAL_DEV_OK 0x1000 1776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_FLAG_IMAGE_FILE 0x2000 1786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 1806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Special flag in the ext2 inode i_flag field that means that this is 1816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * a new inode. (So that ext2_write_inode() can clear extra fields.) 1826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 1836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_NEW_INODE_FL 0x80000000 1846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 1866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Flags for mkjournal 1876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * 1886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * EXT2_MKJOURNAL_V1_SUPER Make a (deprecated) V1 journal superblock 1896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 1906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_MKJOURNAL_V1_SUPER 0x0000001 1916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstruct struct_ext2_filsys { 1936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org errcode_t magic; 1946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org io_channel io; 1956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int flags; 1966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char * device_name; 1976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_super_block * super; 1986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int blocksize; 1996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int fragsize; 2006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dgrp_t group_desc_count; 2016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org unsigned long desc_blocks; 2026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_group_desc * group_desc; 2036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int inode_blocks_per_group; 2046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_inode_bitmap inode_map; 2056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_block_bitmap block_map; 2066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org errcode_t (*get_blocks)(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks); 2076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org errcode_t (*check_directory)(ext2_filsys fs, ext2_ino_t ino); 2086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org errcode_t (*write_bitmaps)(ext2_filsys fs); 2096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org errcode_t (*read_inode)(ext2_filsys fs, ext2_ino_t ino, 2106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_inode *inode); 2116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org errcode_t (*write_inode)(ext2_filsys fs, ext2_ino_t ino, 2126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_inode *inode); 2136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org badblocks_list badblocks; 2146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_dblist dblist; 2156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u32 stride; /* for mke2fs */ 2166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_super_block * orig_super; 2176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_image_hdr * image_header; 2186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u32 umask; 2196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* 2206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Reserved for future expansion 2216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 2226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u32 reserved[8]; 2236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* 2256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Reserved for the use of the calling application. 2266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 2276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void * priv_data; 2286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org /* 2306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Inode cache 2316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 2326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_inode_cache *icache; 2336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org}; 2346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#if EXT2_FLAT_INCLUDES 2366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "e2_bitops.h" 2376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#else 2386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include <ext2fs/bitops.h> 2396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif 2406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 2426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Return flags for the block iterator functions 2436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 2446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BLOCK_CHANGED 1 2456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BLOCK_ABORT 2 2466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BLOCK_ERROR 4 2476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 2496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Block interate flags 2506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * 2516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * BLOCK_FLAG_APPEND, or BLOCK_FLAG_HOLE, indicates that the interator 2526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * function should be called on blocks where the block number is zero. 2536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * This is used by ext2fs_expand_dir() to be able to add a new block 2546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * to an inode. It can also be used for programs that want to be able 2556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * to deal with files that contain "holes". 2566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * 2576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * BLOCK_FLAG_TRAVERSE indicates that the iterator function for the 2586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * indirect, doubly indirect, etc. blocks should be called after all 2596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * of the blocks containined in the indirect blocks are processed. 2606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * This is useful if you are going to be deallocating blocks from an 2616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * inode. 2626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * 2636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * BLOCK_FLAG_DATA_ONLY indicates that the iterator function should be 2646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * called for data blocks only. 2656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * 2666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * BLOCK_FLAG_NO_LARGE is for internal use only. It informs 2676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * ext2fs_block_iterate2 that large files won't be accepted. 2686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 2696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BLOCK_FLAG_APPEND 1 2706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BLOCK_FLAG_HOLE 1 2716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BLOCK_FLAG_DEPTH_TRAVERSE 2 2726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BLOCK_FLAG_DATA_ONLY 4 2736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BLOCK_FLAG_NO_LARGE 0x1000 2756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 2776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Magic "block count" return values for the block iterator function. 2786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 2796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BLOCK_COUNT_IND (-1) 2806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BLOCK_COUNT_DIND (-2) 2816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BLOCK_COUNT_TIND (-3) 2826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BLOCK_COUNT_TRANSLATOR (-4) 2836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#if 0 2856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 2866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Flags for ext2fs_move_blocks 2876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 2886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_BMOVE_GET_DBLIST 0x0001 2896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_BMOVE_DEBUG 0x0002 2906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif 2916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 2936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Flags for directory block reading and writing functions 2946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 2956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_DIRBLOCK_V2_STRUCT 0x0001 2966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 2976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 2986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Return flags for the directory iterator functions 2996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 3006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define DIRENT_CHANGED 1 3016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define DIRENT_ABORT 2 3026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define DIRENT_ERROR 3 3036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 3056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Directory iterator flags 3066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 3076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define DIRENT_FLAG_INCLUDE_EMPTY 1 3096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define DIRENT_FLAG_INCLUDE_REMOVED 2 3106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define DIRENT_DOT_FILE 1 3126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define DIRENT_DOT_DOT_FILE 2 3136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define DIRENT_OTHER_FILE 3 3146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define DIRENT_DELETED_FILE 4 3156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 3176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Inode scan definitions 3186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 3196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef struct ext2_struct_inode_scan *ext2_inode_scan; 3206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 3226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * ext2fs_scan flags 3236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 3246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_SF_CHK_BADBLOCKS 0x0001 3256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_SF_BAD_INODE_BLK 0x0002 3266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_SF_BAD_EXTRA_BYTES 0x0004 3276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_SF_SKIP_MISSING_ITABLE 0x0008 3286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 3306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * ext2fs_check_if_mounted flags 3316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 3326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_MF_MOUNTED 1 3336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_MF_ISROOT 2 3346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_MF_READONLY 4 3356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_MF_SWAP 8 3366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 3386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Ext2/linux mode flags. We define them here so that we don't need 3396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * to depend on the OS's sys/stat.h, since we may be compiling on a 3406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * non-Linux system. 3416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 3426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IFMT 00170000 3436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IFSOCK 0140000 3446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IFLNK 0120000 3456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IFREG 0100000 3466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IFBLK 0060000 3476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IFDIR 0040000 3486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IFCHR 0020000 3496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IFIFO 0010000 3506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_ISUID 0004000 3516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_ISGID 0002000 3526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_ISVTX 0001000 3536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IRWXU 00700 3556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IRUSR 00400 3566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IWUSR 00200 3576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IXUSR 00100 3586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IRWXG 00070 3606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IRGRP 00040 3616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IWGRP 00020 3626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IXGRP 00010 3636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IRWXO 00007 3656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IROTH 00004 3666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IWOTH 00002 3676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_IXOTH 00001 3686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_ISLNK(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFLNK) 3706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_ISREG(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFREG) 3716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_ISDIR(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFDIR) 3726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_ISCHR(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFCHR) 3736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_ISBLK(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFBLK) 3746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_ISFIFO(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFIFO) 3756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define LINUX_S_ISSOCK(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFSOCK) 3766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 3786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * ext2_icount_t abstraction 3796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 3806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_ICOUNT_OPT_INCREMENT 0x01 3816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgtypedef struct ext2_icount *ext2_icount_t; 3836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 3856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Flags for ext2fs_bmap 3866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 3876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define BMAP_ALLOC 1 3886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 3906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Flags for imager.c functions 3916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 3926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define IMAGER_FLAG_INODEMAP 1 3936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define IMAGER_FLAG_SPARSEWRITE 2 3946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 3966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * For checking structure magic numbers... 3976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 3986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 3996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_CHECK_MAGIC(struct, code) \ 4006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if ((struct)->magic != (code)) return (code) 4016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 4026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 4036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 4046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * For ext2 compression support 4056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 4066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2FS_COMPRESSED_BLKADDR ((blk_t) 0xffffffff) 4076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define HOLE_BLKADDR(_b) ((_b) == 0 || (_b) == EXT2FS_COMPRESSED_BLKADDR) 4086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 4096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 4106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Features supported by this version of the library 4116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 4126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_LIB_FEATURE_COMPAT_SUPP (EXT2_FEATURE_COMPAT_DIR_PREALLOC|\ 4136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org EXT2_FEATURE_COMPAT_IMAGIC_INODES|\ 4146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org EXT3_FEATURE_COMPAT_HAS_JOURNAL|\ 4156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org EXT2_FEATURE_COMPAT_DIR_INDEX|\ 4166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org EXT2_FEATURE_COMPAT_EXT_ATTR) 4176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 4186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* This #ifdef is temporary until compression is fully supported */ 4196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#ifdef ENABLE_COMPRESSION 4206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#ifndef I_KNOW_THAT_COMPRESSION_IS_EXPERIMENTAL 4216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* If the below warning bugs you, then have 4226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org `CPPFLAGS=-DI_KNOW_THAT_COMPRESSION_IS_EXPERIMENTAL' in your 4236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org environment at configure time. */ 4246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org #warning "Compression support is experimental" 4256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif 4266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_LIB_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE|\ 4276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org EXT2_FEATURE_INCOMPAT_COMPRESSION|\ 4286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|\ 4296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org EXT3_FEATURE_INCOMPAT_RECOVER) 4306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#else 4316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_LIB_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE|\ 4326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|\ 4336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org EXT3_FEATURE_INCOMPAT_RECOVER) 4346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif 4356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define EXT2_LIB_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|\ 4366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org EXT2_FEATURE_RO_COMPAT_LARGE_FILE) 4376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 4386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * function prototypes 4396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 4406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 4416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* alloc.c */ 4426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_new_inode(ext2_filsys fs, ext2_ino_t dir, int mode, 4436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_inode_bitmap map, ext2_ino_t *ret); 4446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_new_block(ext2_filsys fs, blk_t goal, 4456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_block_bitmap map, blk_t *ret); 4466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_get_free_blocks(ext2_filsys fs, blk_t start, 4476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t finish, int num, 4486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_block_bitmap map, 4496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t *ret); 4506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_alloc_block(ext2_filsys fs, blk_t goal, 4516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *block_buf, blk_t *ret); 4526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 4536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* alloc_stats.c */ 4546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid ext2fs_inode_alloc_stats(ext2_filsys fs, ext2_ino_t ino, int inuse); 4556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid ext2fs_inode_alloc_stats2(ext2_filsys fs, ext2_ino_t ino, 4566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int inuse, int isdir); 4576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid ext2fs_block_alloc_stats(ext2_filsys fs, blk_t blk, int inuse); 4586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 4596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* alloc_tables.c */ 4606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_allocate_tables(ext2_filsys fs); 4616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_allocate_group_table(ext2_filsys fs, dgrp_t group, 4626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_block_bitmap bmap); 4636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 4646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* badblocks.c */ 4656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_badblocks_list_create(ext2_badblocks_list *ret, 4666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int size); 4676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_badblocks_list_add(ext2_badblocks_list bb, 4686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t blk); 4696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern int ext2fs_badblocks_list_test(ext2_badblocks_list bb, 4706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t blk); 4716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t 4726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_badblocks_list_iterate_begin(ext2_badblocks_list bb, 4736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_badblocks_iterate *ret); 4746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern int ext2fs_badblocks_list_iterate(ext2_badblocks_iterate iter, 4756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t *blk); 4766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_badblocks_list_iterate_end(ext2_badblocks_iterate iter); 4776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_badblocks_copy(ext2_badblocks_list src, 4786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_badblocks_list *dest); 4796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern int ext2fs_badblocks_equal(ext2_badblocks_list bb1, 4806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_badblocks_list bb2); 4816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 4826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* bb_compat */ 4836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t badblocks_list_create(badblocks_list *ret, int size); 4846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t badblocks_list_add(badblocks_list bb, blk_t blk); 4856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern int badblocks_list_test(badblocks_list bb, blk_t blk); 4866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t badblocks_list_iterate_begin(badblocks_list bb, 4876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org badblocks_iterate *ret); 4886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern int badblocks_list_iterate(badblocks_iterate iter, blk_t *blk); 4896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void badblocks_list_iterate_end(badblocks_iterate iter); 4906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void badblocks_list_free(badblocks_list bb); 491c5f1170a5e91ab6e48cc9d66a6b21e9a1088b229johannkoenig@chromium.org 492c5f1170a5e91ab6e48cc9d66a6b21e9a1088b229johannkoenig@chromium.org/* bb_inode.c */ 493c5f1170a5e91ab6e48cc9d66a6b21e9a1088b229johannkoenig@chromium.orgextern errcode_t ext2fs_update_bb_inode(ext2_filsys fs, 4946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_badblocks_list bb_list); 4956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 4966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* bitmaps.c */ 4976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_write_inode_bitmap(ext2_filsys fs); 4986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_write_block_bitmap (ext2_filsys fs); 4996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_read_inode_bitmap (ext2_filsys fs); 5006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_read_block_bitmap(ext2_filsys fs); 5016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_allocate_generic_bitmap(__u32 start, 5026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u32 end, 5036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u32 real_end, 5046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org const char *descr, 5056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_generic_bitmap *ret); 5066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_allocate_block_bitmap(ext2_filsys fs, 5076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org const char *descr, 5086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_block_bitmap *ret); 5096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_allocate_inode_bitmap(ext2_filsys fs, 5106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org const char *descr, 5116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_inode_bitmap *ret); 5126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_fudge_inode_bitmap_end(ext2fs_inode_bitmap bitmap, 5136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_ino_t end, ext2_ino_t *oend); 5146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_fudge_block_bitmap_end(ext2fs_block_bitmap bitmap, 5156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t end, blk_t *oend); 5166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_clear_inode_bitmap(ext2fs_inode_bitmap bitmap); 5176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_clear_block_bitmap(ext2fs_block_bitmap bitmap); 5186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_read_bitmaps(ext2_filsys fs); 5196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_write_bitmaps(ext2_filsys fs); 5206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* block.c */ 5226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_block_iterate(ext2_filsys fs, 5236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_ino_t ino, 5246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int flags, 5256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *block_buf, 5266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int (*func)(ext2_filsys fs, 5276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t *blocknr, 5286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int blockcnt, 5296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *priv_data), 5306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *priv_data); 5316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgerrcode_t ext2fs_block_iterate2(ext2_filsys fs, 5326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_ino_t ino, 5336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int flags, 5346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *block_buf, 5356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int (*func)(ext2_filsys fs, 5366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t *blocknr, 5376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org e2_blkcnt_t blockcnt, 5386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t ref_blk, 5396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int ref_offset, 5406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *priv_data), 5416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *priv_data); 5426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* bmap.c */ 5446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_bmap(ext2_filsys fs, ext2_ino_t ino, 5456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_inode *inode, 5466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *block_buf, int bmap_flags, 5476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t block, blk_t *phys_blk); 5486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#if 0 5516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* bmove.c */ 5526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_move_blocks(ext2_filsys fs, 5536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_block_bitmap reserve, 5546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_block_bitmap alloc_map, 5556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int flags); 5566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif 5576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* check_desc.c */ 5596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_check_desc(ext2_filsys fs); 5606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* closefs.c */ 5626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_close(ext2_filsys fs); 5636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_flush(ext2_filsys fs); 5646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern int ext2fs_bg_has_super(ext2_filsys fs, int group_block); 5656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_update_dynamic_rev(ext2_filsys fs); 5666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* cmp_bitmaps.c */ 5686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_compare_block_bitmap(ext2fs_block_bitmap bm1, 5696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_block_bitmap bm2); 5706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_compare_inode_bitmap(ext2fs_inode_bitmap bm1, 5716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_inode_bitmap bm2); 5726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* dblist.c */ 5746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_get_num_dirs(ext2_filsys fs, ext2_ino_t *ret_num_dirs); 5766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_init_dblist(ext2_filsys fs, ext2_dblist *ret_dblist); 5776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_add_dir_block(ext2_dblist dblist, ext2_ino_t ino, 5786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t blk, int blockcnt); 5796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_dblist_iterate(ext2_dblist dblist, 5806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int (*func)(ext2_filsys fs, struct ext2_db_entry *db_info, 5816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *priv_data), 5826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *priv_data); 5836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_set_dir_block(ext2_dblist dblist, ext2_ino_t ino, 5846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t blk, int blockcnt); 5856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_copy_dblist(ext2_dblist src, 5866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_dblist *dest); 5876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern int ext2fs_dblist_count(ext2_dblist dblist); 5886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 5896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* dblist_dir.c */ 5906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t 5916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_dblist_dir_iterate(ext2_dblist dblist, 5926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int flags, 5936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *block_buf, 5946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int (*func)(ext2_ino_t dir, 5956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int entry, 5966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_dir_entry *dirent, 5976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int offset, 5986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int blocksize, 5996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *buf, 6006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *priv_data), 6016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *priv_data); 6026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* dirblock.c */ 6046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_read_dir_block(ext2_filsys fs, blk_t block, 6056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *buf); 6066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_read_dir_block2(ext2_filsys fs, blk_t block, 6076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *buf, int flags); 6086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_write_dir_block(ext2_filsys fs, blk_t block, 6096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *buf); 6106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_write_dir_block2(ext2_filsys fs, blk_t block, 6116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *buf, int flags); 6126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* dirhash.c */ 6146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_dirhash(int version, const char *name, int len, 6156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_dirhash_t *ret_hash); 6166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* dir_iterate.c */ 6196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_dir_iterate(ext2_filsys fs, 6206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_ino_t dir, 6216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int flags, 6226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *block_buf, 6236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int (*func)(struct ext2_dir_entry *dirent, 6246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int offset, 6256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int blocksize, 6266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *buf, 6276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *priv_data), 6286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *priv_data); 6296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_dir_iterate2(ext2_filsys fs, 6306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_ino_t dir, 6316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int flags, 6326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *block_buf, 6336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int (*func)(ext2_ino_t dir, 6346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int entry, 6356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_dir_entry *dirent, 6366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int offset, 6376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int blocksize, 6386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *buf, 6396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *priv_data), 6406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *priv_data); 6416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* dupfs.c */ 6436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_dup_handle(ext2_filsys src, ext2_filsys *dest); 6446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* expanddir.c */ 6466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_expand_dir(ext2_filsys fs, ext2_ino_t dir); 6476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* ext_attr.c */ 6496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvoid ext2fs_swap_ext_attr(ext2_filsys fs, char *to, char *from); 6506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_read_ext_attr(ext2_filsys fs, blk_t block, void *buf); 6516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_write_ext_attr(ext2_filsys fs, blk_t block, void *buf); 6526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* fileio.c */ 6536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_file_open(ext2_filsys fs, ext2_ino_t ino, 6546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int flags, ext2_file_t *ret); 6556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern ext2_filsys ext2fs_file_get_fs(ext2_file_t file); 6566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_file_close(ext2_file_t file); 6576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_file_flush(ext2_file_t file); 6586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_file_read(ext2_file_t file, void *buf, 6596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org unsigned int wanted, unsigned int *got); 6606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_file_write(ext2_file_t file, const void *buf, 6616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org unsigned int nbytes, unsigned int *written); 6626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_file_lseek(ext2_file_t file, ext2_off_t offset, 6636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int whence, ext2_off_t *ret_pos); 6646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern ext2_off_t ext2fs_file_get_size(ext2_file_t file); 6656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_file_set_size(ext2_file_t file, ext2_off_t size); 6666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* finddev.c */ 6686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern char *ext2fs_find_block_device(dev_t device); 6696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* flushb.c */ 6716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_sync_device(int fd, int flushb); 6726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* freefs.c */ 6746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_free(ext2_filsys fs); 6756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_free_generic_bitmap(ext2fs_inode_bitmap bitmap); 6766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_free_block_bitmap(ext2fs_block_bitmap bitmap); 6776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_free_inode_bitmap(ext2fs_inode_bitmap bitmap); 6786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_free_dblist(ext2_dblist dblist); 6796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_badblocks_list_free(badblocks_list bb); 6806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* getsize.c */ 6826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_get_device_size(const char *file, int blocksize, 6836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t *retblocks); 6846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* imager.c */ 6866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_image_inode_write(ext2_filsys fs, int fd, int flags); 6876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_image_inode_read(ext2_filsys fs, int fd, int flags); 6886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_image_super_write(ext2_filsys fs, int fd, int flags); 6896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_image_super_read(ext2_filsys fs, int fd, int flags); 6906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_image_bitmap_write(ext2_filsys fs, int fd, int flags); 6916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_image_bitmap_read(ext2_filsys fs, int fd, int flags); 6926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* initialize.c */ 6946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_initialize(const char *name, int flags, 6956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_super_block *param, 6966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org io_manager manager, ext2_filsys *ret_fs); 6976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 6986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* icount.c */ 6996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_free_icount(ext2_icount_t icount); 7006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_create_icount2(ext2_filsys fs, int flags, int size, 7016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_icount_t hint, ext2_icount_t *ret); 7026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_create_icount(ext2_filsys fs, int flags, int size, 7036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_icount_t *ret); 7046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_icount_fetch(ext2_icount_t icount, ext2_ino_t ino, 7056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u16 *ret); 7066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_icount_increment(ext2_icount_t icount, ext2_ino_t ino, 7076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u16 *ret); 7086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_icount_decrement(ext2_icount_t icount, ext2_ino_t ino, 7096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u16 *ret); 7106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_icount_store(ext2_icount_t icount, ext2_ino_t ino, 7116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u16 count); 7126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern ext2_ino_t ext2fs_get_icount_size(ext2_icount_t icount); 7136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgerrcode_t ext2fs_icount_validate(ext2_icount_t icount, FILE *); 7146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* inode.c */ 7166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_flush_icache(ext2_filsys fs); 7176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_open_inode_scan(ext2_filsys fs, int buffer_blocks, 7186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_inode_scan *ret_scan); 7196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_close_inode_scan(ext2_inode_scan scan); 7206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_get_next_inode(ext2_inode_scan scan, ext2_ino_t *ino, 7216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_inode *inode); 7226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_inode_scan_goto_blockgroup(ext2_inode_scan scan, 7236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int group); 7246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_set_inode_callback 7256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (ext2_inode_scan scan, 7266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org errcode_t (*done_group)(ext2_filsys fs, 7276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_inode_scan scan, 7286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org dgrp_t group, 7296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void * priv_data), 7306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *done_group_data); 7316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern int ext2fs_inode_scan_flags(ext2_inode_scan scan, int set_flags, 7326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int clear_flags); 7336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_read_inode (ext2_filsys fs, ext2_ino_t ino, 7346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_inode * inode); 7356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino, 7366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_inode * inode); 7376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks); 7386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_check_directory(ext2_filsys fs, ext2_ino_t ino); 7396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* inode_io.c */ 7416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern io_manager inode_io_manager; 7426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_inode_io_intern(ext2_filsys fs, ext2_ino_t ino, 7436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char **name); 7446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* ismounted.c */ 7466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_check_if_mounted(const char *file, int *mount_flags); 7476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_check_mount_point(const char *device, int *mount_flags, 7486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *mtpt, int mtlen); 7496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* namei.c */ 7516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_lookup(ext2_filsys fs, ext2_ino_t dir, const char *name, 7526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int namelen, char *buf, ext2_ino_t *inode); 7536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_namei(ext2_filsys fs, ext2_ino_t root, ext2_ino_t cwd, 7546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org const char *name, ext2_ino_t *inode); 7556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgerrcode_t ext2fs_namei_follow(ext2_filsys fs, ext2_ino_t root, ext2_ino_t cwd, 7566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org const char *name, ext2_ino_t *inode); 7576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_follow_link(ext2_filsys fs, ext2_ino_t root, ext2_ino_t cwd, 7586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_ino_t inode, ext2_ino_t *res_inode); 7596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* native.c */ 7616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgint ext2fs_native_flag(void); 7626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* newdir.c */ 7646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_new_dir_block(ext2_filsys fs, ext2_ino_t dir_ino, 7656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_ino_t parent_ino, char **block); 7666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* mkdir.c */ 7686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum, 7696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org const char *name); 7706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* mkjournal.c */ 7726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_create_journal_superblock(ext2_filsys fs, 7736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u32 size, int flags, 7746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char **ret_jsb); 7756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_add_journal_device(ext2_filsys fs, 7766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_filsys journal_dev); 7776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t size, 7786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int flags); 7796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* openfs.c */ 7816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_open(const char *name, int flags, int superblock, 7826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int block_size, io_manager manager, 7836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_filsys *ret_fs); 7846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* get_pathname.c */ 7866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_get_pathname(ext2_filsys fs, ext2_ino_t dir, ext2_ino_t ino, 7876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char **name); 7886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* link.c */ 7906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgerrcode_t ext2fs_link(ext2_filsys fs, ext2_ino_t dir, const char *name, 7916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_ino_t ino, int flags); 7926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgerrcode_t ext2fs_unlink(ext2_filsys fs, ext2_ino_t dir, const char *name, 7936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_ino_t ino, int flags); 7946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* read_bb.c */ 7966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_read_bb_inode(ext2_filsys fs, 7976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_badblocks_list *bb_list); 7986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 7996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* read_bb_file.c */ 8006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f, 8016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_badblocks_list *bb_list, 8026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *private, 8036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void (*invalid)(ext2_filsys fs, 8046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t blk, 8056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org char *badstr, 8066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *private)); 8076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_read_bb_FILE(ext2_filsys fs, FILE *f, 8086fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2_badblocks_list *bb_list, 8096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void (*invalid)(ext2_filsys fs, 8106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org blk_t blk)); 8116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 8126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* rs_bitmap.c */ 8136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_resize_generic_bitmap(__u32 new_end, 8146fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org __u32 new_real_end, 8156fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_generic_bitmap bmap); 8166fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_resize_inode_bitmap(__u32 new_end, __u32 new_real_end, 8176fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_inode_bitmap bmap); 8186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_resize_block_bitmap(__u32 new_end, __u32 new_real_end, 8196fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_block_bitmap bmap); 8206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern errcode_t ext2fs_copy_bitmap(ext2fs_generic_bitmap src, 8216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ext2fs_generic_bitmap *dest); 8226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 8236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* swapfs.c */ 8246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_swap_super(struct ext2_super_block * super); 8256fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_swap_group_desc(struct ext2_group_desc *gdp); 8266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern void ext2fs_swap_inode(ext2_filsys fs,struct ext2_inode *t, 8276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct ext2_inode *f, int hostorder); 8286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 8296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* valid_blk.c */ 8306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgextern int ext2fs_inode_has_valid_blocks(struct ext2_inode *inode); 8316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 832dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org/* version.c */ 833dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.orgextern int ext2fs_parse_version_string(const char *ver_string); 834dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.orgextern int ext2fs_get_library_version(const char **ver_string, 835dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org const char **date_string); 836dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org 8376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* write_bb_file.c */ 838extern errcode_t ext2fs_write_bb_FILE(ext2_badblocks_list bb_list, 839 unsigned int flags, 840 FILE *f); 841 842 843/* inline functions */ 844extern errcode_t ext2fs_get_mem(unsigned long size, void **ptr); 845extern errcode_t ext2fs_free_mem(void **ptr); 846extern errcode_t ext2fs_resize_mem(unsigned long old_size, 847 unsigned long size, void **ptr); 848extern void ext2fs_mark_super_dirty(ext2_filsys fs); 849extern void ext2fs_mark_changed(ext2_filsys fs); 850extern int ext2fs_test_changed(ext2_filsys fs); 851extern void ext2fs_mark_valid(ext2_filsys fs); 852extern void ext2fs_unmark_valid(ext2_filsys fs); 853extern int ext2fs_test_valid(ext2_filsys fs); 854extern void ext2fs_mark_ib_dirty(ext2_filsys fs); 855extern void ext2fs_mark_bb_dirty(ext2_filsys fs); 856extern int ext2fs_test_ib_dirty(ext2_filsys fs); 857extern int ext2fs_test_bb_dirty(ext2_filsys fs); 858extern int ext2fs_group_of_blk(ext2_filsys fs, blk_t blk); 859extern int ext2fs_group_of_ino(ext2_filsys fs, ext2_ino_t ino); 860 861/* 862 * The actual inlined functions definitions themselves... 863 * 864 * If NO_INLINE_FUNCS is defined, then we won't try to do inline 865 * functions at all! 866 */ 867#if (defined(INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS)) 868#ifdef INCLUDE_INLINE_FUNCS 869#define _INLINE_ extern 870#else 871#ifdef __GNUC__ 872#define _INLINE_ extern __inline__ 873#else /* For Watcom C */ 874#define _INLINE_ extern inline 875#endif 876#endif 877 878#ifndef EXT2_CUSTOM_MEMORY_ROUTINES 879/* 880 * Allocate memory 881 */ 882_INLINE_ errcode_t ext2fs_get_mem(unsigned long size, void **ptr) 883{ 884 *ptr = malloc(size); 885 if (!*ptr) 886 return EXT2_ET_NO_MEMORY; 887 return 0; 888} 889 890/* 891 * Free memory 892 */ 893_INLINE_ errcode_t ext2fs_free_mem(void **ptr) 894{ 895 free(*ptr); 896 *ptr = 0; 897 return 0; 898} 899 900/* 901 * Resize memory 902 */ 903_INLINE_ errcode_t ext2fs_resize_mem(unsigned long old_size, 904 unsigned long size, void **ptr) 905{ 906 void *p; 907 908 p = realloc(*ptr, size); 909 if (!p) 910 return EXT2_ET_NO_MEMORY; 911 *ptr = p; 912 return 0; 913} 914#endif /* Custom memory routines */ 915 916/* 917 * Mark a filesystem superblock as dirty 918 */ 919_INLINE_ void ext2fs_mark_super_dirty(ext2_filsys fs) 920{ 921 fs->flags |= EXT2_FLAG_DIRTY | EXT2_FLAG_CHANGED; 922} 923 924/* 925 * Mark a filesystem as changed 926 */ 927_INLINE_ void ext2fs_mark_changed(ext2_filsys fs) 928{ 929 fs->flags |= EXT2_FLAG_CHANGED; 930} 931 932/* 933 * Check to see if a filesystem has changed 934 */ 935_INLINE_ int ext2fs_test_changed(ext2_filsys fs) 936{ 937 return (fs->flags & EXT2_FLAG_CHANGED); 938} 939 940/* 941 * Mark a filesystem as valid 942 */ 943_INLINE_ void ext2fs_mark_valid(ext2_filsys fs) 944{ 945 fs->flags |= EXT2_FLAG_VALID; 946} 947 948/* 949 * Mark a filesystem as NOT valid 950 */ 951_INLINE_ void ext2fs_unmark_valid(ext2_filsys fs) 952{ 953 fs->flags &= ~EXT2_FLAG_VALID; 954} 955 956/* 957 * Check to see if a filesystem is valid 958 */ 959_INLINE_ int ext2fs_test_valid(ext2_filsys fs) 960{ 961 return (fs->flags & EXT2_FLAG_VALID); 962} 963 964/* 965 * Mark the inode bitmap as dirty 966 */ 967_INLINE_ void ext2fs_mark_ib_dirty(ext2_filsys fs) 968{ 969 fs->flags |= EXT2_FLAG_IB_DIRTY | EXT2_FLAG_CHANGED; 970} 971 972/* 973 * Mark the block bitmap as dirty 974 */ 975_INLINE_ void ext2fs_mark_bb_dirty(ext2_filsys fs) 976{ 977 fs->flags |= EXT2_FLAG_BB_DIRTY | EXT2_FLAG_CHANGED; 978} 979 980/* 981 * Check to see if a filesystem's inode bitmap is dirty 982 */ 983_INLINE_ int ext2fs_test_ib_dirty(ext2_filsys fs) 984{ 985 return (fs->flags & EXT2_FLAG_IB_DIRTY); 986} 987 988/* 989 * Check to see if a filesystem's block bitmap is dirty 990 */ 991_INLINE_ int ext2fs_test_bb_dirty(ext2_filsys fs) 992{ 993 return (fs->flags & EXT2_FLAG_BB_DIRTY); 994} 995 996/* 997 * Return the group # of a block 998 */ 999_INLINE_ int ext2fs_group_of_blk(ext2_filsys fs, blk_t blk) 1000{ 1001 return (blk - fs->super->s_first_data_block) / 1002 fs->super->s_blocks_per_group; 1003} 1004 1005/* 1006 * Return the group # of an inode number 1007 */ 1008_INLINE_ int ext2fs_group_of_ino(ext2_filsys fs, ext2_ino_t ino) 1009{ 1010 return (ino - 1) / fs->super->s_inodes_per_group; 1011} 1012#undef _INLINE_ 1013#endif 1014 1015#ifdef __cplusplus 1016} 1017#endif 1018 1019#endif /* _EXT2FS_EXT2FS_H */ 1020