Whamcloud - gitweb
libext2fs: document EXT2_FLAG_64BITS in ext2fs_open2()
[tools/e2fsprogs.git] / lib / ext2fs / ext2fs.h
index 203d222..4e7711a 100644 (file)
@@ -57,6 +57,9 @@ extern "C" {
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 
 #ifndef __USE_XOPEN2K
 /* If the "#define _XOPEN_SOURCE 600" didn't succeed in declaring
@@ -241,10 +244,12 @@ struct struct_ext2_filsys {
        __u32                           umask;
        time_t                          now;
        int                             cluster_ratio_bits;
+       __u16                           default_bitmap_type;
+       __u16                           pad;
        /*
         * Reserved for future expansion
         */
-       __u32                           reserved[6];
+       __u32                           reserved[5];
 
        /*
         * Reserved for the use of the calling application.
@@ -258,6 +263,13 @@ struct struct_ext2_filsys {
        io_channel                      image_io;
 
        /*
+        * More callback functions
+        */
+       errcode_t (*get_alloc_block)(ext2_filsys fs, blk64_t goal,
+                                    blk64_t *ret);
+       void (*block_alloc_stats)(ext2_filsys fs, blk64_t blk, int inuse);
+
+       /*
         * Buffers for Multiple mount protection(MMP) block.
         */
        void *mmp_buf;
@@ -268,13 +280,6 @@ struct struct_ext2_filsys {
         * Time at which e2fsck last updated the MMP block.
         */
        long mmp_last_written;
-
-       /*
-        * More callback functions
-        */
-       errcode_t (*get_alloc_block)(ext2_filsys fs, blk64_t goal,
-                                    blk64_t *ret);
-       void (*block_alloc_stats)(ext2_filsys fs, blk64_t blk, int inuse);
 };
 
 #if EXT2_FLAT_INCLUDES
@@ -284,6 +289,13 @@ struct struct_ext2_filsys {
 #endif
 
 /*
+ * 64-bit bitmap backend types
+ */
+#define EXT2FS_BMAP64_BITARRAY 1
+#define EXT2FS_BMAP64_RBTREE   2
+#define EXT2FS_BMAP64_AUTODIR  3
+
+/*
  * Return flags for the block iterator functions
  */
 #define BLOCK_CHANGED  1
@@ -574,6 +586,7 @@ typedef struct ext2_icount *ext2_icount_t;
                                         EXT4_FEATURE_INCOMPAT_MMP|\
                                         EXT4_FEATURE_INCOMPAT_64BIT)
 #endif
+#ifdef CONFIG_QUOTA
 #define EXT2_LIB_FEATURE_RO_COMPAT_SUPP        (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|\
                                         EXT4_FEATURE_RO_COMPAT_HUGE_FILE|\
                                         EXT2_FEATURE_RO_COMPAT_LARGE_FILE|\
@@ -582,13 +595,22 @@ typedef struct ext2_icount *ext2_icount_t;
                                         EXT4_FEATURE_RO_COMPAT_GDT_CSUM|\
                                         EXT4_FEATURE_RO_COMPAT_BIGALLOC|\
                                         EXT4_FEATURE_RO_COMPAT_QUOTA)
+#else
+#define EXT2_LIB_FEATURE_RO_COMPAT_SUPP        (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|\
+                                        EXT4_FEATURE_RO_COMPAT_HUGE_FILE|\
+                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE|\
+                                        EXT4_FEATURE_RO_COMPAT_DIR_NLINK|\
+                                        EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE|\
+                                        EXT4_FEATURE_RO_COMPAT_GDT_CSUM|\
+                                        EXT4_FEATURE_RO_COMPAT_BIGALLOC)
+#endif
 
 /*
  * These features are only allowed if EXT2_FLAG_SOFTSUPP_FEATURES is passed
  * to ext2fs_openfs()
  */
 #define EXT2_LIB_SOFTSUPP_INCOMPAT     (0)
