#ifndef lint
static const char rcsid[] =
- "$Id: traverse.c,v 1.49 2002/07/19 14:57:39 stelian Exp $";
+ "$Id: traverse.c,v 1.54 2003/01/10 14:46:55 stelian Exp $";
#endif /* not lint */
#include <config.h>
#ifndef EXT2_RESIZE_INO
#define EXT2_RESIZE_INO 7
#endif
+#ifndef EXT2_FT_UNKNOWN
+#define EXT2_FT_UNKNOWN 0
+#define EXT2_FT_REG_FILE 1
+#define EXT2_FT_DIR 2
+#define EXT2_FT_CHRDEV 3
+#define EXT2_FT_BLKDEV 4
+#define EXT2_FT_FIFO 5
+#define EXT2_FT_SOCK 6
+#define EXT2_FT_SYMLINK 7
+#define EXT2_FT_MAX 8
+#endif
int dump_fs_open(const char *disk, ext2_filsys *fs)
{
* dump blocks (sizeest vs. blkest in the indirect block
* calculation).
*/
- blkest = howmany((u_quad_t)dp->di_blocks*fs->blocksize, TP_BSIZE);
+ blkest = howmany((u_quad_t)dp->di_blocks * 512, TP_BSIZE);
i_size = dp->di_size + ((u_quad_t) dp->di_size_high << 32);
sizeest = howmany(i_size, TP_BSIZE);
if (blkest > sizeest)
nbi.di_uid = (((int32_t)dp->di_uidhigh) << 16) | dp->di_uid;
nbi.di_gid = (((int32_t)dp->di_gidhigh) << 16) | dp->di_gid;
if (dp->di_file_acl)
- warn("ACLs in inode #%ld won't be dumped", (long)ino);
+ msg("ACLs in inode #%ld won't be dumped\n", (long)ino);
memmove(&spcl.c_dinode, &nbi, sizeof(nbi));
#else /* __linux__ */
spcl.c_dinode = *dp;
dp->d_ino = dirent->inode;
dp->d_reclen = reclen;
dp->d_namlen = dirent->name_len & 0xFF;
+ switch ((dirent->name_len & 0xFF00) >> 8) {
+ default:
+ dp->d_type = DT_UNKNOWN;
+ break;
+ case EXT2_FT_REG_FILE:
+ dp->d_type = DT_REG;
+ break;
+ case EXT2_FT_DIR:
+ dp->d_type = DT_DIR;
+ break;
+ case EXT2_FT_CHRDEV:
+ dp->d_type = DT_CHR;
+ break;
+ case EXT2_FT_BLKDEV:
+ dp->d_type = DT_BLK;
+ break;
+ case EXT2_FT_FIFO:
+ dp->d_type = DT_FIFO;
+ break;
+ case EXT2_FT_SOCK:
+ dp->d_type = DT_SOCK;
+ break;
+ case EXT2_FT_SYMLINK:
+ dp->d_type = DT_LNK;
+ break;
+ }
strncpy(dp->d_name, dirent->name, dp->d_namlen);
dp->d_name[dp->d_namlen] = '\0';
p->prev_offset = p->offset;
nbi.di_uid = (((int32_t)dp->di_uidhigh) << 16) | dp->di_uid;
nbi.di_gid = (((int32_t)dp->di_gidhigh) << 16) | dp->di_gid;
if (dp->di_file_acl)
- warn("ACLs in inode #%ld won't be dumped", (long)ino);
+ msg("ACLs in inode #%ld won't be dumped\n", (long)ino);
memmove(&spcl.c_dinode, &nbi, sizeof(nbi));
#else /* __linux__ */
spcl.c_dinode = *dp;
else
msg("short read error from %s: [block %d, ext2blk %d]: count=%d, got=%d\n",
disk, blkno, dbtofsb(sblock, blkno), size, cnt);
- if (++breaderrors > breademax) {
+ if (breademax && ++breaderrors > breademax) {
msg("More than %d block read errors from %d\n",
breademax, disk);
broadcast("DUMP IS AILING!\n");