/* * ext2fsP.h --- private header file for ext2 library * * Copyright (C) 1997 Theodore Ts'o. * * %Begin-Header% * This file may be redistributed under the terms of the GNU Library * General Public License, version 2. * %End-Header% */ #if HAVE_SYS_STAT_H #include <sys/stat.h> #endif #include "ext2fs.h" #define EXT2FS_MAX_NESTED_LINKS 8 static inline int ext2fsP_is_disk_device(mode_t mode) { #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) return S_ISBLK(mode) || S_ISCHR(mode); #else return S_ISBLK(mode); #endif } /* * Badblocks list */ struct ext2_struct_u32_list { int magic; int num; int size; __u32 *list; int badblocks_flags; }; struct ext2_struct_u32_iterate { int magic; ext2_u32_list bb; int ptr; }; /* * Directory block iterator definition */ struct ext2_struct_dblist { int magic; ext2_filsys fs; unsigned long long size; unsigned long long count; int sorted; struct ext2_db_entry2 * list; }; /* * For directory iterators */ struct dir_context { ext2_ino_t dir; int flags; char *buf; unsigned int buflen; int (*func)(ext2_ino_t dir, int entry, struct ext2_dir_entry *dirent, int offset, int blocksize, char *buf, void *priv_data); void *priv_data; errcode_t errcode; }; /* * Inode cache structure */ struct ext2_inode_cache { void * buffer; blk64_t buffer_blk; int cache_last; unsigned int cache_size; int refcount; struct ext2_inode_cache_ent *cache; }; struct ext2_inode_cache_ent { ext2_ino_t ino; struct ext2_inode *inode; }; /* Function prototypes */ extern int ext2fs_process_dir_block(ext2_filsys fs, blk64_t *blocknr, e2_blkcnt_t blockcnt, blk64_t ref_block, int ref_offset, void *priv_data); extern errcode_t ext2fs_inline_data_ea_remove(ext2_filsys fs, ext2_ino_t ino); extern errcode_t ext2fs_inline_data_expand(ext2_filsys fs, ext2_ino_t ino); extern int ext2fs_inline_data_dir_iterate(ext2_filsys fs, ext2_ino_t ino, void *priv_data); /* Generic numeric progress meter */ struct ext2fs_numeric_progress_struct { __u64 max; int log_max; int skip_progress; }; /* * progress callback functions */ struct ext2fs_progress_ops { void (*init)(ext2_filsys fs, struct ext2fs_numeric_progress_struct * progress, const char *label, __u64 max); void (*update)(ext2_filsys fs, struct ext2fs_numeric_progress_struct * progress, __u64 val); void (*close)(ext2_filsys fs, struct ext2fs_numeric_progress_struct * progress, const char *message); }; extern struct ext2fs_progress_ops ext2fs_numeric_progress_ops; extern void ext2fs_numeric_progress_init(ext2_filsys fs, struct ext2fs_numeric_progress_struct * progress, const char *label, __u64 max); extern void ext2fs_numeric_progress_update(ext2_filsys fs, struct ext2fs_numeric_progress_struct * progress, __u64 val); extern void ext2fs_numeric_progress_close(ext2_filsys fs, struct ext2fs_numeric_progress_struct * progress, const char *message); /* * 64-bit bitmap support */ extern errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic, int type, __u64 start, __u64 end, __u64 real_end, const char * description, ext2fs_generic_bitmap *bmap); extern void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap); extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src, ext2fs_generic_bitmap *dest); extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap, __u64 new_end, __u64 new_real_end); extern errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap, errcode_t neq, __u64 end, __u64 *oend); extern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap, __u64 arg); extern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap, __u64 arg); extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap, __u64 arg); extern errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bitmap, __u64 start, unsigned int num, void *in); extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap, __u64 start, unsigned int num, void *out); extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func); extern int ext2fs_mem_is_zero(const char *mem, size_t len); extern int ext2fs_file_block_offset_too_big(ext2_filsys fs, struct ext2_inode *inode, blk64_t offset); /* atexit support */ typedef void (*ext2_exit_fn)(void *); errcode_t ext2fs_add_exit_fn(ext2_exit_fn fn, void *data); errcode_t ext2fs_remove_exit_fn(ext2_exit_fn fn, void *data); #define EXT2FS_BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2*!!(cond)]))