Many files:
Checkin of e2fsprogs 0.5b
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index 998527a..672466b 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -15,6 +15,12 @@
#define SUPERBLOCK_OFFSET 1024
#define SUPERBLOCK_SIZE 1024
+/*
+ * The last ext2fs revision level that this version of the library is
+ * able to support.
+ */
+#define EXT2_LIB_CURRENT_REV 0
+
typedef unsigned long blk_t;
typedef unsigned int dgrp_t;
@@ -22,6 +28,32 @@
#include "ext2fs/io.h"
#include "ext2fs/ext2_err.h"
+typedef struct struct_ext2_filsys *ext2_filsys;
+
+struct ext2fs_struct_inode_bitmap {
+ int magic;
+ ext2_filsys fs;
+ ino_t start, end;
+ ino_t real_end;
+ char *description;
+ char *bitmap;
+ int reserved[8];
+};
+
+typedef struct ext2fs_struct_inode_bitmap *ext2fs_inode_bitmap;
+
+struct ext2fs_struct_block_bitmap {
+ int magic;
+ ext2_filsys fs;
+ blk_t start, end;
+ ino_t real_end;
+ char *description;
+ char *bitmap;
+ int reserved[8];
+};
+
+typedef struct ext2fs_struct_block_bitmap *ext2fs_block_bitmap;
+
/*
* Flags for the ext2_filsys structure
*/
@@ -33,9 +65,8 @@
#define EXT2_FLAG_IB_DIRTY 0x10
#define EXT2_FLAG_BB_DIRTY 0x20
-typedef struct struct_ext2_filsys *ext2_filsys;
-
struct struct_ext2_filsys {
+ int magic;
io_channel io;
int flags;
char * device_name;
@@ -46,11 +77,12 @@
unsigned long desc_blocks;
struct ext2_group_desc * group_desc;
int inode_blocks_per_group;
- char * inode_map;
- char * block_map;
+ ext2fs_inode_bitmap inode_map;
+ ext2fs_block_bitmap block_map;
errcode_t (*get_blocks)(ext2_filsys fs, ino_t ino, blk_t *blocks);
errcode_t (*check_directory)(ext2_filsys fs, ino_t ino);
errcode_t (*write_bitmaps)(ext2_filsys fs);
+ int reserved[16];
/*
* Not used by ext2fs library; reserved for the use of the
@@ -66,10 +98,12 @@
typedef struct struct_badblocks_list *badblocks_list;
struct struct_badblocks_list {
+ int magic;
int num;
int size;
blk_t *list;
int badblocks_flags;
+ int reserved[8];
};
#define BADBLOCKS_FLAG_DIRTY 1
@@ -77,12 +111,14 @@
typedef struct struct_badblocks_iterate *badblocks_iterate;
struct struct_badblocks_iterate {
+ int magic;
badblocks_list bb;
int ptr;
+ int reserved[8];
};
-
-#include "ext2fs/bitops.h"
+#include "ext2fs/bitops.h"
+
/*
* Return flags for the block iterator functions
*/
@@ -112,7 +148,10 @@
/*
* Inode scan definitions
*/
+typedef struct ext2_struct_inode_scan *ext2_inode_scan;
+
struct ext2_struct_inode_scan {
+ int magic;
ext2_filsys fs;
ino_t current_inode;
blk_t current_block;
@@ -121,21 +160,33 @@
int inode_buffer_blocks;
char * inode_buffer;
struct ext2_inode * inode_scan_ptr;
+ errcode_t (*done_group)(ext2_filsys fs,
+ ext2_inode_scan scan,
+ dgrp_t group,
+ void * private);
+ void * done_group_data;
+ int reserved[8];
};
-typedef struct ext2_struct_inode_scan *ext2_inode_scan;
+/*
+ * For checking structure magic numbers...
+ */
+#define EXT2_CHECK_MAGIC(struct, code) \
+ if ((struct)->magic != (code)) return (code)
+
/*
* function prototypes
*/
/* alloc.c */
extern errcode_t ext2fs_new_inode(ext2_filsys fs, ino_t dir, int mode,
- char *map, ino_t *ret);
+ ext2fs_inode_bitmap map, ino_t *ret);
extern errcode_t ext2fs_new_block(ext2_filsys fs, blk_t goal,
- char *map, blk_t *ret);
+ ext2fs_block_bitmap map, blk_t *ret);
extern errcode_t ext2fs_get_free_blocks(ext2_filsys fs, blk_t start,
- blk_t finish, int num, char *map,
+ blk_t finish, int num,
+ ext2fs_block_bitmap map,
blk_t *ret);
/* badblocks.c */
@@ -157,8 +208,20 @@
extern errcode_t ext2fs_write_block_bitmap (ext2_filsys fs);
extern errcode_t ext2fs_read_inode_bitmap (ext2_filsys fs);
extern errcode_t ext2fs_read_block_bitmap(ext2_filsys fs);
-extern errcode_t ext2fs_allocate_inode_bitmap(ext2_filsys fs, char **ret);
-extern errcode_t ext2fs_allocate_block_bitmap(ext2_filsys fs, char **ret);
+errcode_t ext2fs_allocate_block_bitmap(ext2_filsys fs,
+ const char *descr,
+ ext2fs_block_bitmap *ret);
+errcode_t ext2fs_allocate_inode_bitmap(ext2_filsys fs,
+ const char *descr,
+ ext2fs_inode_bitmap *ret);
+errcode_t ext2fs_fudge_inode_bitmap_end(ext2fs_inode_bitmap bitmap,
+ ino_t end, ino_t *oend);
+errcode_t ext2fs_fudge_block_bitmap_end(ext2fs_block_bitmap bitmap,
+ blk_t end, blk_t *oend);
+void ext2fs_clear_inode_bitmap(ext2fs_inode_bitmap bitmap);
+void ext2fs_clear_block_bitmap(ext2fs_block_bitmap bitmap);
+void ext2fs_free_block_bitmap(ext2fs_block_bitmap bitmap);
+void ext2fs_free_inode_bitmap(ext2fs_inode_bitmap bitmap);
extern errcode_t ext2fs_read_bitmaps(ext2_filsys fs);
extern errcode_t ext2fs_write_bitmaps(ext2_filsys fs);
@@ -173,6 +236,9 @@
void *private),
void *private);
+/* check_desc.c */
+extern errcode_t ext2fs_check_desc(ext2_filsys fs);
+
/* closefs.c */
extern errcode_t ext2fs_close(ext2_filsys fs);
extern errcode_t ext2fs_flush(ext2_filsys fs);
@@ -194,6 +260,18 @@
extern void ext2fs_close_inode_scan(ext2_inode_scan scan);
extern errcode_t ext2fs_get_next_inode(ext2_inode_scan scan, ino_t *ino,
struct ext2_inode *inode);
+void ext2fs_set_inode_callback(ext2_inode_scan scan,
+ errcode_t (*done_group)(ext2_filsys fs,
+ ext2_inode_scan scan,
+ dgrp_t group,
+ void * private),
+ void *done_group_data);
+void ext2fs_set_inode_callback(ext2_inode_scan scan,
+ errcode_t (*done_group)(ext2_filsys fs,
+ ext2_inode_scan scan,
+ dgrp_t group,
+ void * private),
+ void *done_group_data);
extern errcode_t ext2fs_read_inode (ext2_filsys fs, unsigned long ino,
struct ext2_inode * inode);
extern errcode_t ext2fs_write_inode(ext2_filsys fs, unsigned long ino,
@@ -229,7 +307,6 @@
extern errcode_t ext2fs_open(const char *name, int flags, int superblock,
int block_size, io_manager manager,
ext2_filsys *ret_fs);
-extern errcode_t ext2fs_check_desc(ext2_filsys fs);
/* get_pathname.c */
extern errcode_t ext2fs_get_pathname(ext2_filsys fs, ino_t dir, ino_t ino,