]> git.wh0rd.org - dump.git/blobdiff - compat/include/bsdcompat.h
Added EA/ACL support in dump and restore.
[dump.git] / compat / include / bsdcompat.h
index 71ba0e2b1ff23c539ae5eafab27be63c9cbeee25..7bc216038c96b34f9b0804e140a0cbe1699e4e72 100644 (file)
@@ -2,17 +2,19 @@
  *     Ported to Linux's Second Extended File System as part of the
  *     dump and restore backup suit
  *     Remy Card <card@Linux.EU.Org>, 1994-1997
- *     Stelian Pop <pop@noos.fr>, 1999-2000
- *     Stelian Pop <pop@noos.fr> - Alcôve <www.alcove.fr>, 2000
+ *     Stelian Pop <stelian@popies.net>, 1999-2000
+ *     Stelian Pop <stelian@popies.net> - Alcôve <www.alcove.com>, 2000-2002
  *
- *     $Id: bsdcompat.h,v 1.13 2000/12/21 11:14:53 stelian Exp $
+ *     $Id: bsdcompat.h,v 1.24 2005/05/02 15:10:45 stelian Exp $
  */
 
 #include <config.h>
 #include <sys/time.h>
 #include <dirent.h>
+#include <ext2fs/ext2fs.h>
 
 #define        __dead          volatile
+#define UNUSED(x)      x __attribute__ ((unused))
 
 #ifndef        NBBY
 #define NBBY           8
 #define MIN(a,b)       ((a < b) ? a : b)
 #endif
 
-#define        WINO            ((ino_t)1)
+#define        WINO            1
 #define        DEV_BSIZE       512
 #define        DEV_BSHIFT      9
+
+#ifndef sunos
 #define        MAXBSIZE        EXT2_MAX_BLOCK_SIZE
 #define ROOTINO                EXT2_ROOT_INO
+#else
+#define ROOTINO                2
+#endif
 #ifdef EXT2_NODUMP_FL
 #define UF_NODUMP      EXT2_NODUMP_FL
 #endif
 
+#ifndef howmany
 #define howmany(x,y)   (((x)+((y)-1))/(y))
+#endif
+#ifndef roundup
 #define roundup(x, y)  ((((x)+((y)-1))/(y))*(y))
+#endif
+#ifndef powerof2
 #define powerof2(x)    ((((x)-1)&(x))==0)
+#endif
 
-#define dbtob(b)       ((unsigned)(b) << DEV_BSHIFT)
-#define fsbtodb(sb,b)  ((int)(((long long)b * EXT2_BLOCK_SIZE(sb->super)) / DEV_BSIZE))
+#define fsbtodb(sb,b)  ((ext2_loff_t)(((long long)(b) * EXT2_BLOCK_SIZE((sb)->super)) / DEV_BSIZE))
+#define dbtofsb(sb,b)  ((int)(((long long)(b) * DEV_BSIZE) / EXT2_BLOCK_SIZE((sb)->super)))
 
 #define        sblock          fs
 #define fs_fsize       fragsize
@@ -60,10 +73,9 @@ typedef __u64                u_quad_t;
 /*
  * The BSD dump format reserves 4 bytes for a time_t, but other architectures
  * (notably axp) have larger time_t.  ctime4() is a modified ctime() which
- * always accepts short 4-byte times.  time4() is a similarly modified time().
+ * always accepts short 4-byte times.
  */
 #define ctime4(timep) ({ time_t t = *(timep); ctime(&t); })
