ext2fsP.h revision 65d05cec3d4ae02dec1b15dfec21e571cb83c9cf
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ext2fsP.h --- private header file for ext2 library 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 1997 Theodore Ts'o. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * %Begin-Header% 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This file may be redistributed under the terms of the GNU Library 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * General Public License, version 2. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * %End-Header% 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ext2fs.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Badblocks list 162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch */ 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ext2_struct_u32_list { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int magic; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size; 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) __u32 *list; 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int badblocks_flags; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ext2_struct_u32_iterate { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int magic; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ext2_u32_list bb; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int ptr; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Directory block iterator definition 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustruct ext2_struct_dblist { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int magic; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ext2_filsys fs; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned long long size; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned long long count; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int sorted; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct ext2_db_entry2 * list; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * For directory iterators 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct dir_context { 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ext2_ino_t dir; 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int flags; 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) char *buf; 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int (*func)(ext2_ino_t dir, 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int entry, 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) struct ext2_dir_entry *dirent, 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int offset, 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int blocksize, 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) char *buf, 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void *priv_data); 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void *priv_data; 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) errcode_t errcode; 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Inode cache structure 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)struct ext2_inode_cache { 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) void * buffer; 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) blk_t buffer_blk; 68d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int cache_last; 69d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int cache_size; 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int refcount; 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) struct ext2_inode_cache_ent *cache; 721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ext2_inode_cache_ent { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ext2_ino_t ino; 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) struct ext2_inode inode; 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Function prototypes */ 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)extern int ext2fs_process_dir_block(ext2_filsys fs, 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) blk64_t *blocknr, 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) e2_blkcnt_t blockcnt, 84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) blk64_t ref_block, 85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int ref_offset, 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) void *priv_data); 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/* Generic numeric progress meter */ 890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstruct ext2fs_numeric_progress_struct { 910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch __u64 max; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int log_max; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int skip_progress; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)extern void ext2fs_numeric_progress_init(ext2_filsys fs, 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) struct ext2fs_numeric_progress_struct * progress, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *label, __u64 max); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern void ext2fs_numeric_progress_update(ext2_filsys fs, 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) struct ext2fs_numeric_progress_struct * progress, 101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch __u64 val); 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)extern void ext2fs_numeric_progress_close(ext2_filsys fs, 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct ext2fs_numeric_progress_struct * progress, 104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const char *message); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 106d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)/* 107d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * 64-bit bitmap support 108868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 109868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#define EXT2FS_BMAP64_BITARRAY 1 111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochextern errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic, 113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch int type, __u64 start, __u64 end, 114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch __u64 real_end, 115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const char * description, 116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ext2fs_generic_bitmap *bmap); 117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)extern void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap); 119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src, 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ext2fs_generic_bitmap *dest); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __u64 new_end, 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) __u64 new_real_end); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errcode_t neq, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __u64 end, __u64 *oend); 1295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuextern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __u64 arg); 1315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuextern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap, 132424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) __u64 arg); 133424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap, 134424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) __u64 arg); 135424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)extern errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bitmap, 136424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) __u64 start, unsigned int num, 137424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void *in); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __u64 start, unsigned int num, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *out); 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func); 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)extern int ext2fs_mem_is_zero(const char *mem, size_t len); 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)