-#define EXT2_LIB_SOFTSUPP_RO_COMPAT    (EXT4_FEATURE_RO_COMPAT_BIGALLOC)
+#define EXT2_LIB_SOFTSUPP_RO_COMPAT    (EXT4_FEATURE_RO_COMPAT_REPLICA)
 
 
 /* Translate a block number to a cluster number */
@@ -601,7 +623,7 @@ typedef struct ext2_icount *ext2_icount_t;
 #define EXT2FS_NUM_B2C(fs, blks)       (((blks) + EXT2FS_CLUSTER_MASK(fs)) >> \
                                         (fs)->cluster_ratio_bits)
 
-#if defined(HAVE_STAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
+#if defined(HAVE_FSTAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
 typedef struct stat64 ext2fs_struct_stat;
 #else
 typedef struct stat ext2fs_struct_stat;
@@ -838,8 +860,10 @@ extern void ext2fs_bg_flags_set(ext2_filsys fs, dgrp_t group, __u16 bg_flags);
 extern void ext2fs_bg_flags_clear(ext2_filsys fs, dgrp_t group, __u16 bg_flags);
 extern __u16 ext2fs_bg_checksum(ext2_filsys fs, dgrp_t group);
 extern void ext2fs_bg_checksum_set(ext2_filsys fs, dgrp_t group, __u16 checksum);
