ext2fs.h revision 1d667534e93e78eedbf2efcef6d7844041675f26
13839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 23839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * ext2fs.h --- ext2fs 33839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * 419c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o. 519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * 619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * %Begin-Header% 719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * This file may be redistributed under the terms of the GNU Public 819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * License. 919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * %End-Header% 103839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 129abd2ce914f9373fb676f0bb620ffba3a0e3c49eTheodore Ts'o#ifndef _EXT2FS_EXT2FS_H 139abd2ce914f9373fb676f0bb620ffba3a0e3c49eTheodore Ts'o#define _EXT2FS_EXT2FS_H 149abd2ce914f9373fb676f0bb620ffba3a0e3c49eTheodore Ts'o 15544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o#ifdef __GNUC__ 16544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o#define EXT2FS_ATTR(x) __attribute__(x) 17544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o#else 18544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o#define EXT2FS_ATTR(x) 19544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o#endif 20544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o 21fa7ef7176ee66aaaec58a24c5a5523c4afb550ddTheodore Ts'o#ifdef __cplusplus 22fa7ef7176ee66aaaec58a24c5a5523c4afb550ddTheodore Ts'oextern "C" { 23fa7ef7176ee66aaaec58a24c5a5523c4afb550ddTheodore Ts'o#endif 24fa7ef7176ee66aaaec58a24c5a5523c4afb550ddTheodore Ts'o 253839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 2619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * Non-GNU C compilers won't necessarily understand inline 2719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o */ 2876f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'o#if (!defined(__GNUC__) && !defined(__WATCOMC__)) 2919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define NO_INLINE_FUNCS 3019c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#endif 3119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 3219c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o/* 335df55d7f847e29d23227592a0bb23daad1a61500Theodore Ts'o * Build in support for byte-swapping filesystems if we the feature 345df55d7f847e29d23227592a0bb23daad1a61500Theodore Ts'o * has been configured or if we're being built on a CPU architecture 355df55d7f847e29d23227592a0bb23daad1a61500Theodore Ts'o * with a non-native byte order. 365df55d7f847e29d23227592a0bb23daad1a61500Theodore Ts'o */ 375df55d7f847e29d23227592a0bb23daad1a61500Theodore Ts'o#if defined(ENABLE_SWAPFS) || defined(WORDS_BIGENDIAN) 385df55d7f847e29d23227592a0bb23daad1a61500Theodore Ts'o#define EXT2FS_ENABLE_SWAPFS 395df55d7f847e29d23227592a0bb23daad1a61500Theodore Ts'o#endif 405df55d7f847e29d23227592a0bb23daad1a61500Theodore Ts'o 415df55d7f847e29d23227592a0bb23daad1a61500Theodore Ts'o/* 423839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Where the master copy of the superblock is located, and how big 433839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * superblocks are supposed to be. We define SUPERBLOCK_SIZE because 443839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * the size of the superblock structure is not necessarily trustworthy 453839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * (some versions have the padding set up so that the superblock is 463839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * 1032 bytes long). 473839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 483839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define SUPERBLOCK_OFFSET 1024 493839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define SUPERBLOCK_SIZE 1024 503839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 51f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o/* 52f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o * The last ext2fs revision level that this version of the library is 53f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o * able to support. 54f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o */ 55e5b38a5fafe4807b54d90a2e70bddf4b41b1695bTheodore Ts'o#define EXT2_LIB_CURRENT_REV EXT2_DYNAMIC_REV 56f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o 57d40259fd552d942903f2fd0b426c75a5c2516017Theodore Ts'o#ifdef HAVE_SYS_TYPES_H 581e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#include <sys/types.h> 59d40259fd552d942903f2fd0b426c75a5c2516017Theodore Ts'o#endif 60d40259fd552d942903f2fd0b426c75a5c2516017Theodore Ts'o 613e69906495d5898849a6154b0311b5d4a84a27aeTheodore Ts'o#include <stdio.h> 625be8dc2143c7b3b21a9b8fb56797dd855ee87560Theodore Ts'o#include <stdlib.h> 635953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o 645953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o#if EXT2_FLAT_INCLUDES 655953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o#include "e2_types.h" 663e69906495d5898849a6154b0311b5d4a84a27aeTheodore Ts'o#include "ext2_fs.h" 675953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o#else 68797f5ef14e92294b329e52971d467d7af5b2993eTheodore Ts'o#include <ext2fs/ext2_types.h> 693e69906495d5898849a6154b0311b5d4a84a27aeTheodore Ts'o#include <ext2fs/ext2_fs.h> 70e589f678e1ed5efa8dd4450f37bee0486caa3504Theodore Ts'o#endif /* EXT2_FLAT_INCLUDES */ 7150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 7231dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'otypedef __u32 ext2_ino_t; 7350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'otypedef __u32 blk_t; 742eb374c9401079aa56aa12f0047ca3866e69b754Theodore Ts'otypedef __u32 dgrp_t; 7530fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'otypedef __u32 ext2_off_t; 7603673dbb04a3458ce78a394f27d17d434b51a714Theodore Ts'otypedef __s64 e2_blkcnt_t; 7752783e0ca72a80c549e9d266b3472f78fc61bdb2Theodore Ts'otypedef __u32 ext2_dirhash_t; 783839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 79b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o#if EXT2_FLAT_INCLUDES 80b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o#include "com_err.h" 81b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o#include "ext2_io.h" 82b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o#include "ext2_err.h" 83b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o#else 847c2d25699f2da458ba8201a375b00562d7a2469eTheodore Ts'o#include <et/com_err.h> 857c2d25699f2da458ba8201a375b00562d7a2469eTheodore Ts'o#include <ext2fs/ext2_io.h> 867c2d25699f2da458ba8201a375b00562d7a2469eTheodore Ts'o#include <ext2fs/ext2_err.h> 87b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o#endif 883839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 894c77fe50d97a773e32a4756c79dade3adbb6a601Theodore Ts'o/* 904c77fe50d97a773e32a4756c79dade3adbb6a601Theodore Ts'o * Portability help for Microsoft Visual C++ 914c77fe50d97a773e32a4756c79dade3adbb6a601Theodore Ts'o */ 924c77fe50d97a773e32a4756c79dade3adbb6a601Theodore Ts'o#ifdef _MSC_VER 934c77fe50d97a773e32a4756c79dade3adbb6a601Theodore Ts'o#define EXT2_QSORT_TYPE int __cdecl 944c77fe50d97a773e32a4756c79dade3adbb6a601Theodore Ts'o#else 954c77fe50d97a773e32a4756c79dade3adbb6a601Theodore Ts'o#define EXT2_QSORT_TYPE int 964c77fe50d97a773e32a4756c79dade3adbb6a601Theodore Ts'o#endif 974c77fe50d97a773e32a4756c79dade3adbb6a601Theodore Ts'o 98f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'otypedef struct struct_ext2_filsys *ext2_filsys; 99f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o 1001e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'ostruct ext2fs_struct_generic_bitmap { 1014cbe8af4b0d0c72fb28bb500c1bd8a46b00fdde3Theodore Ts'o errcode_t magic; 1021e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o ext2_filsys fs; 1031e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o __u32 start, end; 1041e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o __u32 real_end; 1051e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o char * description; 1061e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o char * bitmap; 1071e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o errcode_t base_error_code; 1081e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o __u32 reserved[7]; 109f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o}; 110f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o 1111e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define EXT2FS_MARK_ERROR 0 1121e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define EXT2FS_UNMARK_ERROR 1 1131e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define EXT2FS_TEST_ERROR 2 114f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o 1151e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'otypedef struct ext2fs_struct_generic_bitmap *ext2fs_generic_bitmap; 1161e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'otypedef struct ext2fs_struct_generic_bitmap *ext2fs_inode_bitmap; 1171e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'otypedef struct ext2fs_struct_generic_bitmap *ext2fs_block_bitmap; 118f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o 1197f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o#ifdef EXT2_DYNAMIC_REV 1207f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o#define EXT2_FIRST_INODE(s) EXT2_FIRST_INO(s) 1217f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o#else 1227f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o#define EXT2_FIRST_INODE(s) EXT2_FIRST_INO 1237f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o#define EXT2_INODE_SIZE(s) sizeof(struct ext2_inode) 1247f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o#endif 1257f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o 1263839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 12719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * badblocks list definitions 12819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o */ 12919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 130b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'otypedef struct ext2_struct_u32_list *ext2_badblocks_list; 131b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'otypedef struct ext2_struct_u32_iterate *ext2_badblocks_iterate; 132b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'o 133b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'otypedef struct ext2_struct_u32_list *ext2_u32_list; 134b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'otypedef struct ext2_struct_u32_iterate *ext2_u32_iterate; 13519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 13619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o/* old */ 137b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'otypedef struct ext2_struct_u32_list *badblocks_list; 138b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'otypedef struct ext2_struct_u32_iterate *badblocks_iterate; 13919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 14019c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define BADBLOCKS_FLAG_DIRTY 1 14119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 14219c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o/* 14319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * ext2_dblist structure and abstractions (see dblist.c) 14419c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o */ 14519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'ostruct ext2_db_entry { 14631dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o ext2_ino_t ino; 14719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o blk_t blk; 14819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int blockcnt; 14919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o}; 15019c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 15119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'otypedef struct ext2_struct_dblist *ext2_dblist; 15219c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 15319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define DBLIST_ABORT 1 15419c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 15519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o/* 15630fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o * ext2_fileio definitions 15730fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o */ 15830fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o 15930fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o#define EXT2_FILE_WRITE 0x0001 16030fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o#define EXT2_FILE_CREATE 0x0002 16130fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o 16230fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o#define EXT2_FILE_MASK 0x00FF 16330fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o 16430fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o#define EXT2_FILE_BUF_DIRTY 0x4000 16530fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o#define EXT2_FILE_BUF_VALID 0x2000 16630fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o 16730fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'otypedef struct ext2_file *ext2_file_t; 16830fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o 16930fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o#define EXT2_SEEK_SET 0 17030fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o#define EXT2_SEEK_CUR 1 17130fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o#define EXT2_SEEK_END 2 17230fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o 17330fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o/* 174a112847b39386f9e7332ba5e5a0a5e54cfe301ccTheodore Ts'o * Flags for the ext2_filsys structure and for ext2fs_open() 1753839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 17619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_FLAG_RW 0x01 17719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_FLAG_CHANGED 0x02 17819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_FLAG_DIRTY 0x04 17919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_FLAG_VALID 0x08 18019c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_FLAG_IB_DIRTY 0x10 18119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_FLAG_BB_DIRTY 0x20 1825c576477ccb2f0ca8c5d5af2e2354fd8eeff1589Theodore Ts'o#define EXT2_FLAG_SWAP_BYTES 0x40 1835c576477ccb2f0ca8c5d5af2e2354fd8eeff1589Theodore Ts'o#define EXT2_FLAG_SWAP_BYTES_READ 0x80 1845c576477ccb2f0ca8c5d5af2e2354fd8eeff1589Theodore Ts'o#define EXT2_FLAG_SWAP_BYTES_WRITE 0x100 1855c576477ccb2f0ca8c5d5af2e2354fd8eeff1589Theodore Ts'o#define EXT2_FLAG_MASTER_SB_ONLY 0x200 18619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_FLAG_FORCE 0x400 18743ec8734f2ecd0a345e831f45fd3dfb077426811Theodore Ts'o#define EXT2_FLAG_SUPER_ONLY 0x800 188a112847b39386f9e7332ba5e5a0a5e54cfe301ccTheodore Ts'o#define EXT2_FLAG_JOURNAL_DEV_OK 0x1000 189a78926effb15bbabb1c0ed3e438b03be25c4d48cTheodore Ts'o#define EXT2_FLAG_IMAGE_FILE 0x2000 1903839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 1917f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o/* 1927f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o * Special flag in the ext2 inode i_flag field that means that this is 1937f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o * a new inode. (So that ext2_write_inode() can clear extra fields.) 1947f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o */ 1957f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o#define EXT2_NEW_INODE_FL 0x80000000 1967f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o 1974e246704eab31407ac15be9ab206c6f929507cf0Theodore Ts'o/* 1984e246704eab31407ac15be9ab206c6f929507cf0Theodore Ts'o * Flags for mkjournal 1994e246704eab31407ac15be9ab206c6f929507cf0Theodore Ts'o * 2004e246704eab31407ac15be9ab206c6f929507cf0Theodore Ts'o * EXT2_MKJOURNAL_V1_SUPER Make a (deprecated) V1 journal superblock 2014e246704eab31407ac15be9ab206c6f929507cf0Theodore Ts'o */ 2024e246704eab31407ac15be9ab206c6f929507cf0Theodore Ts'o#define EXT2_MKJOURNAL_V1_SUPER 0x0000001 2034e246704eab31407ac15be9ab206c6f929507cf0Theodore Ts'o 2043839e65723771b85975f4263102dd3ceec4523cTheodore Ts'ostruct struct_ext2_filsys { 2054cbe8af4b0d0c72fb28bb500c1bd8a46b00fdde3Theodore Ts'o errcode_t magic; 2063839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o io_channel io; 2073839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o int flags; 2083839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o char * device_name; 2093839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o struct ext2_super_block * super; 210544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o unsigned int blocksize; 2113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o int fragsize; 2122eb374c9401079aa56aa12f0047ca3866e69b754Theodore Ts'o dgrp_t group_desc_count; 2133839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o unsigned long desc_blocks; 2143839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o struct ext2_group_desc * group_desc; 2153839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o int inode_blocks_per_group; 216f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o ext2fs_inode_bitmap inode_map; 217f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o ext2fs_block_bitmap block_map; 21831dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o errcode_t (*get_blocks)(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks); 21931dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o errcode_t (*check_directory)(ext2_filsys fs, ext2_ino_t ino); 2203839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o errcode_t (*write_bitmaps)(ext2_filsys fs); 22131dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o errcode_t (*read_inode)(ext2_filsys fs, ext2_ino_t ino, 2221e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o struct ext2_inode *inode); 22331dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o errcode_t (*write_inode)(ext2_filsys fs, ext2_ino_t ino, 2241e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o struct ext2_inode *inode); 225b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'o ext2_badblocks_list badblocks; 22619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o ext2_dblist dblist; 227a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o __u32 stride; /* for mke2fs */ 228c180ac86533bcbfb1560bd4aa01464785a760f70Theodore Ts'o struct ext2_super_block * orig_super; 229a78926effb15bbabb1c0ed3e438b03be25c4d48cTheodore Ts'o struct ext2_image_hdr * image_header; 2306a525069a99787ef3ae1156f12230044b3568f4bTheodore Ts'o __u32 umask; 23119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o /* 23219c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * Reserved for future expansion 23319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o */ 2346a525069a99787ef3ae1156f12230044b3568f4bTheodore Ts'o __u32 reserved[8]; 2353839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 2363839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o /* 237a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o * Reserved for the use of the calling application. 2383839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 239b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o void * priv_data; 240a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o 241a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o /* 242a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o * Inode cache 243a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o */ 244a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o struct ext2_inode_cache *icache; 2451ad54a940c499a66241f624882f1ffa03ce56d90Theodore Ts'o io_channel image_io; 2463839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}; 2473839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 2485953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o#if EXT2_FLAT_INCLUDES 2495953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o#include "e2_bitops.h" 2505953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o#else 2517c2d25699f2da458ba8201a375b00562d7a2469eTheodore Ts'o#include <ext2fs/bitops.h> 2525953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o#endif 253d40259fd552d942903f2fd0b426c75a5c2516017Theodore Ts'o 2543839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 2553839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Return flags for the block iterator functions 2563839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 2573839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define BLOCK_CHANGED 1 2583839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define BLOCK_ABORT 2 2593839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define BLOCK_ERROR 4 2603839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 2613839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 2623839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Block interate flags 26350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * 26450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * BLOCK_FLAG_APPEND, or BLOCK_FLAG_HOLE, indicates that the interator 26550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * function should be called on blocks where the block number is zero. 26650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * This is used by ext2fs_expand_dir() to be able to add a new block 26750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * to an inode. It can also be used for programs that want to be able 26850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * to deal with files that contain "holes". 26950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * 27050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * BLOCK_FLAG_TRAVERSE indicates that the iterator function for the 27150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * indirect, doubly indirect, etc. blocks should be called after all 27250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * of the blocks containined in the indirect blocks are processed. 27350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * This is useful if you are going to be deallocating blocks from an 27450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * inode. 2751e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o * 2761e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o * BLOCK_FLAG_DATA_ONLY indicates that the iterator function should be 2771e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o * called for data blocks only. 278674a4ee1e3e05133ddad701730bfc21c283272a4Theodore Ts'o * 279674a4ee1e3e05133ddad701730bfc21c283272a4Theodore Ts'o * BLOCK_FLAG_NO_LARGE is for internal use only. It informs 28036a43d675ef61d0f5d5b2ad62d2e670c408d14acTheodore Ts'o * ext2fs_block_iterate2 that large files won't be accepted. 2813839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 2823839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define BLOCK_FLAG_APPEND 1 28350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define BLOCK_FLAG_HOLE 1 2843839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define BLOCK_FLAG_DEPTH_TRAVERSE 2 2851e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define BLOCK_FLAG_DATA_ONLY 4 2861e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 287674a4ee1e3e05133ddad701730bfc21c283272a4Theodore Ts'o#define BLOCK_FLAG_NO_LARGE 0x1000 288674a4ee1e3e05133ddad701730bfc21c283272a4Theodore Ts'o 2891e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o/* 2901e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o * Magic "block count" return values for the block iterator function. 2911e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o */ 2921e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define BLOCK_COUNT_IND (-1) 2931e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define BLOCK_COUNT_DIND (-2) 2941e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define BLOCK_COUNT_TIND (-3) 2951e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define BLOCK_COUNT_TRANSLATOR (-4) 2963839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 2974a31c48b827f378f386b28461fd14b41d709e4ebTheodore Ts'o#if 0 2983839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 2991e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o * Flags for ext2fs_move_blocks 3001e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o */ 3011e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o#define EXT2_BMOVE_GET_DBLIST 0x0001 30236f21439f5d8b2233d13e042833d4d921a5c2c40Theodore Ts'o#define EXT2_BMOVE_DEBUG 0x0002 3034a31c48b827f378f386b28461fd14b41d709e4ebTheodore Ts'o#endif 3041e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o 3051e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o/* 306f9190c8a95c6b76eac567d5896b3ed06ed2a3adaTheodore Ts'o * Flags for directory block reading and writing functions 307f9190c8a95c6b76eac567d5896b3ed06ed2a3adaTheodore Ts'o */ 308f9190c8a95c6b76eac567d5896b3ed06ed2a3adaTheodore Ts'o#define EXT2_DIRBLOCK_V2_STRUCT 0x0001 309f9190c8a95c6b76eac567d5896b3ed06ed2a3adaTheodore Ts'o 310f9190c8a95c6b76eac567d5896b3ed06ed2a3adaTheodore Ts'o/* 3113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Return flags for the directory iterator functions 3123839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 3133839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define DIRENT_CHANGED 1 3143839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define DIRENT_ABORT 2 3153839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define DIRENT_ERROR 3 3163839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 3173839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 3183839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Directory iterator flags 3193839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 3203839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 3213839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define DIRENT_FLAG_INCLUDE_EMPTY 1 3228bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o#define DIRENT_FLAG_INCLUDE_REMOVED 2 32319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 32419c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define DIRENT_DOT_FILE 1 32519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define DIRENT_DOT_DOT_FILE 2 32619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define DIRENT_OTHER_FILE 3 3278bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o#define DIRENT_DELETED_FILE 4 32819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 3293839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 3303839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Inode scan definitions 3313839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 332f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'otypedef struct ext2_struct_inode_scan *ext2_inode_scan; 333f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o 33419c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o/* 33519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * ext2fs_scan flags 33619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o */ 33719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_SF_CHK_BADBLOCKS 0x0001 33819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_SF_BAD_INODE_BLK 0x0002 33919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_SF_BAD_EXTRA_BYTES 0x0004 34019c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_SF_SKIP_MISSING_ITABLE 0x0008 3413839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 342f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o/* 34350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * ext2fs_check_if_mounted flags 34450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o */ 34550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define EXT2_MF_MOUNTED 1 34650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define EXT2_MF_ISROOT 2 34719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_MF_READONLY 4 34807cefe7a7051e32f14b93d9003a6dbb308597bd3Theodore Ts'o#define EXT2_MF_SWAP 8 34950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 35050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* 35150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * Ext2/linux mode flags. We define them here so that we don't need 35250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * to depend on the OS's sys/stat.h, since we may be compiling on a 35350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * non-Linux system. 35450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o */ 35550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_IFMT 00170000 35650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_IFSOCK 0140000 35750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_IFLNK 0120000 35850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_IFREG 0100000 35950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_IFBLK 0060000 36050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_IFDIR 0040000 36150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_IFCHR 0020000 36250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_IFIFO 0010000 36350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_ISUID 0004000 36450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_ISGID 0002000 36550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_ISVTX 0001000 36650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 3671e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define LINUX_S_IRWXU 00700 3681e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define LINUX_S_IRUSR 00400 3691e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define LINUX_S_IWUSR 00200 3701e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define LINUX_S_IXUSR 00100 3711e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 3721e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define LINUX_S_IRWXG 00070 3731e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define LINUX_S_IRGRP 00040 3741e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define LINUX_S_IWGRP 00020 3751e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define LINUX_S_IXGRP 00010 3761e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 3771e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define LINUX_S_IRWXO 00007 3781e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define LINUX_S_IROTH 00004 3791e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define LINUX_S_IWOTH 00002 3801e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define LINUX_S_IXOTH 00001 3811e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 38250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_ISLNK(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFLNK) 38350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_ISREG(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFREG) 38450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_ISDIR(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFDIR) 38550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_ISCHR(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFCHR) 38650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_ISBLK(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFBLK) 38750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_ISFIFO(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFIFO) 38850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define LINUX_S_ISSOCK(m) (((m) & LINUX_S_IFMT) == LINUX_S_IFSOCK) 38950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 39050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* 391819157db798cd514aa2f3ae421d64e2e0c9b7fa8Theodore Ts'o * ext2 size of an inode 392819157db798cd514aa2f3ae421d64e2e0c9b7fa8Theodore Ts'o */ 393819157db798cd514aa2f3ae421d64e2e0c9b7fa8Theodore Ts'o#define EXT2_I_SIZE(i) ((i)->i_size | ((__u64) (i)->i_size_high << 32)) 394819157db798cd514aa2f3ae421d64e2e0c9b7fa8Theodore Ts'o 395819157db798cd514aa2f3ae421d64e2e0c9b7fa8Theodore Ts'o/* 39619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * ext2_icount_t abstraction 39719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o */ 39819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#define EXT2_ICOUNT_OPT_INCREMENT 0x01 39919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 40019c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'otypedef struct ext2_icount *ext2_icount_t; 40119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 40219c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o/* 40330fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o * Flags for ext2fs_bmap 40430fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o */ 4051d667534e93e78eedbf2efcef6d7844041675f26Theodore Ts'o#define BMAP_ALLOC 0x0001 4061d667534e93e78eedbf2efcef6d7844041675f26Theodore Ts'o#define BMAP_SET 0x0002 40730fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o 40830fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o/* 40972ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'o * Flags for imager.c functions 41072ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'o */ 41172ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'o#define IMAGER_FLAG_INODEMAP 1 41272ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'o#define IMAGER_FLAG_SPARSEWRITE 2 41372ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'o 41472ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'o/* 415f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o * For checking structure magic numbers... 416f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o */ 4173839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 418f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#define EXT2_CHECK_MAGIC(struct, code) \ 419f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o if ((struct)->magic != (code)) return (code) 4201e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 4211e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 4221e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o/* 423e5b38a5fafe4807b54d90a2e70bddf4b41b1695bTheodore Ts'o * For ext2 compression support 4241e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o */ 4255a63dd28f23e31f4ed47073b558fc701adf83536Theodore Ts'o#define EXT2FS_COMPRESSED_BLKADDR ((blk_t) 0xffffffff) 4265a63dd28f23e31f4ed47073b558fc701adf83536Theodore Ts'o#define HOLE_BLKADDR(_b) ((_b) == 0 || (_b) == EXT2FS_COMPRESSED_BLKADDR) 4275a63dd28f23e31f4ed47073b558fc701adf83536Theodore Ts'o 428521e36857227b21e7ab47b0a97f788d2af9f9717Theodore Ts'o/* 429426d734ff06e769cf5117053b6264c4a9decd3b2Theodore Ts'o * Features supported by this version of the library 430521e36857227b21e7ab47b0a97f788d2af9f9717Theodore Ts'o */ 4313a5f8eaa9741f6f14520ddd263a996e2764dd437Theodore Ts'o#define EXT2_LIB_FEATURE_COMPAT_SUPP (EXT2_FEATURE_COMPAT_DIR_PREALLOC|\ 4323a5f8eaa9741f6f14520ddd263a996e2764dd437Theodore Ts'o EXT2_FEATURE_COMPAT_IMAGIC_INODES|\ 433342d847db355d81299218e07a1e58ece82080a04Theodore Ts'o EXT3_FEATURE_COMPAT_HAS_JOURNAL|\ 434d323f8fb369089b97d6f3bf0f8d64ceeab0b10f5Theodore Ts'o EXT2_FEATURE_COMPAT_RESIZE_INODE|\ 43552783e0ca72a80c549e9d266b3472f78fc61bdb2Theodore Ts'o EXT2_FEATURE_COMPAT_DIR_INDEX|\ 436342d847db355d81299218e07a1e58ece82080a04Theodore Ts'o EXT2_FEATURE_COMPAT_EXT_ATTR) 4372fe1efe2e56dc9f8223992301aec3844dd9563e6Theodore Ts'o 4385a63dd28f23e31f4ed47073b558fc701adf83536Theodore Ts'o/* This #ifdef is temporary until compression is fully supported */ 4395a63dd28f23e31f4ed47073b558fc701adf83536Theodore Ts'o#ifdef ENABLE_COMPRESSION 440e589f678e1ed5efa8dd4450f37bee0486caa3504Theodore Ts'o#ifndef I_KNOW_THAT_COMPRESSION_IS_EXPERIMENTAL 441e589f678e1ed5efa8dd4450f37bee0486caa3504Theodore Ts'o/* If the below warning bugs you, then have 442e589f678e1ed5efa8dd4450f37bee0486caa3504Theodore Ts'o `CPPFLAGS=-DI_KNOW_THAT_COMPRESSION_IS_EXPERIMENTAL' in your 443e589f678e1ed5efa8dd4450f37bee0486caa3504Theodore Ts'o environment at configure time. */ 444cdaf1fa78f6d63457eb5337c14b23e567d1346a7Theodore Ts'o #warning "Compression support is experimental" 445e589f678e1ed5efa8dd4450f37bee0486caa3504Theodore Ts'o#endif 4465a63dd28f23e31f4ed47073b558fc701adf83536Theodore Ts'o#define EXT2_LIB_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE|\ 447ab146766e3c773ef532381328772ec5e9db9e40bTheodore Ts'o EXT2_FEATURE_INCOMPAT_COMPRESSION|\ 448a112847b39386f9e7332ba5e5a0a5e54cfe301ccTheodore Ts'o EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|\ 449c046ac7f2e4c53e20cf1e909bbe511f91074b396Theodore Ts'o EXT2_FEATURE_INCOMPAT_META_BG|\ 450ab146766e3c773ef532381328772ec5e9db9e40bTheodore Ts'o EXT3_FEATURE_INCOMPAT_RECOVER) 4515a63dd28f23e31f4ed47073b558fc701adf83536Theodore Ts'o#else 452ab146766e3c773ef532381328772ec5e9db9e40bTheodore Ts'o#define EXT2_LIB_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE|\ 453a112847b39386f9e7332ba5e5a0a5e54cfe301ccTheodore Ts'o EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|\ 454c046ac7f2e4c53e20cf1e909bbe511f91074b396Theodore Ts'o EXT2_FEATURE_INCOMPAT_META_BG|\ 455ab146766e3c773ef532381328772ec5e9db9e40bTheodore Ts'o EXT3_FEATURE_INCOMPAT_RECOVER) 4565a63dd28f23e31f4ed47073b558fc701adf83536Theodore Ts'o#endif 457674a4ee1e3e05133ddad701730bfc21c283272a4Theodore Ts'o#define EXT2_LIB_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|\ 458674a4ee1e3e05133ddad701730bfc21c283272a4Theodore Ts'o EXT2_FEATURE_RO_COMPAT_LARGE_FILE) 4593839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 4603839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * function prototypes 4613839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 4623839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 4633839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* alloc.c */ 46431dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_new_inode(ext2_filsys fs, ext2_ino_t dir, int mode, 46531dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o ext2fs_inode_bitmap map, ext2_ino_t *ret); 4663839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_new_block(ext2_filsys fs, blk_t goal, 467f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o ext2fs_block_bitmap map, blk_t *ret); 4683839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_get_free_blocks(ext2_filsys fs, blk_t start, 469f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o blk_t finish, int num, 470f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o ext2fs_block_bitmap map, 4713839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o blk_t *ret); 47230fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'oextern errcode_t ext2fs_alloc_block(ext2_filsys fs, blk_t goal, 47330fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o char *block_buf, blk_t *ret); 4743839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 475ef344e13d2125e9dae3764b98f9fe3a170cd79e2Theodore Ts'o/* alloc_sb.c */ 476ef344e13d2125e9dae3764b98f9fe3a170cd79e2Theodore Ts'oextern int ext2fs_reserve_super_and_bgd(ext2_filsys fs, 477ef344e13d2125e9dae3764b98f9fe3a170cd79e2Theodore Ts'o dgrp_t group, 478ef344e13d2125e9dae3764b98f9fe3a170cd79e2Theodore Ts'o ext2fs_block_bitmap bmap); 479ef344e13d2125e9dae3764b98f9fe3a170cd79e2Theodore Ts'o 4808bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o/* alloc_stats.c */ 4818bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'ovoid ext2fs_inode_alloc_stats(ext2_filsys fs, ext2_ino_t ino, int inuse); 4827f961d424b1ba527e835d01ad24e0e4c3f4088c5Theodore Ts'ovoid ext2fs_inode_alloc_stats2(ext2_filsys fs, ext2_ino_t ino, 4837f961d424b1ba527e835d01ad24e0e4c3f4088c5Theodore Ts'o int inuse, int isdir); 4848bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'ovoid ext2fs_block_alloc_stats(ext2_filsys fs, blk_t blk, int inuse); 4858bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o 4861e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o/* alloc_tables.c */ 4871e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'oextern errcode_t ext2fs_allocate_tables(ext2_filsys fs); 4882eb374c9401079aa56aa12f0047ca3866e69b754Theodore Ts'oextern errcode_t ext2fs_allocate_group_table(ext2_filsys fs, dgrp_t group, 4891e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o ext2fs_block_bitmap bmap); 49019c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 4913839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* badblocks.c */ 492b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'oextern errcode_t ext2fs_u32_list_create(ext2_u32_list *ret, int size); 493b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'oextern errcode_t ext2fs_u32_list_add(ext2_u32_list bb, __u32 blk); 494544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'oextern int ext2fs_u32_list_find(ext2_u32_list bb, __u32 blk); 495b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'oextern int ext2fs_u32_list_test(ext2_u32_list bb, blk_t blk); 496b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'oextern errcode_t ext2fs_u32_list_iterate_begin(ext2_u32_list bb, 497b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'o ext2_u32_iterate *ret); 498b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'oextern int ext2fs_u32_list_iterate(ext2_u32_iterate iter, blk_t *blk); 499b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'oextern void ext2fs_u32_list_iterate_end(ext2_u32_iterate iter); 500b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'oextern errcode_t ext2fs_u32_copy(ext2_u32_list src, ext2_u32_list *dest); 501b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'oextern int ext2fs_u32_list_equal(ext2_u32_list bb1, ext2_u32_list bb2); 502b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'o 50319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern errcode_t ext2fs_badblocks_list_create(ext2_badblocks_list *ret, 50419c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int size); 50519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern errcode_t ext2fs_badblocks_list_add(ext2_badblocks_list bb, 50619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o blk_t blk); 50719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern int ext2fs_badblocks_list_test(ext2_badblocks_list bb, 50819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o blk_t blk); 5097d7bdd578b307cad1dc248310eb279c6fb73b682Theodore Ts'oextern int ext2fs_u32_list_del(ext2_u32_list bb, __u32 blk); 5107d7bdd578b307cad1dc248310eb279c6fb73b682Theodore Ts'oextern void ext2fs_badblocks_list_del(ext2_u32_list bb, __u32 blk); 51119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern errcode_t 51219c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o ext2fs_badblocks_list_iterate_begin(ext2_badblocks_list bb, 51319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o ext2_badblocks_iterate *ret); 51419c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern int ext2fs_badblocks_list_iterate(ext2_badblocks_iterate iter, 51519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o blk_t *blk); 51619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern void ext2fs_badblocks_list_iterate_end(ext2_badblocks_iterate iter); 517a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'oextern errcode_t ext2fs_badblocks_copy(ext2_badblocks_list src, 518a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o ext2_badblocks_list *dest); 51957dca85467cf3fc61565e916a5f2e35db8020d88Theodore Ts'oextern int ext2fs_badblocks_equal(ext2_badblocks_list bb1, 52057dca85467cf3fc61565e916a5f2e35db8020d88Theodore Ts'o ext2_badblocks_list bb2); 521220c0040fb4a5e8a2a091a9e3a936bb8a85223d8Theodore Ts'oextern int ext2fs_u32_list_count(ext2_u32_list bb); 52219c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 52319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o/* bb_compat */ 5243839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t badblocks_list_create(badblocks_list *ret, int size); 5253839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t badblocks_list_add(badblocks_list bb, blk_t blk); 5263839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern int badblocks_list_test(badblocks_list bb, blk_t blk); 5273839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t badblocks_list_iterate_begin(badblocks_list bb, 5283839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o badblocks_iterate *ret); 5293839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern int badblocks_list_iterate(badblocks_iterate iter, blk_t *blk); 5303839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void badblocks_list_iterate_end(badblocks_iterate iter); 531a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'oextern void badblocks_list_free(badblocks_list bb); 5323839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 5333839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* bb_inode.c */ 5343839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_update_bb_inode(ext2_filsys fs, 53519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o ext2_badblocks_list bb_list); 5363839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 5373839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* bitmaps.c */ 5383839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_write_inode_bitmap(ext2_filsys fs); 5393839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_write_block_bitmap (ext2_filsys fs); 5403839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_read_inode_bitmap (ext2_filsys fs); 5413839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_read_block_bitmap(ext2_filsys fs); 5421e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'oextern errcode_t ext2fs_allocate_generic_bitmap(__u32 start, 5431e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o __u32 end, 5441e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o __u32 real_end, 5451e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o const char *descr, 5461e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o ext2fs_generic_bitmap *ret); 54750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern errcode_t ext2fs_allocate_block_bitmap(ext2_filsys fs, 54850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o const char *descr, 54950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o ext2fs_block_bitmap *ret); 55050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern errcode_t ext2fs_allocate_inode_bitmap(ext2_filsys fs, 55150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o const char *descr, 55250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o ext2fs_inode_bitmap *ret); 55350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern errcode_t ext2fs_fudge_inode_bitmap_end(ext2fs_inode_bitmap bitmap, 55431dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o ext2_ino_t end, ext2_ino_t *oend); 55550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern errcode_t ext2fs_fudge_block_bitmap_end(ext2fs_block_bitmap bitmap, 55650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o blk_t end, blk_t *oend); 55750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_clear_inode_bitmap(ext2fs_inode_bitmap bitmap); 55850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_clear_block_bitmap(ext2fs_block_bitmap bitmap); 5593839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_read_bitmaps(ext2_filsys fs); 5603839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_write_bitmaps(ext2_filsys fs); 5613839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 5623839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* block.c */ 5633839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_block_iterate(ext2_filsys fs, 56431dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o ext2_ino_t ino, 5653839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o int flags, 5663839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o char *block_buf, 5673839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o int (*func)(ext2_filsys fs, 5683839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o blk_t *blocknr, 5693839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o int blockcnt, 570b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o void *priv_data), 571b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o void *priv_data); 57219c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oerrcode_t ext2fs_block_iterate2(ext2_filsys fs, 57331dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o ext2_ino_t ino, 57419c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int flags, 57519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o char *block_buf, 57619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int (*func)(ext2_filsys fs, 57719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o blk_t *blocknr, 57803673dbb04a3458ce78a394f27d17d434b51a714Theodore Ts'o e2_blkcnt_t blockcnt, 579674a4ee1e3e05133ddad701730bfc21c283272a4Theodore Ts'o blk_t ref_blk, 580674a4ee1e3e05133ddad701730bfc21c283272a4Theodore Ts'o int ref_offset, 581674a4ee1e3e05133ddad701730bfc21c283272a4Theodore Ts'o void *priv_data), 582674a4ee1e3e05133ddad701730bfc21c283272a4Theodore Ts'o void *priv_data); 58319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 58430fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o/* bmap.c */ 58531dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_bmap(ext2_filsys fs, ext2_ino_t ino, 58630fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o struct ext2_inode *inode, 58730fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o char *block_buf, int bmap_flags, 58830fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o blk_t block, blk_t *phys_blk); 58930fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o 59030fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o 5914a31c48b827f378f386b28461fd14b41d709e4ebTheodore Ts'o#if 0 5921e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o/* bmove.c */ 5931e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'oextern errcode_t ext2fs_move_blocks(ext2_filsys fs, 5941e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o ext2fs_block_bitmap reserve, 5959941fb73f530b11d3d1dcc97a585f63449703f5aTheodore Ts'o ext2fs_block_bitmap alloc_map, 5961e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o int flags); 5974a31c48b827f378f386b28461fd14b41d709e4ebTheodore Ts'o#endif 5981e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o 599f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o/* check_desc.c */ 600f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oextern errcode_t ext2fs_check_desc(ext2_filsys fs); 601f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o 6023839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* closefs.c */ 6033839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_close(ext2_filsys fs); 6043839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_flush(ext2_filsys fs); 6051b4cd9c7464d5bd0f5b416c7303bcc827e312473Theodore Ts'oextern int ext2fs_bg_has_super(ext2_filsys fs, int group_block); 606ef344e13d2125e9dae3764b98f9fe3a170cd79e2Theodore Ts'oextern int ext2fs_super_and_bgd_loc(ext2_filsys fs, 607ef344e13d2125e9dae3764b98f9fe3a170cd79e2Theodore Ts'o dgrp_t group, 608ef344e13d2125e9dae3764b98f9fe3a170cd79e2Theodore Ts'o blk_t *ret_super_blk, 609ef344e13d2125e9dae3764b98f9fe3a170cd79e2Theodore Ts'o blk_t *ret_old_desc_blk, 610ef344e13d2125e9dae3764b98f9fe3a170cd79e2Theodore Ts'o blk_t *ret_new_desc_blk, 611ef344e13d2125e9dae3764b98f9fe3a170cd79e2Theodore Ts'o int *ret_meta_bg); 6121b4cd9c7464d5bd0f5b416c7303bcc827e312473Theodore Ts'oextern void ext2fs_update_dynamic_rev(ext2_filsys fs); 6133839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 61450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* cmp_bitmaps.c */ 61550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern errcode_t ext2fs_compare_block_bitmap(ext2fs_block_bitmap bm1, 61650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o ext2fs_block_bitmap bm2); 61750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern errcode_t ext2fs_compare_inode_bitmap(ext2fs_inode_bitmap bm1, 61850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o ext2fs_inode_bitmap bm2); 61950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 62019c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o/* dblist.c */ 62119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 62231dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_get_num_dirs(ext2_filsys fs, ext2_ino_t *ret_num_dirs); 623a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'oextern errcode_t ext2fs_init_dblist(ext2_filsys fs, ext2_dblist *ret_dblist); 62431dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_add_dir_block(ext2_dblist dblist, ext2_ino_t ino, 625a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o blk_t blk, int blockcnt); 626ea1959f01523ffc105747d660ccc5b7f02805928Theodore Ts'oextern void ext2fs_dblist_sort(ext2_dblist dblist, 627ea1959f01523ffc105747d660ccc5b7f02805928Theodore Ts'o EXT2_QSORT_TYPE (*sortfunc)(const void *, 628ea1959f01523ffc105747d660ccc5b7f02805928Theodore Ts'o const void *)); 629a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'oextern errcode_t ext2fs_dblist_iterate(ext2_dblist dblist, 630a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o int (*func)(ext2_filsys fs, struct ext2_db_entry *db_info, 631b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o void *priv_data), 632b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o void *priv_data); 63331dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_set_dir_block(ext2_dblist dblist, ext2_ino_t ino, 634a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o blk_t blk, int blockcnt); 635a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'oextern errcode_t ext2fs_copy_dblist(ext2_dblist src, 636a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o ext2_dblist *dest); 637549860c5c7a5a2974c103a55d881fbd5701aff13Theodore Ts'oextern int ext2fs_dblist_count(ext2_dblist dblist); 63819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 63919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o/* dblist_dir.c */ 64019c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern errcode_t 64119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o ext2fs_dblist_dir_iterate(ext2_dblist dblist, 64219c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int flags, 64319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o char *block_buf, 64431dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o int (*func)(ext2_ino_t dir, 64519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int entry, 64619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o struct ext2_dir_entry *dirent, 64719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int offset, 64819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int blocksize, 64919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o char *buf, 650b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o void *priv_data), 651b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o void *priv_data); 65250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 65350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* dirblock.c */ 65450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern errcode_t ext2fs_read_dir_block(ext2_filsys fs, blk_t block, 65550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o void *buf); 656f9190c8a95c6b76eac567d5896b3ed06ed2a3adaTheodore Ts'oextern errcode_t ext2fs_read_dir_block2(ext2_filsys fs, blk_t block, 657f9190c8a95c6b76eac567d5896b3ed06ed2a3adaTheodore Ts'o void *buf, int flags); 65850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern errcode_t ext2fs_write_dir_block(ext2_filsys fs, blk_t block, 65950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o void *buf); 660f9190c8a95c6b76eac567d5896b3ed06ed2a3adaTheodore Ts'oextern errcode_t ext2fs_write_dir_block2(ext2_filsys fs, blk_t block, 661f9190c8a95c6b76eac567d5896b3ed06ed2a3adaTheodore Ts'o void *buf, int flags); 66250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 66352783e0ca72a80c549e9d266b3472f78fc61bdb2Theodore Ts'o/* dirhash.c */ 66452783e0ca72a80c549e9d266b3472f78fc61bdb2Theodore Ts'oextern errcode_t ext2fs_dirhash(int version, const char *name, int len, 665b33278c4d640c3fc8f99a314b637b7e502fceb9cTheodore Ts'o const __u32 *seed, 666503f9e7f6eb331c5b75d7f1ad126f71bcdcfb4e3Theodore Ts'o ext2_dirhash_t *ret_hash, 667503f9e7f6eb331c5b75d7f1ad126f71bcdcfb4e3Theodore Ts'o ext2_dirhash_t *ret_minor_hash); 66852783e0ca72a80c549e9d266b3472f78fc61bdb2Theodore Ts'o 66952783e0ca72a80c549e9d266b3472f78fc61bdb2Theodore Ts'o 67019c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o/* dir_iterate.c */ 67119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern errcode_t ext2fs_dir_iterate(ext2_filsys fs, 67231dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o ext2_ino_t dir, 67319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int flags, 67419c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o char *block_buf, 67519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int (*func)(struct ext2_dir_entry *dirent, 67619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int offset, 67719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int blocksize, 67819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o char *buf, 679b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o void *priv_data), 680b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o void *priv_data); 6818bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'oextern errcode_t ext2fs_dir_iterate2(ext2_filsys fs, 6828bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o ext2_ino_t dir, 6838bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o int flags, 6848bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o char *block_buf, 6858bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o int (*func)(ext2_ino_t dir, 6868bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o int entry, 6878bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o struct ext2_dir_entry *dirent, 6888bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o int offset, 6898bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o int blocksize, 6908bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o char *buf, 6918bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o void *priv_data), 6928bd0c95908baa3af706b9e731daff9472bec74c9Theodore Ts'o void *priv_data); 69319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 694a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o/* dupfs.c */ 695a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'oextern errcode_t ext2fs_dup_handle(ext2_filsys src, ext2_filsys *dest); 69619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 6973839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* expanddir.c */ 69831dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_expand_dir(ext2_filsys fs, ext2_ino_t dir); 6993839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 700342d847db355d81299218e07a1e58ece82080a04Theodore Ts'o/* ext_attr.c */ 701342d847db355d81299218e07a1e58ece82080a04Theodore Ts'ovoid ext2fs_swap_ext_attr(ext2_filsys fs, char *to, char *from); 702342d847db355d81299218e07a1e58ece82080a04Theodore Ts'oextern errcode_t ext2fs_read_ext_attr(ext2_filsys fs, blk_t block, void *buf); 7030684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'oextern errcode_t ext2fs_write_ext_attr(ext2_filsys fs, blk_t block, 7040684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'o void *buf); 7050684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'oextern errcode_t ext2fs_adjust_ea_refcount(ext2_filsys fs, blk_t blk, 7060684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'o char *block_buf, 7070684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'o int adjust, __u32 *newcount); 7080684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'o 70930fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o/* fileio.c */ 710a435ec3449694a8fa299337197cc09624960a3a6Theodore Ts'oextern errcode_t ext2fs_file_open2(ext2_filsys fs, ext2_ino_t ino, 711a435ec3449694a8fa299337197cc09624960a3a6Theodore Ts'o struct ext2_inode *inode, 712a435ec3449694a8fa299337197cc09624960a3a6Theodore Ts'o int flags, ext2_file_t *ret); 71331dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_file_open(ext2_filsys fs, ext2_ino_t ino, 71430fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o int flags, ext2_file_t *ret); 71579a90bdad033e101c38bb3c3207c8f4be47a2de7Theodore Ts'oextern ext2_filsys ext2fs_file_get_fs(ext2_file_t file); 71630fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'oextern errcode_t ext2fs_file_close(ext2_file_t file); 717f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'oextern errcode_t ext2fs_file_flush(ext2_file_t file); 71830fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'oextern errcode_t ext2fs_file_read(ext2_file_t file, void *buf, 71979a90bdad033e101c38bb3c3207c8f4be47a2de7Theodore Ts'o unsigned int wanted, unsigned int *got); 720f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'oextern errcode_t ext2fs_file_write(ext2_file_t file, const void *buf, 72179a90bdad033e101c38bb3c3207c8f4be47a2de7Theodore Ts'o unsigned int nbytes, unsigned int *written); 722819157db798cd514aa2f3ae421d64e2e0c9b7fa8Theodore Ts'oextern errcode_t ext2fs_file_llseek(ext2_file_t file, __u64 offset, 723819157db798cd514aa2f3ae421d64e2e0c9b7fa8Theodore Ts'o int whence, __u64 *ret_pos); 724674a4ee1e3e05133ddad701730bfc21c283272a4Theodore Ts'oextern errcode_t ext2fs_file_lseek(ext2_file_t file, ext2_off_t offset, 725674a4ee1e3e05133ddad701730bfc21c283272a4Theodore Ts'o int whence, ext2_off_t *ret_pos); 726819157db798cd514aa2f3ae421d64e2e0c9b7fa8Theodore Ts'oerrcode_t ext2fs_file_get_lsize(ext2_file_t file, __u64 *ret_size); 72779a90bdad033e101c38bb3c3207c8f4be47a2de7Theodore Ts'oextern ext2_off_t ext2fs_file_get_size(ext2_file_t file); 72879a90bdad033e101c38bb3c3207c8f4be47a2de7Theodore Ts'oextern errcode_t ext2fs_file_set_size(ext2_file_t file, ext2_off_t size); 72930fab293065b7fc6d7d138e8e9eea533a3560873Theodore Ts'o 730de23aa1d177a67283f5f5a1f172b00527fe3b63aTheodore Ts'o/* finddev.c */ 731de23aa1d177a67283f5f5a1f172b00527fe3b63aTheodore Ts'oextern char *ext2fs_find_block_device(dev_t device); 732de23aa1d177a67283f5f5a1f172b00527fe3b63aTheodore Ts'o 7334d0f3e17a5b7556505fe437680070fe3bb140d67Theodore Ts'o/* flushb.c */ 7344d0f3e17a5b7556505fe437680070fe3bb140d67Theodore Ts'oextern errcode_t ext2fs_sync_device(int fd, int flushb); 7354d0f3e17a5b7556505fe437680070fe3bb140d67Theodore Ts'o 7363839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* freefs.c */ 7373839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void ext2fs_free(ext2_filsys fs); 7381e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'oextern void ext2fs_free_generic_bitmap(ext2fs_inode_bitmap bitmap); 73950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_free_block_bitmap(ext2fs_block_bitmap bitmap); 74050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_free_inode_bitmap(ext2fs_inode_bitmap bitmap); 741a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'oextern void ext2fs_free_dblist(ext2_dblist dblist); 742b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'oextern void ext2fs_badblocks_list_free(ext2_badblocks_list bb); 743b7a00563b22b0ea47ddc7117508c0b8e0d65df43Theodore Ts'oextern void ext2fs_u32_list_free(ext2_u32_list bb); 74450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 74550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* getsize.c */ 74650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern errcode_t ext2fs_get_device_size(const char *file, int blocksize, 74750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o blk_t *retblocks); 7483839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 74993d5c38791a3778eed18fe968cdd136d23d0fa07Theodore Ts'o/* getsectsize.c */ 75093d5c38791a3778eed18fe968cdd136d23d0fa07Theodore Ts'oerrcode_t ext2fs_get_device_sectsize(const char *file, int *sectsize); 75193d5c38791a3778eed18fe968cdd136d23d0fa07Theodore Ts'o 75272ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'o/* imager.c */ 75372ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'oextern errcode_t ext2fs_image_inode_write(ext2_filsys fs, int fd, int flags); 75472ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'oextern errcode_t ext2fs_image_inode_read(ext2_filsys fs, int fd, int flags); 75572ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'oextern errcode_t ext2fs_image_super_write(ext2_filsys fs, int fd, int flags); 75672ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'oextern errcode_t ext2fs_image_super_read(ext2_filsys fs, int fd, int flags); 75772ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'oextern errcode_t ext2fs_image_bitmap_write(ext2_filsys fs, int fd, int flags); 75872ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'oextern errcode_t ext2fs_image_bitmap_read(ext2_filsys fs, int fd, int flags); 75972ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'o 7603839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* initialize.c */ 7613839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_initialize(const char *name, int flags, 7623839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o struct ext2_super_block *param, 7633839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o io_manager manager, ext2_filsys *ret_fs); 7643839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 765f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'o/* icount.c */ 766f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'oextern void ext2fs_free_icount(ext2_icount_t icount); 767544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'oextern errcode_t ext2fs_create_icount2(ext2_filsys fs, int flags, 768544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o unsigned int size, 769f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'o ext2_icount_t hint, ext2_icount_t *ret); 770544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'oextern errcode_t ext2fs_create_icount(ext2_filsys fs, int flags, 771544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o unsigned int size, 772f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'o ext2_icount_t *ret); 773f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'oextern errcode_t ext2fs_icount_fetch(ext2_icount_t icount, ext2_ino_t ino, 774f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'o __u16 *ret); 775f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'oextern errcode_t ext2fs_icount_increment(ext2_icount_t icount, ext2_ino_t ino, 776f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'o __u16 *ret); 777f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'oextern errcode_t ext2fs_icount_decrement(ext2_icount_t icount, ext2_ino_t ino, 778f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'o __u16 *ret); 779f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'oextern errcode_t ext2fs_icount_store(ext2_icount_t icount, ext2_ino_t ino, 780f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'o __u16 count); 781f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'oextern ext2_ino_t ext2fs_get_icount_size(ext2_icount_t icount); 782f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'oerrcode_t ext2fs_icount_validate(ext2_icount_t icount, FILE *); 783f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'o 7843839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* inode.c */ 78572ed12648368b3f3ea14e8102e20bf5d3a3be6d3Theodore Ts'oextern errcode_t ext2fs_flush_icache(ext2_filsys fs); 7863839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_open_inode_scan(ext2_filsys fs, int buffer_blocks, 7873839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o ext2_inode_scan *ret_scan); 7883839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void ext2fs_close_inode_scan(ext2_inode_scan scan); 78931dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_get_next_inode(ext2_inode_scan scan, ext2_ino_t *ino, 7903839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o struct ext2_inode *inode); 79119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern errcode_t ext2fs_inode_scan_goto_blockgroup(ext2_inode_scan scan, 79219c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int group); 79319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern void ext2fs_set_inode_callback 79419c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o (ext2_inode_scan scan, 79519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o errcode_t (*done_group)(ext2_filsys fs, 79619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o ext2_inode_scan scan, 79719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o dgrp_t group, 798b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o void * priv_data), 79919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o void *done_group_data); 80019c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern int ext2fs_inode_scan_flags(ext2_inode_scan scan, int set_flags, 80119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o int clear_flags); 80231dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_read_inode (ext2_filsys fs, ext2_ino_t ino, 8033839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o struct ext2_inode * inode); 80431dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino, 8053839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o struct ext2_inode * inode); 80631dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks); 80731dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_check_directory(ext2_filsys fs, ext2_ino_t ino); 8083839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 809f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'o/* inode_io.c */ 810f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'oextern io_manager inode_io_manager; 811546a1ff18cc912003883ff67ba3e87c69f700fc4Theodore Ts'oextern errcode_t ext2fs_inode_io_intern(ext2_filsys fs, ext2_ino_t ino, 812546a1ff18cc912003883ff67ba3e87c69f700fc4Theodore Ts'o char **name); 813a435ec3449694a8fa299337197cc09624960a3a6Theodore Ts'oextern errcode_t ext2fs_inode_io_intern2(ext2_filsys fs, ext2_ino_t ino, 814a435ec3449694a8fa299337197cc09624960a3a6Theodore Ts'o struct ext2_inode *inode, 815a435ec3449694a8fa299337197cc09624960a3a6Theodore Ts'o char **name); 816f12e285ffd9ff0b37c4f91d5ab2b021ed1eb43beTheodore Ts'o 81750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* ismounted.c */ 81850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern errcode_t ext2fs_check_if_mounted(const char *file, int *mount_flags); 81943ec8734f2ecd0a345e831f45fd3dfb077426811Theodore Ts'oextern errcode_t ext2fs_check_mount_point(const char *device, int *mount_flags, 82043ec8734f2ecd0a345e831f45fd3dfb077426811Theodore Ts'o char *mtpt, int mtlen); 82150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 8223839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* namei.c */ 82331dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_lookup(ext2_filsys fs, ext2_ino_t dir, const char *name, 82431dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o int namelen, char *buf, ext2_ino_t *inode); 82531dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_namei(ext2_filsys fs, ext2_ino_t root, ext2_ino_t cwd, 82631dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o const char *name, ext2_ino_t *inode); 82731dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oerrcode_t ext2fs_namei_follow(ext2_filsys fs, ext2_ino_t root, ext2_ino_t cwd, 82831dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o const char *name, ext2_ino_t *inode); 82931dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_follow_link(ext2_filsys fs, ext2_ino_t root, ext2_ino_t cwd, 83031dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o ext2_ino_t inode, ext2_ino_t *res_inode); 8311e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 8321e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o/* native.c */ 8331e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'oint ext2fs_native_flag(void); 8343839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 8353839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* newdir.c */ 83631dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_new_dir_block(ext2_filsys fs, ext2_ino_t dir_ino, 83731dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o ext2_ino_t parent_ino, char **block); 8383839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 8393839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* mkdir.c */ 84031dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum, 8413839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o const char *name); 8423839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 843d3cd93cabeac8c153c8ae7b1b7358d6ced86b15eTheodore Ts'o/* mkjournal.c */ 844a112847b39386f9e7332ba5e5a0a5e54cfe301ccTheodore Ts'oextern errcode_t ext2fs_create_journal_superblock(ext2_filsys fs, 845a112847b39386f9e7332ba5e5a0a5e54cfe301ccTheodore Ts'o __u32 size, int flags, 846a112847b39386f9e7332ba5e5a0a5e54cfe301ccTheodore Ts'o char **ret_jsb); 847a112847b39386f9e7332ba5e5a0a5e54cfe301ccTheodore Ts'oextern errcode_t ext2fs_add_journal_device(ext2_filsys fs, 848a112847b39386f9e7332ba5e5a0a5e54cfe301ccTheodore Ts'o ext2_filsys journal_dev); 84931a17b36d5f7d875f9de8e86501eaf2338f94d2bTheodore Ts'oextern errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t size, 85031a17b36d5f7d875f9de8e86501eaf2338f94d2bTheodore Ts'o int flags); 851d3cd93cabeac8c153c8ae7b1b7358d6ced86b15eTheodore Ts'o 8523839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* openfs.c */ 8533839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_open(const char *name, int flags, int superblock, 854544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o unsigned int block_size, io_manager manager, 8553839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o ext2_filsys *ret_fs); 8562e8ca9a26b0bd7dae546a3f9a98df67b043fe3beTheodore Ts'oextern errcode_t ext2fs_open2(const char *name, const char *io_options, 8572e8ca9a26b0bd7dae546a3f9a98df67b043fe3beTheodore Ts'o int flags, int superblock, 8582e8ca9a26b0bd7dae546a3f9a98df67b043fe3beTheodore Ts'o unsigned int block_size, io_manager manager, 8592e8ca9a26b0bd7dae546a3f9a98df67b043fe3beTheodore Ts'o ext2_filsys *ret_fs); 860c046ac7f2e4c53e20cf1e909bbe511f91074b396Theodore Ts'oextern blk_t ext2fs_descriptor_block_loc(ext2_filsys fs, blk_t group_block, 861c046ac7f2e4c53e20cf1e909bbe511f91074b396Theodore Ts'o dgrp_t i); 8621ad54a940c499a66241f624882f1ffa03ce56d90Theodore Ts'oerrcode_t ext2fs_get_data_io(ext2_filsys fs, io_channel *old_io); 8631ad54a940c499a66241f624882f1ffa03ce56d90Theodore Ts'oerrcode_t ext2fs_set_data_io(ext2_filsys fs, io_channel new_io); 8641ad54a940c499a66241f624882f1ffa03ce56d90Theodore Ts'oerrcode_t ext2fs_rewrite_to_io(ext2_filsys fs, io_channel new_io); 8653839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 8663839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* get_pathname.c */ 86731dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_get_pathname(ext2_filsys fs, ext2_ino_t dir, ext2_ino_t ino, 8683839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o char **name); 8693839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 8703839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* link.c */ 87131dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oerrcode_t ext2fs_link(ext2_filsys fs, ext2_ino_t dir, const char *name, 87231dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o ext2_ino_t ino, int flags); 87331dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oerrcode_t ext2fs_unlink(ext2_filsys fs, ext2_ino_t dir, const char *name, 87431dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o ext2_ino_t ino, int flags); 8753839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 8763839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* read_bb.c */ 87719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern errcode_t ext2fs_read_bb_inode(ext2_filsys fs, 87819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o ext2_badblocks_list *bb_list); 8793839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 8803839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* read_bb_file.c */ 88157dca85467cf3fc61565e916a5f2e35db8020d88Theodore Ts'oextern errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f, 88257dca85467cf3fc61565e916a5f2e35db8020d88Theodore Ts'o ext2_badblocks_list *bb_list, 88350cd7e06e26d8cb232819b3d94b67e37ade80c0fTheodore Ts'o void *priv_data, 88457dca85467cf3fc61565e916a5f2e35db8020d88Theodore Ts'o void (*invalid)(ext2_filsys fs, 88557dca85467cf3fc61565e916a5f2e35db8020d88Theodore Ts'o blk_t blk, 88657dca85467cf3fc61565e916a5f2e35db8020d88Theodore Ts'o char *badstr, 88750cd7e06e26d8cb232819b3d94b67e37ade80c0fTheodore Ts'o void *priv_data)); 8883839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern errcode_t ext2fs_read_bb_FILE(ext2_filsys fs, FILE *f, 88919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o ext2_badblocks_list *bb_list, 8903839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o void (*invalid)(ext2_filsys fs, 8913839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o blk_t blk)); 8923839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 893d323f8fb369089b97d6f3bf0f8d64ceeab0b10f5Theodore Ts'o/* res_gdt.c */ 894d323f8fb369089b97d6f3bf0f8d64ceeab0b10f5Theodore Ts'oextern errcode_t ext2fs_create_resize_inode(ext2_filsys fs); 895d323f8fb369089b97d6f3bf0f8d64ceeab0b10f5Theodore Ts'o 89619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o/* rs_bitmap.c */ 89719c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern errcode_t ext2fs_resize_generic_bitmap(__u32 new_end, 89819c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o __u32 new_real_end, 89919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o ext2fs_generic_bitmap bmap); 90019c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern errcode_t ext2fs_resize_inode_bitmap(__u32 new_end, __u32 new_real_end, 90119c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o ext2fs_inode_bitmap bmap); 90219c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'oextern errcode_t ext2fs_resize_block_bitmap(__u32 new_end, __u32 new_real_end, 90319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o ext2fs_block_bitmap bmap); 904a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'oextern errcode_t ext2fs_copy_bitmap(ext2fs_generic_bitmap src, 905a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o ext2fs_generic_bitmap *dest); 90619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o 90750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* swapfs.c */ 90850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_swap_super(struct ext2_super_block * super); 90950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_swap_group_desc(struct ext2_group_desc *gdp); 9101e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'oextern void ext2fs_swap_inode(ext2_filsys fs,struct ext2_inode *t, 9111e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o struct ext2_inode *f, int hostorder); 9121e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 91319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o/* valid_blk.c */ 914521e36857227b21e7ab47b0a97f788d2af9f9717Theodore Ts'oextern int ext2fs_inode_has_valid_blocks(struct ext2_inode *inode); 915521e36857227b21e7ab47b0a97f788d2af9f9717Theodore Ts'o 916521e36857227b21e7ab47b0a97f788d2af9f9717Theodore Ts'o/* version.c */ 917521e36857227b21e7ab47b0a97f788d2af9f9717Theodore Ts'oextern int ext2fs_parse_version_string(const char *ver_string); 918521e36857227b21e7ab47b0a97f788d2af9f9717Theodore Ts'oextern int ext2fs_get_library_version(const char **ver_string, 919521e36857227b21e7ab47b0a97f788d2af9f9717Theodore Ts'o const char **date_string); 92050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o 92131dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o/* write_bb_file.c */ 92231dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern errcode_t ext2fs_write_bb_FILE(ext2_badblocks_list bb_list, 92331dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o unsigned int flags, 92431dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o FILE *f); 92531dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o 92631dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o 9273839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* inline functions */ 928c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'oextern errcode_t ext2fs_get_mem(unsigned long size, void *ptr); 929c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'oextern errcode_t ext2fs_free_mem(void *ptr); 93076f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'oextern errcode_t ext2fs_resize_mem(unsigned long old_size, 931c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o unsigned long size, void *ptr); 9323839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void ext2fs_mark_super_dirty(ext2_filsys fs); 9333839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void ext2fs_mark_changed(ext2_filsys fs); 9343839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern int ext2fs_test_changed(ext2_filsys fs); 9353839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void ext2fs_mark_valid(ext2_filsys fs); 9363839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void ext2fs_unmark_valid(ext2_filsys fs); 9373839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern int ext2fs_test_valid(ext2_filsys fs); 9383839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void ext2fs_mark_ib_dirty(ext2_filsys fs); 9393839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void ext2fs_mark_bb_dirty(ext2_filsys fs); 9403839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern int ext2fs_test_ib_dirty(ext2_filsys fs); 9413839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern int ext2fs_test_bb_dirty(ext2_filsys fs); 9423839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern int ext2fs_group_of_blk(ext2_filsys fs, blk_t blk); 94331dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern int ext2fs_group_of_ino(ext2_filsys fs, ext2_ino_t ino); 9440684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'oextern blk_t ext2fs_inode_data_blocks(ext2_filsys fs, 9450684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'o struct ext2_inode *inode); 9463839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 9473839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 9483839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * The actual inlined functions definitions themselves... 9493839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * 9503839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * If NO_INLINE_FUNCS is defined, then we won't try to do inline 9513839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * functions at all! 9523839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 9533839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#if (defined(INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS)) 9543839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#ifdef INCLUDE_INLINE_FUNCS 9553839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define _INLINE_ extern 9563839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#else 95776f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'o#ifdef __GNUC__ 9583839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define _INLINE_ extern __inline__ 95976f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'o#else /* For Watcom C */ 96076f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'o#define _INLINE_ extern inline 96176f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'o#endif 9623839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#endif 9633839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 9647b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o#ifndef EXT2_CUSTOM_MEMORY_ROUTINES 9657b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o/* 9667b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o * Allocate memory 9677b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o */ 968c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o_INLINE_ errcode_t ext2fs_get_mem(unsigned long size, void *ptr) 9697b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o{ 970c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o void **pp = (void **)ptr; 971c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o 972c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o *pp = malloc(size); 973c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o if (!*pp) 974291c9049ba70bb6256099a066243cec1359c9c15Theodore Ts'o return EXT2_ET_NO_MEMORY; 9757b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o return 0; 9767b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o} 9777b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o 9787b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o/* 9797b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o * Free memory 9807b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o */ 981c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o_INLINE_ errcode_t ext2fs_free_mem(void *ptr) 9827b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o{ 983c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o void **pp = (void **)ptr; 984c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o 985c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o free(*pp); 986c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o *pp = 0; 9877b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o return 0; 9887b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o} 9897b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o 9907b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o/* 9917b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o * Resize memory 9927b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o */ 993e47fd8414d3bd4632792cc52310e53edcfeea27cTheodore Ts'o_INLINE_ errcode_t ext2fs_resize_mem(unsigned long EXT2FS_ATTR((unused)) old_size, 994c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o unsigned long size, void *ptr) 9957b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o{ 9967b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o void *p; 997c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o void **pp = (void **)ptr; 9987b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o 999c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o p = realloc(*pp, size); 10007b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o if (!p) 1001291c9049ba70bb6256099a066243cec1359c9c15Theodore Ts'o return EXT2_ET_NO_MEMORY; 1002c4e3d3f374b409500e3dd05c0b0eca6ac98a6b4eTheodore Ts'o *pp = p; 10037b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o return 0; 10047b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o} 10057b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o#endif /* Custom memory routines */ 10067b4e4534f9361b21d3fafdd88a58f133decee38cTheodore Ts'o 10073839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 10083839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Mark a filesystem superblock as dirty 10093839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 10103839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o_INLINE_ void ext2fs_mark_super_dirty(ext2_filsys fs) 10113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 10123839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o fs->flags |= EXT2_FLAG_DIRTY | EXT2_FLAG_CHANGED; 10133839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 10143839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 10153839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 10163839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Mark a filesystem as changed 10173839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 10183839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o_INLINE_ void ext2fs_mark_changed(ext2_filsys fs) 10193839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 10203839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o fs->flags |= EXT2_FLAG_CHANGED; 10213839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 10223839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 10233839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 10243839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Check to see if a filesystem has changed 10253839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 10263839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o_INLINE_ int ext2fs_test_changed(ext2_filsys fs) 10273839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 10283839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o return (fs->flags & EXT2_FLAG_CHANGED); 10293839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 10303839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 10313839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 10323839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Mark a filesystem as valid 10333839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 10343839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o_INLINE_ void ext2fs_mark_valid(ext2_filsys fs) 10353839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 10363839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o fs->flags |= EXT2_FLAG_VALID; 10373839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 10383839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 10393839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 10403839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Mark a filesystem as NOT valid 10413839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 10423839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o_INLINE_ void ext2fs_unmark_valid(ext2_filsys fs) 10433839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 10443839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o fs->flags &= ~EXT2_FLAG_VALID; 10453839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 10463839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 10473839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 10483839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Check to see if a filesystem is valid 10493839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 10503839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o_INLINE_ int ext2fs_test_valid(ext2_filsys fs) 10513839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 10523839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o return (fs->flags & EXT2_FLAG_VALID); 10533839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 10543839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 10553839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 10563839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Mark the inode bitmap as dirty 10573839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 10583839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o_INLINE_ void ext2fs_mark_ib_dirty(ext2_filsys fs) 10593839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 10603839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o fs->flags |= EXT2_FLAG_IB_DIRTY | EXT2_FLAG_CHANGED; 10613839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 10623839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 10633839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 10643839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Mark the block bitmap as dirty 10653839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 10663839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o_INLINE_ void ext2fs_mark_bb_dirty(ext2_filsys fs) 10673839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 10683839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o fs->flags |= EXT2_FLAG_BB_DIRTY | EXT2_FLAG_CHANGED; 10693839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 10703839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 10713839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 10723839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Check to see if a filesystem's inode bitmap is dirty 10733839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 10743839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o_INLINE_ int ext2fs_test_ib_dirty(ext2_filsys fs) 10753839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 10763839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o return (fs->flags & EXT2_FLAG_IB_DIRTY); 10773839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 10783839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 10793839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 10803839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Check to see if a filesystem's block bitmap is dirty 10813839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 10823839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o_INLINE_ int ext2fs_test_bb_dirty(ext2_filsys fs) 10833839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 10843839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o return (fs->flags & EXT2_FLAG_BB_DIRTY); 10853839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 10863839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 10873839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 10883839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Return the group # of a block 10893839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 10903839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o_INLINE_ int ext2fs_group_of_blk(ext2_filsys fs, blk_t blk) 10913839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 10923839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o return (blk - fs->super->s_first_data_block) / 10933839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o fs->super->s_blocks_per_group; 10943839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 10953839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 10963839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 10973839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Return the group # of an inode number 10983839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 109931dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o_INLINE_ int ext2fs_group_of_ino(ext2_filsys fs, ext2_ino_t ino) 11003839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 11013839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o return (ino - 1) / fs->super->s_inodes_per_group; 11023839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 11030684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'o 11040684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'o_INLINE_ blk_t ext2fs_inode_data_blocks(ext2_filsys fs, 11050684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'o struct ext2_inode *inode) 11060684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'o{ 11070684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'o return inode->i_blocks - 11080684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'o (inode->i_file_acl ? fs->blocksize >> 9 : 0); 11090684a4f33b5c268fe12f57fcbc77a880c79ab282Theodore Ts'o} 11103839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#undef _INLINE_ 11113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#endif 11123839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 1113fa7ef7176ee66aaaec58a24c5a5523c4afb550ddTheodore Ts'o#ifdef __cplusplus 1114fa7ef7176ee66aaaec58a24c5a5523c4afb550ddTheodore Ts'o} 1115fa7ef7176ee66aaaec58a24c5a5523c4afb550ddTheodore Ts'o#endif 1116fa7ef7176ee66aaaec58a24c5a5523c4afb550ddTheodore Ts'o 11179abd2ce914f9373fb676f0bb620ffba3a0e3c49eTheodore Ts'o#endif /* _EXT2FS_EXT2FS_H */ 1118