* 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.25 2011/06/10 12:46:41 stelian Exp $
*/
#include <config.h>
#include <sys/time.h>
#include <dirent.h>
+#include <ext2fs/ext2fs.h>
+
+#ifndef _BSDCOMPAT_H
+#define _BSDCOMPAT_H 1
#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
/*
* 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
#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;
__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;
__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]
#define MAXNAMLEN 255
#endif
+#ifdef sunos
+#define MAXNAMLEN 255
+#endif
+
/*
* For old libc.
*/
#define DT_REG 8
#define DT_LNK 10
#define DT_SOCK 12
+
+#ifdef sunos
+#define DT_WHT 14
+#endif
#endif
#ifndef d_fileno
#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;
* 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
/*
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;
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;
#define di_ouid di_u.oldids[0]
#define di_ogid di_u.oldids[1]
+#endif /* _BSDCOMPAT_H */