-extern blk64_t ext2fs_file_acl_block(const struct ext2_inode *inode);
-extern void ext2fs_file_acl_block_set(struct ext2_inode *inode, blk64_t blk);
+extern blk64_t ext2fs_file_acl_block(ext2_filsys fs,
+                                    const struct ext2_inode *inode);
+extern void ext2fs_file_acl_block_set(ext2_filsys fs,
+                                     struct ext2_inode *inode, blk64_t blk);
 
 /* block.c */
 extern errcode_t ext2fs_block_iterate(ext2_filsys fs,
@@ -916,13 +940,14 @@ extern int ext2fs_super_and_bgd_loc(ext2_filsys fs,
 extern void ext2fs_update_dynamic_rev(ext2_filsys fs);
 
 /* crc32c.c */
-extern __u32 crc32c_be(__u32 crc, unsigned char const *p, size_t len);
-extern __u32 crc32c_le(__u32 crc, unsigned char const *p, size_t len);
+extern __u32 ext2fs_crc32c_be(__u32 crc, unsigned char const *p, size_t len);
+extern __u32 ext2fs_crc32c_le(__u32 crc, unsigned char const *p, size_t len);
 
 /* csum.c */
 extern void ext2fs_group_desc_csum_set(ext2_filsys fs, dgrp_t group);
 extern int ext2fs_group_desc_csum_verify(ext2_filsys fs, dgrp_t group);
 extern errcode_t ext2fs_set_gdt_csum(ext2_filsys fs);
+extern __u16 ext2fs_group_desc_csum(ext2_filsys fs, dgrp_t group);
 
 /* dblist.c */
 
@@ -1079,6 +1104,7 @@ extern errcode_t ext2fs_file_open(ext2_filsys fs, ext2_ino_t ino,
                                  int flags, ext2_file_t *ret);
 extern ext2_filsys ext2fs_file_get_fs(ext2_file_t file);
 struct ext2_inode *ext2fs_file_get_inode(ext2_file_t file);
+extern ext2_ino_t ext2fs_file_get_inode_num(ext2_file_t file);
 extern errcode_t ext2fs_file_close(ext2_file_t file);
 extern errcode_t ext2fs_file_flush(ext2_file_t file);
 extern errcode_t ext2fs_file_read(ext2_file_t file, void *buf,
@@ -1144,6 +1170,10 @@ extern errcode_t ext2fs_set_generic_bitmap_range(ext2fs_generic_bitmap bmap,
                                                 void *in);
 
 /* gen_bitmap64.c */
+
+/* Generate and print bitmap usage statistics */
+#define BMAP_STATS
+
 void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap);
 errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic,
                                    int type, __u64 start, __u64 end,
@@ -1352,7 +1382,7 @@ errcode_t ext2fs_mmp_init(ext2_filsys fs);
 errcode_t ext2fs_mmp_start(ext2_filsys fs);
 errcode_t ext2fs_mmp_update(ext2_filsys fs);
 errcode_t ext2fs_mmp_stop(ext2_filsys fs);
-unsigned ext2fs_mmp_new_seq();
+unsigned ext2fs_mmp_new_seq(void);
 
 /* read_bb.c */
 extern errcode_t ext2fs_read_bb_inode(ext2_filsys fs,
@@ -1393,6 +1423,8 @@ extern void ext2fs_swap_mmp(struct mmp_struct *mmp);
 
 /* valid_blk.c */
 extern int ext2fs_inode_has_valid_blocks(struct ext2_inode *inode);
+extern int ext2fs_inode_has_valid_blocks2(ext2_filsys fs,
+                                         struct ext2_inode *inode);
 
 /* version.c */
 extern int ext2fs_parse_version_string(const char *ver_string);
@@ -1435,7 +1467,7 @@ extern blk_t ext2fs_inode_data_blocks(ext2_filsys fs,
                                      struct ext2_inode *inode);
 extern unsigned int ext2fs_div_ceil(unsigned int a, unsigned int b);
 extern __u64 ext2fs_div64_ceil(__u64 a, __u64 b);
-extern int ext2fs_open_file(const char *pathname, int flags, ...);
+extern int ext2fs_open_file(const char *pathname, int flags, mode_t mode);
 extern int ext2fs_stat(const char *path, ext2fs_struct_stat *buf);
 extern int ext2fs_fstat(int fd, ext2fs_struct_stat *buf);
 
@@ -1472,22 +1504,6 @@ _INLINE_ errcode_t ext2fs_get_mem(unsigned long size, void *ptr)
        return 0;
 }
 
-_INLINE_ errcode_t ext2fs_get_memalign(unsigned long size,
-                                      unsigned long align, void *ptr)
-{
-       errcode_t retval;
-
-       if (align == 0)
-               align = 8;
-       retval = posix_memalign((void **) ptr, align, size);
-       if (retval) {
-               if (retval == ENOMEM)
-                       return EXT2_ET_NO_MEMORY;
-               return retval;
-       }
-       return 0;
-}
-
 _INLINE_ errcode_t ext2fs_get_memzero(unsigned long size, void *ptr)
 {
        void *pp;
@@ -1688,14 +1704,9 @@ _INLINE_ __u64 ext2fs_div64_ceil(__u64 a, __u64 b)
        return ((a - 1) / b) + 1;
 }
 
-_INLINE_ int ext2fs_open_file(const char *pathname, int flags, ...)
+_INLINE_ int ext2fs_open_file(const char *pathname, int flags, mode_t mode)
 {
        va_list args;
-       mode_t mode;
-
-       va_start(args, flags);
-       mode = va_arg(args, mode_t);
-       va_end(args);
 
        if (mode)
 #if defined(HAVE_OPEN64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
@@ -1711,7 +1722,7 @@ _INLINE_ int ext2fs_open_file(const char *pathname, int flags, ...)
 
 _INLINE_ int ext2fs_stat(const char *path, ext2fs_struct_stat *buf)
 {
-#if defined(HAVE_STAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
+#if defined(HAVE_FSTAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
        return stat64(path, buf);
 #else
        return stat(path, buf);
@@ -1720,7 +1731,7 @@ _INLINE_ int ext2fs_stat(const char *path, ext2fs_struct_stat *buf)
 
 _INLINE_ int ext2fs_fstat(int fd, ext2fs_struct_stat *buf)
 {
-#if defined(HAVE_STAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
+#if defined(HAVE_FSTAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
        return fstat64(fd, buf);
 #else
        return fstat(fd, buf);