-#define time4(timep) ({time_t t; t = time(0); if (timep) *timep=t; t; })
 
 /*
  * This is the ext2_inode structure but the fields have been renamed
@@ -74,6 +86,25 @@ typedef __u64                u_quad_t;
 
 #define NINDIR(fs)     EXT2_ADDR_PER_BLOCK(fs->super)
 
+#ifdef sunos
+typedef uint8_t __u8;
+typedef uint16_t __u16;
+typedef uint32_t __u32;
+typedef int8_t __s8;
+typedef int16_t __s16;
+typedef int32_t __s32;
+#ifndef u_int
+typedef unsigned int u_int;
+#endif
+#ifndef u_int16_t
+typedef unsigned short u_int16_t;
+#endif
+#ifndef u_char
+typedef unsigned char u_char;
+#endif
+typedef int64_t quad_t;
+#endif /* sunos */
+
 struct dinode {
        __u16   di_mode;
        __u16   di_uid;
@@ -87,8 +118,8 @@ struct dinode {
        __u32   di_blocks;
        __u32   di_flags;
        __u32   di_reserved1;
-       daddr_t di_db[NDADDR];
-       daddr_t di_ib[NIADDR];
+       __u32   di_db[NDADDR];
+       __u32   di_ib[NIADDR];
        __u32   di_gen;
        __u32   di_file_acl;
        __u32   di_dir_acl;
@@ -96,7 +127,11 @@ struct dinode {
        __u8    di_frag;
        __u8    di_fsize;
        __u16   di_pad1;
-       __u32   di_spare[2];
+       __u16   di_uidhigh;
+       __u16   di_gidhigh;
+       __u32   di_spare;
+       __u16   di_extraisize;
+       __u16   di_pad2;
 };
 
 #define di_rdev                di_db[0]
@@ -115,6 +150,10 @@ struct dinode {
 #define MAXNAMLEN      255
 #endif
 
+#ifdef sunos
+#define MAXNAMLEN      255
+#endif
+
 /*
  * For old libc.
  */
@@ -127,6 +166,10 @@ struct dinode {
 #define DT_REG          8
 #define DT_LNK         10
 #define DT_SOCK                12
+
+#ifdef sunos
+#define DT_WHT         14
+#endif
 #endif
 
 #ifndef d_fileno
@@ -134,21 +177,7 @@ struct dinode {
 #endif
 
 /*
- * This is the direct structure used by dump. In needs to be
- * different from direct because linux dump generates only
- * 'old inode format' dumps. And BSD supposes that the old
- * inode dumps have the d_namelen field written in machine byte
- * order...
- */
-struct olddirect {
-       __u32   d_ino;
-       __u16   d_reclen;
-       __u16   d_namlen;
-       char    d_name[MAXNAMLEN + 1];
-};
-
-/*
- * The direct structure used by restore.
+ * The direct structure used by dump/restore.
  */
 struct direct {
        __u32   d_ino;
@@ -169,20 +198,23 @@ struct direct {
  * without the d_name field, plus enough space for the name with a terminating
  * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
  */
+#ifdef __linux__
 #if    0
 #if (BYTE_ORDER == LITTLE_ENDIAN)
 #define DIRSIZ(oldfmt, dp) \
     ((oldfmt) ? \
     ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_type+1 + 3) &~ 3)) : \
     ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)))
-#else
+#else /* BYTE_ORDER */
 #define DIRSIZ(oldfmt, dp) \
     ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
 #endif
-#else
-
+#else /* 0 */
 #define DIRSIZ(oldfmt,dp)      EXT2_DIR_REC_LEN(((dp)->d_namlen & 0xff) + 1)
-
+#endif
+#else /* __linux__ */
+#define DIRSIZ(oldfmt, dp) \
+       ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
 #endif
 
 /*
@@ -219,8 +251,8 @@ struct old_bsd_inode {
                char    di_usymlink[MAXFASTLINK + 1];
        }               di_un;
 #else
-       daddr_t         di_db[NDADDR];
-       daddr_t         di_ib[NIADDR];
+       __u32           di_db[NDADDR];
+       __u32           di_ib[NIADDR];
 #endif
        __s32           di_flags;
        __s32           di_blocks;
@@ -248,8 +280,8 @@ struct new_bsd_inode {
        struct bsdtimeval       di_atime;
        struct bsdtimeval       di_mtime;
        struct bsdtimeval       di_ctime;
-       daddr_t         di_db[NDADDR];
-       daddr_t         di_ib[NIADDR];
+       __u32           di_db[NDADDR];
+       __u32           di_ib[NIADDR];
        __u32           di_flags;
        __s32           di_blocks;
        __s32           di_gen;