Many files:
Checkin of e2fsprogs 0.5b
diff --git a/lib/ext2fs/.depend b/lib/ext2fs/.depend
index 653e191..dd371f6 100644
--- a/lib/ext2fs/.depend
+++ b/lib/ext2fs/.depend
@@ -1,350 +1,198 @@
alloc.o : alloc.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/unistd.h /usr/include/posix_opt.h \
/usr/include/gnu/types.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
- /usr/include/sys/types.h /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h \
- /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
- /usr/include/time.h /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/fs.h \
- /usr/include/linux/linkage.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/net.h \
- /usr/include/linux/socket.h /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h \
- /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h \
- /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h \
- /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
- ../ext2fs/bitops.h
+ /usr/include/sys/types.h /usr/include/linux/types.h /usr/include/asm/types.h \
+ /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/time.h /usr/include/sys/stat.h /usr/include/linux/stat.h \
+ /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
+ ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
badblocks.o : badblocks.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/fcntl.h /usr/include/linux/fcntl.h \
- /usr/include/time.h /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/fs.h \
- /usr/include/linux/linkage.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/net.h \
- /usr/include/linux/socket.h /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h \
- /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h \
- /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h \
- /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
- ../ext2fs/bitops.h
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/fcntl.h /usr/include/linux/fcntl.h /usr/include/time.h \
+ /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/ext2_fs.h \
+ ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
+ ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
bb_inode.o : bb_inode.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/fcntl.h /usr/include/linux/fcntl.h \
- /usr/include/time.h /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/fs.h \
- /usr/include/linux/linkage.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/net.h \
- /usr/include/linux/socket.h /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h \
- /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h \
- /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h \
- /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
- ../ext2fs/bitops.h
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/fcntl.h /usr/include/linux/fcntl.h /usr/include/time.h \
+ /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/ext2_fs.h \
+ ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
+ ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
bitmaps.o : bitmaps.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/fcntl.h /usr/include/linux/fcntl.h \
- /usr/include/time.h /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/fs.h \
- /usr/include/linux/linkage.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/net.h \
- /usr/include/linux/socket.h /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h \
- /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h \
- /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h \
- /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
- ../ext2fs/bitops.h
-bitops.o : bitops.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
- /usr/include/libio.h /usr/include/_G_config.h /usr/include/sys/types.h /usr/include/linux/types.h \
- /usr/include/linux/fs.h /usr/include/linux/linkage.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/net.h /usr/include/linux/socket.h /usr/include/linux/sockios.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/ext2_fs_i.h /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/xia_fs_i.h /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/xia_fs_sb.h /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h \
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/fcntl.h /usr/include/linux/fcntl.h /usr/include/time.h \
+ /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/ext2_fs.h \
ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
+bitops.o : bitops.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/sys/types.h /usr/include/linux/types.h \
+ /usr/include/asm/types.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
+ /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
+ ../ext2fs/bitops.h
block.o : block.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/linux/fs.h /usr/include/linux/linkage.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/net.h /usr/include/linux/socket.h \
- /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h /usr/include/linux/hpfs_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h /usr/include/linux/sysv_fs_i.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/ext2_fs_sb.h \
- /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h /usr/include/linux/sysv_fs_sb.h \
- /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
+ /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
+ ../ext2fs/bitops.h
+check_desc.o : check_desc.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
+ /usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/fcntl.h /usr/include/linux/fcntl.h /usr/include/time.h \
+ /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/ext2_fs.h \
+ ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
closefs.o : closefs.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/unistd.h /usr/include/posix_opt.h \
/usr/include/gnu/types.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
- /usr/include/sys/types.h /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h \
- /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
- /usr/include/time.h /usr/include/linux/fs.h /usr/include/linux/linkage.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/net.h /usr/include/linux/socket.h /usr/include/linux/sockios.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/ext2_fs_i.h /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/xia_fs_i.h /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/xia_fs_sb.h /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h \
- ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
- ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
+ /usr/include/sys/types.h /usr/include/linux/types.h /usr/include/asm/types.h \
+ /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/time.h /usr/include/linux/ext2_fs.h ext2fs.h \
+ ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h \
+ ../ext2fs/ext2_err.h ../ext2fs/bitops.h
expanddir.o : expanddir.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/linux/fs.h /usr/include/linux/linkage.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/net.h /usr/include/linux/socket.h \
- /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h /usr/include/linux/hpfs_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h /usr/include/linux/sysv_fs_i.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/ext2_fs_sb.h \
- /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h /usr/include/linux/sysv_fs_sb.h \
- /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
- ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
+ /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
+ ../ext2fs/bitops.h
ext2_err.o : ext2_err.c
freefs.o : freefs.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/unistd.h /usr/include/posix_opt.h \
/usr/include/gnu/types.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
- /usr/include/sys/types.h /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h \
- /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
- /usr/include/linux/fs.h /usr/include/linux/linkage.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/net.h /usr/include/linux/socket.h /usr/include/linux/sockios.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/ext2_fs_i.h /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/xia_fs_i.h /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/xia_fs_sb.h /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h \
- ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
- ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
+ /usr/include/sys/types.h /usr/include/linux/types.h /usr/include/asm/types.h \
+ /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
+ /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
+ ../ext2fs/bitops.h
get_pathname.o : get_pathname.c /usr/include/stdio.h /usr/include/features.h \
/usr/include/sys/cdefs.h /usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h \
/usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h /usr/include/unistd.h /usr/include/posix_opt.h \
/usr/include/gnu/types.h /usr/include/sys/types.h /usr/include/linux/types.h \
- /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
- /usr/include/linux/fs.h /usr/include/linux/linkage.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/net.h /usr/include/linux/socket.h /usr/include/linux/sockios.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/ext2_fs_i.h /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/xia_fs_i.h /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/xia_fs_sb.h /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h \
+ /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
+ /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/alloca.h /usr/include/linux/ext2_fs.h \
ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
initialize.o : initialize.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/fcntl.h /usr/include/linux/fcntl.h \
- /usr/include/time.h /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/fs.h \
- /usr/include/linux/linkage.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/net.h \
- /usr/include/linux/socket.h /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h \
- /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h \
- /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h \
- /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
- ../ext2fs/bitops.h
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/fcntl.h /usr/include/linux/fcntl.h /usr/include/time.h \
+ /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/ext2_fs.h \
+ ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
+ ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
inline.o : inline.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/fcntl.h /usr/include/linux/fcntl.h \
- /usr/include/time.h /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/fs.h \
- /usr/include/linux/linkage.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/net.h \
- /usr/include/linux/socket.h /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h \
- /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h \
- /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h \
- /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
- ../ext2fs/bitops.h
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/fcntl.h /usr/include/linux/fcntl.h /usr/include/time.h \
+ /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/ext2_fs.h \
+ ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
+ ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
inode.o : inode.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/sys/stat.h /usr/include/linux/stat.h \
- /usr/include/linux/fs.h /usr/include/linux/linkage.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/net.h /usr/include/linux/socket.h /usr/include/linux/sockios.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/ext2_fs_i.h /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/xia_fs_i.h /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/xia_fs_sb.h /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h \
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/ext2_fs.h \
ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
link.o : link.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/linux/fs.h /usr/include/linux/linkage.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/net.h /usr/include/linux/socket.h \
- /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h /usr/include/linux/hpfs_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h /usr/include/linux/sysv_fs_i.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/ext2_fs_sb.h \
- /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h /usr/include/linux/sysv_fs_sb.h \
- /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
- ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
+ /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
+ ../ext2fs/bitops.h
+llseek.o : llseek.c /usr/include/sys/types.h /usr/include/linux/types.h /usr/include/asm/types.h \
+ /usr/include/errno.h /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/linux/errno.h \
+ /usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
+ /usr/include/linux/unistd.h /usr/include/asm/unistd.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
+ ../ext2fs/io.h
mkdir.o : mkdir.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/fcntl.h /usr/include/linux/fcntl.h \
- /usr/include/time.h /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/fs.h \
- /usr/include/linux/linkage.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/net.h \
- /usr/include/linux/socket.h /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h \
- /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h \
- /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h \
- /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
- ../ext2fs/bitops.h
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/fcntl.h /usr/include/linux/fcntl.h /usr/include/time.h \
+ /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/ext2_fs.h \
+ ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
+ ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
namei.o : namei.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/linux/fs.h /usr/include/linux/linkage.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/net.h /usr/include/linux/socket.h \
- /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h /usr/include/linux/hpfs_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h /usr/include/linux/sysv_fs_i.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/ext2_fs_sb.h \
- /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h /usr/include/linux/sysv_fs_sb.h \
- /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
- ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
+ /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
+ ../ext2fs/bitops.h
newdir.o : newdir.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/linux/fs.h /usr/include/linux/linkage.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/net.h /usr/include/linux/socket.h \
- /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h /usr/include/linux/hpfs_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h /usr/include/linux/sysv_fs_i.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/ext2_fs_sb.h \
- /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h /usr/include/linux/sysv_fs_sb.h \
- /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
- ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
+ /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
+ ../ext2fs/bitops.h
openfs.o : openfs.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/fcntl.h /usr/include/linux/fcntl.h \
- /usr/include/time.h /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/fs.h \
- /usr/include/linux/linkage.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/net.h \
- /usr/include/linux/socket.h /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h \
- /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h \
- /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h \
- /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
- ../ext2fs/bitops.h
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/fcntl.h /usr/include/linux/fcntl.h /usr/include/time.h \
+ /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/ext2_fs.h \
+ ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
+ ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
read_bb.o : read_bb.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/fcntl.h /usr/include/linux/fcntl.h \
- /usr/include/time.h /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/fs.h \
- /usr/include/linux/linkage.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/net.h \
- /usr/include/linux/socket.h /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h \
- /usr/include/linux/hpfs_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h \
- /usr/include/linux/sysv_fs_i.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/ext2_fs_sb.h /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h \
- /usr/include/linux/sysv_fs_sb.h /usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ../ext2fs/io.h ../ext2fs/ext2_err.h \
- ../ext2fs/bitops.h
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/fcntl.h /usr/include/linux/fcntl.h /usr/include/time.h \
+ /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/ext2_fs.h \
+ ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
+ ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
read_bb_file.o : read_bb_file.c /usr/include/stdio.h /usr/include/features.h \
/usr/include/sys/cdefs.h /usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h \
/usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h /usr/include/unistd.h /usr/include/posix_opt.h \
/usr/include/gnu/types.h /usr/include/sys/types.h /usr/include/linux/types.h \
- /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
- /usr/include/fcntl.h /usr/include/linux/fcntl.h /usr/include/time.h /usr/include/sys/stat.h \
- /usr/include/linux/stat.h /usr/include/linux/fs.h /usr/include/linux/linkage.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/net.h /usr/include/linux/socket.h \
- /usr/include/linux/sockios.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/ext2_fs_i.h /usr/include/linux/hpfs_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/xia_fs_i.h /usr/include/linux/sysv_fs_i.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/ext2_fs_sb.h \
- /usr/include/linux/hpfs_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/xia_fs_sb.h /usr/include/linux/sysv_fs_sb.h \
+ /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
+ /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/alloca.h /usr/include/fcntl.h \
+ /usr/include/linux/fcntl.h /usr/include/time.h /usr/include/sys/stat.h /usr/include/linux/stat.h \
/usr/include/linux/ext2_fs.h ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
+rw_bitmaps.o : rw_bitmaps.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
+ /usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/fcntl.h /usr/include/linux/fcntl.h /usr/include/time.h \
+ /usr/include/sys/stat.h /usr/include/linux/stat.h /usr/include/linux/ext2_fs.h \
+ ext2fs.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
+ ../ext2fs/io.h ../ext2fs/ext2_err.h ../ext2fs/bitops.h
unix_io.o : unix_io.c /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \
/usr/include/unistd.h /usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/sys/types.h \
- /usr/include/linux/types.h /usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h /usr/include/fcntl.h /usr/include/linux/fcntl.h \
- /usr/include/time.h /usr/include/sys/stat.h /usr/include/linux/stat.h ../et/com_err.h \
- /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h ext2_err.h io.h
+ /usr/include/linux/types.h /usr/include/asm/types.h /usr/include/stdlib.h /usr/include/errno.h \
+ /usr/include/linux/errno.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \
+ /usr/include/alloca.h /usr/include/fcntl.h /usr/include/linux/fcntl.h /usr/include/time.h \
+ /usr/include/sys/stat.h /usr/include/linux/stat.h ../et/com_err.h /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h \
+ ext2_err.h io.h
diff --git a/lib/ext2fs/ChangeLog b/lib/ext2fs/ChangeLog
new file mode 100644
index 0000000..5fd3bfe
--- /dev/null
+++ b/lib/ext2fs/ChangeLog
@@ -0,0 +1,155 @@
+Sat Mar 11 14:07:11 1995 Theodore Y. Ts'o <tytso@localhost>
+
+ * llseek.c (ext2_llseek): Added error checking to the llseek()
+ compat code to protect against overflow. This only
+ applies to 1.0 and early 1.1 kernels, which don't support
+ the llseek() system call.
+
+Thu Nov 24 16:29:00 1994 Theodore Y. Ts'o (tytso@rt-11)
+
+ * unix_io.c (unix_open): Initialize the read_error and write_error
+ io_channel pointers to be null.
+
+ * bb_inode.c (clear_bad_block_proc): If an illegal block number is
+ found, clear it but don't try to update the filesystem
+ accounting information, since that's hopeless anyway.
+
+ * block.c (bloblock_iterate_ind, bloblock_iterate_dind,
+ bloblock_iterate_tind): Check to see if the indirect blocks are
+ valid before trying to read them.
+
+ * ext2_err.et (EXT2_ET_BAD_IND_BLOCK, EX2_ET_BAD_DIND_BLOCK,
+ EXT2_ET_BAD_TIND_BLOCK): Add new error codes.
+
+ * bitops.h (ext2fs_mark_block_bitmap, ext2fs_unmark_block_bitmap,
+ ext2fs_test_block_bitmap, ext2fs_mark_inode_bitmap,
+ ext2fs_unmark_inode_bitmap, ext2fs_test_inode_bitmap): If an
+ illegal block or inode number is passed in, return instead
+ of trying to test, set, or clear the bit.
+
+Mon Nov 7 21:32:33 1994 Remy Card <card@bbj>
+
+ * Makefile: Added a dummy install target in case shared libraries
+ are not built.
+
+Mon Oct 24 14:11:44 1994 (tytso@rsx-11)
+
+ * bitmaps.c (ext2fs_allocate_block_bitmap): Fix calculation of how
+ the real last block of the bitmap should be calculated.
+
+Wed Sep 7 10:05:36 1994 (tytso@rsx-11)
+
+ * bitmaps.c (ext2fs_fudge_inode_bitmap_end,
+ ext2fs_fudge_block_bitmap_end, ext2fs_clear_inode_bitmap,
+ ext2fs_clear_block_bitmap, ext2fs_free_inode_bitmap,
+ ext2fs_free_block_bitmap): Add magic number checking for
+ the inode and block bitmaps.
+
+ * bitmaps.c (ext2fs_allocate_block_bitmap): Fix to set the correct
+ magic number for a block bitmap instead of an inode bitmap.
+
+ * inode.c (ext2fs_close_inode_scan, ext2fs_get_next_inode): Add
+ magic number checking for the inode_scan structure.
+
+ * badblocks.c (badblocks_list_free, badblocks_list_add,
+ badblocks_list_test, badblocks_list_iterate_begin,
+ badblocks_list_iterate, badblocks_list_iterate_end): Add
+ magic number checking for the badblocks_list and
+ badblocks_iterate structures.
+
+ * ext2_err.et (EXT2_ET_MAGIC_UNIX_IO_CHANNEL):
+ * unix_io.c (unix_open, unix_close, unix_set_blksize, unix_read_blk,
+ unix_write_blk, unix_flush): Add magic number checking
+ both for io_channel structure and unix_private_data
+ structure.
+
+ * openfs.c (ext2fs_open): Add check for io_manager structure's
+ magic number.
+
+ * rw_bitmaps.c (ext2fs_write_inode_bitmap, ext2fs_write_block_bitmap,
+ ext2fs_read_inode_bitmap, ext2fs_read_block_bitmap,
+ ext2fs_read_bitmaps, ext2fs_write_bitmaps):
+ * read_bb.c (ext2fs_read_bb_inode):
+ * read_bb_file.c (ext2fs_read_bb_FILE):
+ * newdir.c (ext2fs_new_dir_block):
+ * namei.c (ext2fs_dir_iterate, ext2fs_lookup, ext2fs_namei):
+ * link.c (ext2fs_link, ext2fs_unlink):
+ * inode.c (ext2fs_open_inode_scan, ext2fs_read_inode,
+ ext2fs_write_inode, ext2fs_get_blocks,
+ ext2fs_check_directory):
+ * get_pathname.c (ext2fs_get_pathname):
+ * expanddir.c (ext2fs_expand_dir):
+ * block.c (ext2fs_block_iterate):
+ * bitmaps.c (ext2fs_allocate_inode_bitmap,
+ ext2fs_allocate_block_bitmap):
+ * bb_inode.c (ext2fs_update_bb_inode):
+ * alloc.c (ext2fs_new_inode,ext2fs_new_block,ext2fs_get_free_blocks):
+ * check_desc.c (ext2fs_check_desc):
+ * closefs.c (ext2fs_close, ext2fs_flush):
+ * freefs.c (ext2fs_free): Add check for ext2_filsys magic number.
+
+ * Makefile:
+ * ext2fs.h:
+ * openfs.c:
+ * check_desc.c (ext2fs_check_desc): Move ext2fs_check_desc from
+ openfs.c into its own file.
+
+ * ext2fs.h (EXT2_CHECK_MAGIC): Added macro for checking for
+ structure magic numbers.
+
+ * closefs.c (ext2fs_flush): Folded in Remy Card's changes to clear
+ the EXT2_VALID_FS flag in the backup superblock blocks, so that if
+ someone uses the -b option to specify the use of the backup
+ superblock --- this usually means that the main superblock is
+ toast. :-)
+
+ * ext2fs.h:
+ * ext2_err.et (EXT2_ET_REV_TOO_HIGH):
+ * openfs.c (ext2fs_open): Folded in Remy Card's changes to add a
+ revision level to the superblock.
+
+Sun Aug 21 00:50:08 1994 Theodore Y. Ts'o (tytso@rt-11)
+
+ * ext2fs.h:
+ * bitmaps.c:
+ * bitops.c
+ * bitops.h:
+ * openfs.c:
+ * initialize.c: Completely revamped the inode and block bitmap
+ structures, so that they can be better chance of being extensible
+ in a shared library. They are now their own type, instead of
+ being a char *. Also, the function signatures of
+ ext2fs_test_block_bitmap, ext2fs_mark_block_bitmap,
+ ext2fs_unmark_block_bitmap, ext2fs_test_inode_bitmap,
+ ext2fs_mark_inode_bitmap, and ext2fs_unmark_inode_bitmap were
+ changed to eliminate the ext2_filsys argument, since it is no
+ longer necessary.
+
+Wed Aug 17 21:46:44 1994 Remy Card (card@bbj)
+
+ * unix_io.c (unix_read_blk and unix_write_blk): use the llseek
+ system call if available.
+
+ * llseek.c: new file. This is the stub calling the llseek system
+ call which allows supports for 2GB+ file systems.
+
+ * initialize.c (ext2fs_initialize): Ext2fs_initialize now stores
+ the creator operating system.
+
+Wed Aug 17 10:03:24 1994 Theodore Y. Ts'o (tytso@rt-11)
+
+ * initialize.c (ext2fs_initialize): Ext2fs_initialize now sets up
+ the group descriptor statistics in addition to everything else.
+ This relieves mke2fs of the responsibility of doing it.
+
+ * bitops.c, bitops.h: Add assembly inline functions for the 68000.
+ Added a new #define, _EXT2_HAVE_ASM_BITOPS_ to control whether or
+ not the generic C function equivalents should be included or not.
+
+ * openfs.c (ext2fs_open): If a superblock is specified, then use
+ the backup group descriptors that go along with this superblock,
+ instead of using the primary group descriptors. This allows
+ e2fsck to recover filesystems where the primary group descriptors
+ have been trashed.
+
+
diff --git a/lib/ext2fs/MAKELOG b/lib/ext2fs/MAKELOG
new file mode 100644
index 0000000..bb85c24
--- /dev/null
+++ b/lib/ext2fs/MAKELOG
@@ -0,0 +1,54 @@
+gcc -O2 -fomit-frame-pointer -ansi -D_POSIX_SOURCE -pedantic -Wall -Wwrite-strings -Wpointer-arith -Wcast-qual -Wenum-clash -Wcast-align -Wtraditional -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wshadow -I.. -c bitmaps.c
+In file included from ext2fs.h:22,
+ from bitmaps.c:20:
+../ext2fs/io.h:12: warning: ANSI C does not support `long long'
+../ext2fs/bitops.h: In function `ext2fs_mark_block_bitmap':
+In file included from ext2fs.h:112,
+ from bitmaps.c:20:
+../ext2fs/bitops.h:145: warning: passing arg 1 of `ext2fs_warn_bitmap' from incompatible pointer type
+../ext2fs/bitops.h: In function `ext2fs_unmark_block_bitmap':
+../ext2fs/bitops.h:154: warning: passing arg 1 of `ext2fs_warn_bitmap' from incompatible pointer type
+../ext2fs/bitops.h: At top level:
+../ext2fs/bitops.h:160: conflicting types for `ext2fs_test_block_bitmap'
+../ext2fs/bitops.h:31: previous declaration of `ext2fs_test_block_bitmap'
+../ext2fs/bitops.h: In function `ext2fs_test_block_bitmap':
+../ext2fs/bitops.h:163: warning: passing arg 1 of `ext2fs_warn_bitmap' from incompatible pointer type
+../ext2fs/bitops.h: In function `ext2fs_mark_inode_bitmap':
+../ext2fs/bitops.h:172: warning: passing arg 1 of `ext2fs_warn_bitmap' from incompatible pointer type
+../ext2fs/bitops.h: In function `ext2fs_unmark_inode_bitmap':
+../ext2fs/bitops.h:181: warning: passing arg 1 of `ext2fs_warn_bitmap' from incompatible pointer type
+../ext2fs/bitops.h: At top level:
+../ext2fs/bitops.h:187: conflicting types for `ext2fs_test_inode_bitmap'
+../ext2fs/bitops.h:36: previous declaration of `ext2fs_test_inode_bitmap'
+../ext2fs/bitops.h: In function `ext2fs_test_inode_bitmap':
+../ext2fs/bitops.h:190: warning: passing arg 1 of `ext2fs_warn_bitmap' from incompatible pointer type
+bitmaps.c: In function `ext2fs_read_inode_bitmap':
+bitmaps.c:108: warning: implicit declaration of function `ext2fs_free_inode_bitmap'
+bitmaps.c:109: structure has no member named `device'
+bitmaps.c:110: structure has no member named `device'
+bitmaps.c:110: warning: format argument is not a pointer (arg 3)
+bitmaps.c:103: warning: `nbytes' may be used uninitialized in this function
+bitmaps.c: In function `ext2fs_read_block_bitmap':
+bitmaps.c:154: warning: implicit declaration of function `ext2fs_free_block_bitmap'
+bitmaps.c:155: structure has no member named `device'
+bitmaps.c:156: structure has no member named `device'
+bitmaps.c:156: warning: format argument is not a pointer (arg 3)
+bitmaps.c:149: warning: `nbytes' may be used uninitialized in this function
+bitmaps.c: In function `ext2fs_allocate_inode_bitmap':
+bitmaps.c:194: warning: `map' may be used uninitialized in this function
+bitmaps.c: In function `ext2fs_allocate_block_bitmap':
+bitmaps.c:235: warning: `map' may be used uninitialized in this function
+bitmaps.c: At top level:
+bitmaps.c:272: warning: no previous prototype for `ext2fs_free_inode_bitmap'
+bitmaps.c:272: warning: type mismatch with previous external decl
+bitmaps.c:108: warning: previous external decl of `ext2fs_free_inode_bitmap'
+bitmaps.c:272: warning: type mismatch with previous implicit declaration
+bitmaps.c:108: warning: previous implicit declaration of `ext2fs_free_inode_bitmap'
+bitmaps.c:272: warning: `ext2fs_free_inode_bitmap' was previously implicitly declared to return `int'
+bitmaps.c:286: warning: no previous prototype for `ext2fs_free_block_bitmap'
+bitmaps.c:286: warning: type mismatch with previous external decl
+bitmaps.c:154: warning: previous external decl of `ext2fs_free_block_bitmap'
+bitmaps.c:286: warning: type mismatch with previous implicit declaration
+bitmaps.c:154: warning: previous implicit declaration of `ext2fs_free_block_bitmap'
+bitmaps.c:286: warning: `ext2fs_free_block_bitmap' was previously implicitly declared to return `int'
+make: *** [bitmaps.o] Error 1
diff --git a/lib/ext2fs/Makefile b/lib/ext2fs/Makefile
index 82c7280..5f991cf 100644
--- a/lib/ext2fs/Makefile
+++ b/lib/ext2fs/Makefile
@@ -1,32 +1,54 @@
+all:: libext2fs.a
+
include ../../MCONFIG
+OBJS= ext2_err.o openfs.o freefs.o closefs.o bitmaps.o rw_bitmaps.o inode.o \
+ unix_io.o block.o namei.o newdir.o mkdir.o check_desc.o \
+ get_pathname.o bitops.o link.o alloc.o expanddir.o inline.o \
+ initialize.o badblocks.o read_bb.o bb_inode.o read_bb_file.o llseek.o
+
+HFILES= bitops.h ext2_err.h ext2fs.h io.h
+
+ifdef BUILD_PROFILE_LIBS
+all:: libext2fs_p.a
+endif
+
+ifdef BUILD_DLL_SHLIBS
+DLL_ADDRESS = 0x66900000
+DLL_JUMPSIZE = 0x1000
+DLL_GOTSIZE = 0x1000
+DLL_VERSION = 1.0
+DLL_IMAGE = libe2fs
+DLL_STUB = libext2fs
+DLL_LIBS = -L../.. -lcom_err
+DLL_MYDIR = ext2fs
+DLL_INSTALL_DIR = $(SHLIBDIR)
+
+include ../Makefile.dll-lib
+endif
+
COMPILE_ET=../et/compile_et
CFLAGS_NO= $(WFLAGS) -I..
CFLAGS= $(OPT) $(CFLAGS_NO)
LDFLAGS= $(OPT)
-ARCHIVE=ar r
-RANLIB=ranlib
RM=rm -f
MV=mv
LN=ln -s
-OBJS= ext2_err.o openfs.o freefs.o closefs.o bitmaps.o inode.o unix_io.o \
- block.o namei.o newdir.o mkdir.o \
- get_pathname.o bitops.o link.o alloc.o expanddir.o inline.o \
- initialize.o badblocks.o read_bb.o bb_inode.o read_bb_file.o
-
-HFILES= bitops.h ext2_err.h ext2fs.h io.h
-
DISTFILES= Makefile *.c *.h image
.c.o:
$(CC) $(CFLAGS) -c $*.c
+ifdef BUILD_PROFILE_LIBS
$(CC) $(CFLAGS_NO) -pg -o profiled/$*.o -c $*.c
+endif
# $(CC) $(CFLAGS_NO) -checker -g -o checker/$*.o -c $*.c
-
-all: libext2fs.a libext2fs_p.a
+ifdef BUILD_DLL_SHLIBS
+ (export JUMP_DIR=`pwd`/jump; $(CC) -B$(JUMP_PREFIX) $(CFLAGS) \
+ -o jump/$*.o -c $*.c)
+endif
libext2fs.a: $(OBJS)
$(RM) $@.bak
@@ -55,23 +77,28 @@
ext2_err.c ext2_err.h: ext2_err.et
$(COMPILE_ET) ext2_err.et
-install:: all
- $(INSTALLLIB) libext2fs.a ${DESTDIR}$(LIBDIR)/libext2fs.a
- $(CHMOD) 644 ${DESTDIR}$(LIBDIR)/libext2fs.a
- $(RANLIB) ${DESTDIR}$(LIBDIR)/libext2fs.a
- $(CHMOD) $(LIBMODE) ${DESTDIR}$(LIBDIR)/libext2fs.a
+install-libs:: all
+ $(INSTALLLIB) libext2fs.a $(LIBDIR)/libext2fs.a
+ $(CHMOD) 644 $(LIBDIR)/libext2fs.a
+ $(RANLIB) $(LIBDIR)/libext2fs.a
+ $(CHMOD) $(LIBMODE) $(LIBDIR)/libext2fs.a
-install:: $(HFILES)
- @rm -rf ${DESTDIR}$(INCLDIR)/ext2fs
- @mkdir ${DESTDIR}$(INCLDIR)/ext2fs
+install-libs:: $(HFILES)
+ @rm -rf $(INCLDIR)/ext2fs
+ @mkdir $(INCLDIR)/ext2fs
for i in $(HFILES); do \
- $(INSTALLINC) $$i ${DESTDIR}$(INCLDIR)/ext2fs/$$i; \
+ $(INSTALLINC) $$i $(INCLDIR)/ext2fs/$$i; \
done
-clean:
- rm -f \#* *.s *.o *.a *~ *.bak core profiled/* checker/*
+install-tree::
-really-clean: clean
+install::
+
+clean::
+ rm -f \#* *.s *.o *.a *~ *.bak core profiled/* checker/*
+ rm -f ../libext2fs.a ../libext2fs_p.a ../libext2fs_chk.a
+
+really-clean:: clean
rm -f .depend ext2_err.c ext2_err.h
dep depend .depend: ext2_err.h
diff --git a/lib/ext2fs/alloc.c b/lib/ext2fs/alloc.c
index c456ad1..26c0111 100644
--- a/lib/ext2fs/alloc.c
+++ b/lib/ext2fs/alloc.c
@@ -12,7 +12,6 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -23,13 +22,15 @@
*
* Should have a special policy for directories.
*/
-errcode_t ext2fs_new_inode(ext2_filsys fs, ino_t dir, int mode, char *map,
- ino_t *ret)
+errcode_t ext2fs_new_inode(ext2_filsys fs, ino_t dir, int mode,
+ ext2fs_inode_bitmap map, ino_t *ret)
{
int dir_group = 0;
ino_t i;
ino_t start_inode;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (!map)
map = fs->inode_map;
if (!map)
@@ -44,14 +45,14 @@
i = EXT2_FIRST_INO;
do {
- if (!ext2fs_test_inode_bitmap(fs, map, i))
+ if (!ext2fs_test_inode_bitmap(map, i))
break;
i++;
if (i > fs->super->s_inodes_count)
i = EXT2_FIRST_INO;
} while (i != start_inode);
- if (ext2fs_test_inode_bitmap(fs, map, i))
+ if (ext2fs_test_inode_bitmap(map, i))
return ENOSPC;
*ret = i;
return 0;
@@ -61,10 +62,13 @@
* Stupid algorithm --- we now just search forward starting from the
* goal. Should put in a smarter one someday....
*/
-errcode_t ext2fs_new_block(ext2_filsys fs, blk_t goal, char *map, blk_t *ret)
+errcode_t ext2fs_new_block(ext2_filsys fs, blk_t goal,
+ ext2fs_block_bitmap map, blk_t *ret)
{
blk_t i = goal;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (!map)
map = fs->block_map;
if (!map)
@@ -72,7 +76,7 @@
if (!i)
i = fs->super->s_first_data_block;
do {
- if (!ext2fs_test_block_bitmap(fs, map, i)) {
+ if (!ext2fs_test_block_bitmap(map, i)) {
*ret = i;
return 0;
}
@@ -83,24 +87,27 @@
return ENOSPC;
}
-static int check_blocks_free(ext2_filsys fs, char *map, blk_t blk, int num)
+static int check_blocks_free(ext2_filsys fs, ext2fs_block_bitmap map,
+ blk_t blk, int num)
{
int i;
for (i=0; i < num; i++) {
if ((blk+i) > fs->super->s_blocks_count)
return 0;
- if (ext2fs_test_block_bitmap(fs, map, blk+i))
+ if (ext2fs_test_block_bitmap(map, blk+i))
return 0;
}
return 1;
}
errcode_t ext2fs_get_free_blocks(ext2_filsys fs, blk_t start, blk_t finish,
- int num, char *map, blk_t *ret)
+ int num, ext2fs_block_bitmap map, blk_t *ret)
{
blk_t b = start;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (!map)
map = fs->block_map;
if (!map)
diff --git a/lib/ext2fs/badblocks.c b/lib/ext2fs/badblocks.c
index 5e8cd43..8a40501 100644
--- a/lib/ext2fs/badblocks.c
+++ b/lib/ext2fs/badblocks.c
@@ -14,7 +14,6 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -30,6 +29,7 @@
if (!bb)
return ENOMEM;
memset(bb, 0, sizeof(struct struct_badblocks_list));
+ bb->magic = EXT2_ET_MAGIC_BADBLOCKS_LIST;
bb->size = size ? size : 10;
bb->list = malloc(bb->size * sizeof(blk_t));
if (!bb->list) {
@@ -45,6 +45,9 @@
*/
void badblocks_list_free(badblocks_list bb)
{
+ if (bb->magic != EXT2_ET_MAGIC_BADBLOCKS_LIST)
+ return;
+
if (bb->list)
free(bb->list);
bb->list = 0;
@@ -58,6 +61,8 @@
{
int i;
+ EXT2_CHECK_MAGIC(bb, EXT2_ET_MAGIC_BADBLOCKS_LIST);
+
for (i=0; i < bb->num; i++)
if (bb->list[i] == blk)
return 0;
@@ -84,6 +89,8 @@
{
int i;
+ EXT2_CHECK_MAGIC(bb, EXT2_ET_MAGIC_BADBLOCKS_LIST);
+
for (i=0; i < bb->num; i++)
if (bb->list[i] == blk)
return 1;
@@ -96,10 +103,13 @@
{
badblocks_iterate iter;
+ EXT2_CHECK_MAGIC(bb, EXT2_ET_MAGIC_BADBLOCKS_LIST);
+
iter = malloc(sizeof(struct struct_badblocks_iterate));
if (!iter)
return ENOMEM;
+ iter->magic = EXT2_ET_MAGIC_BADBLOCKS_ITERATE;
iter->bb = bb;
iter->ptr = 0;
*ret = iter;
@@ -108,7 +118,15 @@
int badblocks_list_iterate(badblocks_iterate iter, blk_t *blk)
{
- badblocks_list bb = iter->bb;
+ badblocks_list bb;
+
+ if (iter->magic != EXT2_ET_MAGIC_BADBLOCKS_ITERATE)
+ return 0;
+
+ bb = iter->bb;
+
+ if (bb->magic != EXT2_ET_MAGIC_BADBLOCKS_LIST)
+ return 0;
if (iter->ptr < bb->num) {
*blk = bb->list[iter->ptr++];
@@ -120,6 +138,9 @@
void badblocks_list_iterate_end(badblocks_iterate iter)
{
+ if (!iter || (iter->magic != EXT2_ET_MAGIC_BADBLOCKS_ITERATE))
+ return;
+
iter->bb = 0;
free(iter);
}
diff --git a/lib/ext2fs/bb_inode.c b/lib/ext2fs/bb_inode.c
index d345f1d..2b0ea9f 100644
--- a/lib/ext2fs/bb_inode.c
+++ b/lib/ext2fs/bb_inode.c
@@ -18,7 +18,6 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -48,7 +47,10 @@
errcode_t retval;
struct set_badblock_record rec;
struct ext2_inode inode;
+ blk_t blk;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (!fs->block_map)
return EXT2_ET_NO_BLOCK_BITMAP;
@@ -70,7 +72,8 @@
/*
* First clear the old bad blocks (while saving the indirect blocks)
*/
- retval = ext2fs_block_iterate(fs, EXT2_BAD_INO, 0, 0,
+ retval = ext2fs_block_iterate(fs, EXT2_BAD_INO,
+ BLOCK_FLAG_DEPTH_TRAVERSE, 0,
clear_bad_block_proc, &rec);
if (retval)
goto cleanup;
@@ -81,11 +84,24 @@
/*
* Now set the bad blocks!
+ *
+ * First, mark the bad blocks as used. This prevents a bad
+ * block from being used as an indirecto block for the bad
+ * block inode (!).
*/
if (bb_list) {
retval = badblocks_list_iterate_begin(bb_list, &rec.bb_iter);
if (retval)
goto cleanup;
+ while (badblocks_list_iterate(rec.bb_iter, &blk)) {
+ ext2fs_mark_block_bitmap(fs->block_map, blk);
+ }
+ badblocks_list_iterate_end(rec.bb_iter);
+ ext2fs_mark_bb_dirty(fs);
+
+ retval = badblocks_list_iterate_begin(bb_list, &rec.bb_iter);
+ if (retval)
+ goto cleanup;
retval = ext2fs_block_iterate(fs, EXT2_BAD_INO,
BLOCK_FLAG_APPEND, 0,
set_bad_block_proc, &rec);
@@ -138,6 +154,15 @@
if (!*block_nr)
return 0;
+ /*
+ * If the block number is outrageous, clear it and ignore it.
+ */
+ if (*block_nr >= fs->super->s_blocks_count ||
+ *block_nr < fs->super->s_first_data_block) {
+ *block_nr = 0;
+ return BLOCK_CHANGED;
+ }
+
if (blockcnt < 0) {
if (rec->ind_blocks_size >= rec->max_ind_blocks) {
rec->max_ind_blocks += 10;
@@ -155,7 +180,7 @@
/*
* Mark the block as unused, and update accounting information
*/
- ext2fs_unmark_block_bitmap(fs, fs->block_map, *block_nr);
+ ext2fs_unmark_block_bitmap(fs->block_map, *block_nr);
ext2fs_mark_bb_dirty(fs);
group = ext2fs_group_of_blk(fs, *block_nr);
fs->group_desc[group].bg_free_blocks_count++;
@@ -188,34 +213,38 @@
if (!badblocks_list_iterate(rec->bb_iter, &blk))
return BLOCK_ABORT;
rec->bad_block_count++;
- } else if (rec->ind_blocks_ptr < rec->ind_blocks_size)
+ } else {
/*
* An indirect block; fetch a block from the
- * previously used indirect block list.
+ * previously used indirect block list. The block
+ * most be not marked as used; if so, get another one.
+ * If we run out of reserved indirect blocks, allocate
+ * a new one.
*/
- blk = rec->ind_blocks[rec->ind_blocks_ptr++];
- else {
- /*
- * An indirect block, and we're out of reserved
- * indirect blocks. Allocate a new one.
- */
- retval = ext2fs_new_block(fs, 0, 0, &blk);
- if (retval) {
- rec->err = retval;
- return BLOCK_ABORT;
+ retry:
+ if (rec->ind_blocks_ptr < rec->ind_blocks_size) {
+ blk = rec->ind_blocks[rec->ind_blocks_ptr++];
+ if (ext2fs_test_block_bitmap(fs->block_map, blk))
+ goto retry;
+ } else {
+ retval = ext2fs_new_block(fs, 0, 0, &blk);
+ if (retval) {
+ rec->err = retval;
+ return BLOCK_ABORT;
+ }
}
retval = io_channel_write_blk(fs->io, blk, 1, rec->block_buf);
if (retval) {
rec->err = retval;
return BLOCK_ABORT;
}
+ ext2fs_mark_block_bitmap(fs->block_map, blk);
+ ext2fs_mark_bb_dirty(fs);
}
/*
- * Mark the block as used, and update block counts
+ * Update block counts
*/
- ext2fs_mark_block_bitmap(fs, fs->block_map, blk);
- ext2fs_mark_bb_dirty(fs);
group = ext2fs_group_of_blk(fs, blk);
fs->group_desc[group].bg_free_blocks_count--;
fs->super->s_free_blocks_count--;
diff --git a/lib/ext2fs/bitmaps.c b/lib/ext2fs/bitmaps.c
index c12433a..8712e2d 100644
--- a/lib/ext2fs/bitmaps.c
+++ b/lib/ext2fs/bitmaps.c
@@ -15,244 +15,173 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "ext2fs.h"
-errcode_t ext2fs_write_inode_bitmap(ext2_filsys fs)
+errcode_t ext2fs_allocate_inode_bitmap(ext2_filsys fs,
+ const char *descr,
+ ext2fs_inode_bitmap *ret)
{
- int i;
- int nbytes;
- errcode_t retval;
- char * inode_bitmap = fs->inode_map;
- char * bitmap_block = NULL;
-
- if (!(fs->flags & EXT2_FLAG_RW))
- return EXT2_ET_RO_FILSYS;
- if (!inode_bitmap)
- return 0;
- nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
- bitmap_block = malloc(fs->blocksize);
- if (!bitmap_block)
- return ENOMEM;
- memset(bitmap_block, 0xff, fs->blocksize);
- for (i = 0; i < fs->group_desc_count; i++) {
- memcpy(bitmap_block, inode_bitmap, nbytes);
- retval = io_channel_write_blk(fs->io,
- fs->group_desc[i].bg_inode_bitmap, 1,
- bitmap_block);
- if (retval)
- return EXT2_ET_INODE_BITMAP_WRITE;
- inode_bitmap += nbytes;
- }
- fs->flags |= EXT2_FLAG_CHANGED;
- fs->flags &= ~EXT2_FLAG_IB_DIRTY;
- free(bitmap_block);
- return 0;
-}
-
-errcode_t ext2fs_write_block_bitmap (ext2_filsys fs)
-{
- int i;
- int j;
- int nbytes;
- int nbits;
- errcode_t retval;
- char * block_bitmap = fs->block_map;
- char * bitmap_block = NULL;
-
- if (!(fs->flags & EXT2_FLAG_RW))
- return EXT2_ET_RO_FILSYS;
- if (!block_bitmap)
- return 0;
- nbytes = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
- bitmap_block = malloc(fs->blocksize);
- if (!bitmap_block)
- return ENOMEM;
- memset(bitmap_block, 0xff, fs->blocksize);
- for (i = 0; i < fs->group_desc_count; i++) {
- memcpy(bitmap_block, block_bitmap, nbytes);
- if (i == fs->group_desc_count - 1) {
- /* Force bitmap padding for the last group */
- nbits = (fs->super->s_blocks_count
- - fs->super->s_first_data_block)
- % EXT2_BLOCKS_PER_GROUP(fs->super);
- for (j = nbits; j < fs->blocksize * 8; j++)
- set_bit(j, bitmap_block);
- }
- retval = io_channel_write_blk(fs->io,
- fs->group_desc[i].bg_block_bitmap, 1,
- bitmap_block);
- if (retval)
- return EXT2_ET_BLOCK_BITMAP_WRITE;
- block_bitmap += nbytes;
- }
- fs->flags |= EXT2_FLAG_CHANGED;
- fs->flags &= ~EXT2_FLAG_BB_DIRTY;
- free(bitmap_block);
- return 0;
-}
-
-errcode_t ext2fs_read_inode_bitmap (ext2_filsys fs)
-{
- int i;
- char * inode_bitmap;
- char *buf = 0;
- errcode_t retval;
- int nbytes;
-
- fs->write_bitmaps = ext2fs_write_bitmaps;
-
- if (fs->inode_map)
- free(fs->inode_map);
- nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
- fs->flags &= ~EXT2_FLAG_IB_DIRTY;
- fs->inode_map = malloc((nbytes * fs->group_desc_count) + 1);
- if (!fs->inode_map)
- return ENOMEM;
- inode_bitmap = fs->inode_map;
-
- buf = malloc(fs->blocksize);
- if (!buf)
- return ENOMEM;
-
- for (i = 0; i < fs->group_desc_count; i++) {
- retval = io_channel_read_blk(fs->io,
- fs->group_desc[i].bg_inode_bitmap, 1,
- buf);
- if (retval) {
- retval = EXT2_ET_INODE_BITMAP_READ;
- goto cleanup;
- }
- memcpy(inode_bitmap, buf, nbytes);
- inode_bitmap += nbytes;
- }
- free(buf);
- return 0;
-
-cleanup:
- free(fs->inode_map);
- fs->inode_map = 0;
- if (buf)
- free(buf);
- return retval;
-}
-
-errcode_t ext2fs_read_block_bitmap(ext2_filsys fs)
-{
- int i;
- char * block_bitmap;
- char *buf = 0;
- errcode_t retval;
- int nbytes;
-
- fs->write_bitmaps = ext2fs_write_bitmaps;
-
- if (fs->block_map)
- free(fs->block_map);
- nbytes = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
- fs->flags &= ~EXT2_FLAG_BB_DIRTY;
- fs->block_map = malloc((nbytes * fs->group_desc_count) + 1);
- if (!fs->block_map)
- return ENOMEM;
- block_bitmap = fs->block_map;
-
- buf = malloc(fs->blocksize);
- if (!buf)
- return ENOMEM;
-
- for (i = 0; i < fs->group_desc_count; i++) {
- retval = io_channel_read_blk(fs->io,
- fs->group_desc[i].bg_block_bitmap, 1,
- buf);
- if (retval) {
- retval = EXT2_ET_BLOCK_BITMAP_READ;
- goto cleanup;
- }
- memcpy(block_bitmap, buf, nbytes);
- block_bitmap += nbytes;
- }
- free(buf);
- return 0;
-
-cleanup:
- free(fs->block_map);
- fs->block_map = 0;
- if (buf)
- free(buf);
- return retval;
-}
-
-errcode_t ext2fs_allocate_inode_bitmap(ext2_filsys fs, char **ret)
-{
- char *map;
- int size;
-
- fs->write_bitmaps = ext2fs_write_bitmaps;
-
- size = (fs->super->s_inodes_count / 8) + 1;
- map = malloc(size);
- if (!map)
- return ENOMEM;
- memset(map, 0, size);
- *ret = map;
- return 0;
-}
-
-errcode_t ext2fs_allocate_block_bitmap(ext2_filsys fs, char **ret)
-{
- char *map;
+ ext2fs_inode_bitmap bitmap;
int size;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
fs->write_bitmaps = ext2fs_write_bitmaps;
-
- size = (fs->super->s_blocks_count / 8) + 1;
- map = malloc(size);
- if (!map)
+
+ bitmap = malloc(sizeof(struct ext2fs_struct_inode_bitmap));
+ if (!bitmap)
return ENOMEM;
- memset(map, 0, size);
- *ret = map;
+
+ bitmap->magic = EXT2_ET_MAGIC_INODE_BITMAP;
+ bitmap->fs = fs;
+ bitmap->start = 1;
+ bitmap->end = fs->super->s_inodes_count;
+ bitmap->real_end = (EXT2_INODES_PER_GROUP(fs->super)
+ * fs->group_desc_count);
+ if (descr) {
+ bitmap->description = malloc(strlen(descr)+1);
+ if (!bitmap->description) {
+ free(bitmap);
+ return ENOMEM;
+ }
+ strcpy(bitmap->description, descr);
+ } else
+ bitmap->description = 0;
+
+ size = ((bitmap->real_end - bitmap->start) / 8) + 1;
+ bitmap->bitmap = malloc(size);
+ if (!bitmap->bitmap) {
+ free(bitmap->description);
+ free(bitmap);
+ return ENOMEM;
+ }
+
+ memset(bitmap->bitmap, 0, size);
+ *ret = bitmap;
return 0;
}
-errcode_t ext2fs_read_bitmaps(ext2_filsys fs)
+errcode_t ext2fs_allocate_block_bitmap(ext2_filsys fs,
+ const char *descr,
+ ext2fs_block_bitmap *ret)
{
- errcode_t retval;
+ ext2fs_block_bitmap bitmap;
+ int size;
+
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
fs->write_bitmaps = ext2fs_write_bitmaps;
- if (!fs->inode_map) {
- retval = ext2fs_read_inode_bitmap(fs);
- if (retval)
- return retval;
+ bitmap = malloc(sizeof(struct ext2fs_struct_inode_bitmap));
+ if (!bitmap)
+ return ENOMEM;
+
+ bitmap->magic = EXT2_ET_MAGIC_BLOCK_BITMAP;
+ bitmap->fs = fs;
+ bitmap->start = fs->super->s_first_data_block;
+ bitmap->end = fs->super->s_blocks_count-1;
+ bitmap->real_end = (EXT2_BLOCKS_PER_GROUP(fs->super)
+ * fs->group_desc_count)-1 + bitmap->start;
+ if (descr) {
+ bitmap->description = malloc(strlen(descr)+1);
+ if (!bitmap->description) {
+ free(bitmap);
+ return ENOMEM;
+ }
+ strcpy(bitmap->description, descr);
+ } else
+ bitmap->description = 0;
+
+ size = ((bitmap->real_end - bitmap->start) / 8) + 1;
+ bitmap->bitmap = malloc(size);
+ if (!bitmap->bitmap) {
+ free(bitmap->description);
+ free(bitmap);
+ return ENOMEM;
}
- if (!fs->block_map) {
- retval = ext2fs_read_block_bitmap(fs);
- if (retval)
- return retval;
- }
+
+ memset(bitmap->bitmap, 0, size);
+ *ret = bitmap;
return 0;
}
-errcode_t ext2fs_write_bitmaps(ext2_filsys fs)
+errcode_t ext2fs_fudge_inode_bitmap_end(ext2fs_inode_bitmap bitmap,
+ ino_t end, ino_t *oend)
{
- errcode_t retval;
-
- if (fs->block_map && ext2fs_test_bb_dirty(fs)) {
- retval = ext2fs_write_block_bitmap(fs);
- if (retval)
- return retval;
- }
- if (fs->inode_map && ext2fs_test_ib_dirty(fs)) {
- retval = ext2fs_write_inode_bitmap(fs);
- if (retval)
- return retval;
- }
+ EXT2_CHECK_MAGIC(bitmap, EXT2_ET_MAGIC_INODE_BITMAP);
+
+ if (end > bitmap->real_end)
+ return EXT2_ET_FUDGE_INODE_BITMAP_END;
+ if (oend)
+ *oend = bitmap->end;
+ bitmap->end = end;
return 0;
-}
+}
+errcode_t ext2fs_fudge_block_bitmap_end(ext2fs_block_bitmap bitmap,
+ blk_t end, blk_t *oend)
+{
+ EXT2_CHECK_MAGIC(bitmap, EXT2_ET_MAGIC_BLOCK_BITMAP);
+
+ if (end > bitmap->real_end)
+ return EXT2_ET_FUDGE_BLOCK_BITMAP_END;
+ if (oend)
+ *oend = bitmap->end;
+ bitmap->end = end;
+ return 0;
+}
+void ext2fs_clear_inode_bitmap(ext2fs_inode_bitmap bitmap)
+{
+ if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_INODE_BITMAP))
+ return;
+ memset(bitmap->bitmap, 0,
+ ((bitmap->real_end - bitmap->start) / 8) + 1);
+}
+void ext2fs_clear_block_bitmap(ext2fs_block_bitmap bitmap)
+{
+ if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_BLOCK_BITMAP))
+ return;
+
+ memset(bitmap->bitmap, 0,
+ ((bitmap->real_end - bitmap->start) / 8) + 1);
+}
+
+void ext2fs_free_inode_bitmap(ext2fs_inode_bitmap bitmap)
+{
+ if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_INODE_BITMAP))
+ return;
+
+ bitmap->magic = 0;
+ if (bitmap->description) {
+ free(bitmap->description);
+ bitmap->description = 0;
+ }
+ if (bitmap->bitmap) {
+ free(bitmap->bitmap);
+ bitmap->bitmap = 0;
+ }
+ free(bitmap);
+}
+
+void ext2fs_free_block_bitmap(ext2fs_block_bitmap bitmap)
+{
+ if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_BLOCK_BITMAP))
+ return;
+
+ bitmap->magic = 0;
+ if (bitmap->description) {
+ free(bitmap->description);
+ bitmap->description = 0;
+ }
+ if (bitmap->bitmap) {
+ free(bitmap->bitmap);
+ bitmap->bitmap = 0;
+ }
+ free(bitmap);
+}
diff --git a/lib/ext2fs/bitops.c b/lib/ext2fs/bitops.c
index a53d8ee..c037199 100644
--- a/lib/ext2fs/bitops.c
+++ b/lib/ext2fs/bitops.c
@@ -10,12 +10,12 @@
#include <stdio.h>
#include <sys/types.h>
-#include <linux/fs.h>
+
#include <linux/ext2_fs.h>
#include "ext2fs.h"
-#if (!defined(__i386__) && !defined(__i486__) && !defined(__i586__))
+#ifndef _EXT2_HAVE_ASM_BITOPS_
/*
* For the benefit of those who are trying to port Linux to another
@@ -69,27 +69,14 @@
mask = 1 << (nr & 0x1f);
return ((mask & *ADDR) != 0);
}
-#endif /* !i386 */
+#endif /* !_EXT2_HAVE_ASM_BITOPS_ */
-/*
- * These are routines print warning messages; they are called by
- * inline routines.
- */
-const char *ext2fs_block_string = "block";
-const char *ext2fs_inode_string = "inode";
-const char *ext2fs_mark_string = "mark";
-const char *ext2fs_unmark_string = "unmark";
-const char *ext2fs_test_string = "test";
-
-void ext2fs_warn_bitmap(ext2_filsys fs, const char *op, const char *type,
- int arg)
+void ext2fs_warn_bitmap(errcode_t errcode, unsigned long arg,
+ const char *description)
{
- char func[80];
-
- sprintf(func, "ext2fs_%s_%s_bitmap", op, type);
- com_err(func, 0, "INTERNAL ERROR: illegal %s #%d for %s",
- type, arg, fs->device_name);
+ if (description)
+ com_err(0, errcode, "#%u for %s", arg, description);
+ else
+ com_err(0, errcode, "#%u", arg);
}
-
-
diff --git a/lib/ext2fs/bitops.h b/lib/ext2fs/bitops.h
index c01cc86..87e7d79 100644
--- a/lib/ext2fs/bitops.h
+++ b/lib/ext2fs/bitops.h
@@ -22,19 +22,18 @@
extern const char *ext2fs_mark_string;
extern const char *ext2fs_unmark_string;
extern const char *ext2fs_test_string;
-extern void ext2fs_warn_bitmap(ext2_filsys fs, const char *op,
- const char *type, int arg);
+extern void ext2fs_warn_bitmap(errcode_t errcode, unsigned long arg,
+ const char *description);
-extern void ext2fs_mark_block_bitmap(ext2_filsys fs, char *bitmap, int block);
-extern void ext2fs_unmark_block_bitmap(ext2_filsys fs, char *bitmap,
- int block);
-extern int ext2fs_test_block_bitmap(ext2_filsys fs, const char *bitmap,
- int block);
-extern void ext2fs_mark_inode_bitmap(ext2_filsys fs, char *bitmap, int inode);
-extern void ext2fs_unmark_inode_bitmap(ext2_filsys fs, char *bitmap,
- int inode);
-extern int ext2fs_test_inode_bitmap(ext2_filsys fs, const char *bitmap,
- int inode);
+extern void ext2fs_mark_block_bitmap(ext2fs_block_bitmap bitmap, blk_t block);
+extern void ext2fs_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
+ blk_t block);
+extern int ext2fs_test_block_bitmap(ext2fs_block_bitmap bitmap, blk_t block);
+
+extern void ext2fs_mark_inode_bitmap(ext2fs_inode_bitmap bitmap, ino_t inode);
+extern void ext2fs_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
+ ino_t inode);
+extern int ext2fs_test_inode_bitmap(ext2fs_inode_bitmap bitmap, ino_t inode);
/*
* The inline routines themselves...
@@ -50,6 +49,9 @@
#endif
#if (defined(__i386__) || defined(__i486__) || defined(__i586__))
+
+#define _EXT2_HAVE_ASM_BITOPS_
+
/*
* These are done by inline assembly for speed reasons.....
*
@@ -99,73 +101,106 @@
#endif /* i386 */
-_INLINE_ void ext2fs_mark_block_bitmap(ext2_filsys fs, char *bitmap,
- int block)
+#ifdef __mc68000__
+
+#define _EXT2_HAVE_ASM_BITOPS_
+
+_INLINE_ int set_bit(int nr,void * addr)
{
- if ((block < fs->super->s_first_data_block) ||
- (block >= fs->super->s_blocks_count)) {
- ext2fs_warn_bitmap(fs, ext2fs_mark_string,
- ext2fs_block_string, block);
- return;
- }
- set_bit(block - fs->super->s_first_data_block, bitmap);
+ char retval;
+
+ __asm__ __volatile__ ("bfset %2@{%1:#1}; sne %0"
+ : "=d" (retval) : "d" (nr), "a" (addr));
+
+ return retval;
}
-_INLINE_ void ext2fs_unmark_block_bitmap(ext2_filsys fs, char *bitmap,
- int block)
+_INLINE_ int clear_bit(int nr, void * addr)
{
- if ((block < fs->super->s_first_data_block) ||
- (block >= fs->super->s_blocks_count)) {
- ext2fs_warn_bitmap(fs, ext2fs_unmark_string,
- ext2fs_block_string, block);
- return;
- }
- clear_bit(block - fs->super->s_first_data_block, bitmap);
+ char retval;
+
+ __asm__ __volatile__ ("bfclr %2@{%1:#1}; sne %0"
+ : "=d" (retval) : "d" (nr), "a" (addr));
+
+ return retval;
}
-_INLINE_ int ext2fs_test_block_bitmap(ext2_filsys fs, const char *bitmap,
- int block)
+_INLINE_ int test_bit(int nr, const void * addr)
{
- if ((block < fs->super->s_first_data_block) ||
- (block >= fs->super->s_blocks_count)) {
- ext2fs_warn_bitmap(fs, ext2fs_test_string,
- ext2fs_block_string, block);
+ char retval;
+
+ __asm__ __volatile__ ("bftst %2@{%1:#1}; sne %0"
+ : "=d" (retval) : "d" (nr), "a" (addr));
+
+ return retval;
+}
+
+#endif /* __mc68000__ */
+
+_INLINE_ void ext2fs_mark_block_bitmap(ext2fs_block_bitmap bitmap,
+ blk_t block)
+{
+ if ((block < bitmap->start) || (block > bitmap->end)) {
+ ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block,
+ bitmap->description);
+ return;
+ }
+ set_bit(block - bitmap->start, bitmap->bitmap);
+}
+
+_INLINE_ void ext2fs_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
+ blk_t block)
+{
+ if ((block < bitmap->start) || (block > bitmap->end)) {
+ ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK,
+ block, bitmap->description);
+ return;
+ }
+ clear_bit(block - bitmap->start, bitmap->bitmap);
+}
+
+_INLINE_ int ext2fs_test_block_bitmap(ext2fs_block_bitmap bitmap,
+ blk_t block)
+{
+ if ((block < bitmap->start) || (block > bitmap->end)) {
+ ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST,
+ block, bitmap->description);
return 0;
}
- return test_bit(block - fs->super->s_first_data_block, bitmap);
+ return test_bit(block - bitmap->start, bitmap->bitmap);
}
-_INLINE_ void ext2fs_mark_inode_bitmap(ext2_filsys fs, char *bitmap,
- int inode)
+_INLINE_ void ext2fs_mark_inode_bitmap(ext2fs_inode_bitmap bitmap,
+ ino_t inode)
{
- if ((inode < 1) || (inode > fs->super->s_inodes_count)) {
- ext2fs_warn_bitmap(fs, ext2fs_mark_string,
- ext2fs_inode_string, inode);
+ if ((inode < bitmap->start) || (inode > bitmap->end)) {
+ ext2fs_warn_bitmap(EXT2_ET_BAD_INODE_MARK,
+ inode, bitmap->description);
return;
}
- set_bit(inode - 1, bitmap);
+ set_bit(inode - bitmap->start, bitmap->bitmap);
}
-_INLINE_ void ext2fs_unmark_inode_bitmap(ext2_filsys fs, char *bitmap,
- int inode)
+_INLINE_ void ext2fs_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
+ ino_t inode)
{
- if ((inode < 1) || (inode > fs->super->s_inodes_count)) {
- ext2fs_warn_bitmap(fs, ext2fs_unmark_string,
- ext2fs_inode_string, inode);
+ if ((inode < bitmap->start) || (inode > bitmap->end)) {
+ ext2fs_warn_bitmap(EXT2_ET_BAD_INODE_UNMARK,
+ inode, bitmap->description);
return;
}
- clear_bit(inode - 1, bitmap);
+ clear_bit(inode - bitmap->start, bitmap->bitmap);
}
-_INLINE_ int ext2fs_test_inode_bitmap(ext2_filsys fs, const char *bitmap,
- int inode)
+_INLINE_ int ext2fs_test_inode_bitmap(ext2fs_inode_bitmap bitmap,
+ ino_t inode)
{
- if ((inode < 1) || (inode > fs->super->s_inodes_count)) {
- ext2fs_warn_bitmap(fs, ext2fs_test_string,
- ext2fs_inode_string, inode);
+ if ((inode < bitmap->start) || (inode > bitmap->end)) {
+ ext2fs_warn_bitmap(EXT2_ET_BAD_INODE_TEST,
+ inode, bitmap->description);
return 0;
}
- return test_bit(inode - 1, bitmap);
+ return test_bit(inode - bitmap->start, bitmap->bitmap);
}
#undef _INLINE_
diff --git a/lib/ext2fs/block.c b/lib/ext2fs/block.c
index d2c87ce..53c193c 100644
--- a/lib/ext2fs/block.c
+++ b/lib/ext2fs/block.c
@@ -9,7 +9,7 @@
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
-#include <linux/fs.h>
+
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -40,6 +40,12 @@
ret = (*ctx->func)(ctx->fs, ind_block, -1, ctx->private);
if (!*ind_block || (ret & BLOCK_ABORT))
return ret;
+ if (*ind_block >= ctx->fs->super->s_blocks_count ||
+ *ind_block < ctx->fs->super->s_first_data_block) {
+ ctx->errcode = EXT2_ET_BAD_IND_BLOCK;
+ ret |= BLOCK_ERROR;
+ return ret;
+ }
ctx->errcode = io_channel_read_blk(ctx->fs->io, *ind_block,
1, ctx->ind_buf);
if (ctx->errcode) {
@@ -80,6 +86,12 @@
ret = (*ctx->func)(ctx->fs, dind_block, -2, ctx->private);
if (!*dind_block || (ret & BLOCK_ABORT))
return ret;
+ if (*dind_block >= ctx->fs->super->s_blocks_count ||
+ *dind_block < ctx->fs->super->s_first_data_block) {
+ ctx->errcode = EXT2_ET_BAD_DIND_BLOCK;
+ ret |= BLOCK_ERROR;
+ return ret;
+ }
ctx->errcode = io_channel_read_blk(ctx->fs->io, *dind_block,
1, ctx->dind_buf);
if (ctx->errcode) {
@@ -119,6 +131,12 @@
ret = (*ctx->func)(ctx->fs, tind_block, -3, ctx->private);
if (!*tind_block || (ret & BLOCK_ABORT))
return ret;
+ if (*tind_block >= ctx->fs->super->s_blocks_count ||
+ *tind_block < ctx->fs->super->s_first_data_block) {
+ ctx->errcode = EXT2_ET_BAD_TIND_BLOCK;
+ ret |= BLOCK_ERROR;
+ return ret;
+ }
ctx->errcode = io_channel_read_blk(ctx->fs->io, *tind_block,
1, ctx->tind_buf);
if (ctx->errcode) {
@@ -165,6 +183,8 @@
struct ext2_inode inode;
errcode_t retval;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
ret = ext2fs_get_blocks(fs, ino, blocks);
if (ret)
return ret;
diff --git a/lib/ext2fs/check_desc.c b/lib/ext2fs/check_desc.c
new file mode 100644
index 0000000..a8d5d95
--- /dev/null
+++ b/lib/ext2fs/check_desc.c
@@ -0,0 +1,63 @@
+/*
+ * check_desc.c --- Check the group descriptors of an ext2 filesystem
+ *
+ * Copyright (C) 1993, 1994 Theodore Ts'o. This file may be redistributed
+ * under the terms of the GNU Public License.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <time.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <linux/ext2_fs.h>
+
+#include "ext2fs.h"
+
+/*
+ * This routine sanity checks the group descriptors
+ */
+errcode_t ext2fs_check_desc(ext2_filsys fs)
+{
+ int i;
+ int block = fs->super->s_first_data_block;
+ int next, inode_blocks_per_group;
+
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
+ inode_blocks_per_group = fs->super->s_inodes_per_group /
+ EXT2_INODES_PER_BLOCK (fs->super);
+
+ for (i = 0; i < fs->group_desc_count; i++) {
+ next = block + fs->super->s_blocks_per_group;
+ /*
+ * Check to make sure block bitmap for group is
+ * located within the group.
+ */
+ if (fs->group_desc[i].bg_block_bitmap < block ||
+ fs->group_desc[i].bg_block_bitmap >= next)
+ return EXT2_ET_GDESC_BAD_BLOCK_MAP;
+ /*
+ * Check to make sure inode bitmap for group is
+ * located within the group
+ */
+ if (fs->group_desc[i].bg_inode_bitmap < block ||
+ fs->group_desc[i].bg_inode_bitmap >= next)
+ return EXT2_ET_GDESC_BAD_INODE_MAP;
+ /*
+ * Check to make sure inode table for group is located
+ * within the group
+ */
+ if (fs->group_desc[i].bg_inode_table < block ||
+ fs->group_desc[i].bg_inode_table+inode_blocks_per_group >=
+ next)
+ return EXT2_ET_GDESC_BAD_INODE_TABLE;
+
+ block = next;
+ }
+ return 0;
+}
diff --git a/lib/ext2fs/closefs.c b/lib/ext2fs/closefs.c
index d25f312..41a5052 100644
--- a/lib/ext2fs/closefs.c
+++ b/lib/ext2fs/closefs.c
@@ -10,7 +10,6 @@
#include <stdlib.h>
#include <time.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -21,7 +20,10 @@
int group_block;
errcode_t retval;
char *group_ptr;
+ unsigned long fs_state;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
/*
* Write out master superblock. This has to be done
* separately, since it is located at a fixed location
@@ -35,6 +37,13 @@
io_channel_set_blksize(fs->io, fs->blocksize);
/*
+ * Save the state of the FS and set it to non valid for the
+ * backup superblocks
+ */
+ fs_state = fs->super->s_state;
+ fs->super->s_state &= ~EXT2_VALID_FS;
+
+ /*
* Write out the master group descriptors, and the backup
* superblocks and group descriptors.
*/
@@ -44,21 +53,27 @@
retval = io_channel_write_blk(fs->io, group_block,
-SUPERBLOCK_SIZE,
fs->super);
- if (retval)
+ if (retval) {
+ fs->super->s_state = fs_state;
return retval;
+ }
}
group_ptr = (char *) fs->group_desc;
for (j=0; j < fs->desc_blocks; j++) {
retval = io_channel_write_blk(fs->io,
group_block+1+j, 1,
group_ptr);
- if (retval)
+ if (retval) {
+ fs->super->s_state = fs_state;
return retval;
+ }
group_ptr += fs->blocksize;
}
group_block += EXT2_BLOCKS_PER_GROUP(fs->super);
}
+ fs->super->s_state = fs_state;
+
/*
* If the write_bitmaps() function is present, call it to
* flush the bitmaps. This is done this way so that a simple
@@ -78,6 +93,8 @@
{
errcode_t retval;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (fs->flags & EXT2_FLAG_DIRTY) {
retval = ext2fs_flush(fs);
if (retval)
diff --git a/lib/ext2fs/expanddir.c b/lib/ext2fs/expanddir.c
index 1bc3f49..5af9853 100644
--- a/lib/ext2fs/expanddir.c
+++ b/lib/ext2fs/expanddir.c
@@ -9,7 +9,7 @@
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
-#include <linux/fs.h>
+
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -62,7 +62,7 @@
}
free(block);
*blocknr = new_blk;
- ext2fs_mark_block_bitmap(fs, fs->block_map, new_blk);
+ ext2fs_mark_block_bitmap(fs->block_map, new_blk);
ext2fs_mark_bb_dirty(fs);
group = ext2fs_group_of_blk(fs, new_blk);
fs->group_desc[group].bg_free_blocks_count--;
@@ -80,6 +80,8 @@
struct expand_dir_struct es;
struct ext2_inode inode;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (!(fs->flags & EXT2_FLAG_RW))
return EXT2_ET_RO_FILSYS;
diff --git a/lib/ext2fs/ext2_err.c b/lib/ext2fs/ext2_err.c
index 86bfcd3..f975949 100644
--- a/lib/ext2fs/ext2_err.c
+++ b/lib/ext2fs/ext2_err.c
@@ -10,8 +10,27 @@
#endif
static const char * const text[] = {
- "EXT2FS Library version 0.0",
+ "EXT2FS Library version 0.5b",
+ "Wrong magic number for ext2_filsys structure",
+ "Wrong magic number for badblocks_list structure",
+ "Wrong magic number for badblocks_iterate structure",
+ "Wrong magic number for inode_scan structure",
+ "Wrong magic number for io_channel structure",
+ "Wrong magic number for unix io_channel structure",
+ "Wrong magic number for io_manager structure",
+ "Wrong magic number for block_bitmap structure",
+ "Wrong magic number for inode_bitmap structure",
+ "Wrong magic number --- RESERVED_1",
+ "Wrong magic number --- RESERVED_2",
+ "Wrong magic number --- RESERVED_3",
+ "Wrong magic number --- RESERVED_4",
+ "Wrong magic number --- RESERVED_5",
+ "Wrong magic number --- RESERVED_6",
+ "Wrong magic number --- RESERVED_7",
+ "Wrong magic number --- RESERVED_8",
+ "Wrong magic number --- RESERVED_9",
"Bad magic number in super-block",
+ "Filesystem revision too high",
"Can't seek to superblock",
"Can't read superblock",
"Can't write superblock",
@@ -39,6 +58,17 @@
"Illegal block number",
"Internal error in ext2fs_expand_dir",
"Not enough space to build proposed filesystem",
+ "Illegal block number passed to ext2fs_mark_block_bitmap",
+ "Illegal block number passed to ext2fs_unmark_block_bitmap",
+ "Illegal block number passed to ext2fs_test_block_bitmap",
+ "Illegal inode number passed to ext2fs_mark_inode_bitmap",
+ "Illegal inode number passed to ext2fs_unmark_inode_bitmap",
+ "Illegal inode number passed to ext2fs_test_inode_bitmap",
+ "Attempt to fudge end of block bitmap past the real end",
+ "Attempt to fudge end of inode bitmap past the real end",
+ "Illegal indirect block found" ,
+ "Illegal doubly indirect block found" ,
+ "Illegal triply indirect block found" ,
0
};
@@ -53,7 +83,7 @@
};
extern struct et_list *_et_list;
-static const struct error_table et = { text, 2133571328L, 29 };
+static const struct error_table et = { text, 2133571328L, 59 };
static struct et_list link = { 0, 0 };
diff --git a/lib/ext2fs/ext2_err.et b/lib/ext2fs/ext2_err.et
index 69eacda..f439f5a 100644
--- a/lib/ext2fs/ext2_err.et
+++ b/lib/ext2fs/ext2_err.et
@@ -1,15 +1,72 @@
#
-# Copyright (C) 1993 Theodore Ts'o. This file may be redistributed
+# Copyright (C) 1993, 1994 Theodore Ts'o. This file may be redistributed
# under the terms of the GNU Public License.
#
error_table ext2
ec EXT2_ET_BASE,
- "EXT2FS Library version 0.0"
+ "EXT2FS Library version 0.5b"
+
+ec EXT2_ET_MAGIC_EXT2FS_FILSYS,
+ "Wrong magic number for ext2_filsys structure"
+
+ec EXT2_ET_MAGIC_BADBLOCKS_LIST,
+ "Wrong magic number for badblocks_list structure"
+
+ec EXT2_ET_MAGIC_BADBLOCKS_ITERATE,
+ "Wrong magic number for badblocks_iterate structure"
+
+ec EXT2_ET_MAGIC_INODE_SCAN,
+ "Wrong magic number for inode_scan structure"
+
+ec EXT2_ET_MAGIC_IO_CHANNEL,
+ "Wrong magic number for io_channel structure"
+
+ec EXT2_ET_MAGIC_UNIX_IO_CHANNEL,
+ "Wrong magic number for unix io_channel structure"
+
+ec EXT2_ET_MAGIC_IO_MANAGER,
+ "Wrong magic number for io_manager structure"
+
+ec EXT2_ET_MAGIC_BLOCK_BITMAP,
+ "Wrong magic number for block_bitmap structure"
+
+ec EXT2_ET_MAGIC_INODE_BITMAP,
+ "Wrong magic number for inode_bitmap structure"
+
+ec EXT2_ET_MAGIC_RESERVED_1,
+ "Wrong magic number --- RESERVED_1"
+
+ec EXT2_ET_MAGIC_RESERVED_2,
+ "Wrong magic number --- RESERVED_2"
+
+ec EXT2_ET_MAGIC_RESERVED_3,
+ "Wrong magic number --- RESERVED_3"
+
+ec EXT2_ET_MAGIC_RESERVED_4,
+ "Wrong magic number --- RESERVED_4"
+
+ec EXT2_ET_MAGIC_RESERVED_5,
+ "Wrong magic number --- RESERVED_5"
+
+ec EXT2_ET_MAGIC_RESERVED_6,
+ "Wrong magic number --- RESERVED_6"
+
+ec EXT2_ET_MAGIC_RESERVED_7,
+ "Wrong magic number --- RESERVED_7"
+
+ec EXT2_ET_MAGIC_RESERVED_8,
+ "Wrong magic number --- RESERVED_8"
+
+ec EXT2_ET_MAGIC_RESERVED_9,
+ "Wrong magic number --- RESERVED_9"
ec EXT2_ET_BAD_MAGIC,
"Bad magic number in super-block"
+ec EXT2_ET_REV_TOO_HIGH,
+ "Filesystem revision too high"
+
ec EXT2_ET_SB_LSEEK,
"Can't seek to superblock"
@@ -91,5 +148,38 @@
ec EXT2_ET_TOOSMALL,
"Not enough space to build proposed filesystem"
+ec EXT2_ET_BAD_BLOCK_MARK,
+ "Illegal block number passed to ext2fs_mark_block_bitmap"
+
+ec EXT2_ET_BAD_BLOCK_UNMARK,
+ "Illegal block number passed to ext2fs_unmark_block_bitmap"
+
+ec EXT2_ET_BAD_BLOCK_TEST,
+ "Illegal block number passed to ext2fs_test_block_bitmap"
+
+ec EXT2_ET_BAD_INODE_MARK,
+ "Illegal inode number passed to ext2fs_mark_inode_bitmap"
+
+ec EXT2_ET_BAD_INODE_UNMARK,
+ "Illegal inode number passed to ext2fs_unmark_inode_bitmap"
+
+ec EXT2_ET_BAD_INODE_TEST,
+ "Illegal inode number passed to ext2fs_test_inode_bitmap"
+
+ec EXT2_ET_FUDGE_BLOCK_BITMAP_END,
+ "Attempt to fudge end of block bitmap past the real end"
+
+ec EXT2_ET_FUDGE_INODE_BITMAP_END,
+ "Attempt to fudge end of inode bitmap past the real end"
+
+ec EXT2_ET_BAD_IND_BLOCK,
+ "Illegal indirect block found"
+
+ec EXT2_ET_BAD_DIND_BLOCK,
+ "Illegal doubly indirect block found"
+
+ec EXT2_ET_BAD_TIND_BLOCK,
+ "Illegal triply indirect block found"
+
end
diff --git a/lib/ext2fs/ext2_err.h b/lib/ext2fs/ext2_err.h
index 1e72ced..0a93b1a 100644
--- a/lib/ext2fs/ext2_err.h
+++ b/lib/ext2fs/ext2_err.h
@@ -10,34 +10,64 @@
#endif
#define EXT2_ET_BASE (2133571328L)
-#define EXT2_ET_BAD_MAGIC (2133571329L)
-#define EXT2_ET_SB_LSEEK (2133571330L)
-#define EXT2_ET_SB_READ (2133571331L)
-#define EXT2_ET_SB_WRITE (2133571332L)
-#define EXT2_ET_RO_FILSYS (2133571333L)
-#define EXT2_ET_GDESC_READ (2133571334L)
-#define EXT2_ET_GDESC_WRITE (2133571335L)
-#define EXT2_ET_GDESC_BAD_BLOCK_MAP (2133571336L)
-#define EXT2_ET_GDESC_BAD_INODE_MAP (2133571337L)
-#define EXT2_ET_GDESC_BAD_INODE_TABLE (2133571338L)
-#define EXT2_ET_INODE_BITMAP_WRITE (2133571339L)
-#define EXT2_ET_INODE_BITMAP_READ (2133571340L)
-#define EXT2_ET_BLOCK_BITMAP_WRITE (2133571341L)
-#define EXT2_ET_BLOCK_BITMAP_READ (2133571342L)
-#define EXT2_ET_INODE_TABLE_WRITE (2133571343L)
-#define EXT2_ET_INODE_TABLE_READ (2133571344L)
-#define EXT2_ET_NEXT_INODE_READ (2133571345L)
-#define EXT2_ET_UNEXPECTED_BLOCK_SIZE (2133571346L)
-#define EXT2_ET_DIR_CORRUPTED (2133571347L)
-#define EXT2_ET_SHORT_READ (2133571348L)
-#define EXT2_ET_SHORT_WRITE (2133571349L)
-#define EXT2_ET_DIR_NO_SPACE (2133571350L)
-#define EXT2_ET_NO_INODE_BITMAP (2133571351L)
-#define EXT2_ET_NO_BLOCK_BITMAP (2133571352L)
-#define EXT2_ET_BAD_INODE_NUM (2133571353L)
-#define EXT2_ET_BAD_BLOCK_NUM (2133571354L)
-#define EXT2_ET_EXPAND_DIR_ERR (2133571355L)
-#define EXT2_ET_TOOSMALL (2133571356L)
+#define EXT2_ET_MAGIC_EXT2FS_FILSYS (2133571329L)
+#define EXT2_ET_MAGIC_BADBLOCKS_LIST (2133571330L)
+#define EXT2_ET_MAGIC_BADBLOCKS_ITERATE (2133571331L)
+#define EXT2_ET_MAGIC_INODE_SCAN (2133571332L)
+#define EXT2_ET_MAGIC_IO_CHANNEL (2133571333L)
+#define EXT2_ET_MAGIC_UNIX_IO_CHANNEL (2133571334L)
+#define EXT2_ET_MAGIC_IO_MANAGER (2133571335L)
+#define EXT2_ET_MAGIC_BLOCK_BITMAP (2133571336L)
+#define EXT2_ET_MAGIC_INODE_BITMAP (2133571337L)
+#define EXT2_ET_MAGIC_RESERVED_1 (2133571338L)
+#define EXT2_ET_MAGIC_RESERVED_2 (2133571339L)
+#define EXT2_ET_MAGIC_RESERVED_3 (2133571340L)
+#define EXT2_ET_MAGIC_RESERVED_4 (2133571341L)
+#define EXT2_ET_MAGIC_RESERVED_5 (2133571342L)
+#define EXT2_ET_MAGIC_RESERVED_6 (2133571343L)
+#define EXT2_ET_MAGIC_RESERVED_7 (2133571344L)
+#define EXT2_ET_MAGIC_RESERVED_8 (2133571345L)
+#define EXT2_ET_MAGIC_RESERVED_9 (2133571346L)
+#define EXT2_ET_BAD_MAGIC (2133571347L)
+#define EXT2_ET_REV_TOO_HIGH (2133571348L)
+#define EXT2_ET_SB_LSEEK (2133571349L)
+#define EXT2_ET_SB_READ (2133571350L)
+#define EXT2_ET_SB_WRITE (2133571351L)
+#define EXT2_ET_RO_FILSYS (2133571352L)
+#define EXT2_ET_GDESC_READ (2133571353L)
+#define EXT2_ET_GDESC_WRITE (2133571354L)
+#define EXT2_ET_GDESC_BAD_BLOCK_MAP (2133571355L)
+#define EXT2_ET_GDESC_BAD_INODE_MAP (2133571356L)
+#define EXT2_ET_GDESC_BAD_INODE_TABLE (2133571357L)
+#define EXT2_ET_INODE_BITMAP_WRITE (2133571358L)
+#define EXT2_ET_INODE_BITMAP_READ (2133571359L)
+#define EXT2_ET_BLOCK_BITMAP_WRITE (2133571360L)
+#define EXT2_ET_BLOCK_BITMAP_READ (2133571361L)
+#define EXT2_ET_INODE_TABLE_WRITE (2133571362L)
+#define EXT2_ET_INODE_TABLE_READ (2133571363L)
+#define EXT2_ET_NEXT_INODE_READ (2133571364L)
+#define EXT2_ET_UNEXPECTED_BLOCK_SIZE (2133571365L)
+#define EXT2_ET_DIR_CORRUPTED (2133571366L)
+#define EXT2_ET_SHORT_READ (2133571367L)
+#define EXT2_ET_SHORT_WRITE (2133571368L)
+#define EXT2_ET_DIR_NO_SPACE (2133571369L)
+#define EXT2_ET_NO_INODE_BITMAP (2133571370L)
+#define EXT2_ET_NO_BLOCK_BITMAP (2133571371L)
+#define EXT2_ET_BAD_INODE_NUM (2133571372L)
+#define EXT2_ET_BAD_BLOCK_NUM (2133571373L)
+#define EXT2_ET_EXPAND_DIR_ERR (2133571374L)
+#define EXT2_ET_TOOSMALL (2133571375L)
+#define EXT2_ET_BAD_BLOCK_MARK (2133571376L)
+#define EXT2_ET_BAD_BLOCK_UNMARK (2133571377L)
+#define EXT2_ET_BAD_BLOCK_TEST (2133571378L)
+#define EXT2_ET_BAD_INODE_MARK (2133571379L)
+#define EXT2_ET_BAD_INODE_UNMARK (2133571380L)
+#define EXT2_ET_BAD_INODE_TEST (2133571381L)
+#define EXT2_ET_FUDGE_BLOCK_BITMAP_END (2133571382L)
+#define EXT2_ET_FUDGE_INODE_BITMAP_END (2133571383L)
+#define EXT2_ET_BAD_IND_BLOCK (2133571384L)
+#define EXT2_ET_BAD_DIND_BLOCK (2133571385L)
+#define EXT2_ET_BAD_TIND_BLOCK (2133571386L)
extern void initialize_ext2_error_table (NOARGS);
#define ERROR_TABLE_BASE_ext2 (2133571328L)
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,
diff --git a/lib/ext2fs/freefs.c b/lib/ext2fs/freefs.c
index ecd169a..d9d4fe9 100644
--- a/lib/ext2fs/freefs.c
+++ b/lib/ext2fs/freefs.c
@@ -9,14 +9,13 @@
#include <unistd.h>
#include <stdlib.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "ext2fs.h"
void ext2fs_free(ext2_filsys fs)
{
- if (!fs)
+ if (!fs || (fs->magic != EXT2_ET_MAGIC_EXT2FS_FILSYS))
return;
if (fs->io) {
io_channel_close(fs->io);
diff --git a/lib/ext2fs/get_pathname.c b/lib/ext2fs/get_pathname.c
index 591af6d..a5db2e0 100644
--- a/lib/ext2fs/get_pathname.c
+++ b/lib/ext2fs/get_pathname.c
@@ -9,7 +9,7 @@
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
-#include <linux/fs.h>
+
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -92,7 +92,11 @@
return 0;
}
- ret = malloc(strlen(parent_name)+strlen(gp.name)+2);
+ if (gp.name)
+ ret = malloc(strlen(parent_name)+strlen(gp.name)+2);
+ else
+ ret = malloc(strlen(parent_name)+5); /* strlen("???") + 2 */
+
if (!ret) {
retval = ENOMEM;
goto cleanup;
@@ -121,6 +125,8 @@
char *buf;
errcode_t retval;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
buf = malloc(fs->blocksize);
if (!buf)
return ENOMEM;
diff --git a/lib/ext2fs/initialize.c b/lib/ext2fs/initialize.c
index e7e07c4..22e7eaf 100644
--- a/lib/ext2fs/initialize.c
+++ b/lib/ext2fs/initialize.c
@@ -12,7 +12,6 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -29,6 +28,8 @@
int overhead = 0;
blk_t group_block;
int i, j;
+ int numblocks;
+ char *buf;
if (!param || !param->s_blocks_count)
return EINVAL;
@@ -38,6 +39,7 @@
return ENOMEM;
memset(fs, 0, sizeof(struct struct_ext2_filsys));
+ fs->magic = EXT2_ET_MAGIC_EXT2FS_FILSYS;
fs->flags = flags | EXT2_FLAG_RW;
retval = manager->open(name, IO_FLAG_RW, &fs->io);
if (retval)
@@ -70,6 +72,10 @@
set_field(s_checkinterval, EXT2_DFL_CHECKINTERVAL);
super->s_lastcheck = time(NULL);
+#ifdef EXT2_OS_LINUX
+ super->s_creator_os = EXT2_OS_LINUX;
+#endif
+
fs->blocksize = EXT2_BLOCK_SIZE(super);
fs->fragsize = EXT2_FRAG_SIZE(super);
frags_per_block = fs->blocksize / fs->fragsize;
@@ -78,10 +84,13 @@
super->s_frags_per_group = super->s_blocks_per_group * frags_per_block;
super->s_blocks_count = param->s_blocks_count;
+ super->s_r_blocks_count = param->s_r_blocks_count;
+ if (super->s_r_blocks_count >= param->s_blocks_count) {
+ retval = EINVAL;
+ goto cleanup;
+ }
retry:
- set_field(s_r_blocks_count, super->s_blocks_count/20); /* 5% default */
-
fs->group_desc_count = (super->s_blocks_count -
super->s_first_data_block +
EXT2_BLOCKS_PER_GROUP(super) - 1)
@@ -149,14 +158,24 @@
* count.
*/
- retval = ext2fs_allocate_block_bitmap(fs, &fs->block_map);
+ buf = malloc(strlen(fs->device_name) + 80);
+ if (!buf) {
+ retval = ENOMEM;
+ goto cleanup;
+ }
+
+ sprintf(buf, "block bitmap for %s", fs->device_name);
+ retval = ext2fs_allocate_block_bitmap(fs, buf, &fs->block_map);
if (retval)
goto cleanup;
- retval = ext2fs_allocate_inode_bitmap(fs, &fs->inode_map);
+ sprintf(buf, "inode bitmap for %s", fs->device_name);
+ retval = ext2fs_allocate_inode_bitmap(fs, 0, &fs->inode_map);
if (retval)
goto cleanup;
+ free(buf);
+
fs->group_desc = malloc(fs->desc_blocks * fs->blocksize);
if (!fs->group_desc) {
retval = ENOMEM;
@@ -164,11 +183,34 @@
}
memset(fs->group_desc, 0, fs->desc_blocks * fs->blocksize);
+ /*
+ * Reserve the superblock and group descriptors for each
+ * group, and fill in the correct group statistics for group.
+ * Note that although the block bitmap, inode bitmap, and
+ * inode table have not been allocated (and in fact won't be
+ * by this routine), they are accounted for nevertheless.
+ */
group_block = super->s_first_data_block;
for (i = 0; i < fs->group_desc_count; i++) {
for (j=0; j < fs->desc_blocks+1; j++)
- ext2fs_mark_block_bitmap(fs, fs->block_map,
+ ext2fs_mark_block_bitmap(fs->block_map,
group_block + j);
+
+ if (i == fs->group_desc_count-1) {
+ numblocks = (fs->super->s_blocks_count -
+ fs->super->s_first_data_block) %
+ fs->super->s_blocks_per_group;
+ if (!numblocks)
+ numblocks = fs->super->s_blocks_per_group;
+ } else
+ numblocks = fs->super->s_blocks_per_group;
+ numblocks -= 3 + fs->desc_blocks + fs->inode_blocks_per_group;
+
+ fs->group_desc[i].bg_free_blocks_count = numblocks;
+ fs->group_desc[i].bg_free_inodes_count =
+ fs->super->s_inodes_per_group;
+ fs->group_desc[i].bg_used_dirs_count = 0;
+
group_block += super->s_blocks_per_group;
}
diff --git a/lib/ext2fs/inline.c b/lib/ext2fs/inline.c
index 6ec7387..599fceb 100644
--- a/lib/ext2fs/inline.c
+++ b/lib/ext2fs/inline.c
@@ -17,7 +17,6 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#define INCLUDE_INLINE_FUNCS
diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c
index ba3cee8..6a9c178 100644
--- a/lib/ext2fs/inode.c
+++ b/lib/ext2fs/inode.c
@@ -12,7 +12,6 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -22,16 +21,21 @@
{
ext2_inode_scan scan;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
scan = (ext2_inode_scan) malloc(sizeof(struct ext2_struct_inode_scan));
if (!scan)
return ENOMEM;
memset(scan, 0, sizeof(struct ext2_struct_inode_scan));
+ scan->magic = EXT2_ET_MAGIC_INODE_SCAN;
scan->fs = fs;
scan->current_group = -1;
scan->inode_buffer_blocks = buffer_blocks ? buffer_blocks : 8;
scan->groups_left = fs->group_desc_count;
scan->inode_buffer = malloc(scan->inode_buffer_blocks * fs->blocksize);
+ scan->done_group = 0;
+ scan->done_group_data = 0;
if (!scan->inode_buffer) {
free(scan);
return ENOMEM;
@@ -42,33 +46,63 @@
void ext2fs_close_inode_scan(ext2_inode_scan scan)
{
+ if (!scan || (scan->magic != EXT2_ET_MAGIC_INODE_SCAN))
+ return;
+
free(scan->inode_buffer);
scan->inode_buffer = NULL;
free(scan);
return;
}
+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)
+{
+ if (!scan || (scan->magic != EXT2_ET_MAGIC_INODE_SCAN))
+ return;
+
+ scan->done_group = done_group;
+ scan->done_group_data = done_group_data;
+}
+
errcode_t ext2fs_get_next_inode(ext2_inode_scan scan, ino_t *ino,
struct ext2_inode *inode)
{
errcode_t retval;
int num_blocks;
+ EXT2_CHECK_MAGIC(scan, EXT2_ET_MAGIC_INODE_SCAN);
+
if (!scan->inode_buffer)
return EINVAL;
if (scan->inodes_left <= 0) {
if (scan->blocks_left <= 0) {
- if (scan->groups_left <= 0) {
- *ino = 0;
- return 0;
+ if (scan->done_group) {
+ retval = (scan->done_group)
+ (scan->fs, scan,
+ scan->current_group,
+ scan->done_group_data);
+ if (retval)
+ return retval;
}
- scan->current_group++;
- scan->groups_left--;
+ do {
+ if (scan->groups_left <= 0) {
+ *ino = 0;
+ return 0;
+ }
+ scan->current_group++;
+ scan->groups_left--;
- scan->current_block = scan->fs->group_desc[scan->current_group].bg_inode_table;
- scan->blocks_left = (EXT2_INODES_PER_GROUP(scan->fs->super) /
- EXT2_INODES_PER_BLOCK(scan->fs->super));
+ scan->current_block =
+ scan->fs->group_desc[scan->current_group].bg_inode_table;
+ scan->blocks_left = (EXT2_INODES_PER_GROUP(scan->fs->super) /
+ EXT2_INODES_PER_BLOCK(scan->fs->super));
+ } while (scan->current_block == 0);
} else {
scan->current_block += scan->inode_buffer_blocks;
}
@@ -109,6 +143,8 @@
errcode_t retval;
int i;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (ino > fs->super->s_inodes_count)
return EXT2_ET_BAD_INODE_NUM;
if (inode_buffer_size != fs->blocksize) {
@@ -149,6 +185,8 @@
errcode_t retval;
int i;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (!(fs->flags & EXT2_FLAG_RW))
return EXT2_ET_RO_FILSYS;
@@ -194,6 +232,8 @@
int i;
errcode_t retval;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (ino > fs->super->s_inodes_count)
return EXT2_ET_BAD_INODE_NUM;
@@ -214,6 +254,8 @@
struct ext2_inode inode;
errcode_t retval;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (ino > fs->super->s_inodes_count)
return EXT2_ET_BAD_INODE_NUM;
diff --git a/lib/ext2fs/io.h b/lib/ext2fs/io.h
index fd054f8..7a44a11 100644
--- a/lib/ext2fs/io.h
+++ b/lib/ext2fs/io.h
@@ -5,10 +5,23 @@
* under the terms of the GNU Public License.
*/
+/*
+ * ext2_loff_t is defined here since unix_io.c needs it.
+ */
+#if defined(__GNUC__) || defined(HAS_LONG_LONG)
+typedef long long ext2_loff_t;
+#else
+typedef long ext2_loff_t;
+#endif
+
+/* llseek.c */
+ext2_loff_t ext2_llseek (unsigned int, ext2_loff_t, unsigned int);
+
typedef struct struct_io_manager *io_manager;
typedef struct struct_io_channel *io_channel;
struct struct_io_channel {
+ int magic;
io_manager manager;
char *name;
int block_size;
@@ -26,10 +39,12 @@
size_t size,
int actual_bytes_written,
errcode_t error);
+ int reserved[16];
void *private_data;
};
struct struct_io_manager {
+ int magic;
const char *name;
errcode_t (*open)(const char *name, int flags, io_channel *channel);
errcode_t (*close)(io_channel channel);
@@ -39,6 +54,7 @@
errcode_t (*write_blk)(io_channel channel, unsigned long block,
int count, const void *data);
errcode_t (*flush)(io_channel channel);
+ int reserved[16];
};
#define IO_FLAG_RW 1
diff --git a/lib/ext2fs/jump/jump.funcs b/lib/ext2fs/jump/jump.funcs
new file mode 100644
index 0000000..a8f5674
--- /dev/null
+++ b/lib/ext2fs/jump/jump.funcs
@@ -0,0 +1,75 @@
+00000000 T _ext2fs_open libext2fs openfs
+00000000 T _ext2fs_check_desc libext2fs openfs
+00000000 T _ext2fs_free libext2fs freefs
+00000000 T _ext2fs_flush libext2fs closefs
+00000000 T _ext2fs_close libext2fs closefs
+00000000 T _ext2fs_allocate_inode_bitmap libext2fs bitmaps
+00000000 T _ext2fs_allocate_block_bitmap libext2fs bitmaps
+00000000 T _ext2fs_free_inode_bitmap libext2fs bitmaps
+00000000 T _ext2fs_free_block_bitmap libext2fs bitmaps
+00000000 T _ext2fs_fudge_inode_bitmap_end libext2fs bitmaps
+00000000 T _ext2fs_fudge_block_bitmap_end libext2fs bitmaps
+00000000 T _ext2fs_clear_inode_bitmap libext2fs bitmaps
+00000000 T _ext2fs_clear_block_bitmap libext2fs bitmaps
+00000000 T _ext2fs_write_inode_bitmap libext2fs rw_bitmaps
+00000000 T _ext2fs_write_block_bitmap libext2fs rw_bitmaps
+00000000 T _ext2fs_read_inode_bitmap libext2fs rw_bitmaps
+00000000 T _ext2fs_read_block_bitmap libext2fs rw_bitmaps
+00000000 T _ext2fs_read_bitmaps libext2fs rw_bitmaps
+00000000 T _ext2fs_write_bitmaps libext2fs rw_bitmaps
+00000000 T _ext2fs_open_inode_scan libext2fs inode
+00000000 T _ext2fs_close_inode_scan libext2fs inode
+00000000 T _ext2fs_get_next_inode libext2fs inode
+00000000 T _ext2fs_read_inode libext2fs inode
+00000000 T _ext2fs_write_inode libext2fs inode
+00000000 T _ext2fs_get_blocks libext2fs inode
+00000000 T _ext2fs_check_directory libext2fs inode
+00000000 T _ext2fs_block_iterate libext2fs block
+00000000 T _ext2fs_dir_iterate libext2fs namei
+00000000 T _ext2fs_lookup libext2fs namei
+00000000 T _ext2fs_namei libext2fs namei
+00000000 T _ext2fs_new_dir_block libext2fs newdir
+00000000 T _ext2fs_mkdir libext2fs mkdir
+00000000 T _ext2fs_get_pathname libext2fs get_pathname
+00000000 T _ext2fs_warn_bitmap libext2fs bitops
+00000000 T _ext2fs_link libext2fs link
+00000000 T _ext2fs_unlink libext2fs link
+00000000 T _ext2fs_new_inode libext2fs alloc
+00000000 T _ext2fs_new_block libext2fs alloc
+00000000 T _ext2fs_get_free_blocks libext2fs alloc
+00000000 T _ext2fs_expand_dir libext2fs expanddir
+00000000 T _set_bit libext2fs inline
+00000000 T _clear_bit libext2fs inline
+00000000 T _test_bit libext2fs inline
+00000000 T _ext2fs_mark_block_bitmap libext2fs inline
+00000000 T _ext2fs_unmark_block_bitmap libext2fs inline
+00000000 T _ext2fs_test_block_bitmap libext2fs inline
+00000000 T _ext2fs_mark_inode_bitmap libext2fs inline
+00000000 T _ext2fs_unmark_inode_bitmap libext2fs inline
+00000000 T _ext2fs_test_inode_bitmap libext2fs inline
+00000000 T _ext2fs_mark_super_dirty libext2fs inline
+00000000 T _ext2fs_mark_changed libext2fs inline
+00000000 T _ext2fs_test_changed libext2fs inline
+00000000 T _ext2fs_mark_valid libext2fs inline
+00000000 T _ext2fs_unmark_valid libext2fs inline
+00000000 T _ext2fs_test_valid libext2fs inline
+00000000 T _ext2fs_mark_ib_dirty libext2fs inline
+00000000 T _ext2fs_mark_bb_dirty libext2fs inline
+00000000 T _ext2fs_test_ib_dirty libext2fs inline
+00000000 T _ext2fs_test_bb_dirty libext2fs inline
+00000000 T _ext2fs_group_of_blk libext2fs inline
+00000000 T _ext2fs_group_of_ino libext2fs inline
+00000000 T _ext2fs_initialize libext2fs initialize
+00000000 T _badblocks_list_create libext2fs badblocks
+00000000 T _badblocks_list_free libext2fs badblocks
+00000000 T _badblocks_list_add libext2fs badblocks
+00000000 T _badblocks_list_test libext2fs badblocks
+00000000 T _badblocks_list_iterate_begin libext2fs badblocks
+00000000 T _badblocks_list_iterate libext2fs badblocks
+00000000 T _badblocks_list_iterate_end libext2fs badblocks
+00000000 T _ext2fs_read_bb_inode libext2fs read_bb
+00000000 T _ext2fs_update_bb_inode libext2fs bb_inode
+00000000 T _ext2fs_read_bb_FILE libext2fs read_bb_file
+00000000 T _initialize_ext2_error_table libext2fs ext2_err
+00000000 T _ext2_llseek libext2fs llseek
+00000000 T _ext2fs_set_inode_callback libext2fs inode
diff --git a/lib/ext2fs/jump/jump.import b/lib/ext2fs/jump/jump.import
new file mode 100644
index 0000000..53208d5
--- /dev/null
+++ b/lib/ext2fs/jump/jump.import
@@ -0,0 +1,166 @@
+00000004 D __et_list libcom_err jump/error_message
+00000004 D _com_err_hook libcom_err jump/com_err
+/usr/lib/libc.sa(__libc.o):00001000 a __GOT_SIZE
+/usr/lib/libc.sa(__libc.o):6008f0b0 A _AL
+/usr/lib/libc.sa(__libc.o):6008f198 A _AL_PARM
+/usr/lib/libc.sa(__libc.o):6008f060 A _AM
+/usr/lib/libc.sa(__libc.o):6008f0b4 A _BC
+/usr/lib/libc.sa(__libc.o):6008f064 A _BS
+/usr/lib/libc.sa(__libc.o):6008f0bc A _BT
+/usr/lib/libc.sa(__libc.o):6008f068 A _CA
+/usr/lib/libc.sa(__libc.o):6008f0c0 A _CD
+/usr/lib/libc.sa(__libc.o):6008f0c4 A _CE
+/usr/lib/libc.sa(__libc.o):6008f0c8 A _CL
+/usr/lib/libc.sa(__libc.o):6008f0cc A _CM
+/usr/lib/libc.sa(__libc.o):6008f048 A _COLS
+/usr/lib/libc.sa(__libc.o):6008f0d0 A _CR
+/usr/lib/libc.sa(__libc.o):6008f0d4 A _CS
+/usr/lib/libc.sa(__libc.o):6008f06c A _DA
+/usr/lib/libc.sa(__libc.o):6008f070 A _DB
+/usr/lib/libc.sa(__libc.o):6008f0d8 A _DC
+/usr/lib/libc.sa(__libc.o):6008f0dc A _DL
+/usr/lib/libc.sa(__libc.o):6008f19c A _DL_PARM
+/usr/lib/libc.sa(__libc.o):6008f0e0 A _DM
+/usr/lib/libc.sa(__libc.o):6008f0e4 A _DO
+/usr/lib/libc.sa(__libc.o):6008f1a4 A _DOWN_PARM
+/usr/lib/libc.sa(__libc.o):6008f03c A _Def_term
+/usr/lib/libc.sa(__libc.o):6008f0e8 A _ED
+/usr/lib/libc.sa(__libc.o):6008f0ec A _EI
+/usr/lib/libc.sa(__libc.o):6008f074 A _EO
+/usr/lib/libc.sa(__libc.o):6008f1b8 A _GT
+/usr/lib/libc.sa(__libc.o):6008f078 A _HC
+/usr/lib/libc.sa(__libc.o):6008f118 A _HO
+/usr/lib/libc.sa(__libc.o):6008f07c A _HZ
+/usr/lib/libc.sa(__libc.o):6008f11c A _IC
+/usr/lib/libc.sa(__libc.o):6008f120 A _IM
+/usr/lib/libc.sa(__libc.o):6008f080 A _IN
+/usr/lib/libc.sa(__libc.o):6008f124 A _IP
+/usr/lib/libc.sa(__libc.o):6008f0f0 A _K0
+/usr/lib/libc.sa(__libc.o):6008f0f4 A _K1
+/usr/lib/libc.sa(__libc.o):6008f0f8 A _K2
+/usr/lib/libc.sa(__libc.o):6008f0fc A _K3
+/usr/lib/libc.sa(__libc.o):6008f100 A _K4
+/usr/lib/libc.sa(__libc.o):6008f104 A _K5
+/usr/lib/libc.sa(__libc.o):6008f108 A _K6
+/usr/lib/libc.sa(__libc.o):6008f10c A _K7
+/usr/lib/libc.sa(__libc.o):6008f110 A _K8
+/usr/lib/libc.sa(__libc.o):6008f114 A _K9
+/usr/lib/libc.sa(__libc.o):6008f128 A _KD
+/usr/lib/libc.sa(__libc.o):6008f12c A _KE
+/usr/lib/libc.sa(__libc.o):6008f130 A _KH
+/usr/lib/libc.sa(__libc.o):6008f134 A _KL
+/usr/lib/libc.sa(__libc.o):6008f138 A _KR
+/usr/lib/libc.sa(__libc.o):6008f13c A _KS
+/usr/lib/libc.sa(__libc.o):6008f140 A _KU
+/usr/lib/libc.sa(__libc.o):6008f1a8 A _LEFT_PARM
+/usr/lib/libc.sa(__libc.o):6008f044 A _LINES
+/usr/lib/libc.sa(__libc.o):6008f144 A _LL
+/usr/lib/libc.sa(__libc.o):6008f148 A _MA
+/usr/lib/libc.sa(__libc.o):6008f300 A _MCAppPath
+/usr/lib/libc.sa(__libc.o):6008f084 A _MI
+/usr/lib/libc.sa(__libc.o):6008f088 A _MS
+/usr/lib/libc.sa(__libc.o):6008f030 A _My_term
+/usr/lib/libc.sa(__libc.o):6008f08c A _NC
+/usr/lib/libc.sa(__libc.o):6008f14c A _ND
+/usr/lib/libc.sa(__libc.o):6008f150 A _NL
+/usr/lib/libc.sa(__libc.o):6008f1bc A _NONL
+/usr/lib/libc.sa(__libc.o):6008f090 A _NS
+/usr/lib/libc.sa(__libc.o):6008f094 A _OS
+/usr/lib/libc.sa(__libc.o):6008f1b0 A _PC
+/usr/lib/libc.sa(__libc.o):6008f154 A _RC
+/usr/lib/libc.sa(__libc.o):6008f1ac A _RIGHT_PARM
+/usr/lib/libc.sa(__libc.o):6008f158 A _SC
+/usr/lib/libc.sa(__libc.o):6008f15c A _SE
+/usr/lib/libc.sa(__libc.o):6008f160 A _SF
+/usr/lib/libc.sa(__libc.o):6008f164 A _SO
+/usr/lib/libc.sa(__libc.o):6008f168 A _SR
+/usr/lib/libc.sa(__libc.o):6008f16c A _TA
+/usr/lib/libc.sa(__libc.o):6008f170 A _TE
+/usr/lib/libc.sa(__libc.o):6008f174 A _TI
+/usr/lib/libc.sa(__libc.o):6008f178 A _UC
+/usr/lib/libc.sa(__libc.o):6008f17c A _UE
+/usr/lib/libc.sa(__libc.o):6008f098 A _UL
+/usr/lib/libc.sa(__libc.o):6008f180 A _UP
+/usr/lib/libc.sa(__libc.o):6008f1c0 A _UPPERCASE
+/usr/lib/libc.sa(__libc.o):6008f1a0 A _UP_PARM
+/usr/lib/libc.sa(__libc.o):6008f188 A _US
+/usr/lib/libc.sa(__libc.o):6008f18c A _VB
+/usr/lib/libc.sa(__libc.o):6008f194 A _VE
+/usr/lib/libc.sa(__libc.o):6008f190 A _VS
+/usr/lib/libc.sa(__libc.o):6008f09c A _XB
+/usr/lib/libc.sa(__libc.o):6008f0a0 A _XN
+/usr/lib/libc.sa(__libc.o):6008f0a8 A _XS
+/usr/lib/libc.sa(__libc.o):6008f0a4 A _XT
+/usr/lib/libc.sa(__libc.o):6008f0ac A _XX
+/usr/lib/libc.sa(__libc.o):6008f2a4 A __IO_file_jumps
+/usr/lib/libc.sa(__libc.o):6008f1f4 A __IO_list_all
+/usr/lib/libc.sa(__libc.o):6008f2a8 A __IO_proc_jumps
+/usr/lib/libc.sa(__libc.o):6008f1ec A __IO_stderr_
+/usr/lib/libc.sa(__libc.o):6008f1e4 A __IO_stdin_
+/usr/lib/libc.sa(__libc.o):6008f1e8 A __IO_stdout_
+/usr/lib/libc.sa(__libc.o):6008f2ac A __IO_str_jumps
+/usr/lib/libc.sa(__libc.o):6008f214 A ____brk_addr
+/usr/lib/libc.sa(__libc.o):6008f01c A ___ctype_b
+/usr/lib/libc.sa(__libc.o):6008f020 A ___ctype_tolower
+/usr/lib/libc.sa(__libc.o):6008f024 A ___ctype_toupper
+/usr/lib/libc.sa(__libc.o):6008f1fc A ___environ
+/usr/lib/libc.sa(__libc.o):6008f250 A ___exit_funcs
+/usr/lib/libc.sa(__libc.o):6008f2f0 A ___glob_closedir_hook
+/usr/lib/libc.sa(__libc.o):6008f2f4 A ___glob_opendir_hook
+/usr/lib/libc.sa(__libc.o):6008f2f8 A ___glob_readdir_hook
+/usr/lib/libc.sa(__libc.o):6008f278 A ___ttyname
+/usr/lib/libc.sa(__libc.o):6008f238 A __collate_info
+/usr/lib/libc.sa(__libc.o):6008f23c A __ctype_info
+/usr/lib/libc.sa(__libc.o):6008f028 A __echoit
+/usr/lib/libc.sa(__libc.o):6008f034 A __endwin
+/usr/lib/libc.sa(__libc.o):6008f288 A __gdbm_fetch_val
+/usr/lib/libc.sa(__libc.o):6008f280 A __gdbm_file
+/usr/lib/libc.sa(__libc.o):6008f284 A __gdbm_memory
+/usr/lib/libc.sa(__libc.o):6008f240 A __monetary_info
+/usr/lib/libc.sa(__libc.o):6008f234 A __null_auth
+/usr/lib/libc.sa(__libc.o):6008f244 A __numeric_info
+/usr/lib/libc.sa(__libc.o):6008f2ec A __obstack
+/usr/lib/libc.sa(__libc.o):6008f1c8 A __pfast
+/usr/lib/libc.sa(__libc.o):6008f02c A __rawmode
+/usr/lib/libc.sa(__libc.o):6008f1dc A __res
+/usr/lib/libc.sa(__libc.o):6008f04c A __res_iflg
+/usr/lib/libc.sa(__libc.o):6008f050 A __res_lflg
+/usr/lib/libc.sa(__libc.o):6008f270 A __res_opcodes
+/usr/lib/libc.sa(__libc.o):6008f274 A __res_resultcodes
+/usr/lib/libc.sa(__libc.o):6008f248 A __response_info
+/usr/lib/libc.sa(__libc.o):6008f2fc A __sigintr
+/usr/lib/libc.sa(__libc.o):6008f00c A __sys_errlist
+/usr/lib/libc.sa(__libc.o):6008f010 A __sys_nerr
+/usr/lib/libc.sa(__libc.o):6008f014 A __sys_siglist
+/usr/lib/libc.sa(__libc.o):6008f24c A __time_info
+/usr/lib/libc.sa(__libc.o):6008f05c A __tty
+/usr/lib/libc.sa(__libc.o):6008f040 A __tty_ch
+/usr/lib/libc.sa(__libc.o):6008f1cc A __unctrl
+/usr/lib/libc.sa(__libc.o):6008f27c A __win
+/usr/lib/libc.sa(__libc.o):6008f058 A _curscr
+/usr/lib/libc.sa(__libc.o):6008f228 A _daylight
+/usr/lib/libc.sa(__libc.o):6008f200 A _errno
+/usr/lib/libc.sa(__libc.o):6008f1d0 A _gdbm_errno
+/usr/lib/libc.sa(__libc.o):6008f28c A _gdbm_version
+/usr/lib/libc.sa(__libc.o):6008f008 A _h_errlist
+/usr/lib/libc.sa(__libc.o):6008f1d8 A _h_errno
+/usr/lib/libc.sa(__libc.o):6008f2a0 A _h_nerr
+/usr/lib/libc.sa(__libc.o):6008f1c4 A _normtty
+/usr/lib/libc.sa(__libc.o):6008f204 A _optarg
+/usr/lib/libc.sa(__libc.o):6008f20c A _opterr
+/usr/lib/libc.sa(__libc.o):6008f208 A _optind
+/usr/lib/libc.sa(__libc.o):6008f2e4 A _optopt
+/usr/lib/libc.sa(__libc.o):6008f218 A _ospeed
+/usr/lib/libc.sa(__libc.o):6008f26c A _re_max_failures
+/usr/lib/libc.sa(__libc.o):6008f210 A _re_syntax_options
+/usr/lib/libc.sa(__libc.o):6008f1e0 A _rexecoptions
+/usr/lib/libc.sa(__libc.o):6008f230 A _rpc_createerr
+/usr/lib/libc.sa(__libc.o):6008f25c A _stderr
+/usr/lib/libc.sa(__libc.o):6008f254 A _stdin
+/usr/lib/libc.sa(__libc.o):6008f258 A _stdout
+/usr/lib/libc.sa(__libc.o):6008f054 A _stdscr
+/usr/lib/libc.sa(__libc.o):6008f2e8 A _svc_fdset
+/usr/lib/libc.sa(__libc.o):6008f224 A _timezone
+/usr/lib/libc.sa(__libc.o):6008f21c A _tputs_baud_rate
+/usr/lib/libc.sa(__libc.o):6008f038 A _ttytype
+/usr/lib/libc.sa(__libc.o):6008f220 A _tzname
diff --git a/lib/ext2fs/jump/jump.params b/lib/ext2fs/jump/jump.params
new file mode 100644
index 0000000..ea74d63
--- /dev/null
+++ b/lib/ext2fs/jump/jump.params
@@ -0,0 +1,6 @@
+Name=libe2fs
+Text=0x66900000
+Data=0x00000000
+Jump=0x00001000
+GOT=0x00001000
+Version=1.0.0
diff --git a/lib/ext2fs/jump/jump.undefs b/lib/ext2fs/jump/jump.undefs
new file mode 100644
index 0000000..9469992
--- /dev/null
+++ b/lib/ext2fs/jump/jump.undefs
@@ -0,0 +1,2 @@
+66909078 D __NEEDS_SHRLIB_libc_4
+6690908c D __NEEDS_SHRLIB_libet_1
diff --git a/lib/ext2fs/jump/jump.vars b/lib/ext2fs/jump/jump.vars
new file mode 100644
index 0000000..edbbf7c
--- /dev/null
+++ b/lib/ext2fs/jump/jump.vars
@@ -0,0 +1 @@
+00000004 D _unix_io_manager libext2fs unix_io
diff --git a/lib/ext2fs/link.c b/lib/ext2fs/link.c
index f0dbbc5..042183b 100644
--- a/lib/ext2fs/link.c
+++ b/lib/ext2fs/link.c
@@ -9,7 +9,7 @@
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
-#include <linux/fs.h>
+
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -86,6 +86,8 @@
errcode_t retval;
struct link_struct ls;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (!(fs->flags & EXT2_FLAG_RW))
return EXT2_ET_RO_FILSYS;
@@ -129,6 +131,8 @@
errcode_t retval;
struct link_struct ls;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (!(fs->flags & EXT2_FLAG_RW))
return EXT2_ET_RO_FILSYS;
diff --git a/lib/ext2fs/llseek.c b/lib/ext2fs/llseek.c
new file mode 100644
index 0000000..00fe3cd
--- /dev/null
+++ b/lib/ext2fs/llseek.c
@@ -0,0 +1,79 @@
+/*
+ * llseek.c -- stub calling the llseek system call
+ *
+ * Copyright (C) 1994 Remy Card. This file may be redistributed
+ * under the terms of the GNU Public License.
+ */
+
+#include <sys/types.h>
+
+#include <errno.h>
+#include <unistd.h>
+#include <linux/unistd.h>
+#include "et/com_err.h"
+#include "ext2fs/io.h"
+
+#ifdef __linux__
+
+#ifndef __NR__llseek
+#define __NR__llseek 140
+#endif
+
+static int _llseek (unsigned int, unsigned long,
+ unsigned long, ext2_loff_t *, unsigned int);
+
+static _syscall5(int,_llseek,unsigned int,fd,unsigned long,offset_high,
+ unsigned long, offset_low,ext2_loff_t *,result,
+ unsigned int, origin)
+
+ext2_loff_t ext2_llseek (unsigned int fd, ext2_loff_t offset,
+ unsigned int origin)
+{
+ unsigned long offset_high;
+ unsigned long offset_low;
+ ext2_loff_t result;
+ int retval;
+ static int do_compat = 0;
+
+ if (do_compat) {
+ compat_lseek:
+ if ((sizeof(off_t) < sizeof(ext2_loff_t)) &&
+ (offset >= ((ext2_loff_t) 1 << ((sizeof(off_t)*8) -1)))) {
+ errno = -EINVAL;
+ return -1;
+ }
+ return lseek (fd, (off_t) offset, origin);
+ }
+
+ offset_high = ((unsigned long long) offset) >> 32;
+ offset_low = ((unsigned long long) offset) & 0xffffffff;
+ retval = _llseek (fd, offset_high, offset_low, &result, origin);
+ if (retval == -1 && errno == ENOSYS) {
+ /*
+ * Just in case this code runs on top of an old kernel
+ * which does not support the llseek system call
+ */
+ do_compat++;
+ goto compat_lseek;
+ }
+ if (retval == -1)
+ result = -1;
+ return result;
+}
+
+#else
+
+ext2_loff_t ext2_llseek (unsigned int fd, ext2_loff_t offset,
+ unsigned int origin)
+{
+ if ((sizeof(off_t) < sizeof(ext2_loff_t)) &&
+ (offset >= ((ext2_loff_t) 1 << ((sizeof(off_t)*8) -1)))) {
+ errno = -EINVAL;
+ return -1;
+ }
+ return lseek (fd, (off_t) offset, origin);
+}
+
+#endif
+
+
diff --git a/lib/ext2fs/mkdir.c b/lib/ext2fs/mkdir.c
index 03e49d8..8bcb542 100644
--- a/lib/ext2fs/mkdir.c
+++ b/lib/ext2fs/mkdir.c
@@ -14,7 +14,6 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -30,6 +29,8 @@
char *block = 0;
int group;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
/*
* Allocate an inode, if necessary
*/
@@ -109,9 +110,9 @@
/*
* Update accounting....
*/
- ext2fs_mark_block_bitmap(fs, fs->block_map, blk);
+ ext2fs_mark_block_bitmap(fs->block_map, blk);
ext2fs_mark_bb_dirty(fs);
- ext2fs_mark_inode_bitmap(fs, fs->inode_map, ino);
+ ext2fs_mark_inode_bitmap(fs->inode_map, ino);
ext2fs_mark_ib_dirty(fs);
group = ext2fs_group_of_blk(fs, blk);
diff --git a/lib/ext2fs/namei.c b/lib/ext2fs/namei.c
index 3bb6d57..da382f7 100644
--- a/lib/ext2fs/namei.c
+++ b/lib/ext2fs/namei.c
@@ -9,7 +9,7 @@
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
-#include <linux/fs.h>
+
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -46,6 +46,8 @@
struct dir_context ctx;
errcode_t retval;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
retval = ext2fs_check_directory(fs, dir);
if (retval)
return retval;
@@ -155,6 +157,8 @@
errcode_t retval;
struct lookup_struct ls;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
ls.name = name;
ls.len = namelen;
ls.inode = inode;
@@ -176,6 +180,8 @@
int len;
errcode_t retval;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
buf = malloc(fs->blocksize);
if (!buf)
return ENOMEM;
diff --git a/lib/ext2fs/newdir.c b/lib/ext2fs/newdir.c
index 948bad9..d1018c1 100644
--- a/lib/ext2fs/newdir.c
+++ b/lib/ext2fs/newdir.c
@@ -9,7 +9,7 @@
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
-#include <linux/fs.h>
+
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -24,6 +24,8 @@
struct ext2_dir_entry *dir = NULL;
int rec_len;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
buf = malloc(fs->blocksize);
if (!buf)
return ENOMEM;
diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c
index b63b7aa..d6f5432 100644
--- a/lib/ext2fs/openfs.c
+++ b/lib/ext2fs/openfs.c
@@ -14,7 +14,6 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -31,11 +30,14 @@
int i, group_block;
char *dest;
+ EXT2_CHECK_MAGIC(manager, EXT2_ET_MAGIC_IO_MANAGER);
+
fs = (ext2_filsys) malloc(sizeof(struct struct_ext2_filsys));
if (!fs)
return ENOMEM;
memset(fs, 0, sizeof(struct struct_ext2_filsys));
+ fs->magic = EXT2_ET_MAGIC_EXT2FS_FILSYS;
fs->flags = flags;
retval = manager->open(name, (flags & EXT2_FLAG_RW) ? IO_FLAG_RW : 0,
&fs->io);
@@ -65,9 +67,11 @@
goto cleanup;
}
io_channel_set_blksize(fs->io, block_size);
+ group_block = superblock + 1;
} else {
io_channel_set_blksize(fs->io, SUPERBLOCK_OFFSET);
superblock = 1;
+ group_block = 0;
}
retval = io_channel_read_blk(fs->io, superblock, -SUPERBLOCK_SIZE,
fs->super);
@@ -78,6 +82,12 @@
retval = EXT2_ET_BAD_MAGIC;
goto cleanup;
}
+#ifdef EXT2_CURRENT_REV
+ if (fs->super->s_rev_level > EXT2_LIB_CURRENT_REV) {
+ retval = EXT2_ET_REV_TOO_HIGH;
+ goto cleanup;
+ }
+#endif
fs->blocksize = EXT2_BLOCK_SIZE(fs->super);
fs->fragsize = EXT2_FRAG_SIZE(fs->super);
fs->inode_blocks_per_group = (fs->super->s_inodes_per_group /
@@ -108,7 +118,8 @@
retval = ENOMEM;
goto cleanup;
}
- group_block = fs->super->s_first_data_block + 1;
+ if (!group_block)
+ group_block = fs->super->s_first_data_block + 1;
dest = (char *) fs->group_desc;
for (i=0 ; i < fs->desc_blocks; i++) {
retval = io_channel_read_blk(fs->io, group_block, 1, dest);
@@ -125,45 +136,3 @@
return retval;
}
-/*
- * This routine sanity checks the group descriptors
- */
-errcode_t ext2fs_check_desc(ext2_filsys fs)
-{
- int i;
- int block = fs->super->s_first_data_block;
- int next, inode_blocks_per_group;
-
- inode_blocks_per_group = fs->super->s_inodes_per_group /
- EXT2_INODES_PER_BLOCK (fs->super);
-
- for (i = 0; i < fs->group_desc_count; i++) {
- next = block + fs->super->s_blocks_per_group;
- /*
- * Check to make sure block bitmap for group is
- * located within the group.
- */
- if (fs->group_desc[i].bg_block_bitmap < block ||
- fs->group_desc[i].bg_block_bitmap >= next)
- return EXT2_ET_GDESC_BAD_BLOCK_MAP;
- /*
- * Check to make sure inode bitmap for group is
- * located within the group
- */
- if (fs->group_desc[i].bg_inode_bitmap < block ||
- fs->group_desc[i].bg_inode_bitmap >= next)
- return EXT2_ET_GDESC_BAD_INODE_MAP;
- /*
- * Check to make sure inode table for group is located
- * within the group
- */
- if (fs->group_desc[i].bg_inode_table < block ||
- fs->group_desc[i].bg_inode_table+inode_blocks_per_group >=
- next)
- return EXT2_ET_GDESC_BAD_INODE_TABLE;
-
- block = next;
- }
- return 0;
-}
-
diff --git a/lib/ext2fs/read_bb.c b/lib/ext2fs/read_bb.c
index 65663a0..1a9f774 100644
--- a/lib/ext2fs/read_bb.c
+++ b/lib/ext2fs/read_bb.c
@@ -14,7 +14,6 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -51,6 +50,8 @@
struct ext2_inode inode;
int numblocks;
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
if (!*bb_list) {
retval = ext2fs_read_inode(fs, EXT2_BAD_INO, &inode);
if (retval)
diff --git a/lib/ext2fs/read_bb_file.c b/lib/ext2fs/read_bb_file.c
index db7b910..c24674b 100644
--- a/lib/ext2fs/read_bb_file.c
+++ b/lib/ext2fs/read_bb_file.c
@@ -14,7 +14,6 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "ext2fs.h"
@@ -29,6 +28,9 @@
errcode_t retval;
blk_t blockno;
int count;
+ char buf[128];
+
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
if (!*bb_list) {
retval = badblocks_list_create(bb_list, 10);
@@ -37,9 +39,11 @@
}
while (!feof (f)) {
- count = fscanf (f, "%lu", &blockno);
- if (count <= 0)
+ if (fgets(buf, sizeof(buf), f) == NULL)
break;
+ count = sscanf(buf, "%lu", &blockno);
+ if (count <= 0)
+ continue;
if ((blockno < fs->super->s_first_data_block) ||
(blockno >= fs->super->s_blocks_count)) {
if (invalid)
@@ -47,7 +51,8 @@
continue;
}
retval = badblocks_list_add(*bb_list, blockno);
- return retval;
+ if (retval)
+ return retval;
}
return 0;
}
diff --git a/lib/ext2fs/rw_bitmaps.c b/lib/ext2fs/rw_bitmaps.c
new file mode 100644
index 0000000..9523294
--- /dev/null
+++ b/lib/ext2fs/rw_bitmaps.c
@@ -0,0 +1,218 @@
+/*
+ * rw_bitmaps.c --- routines to read and write the inode and block bitmaps.
+ *
+ * Copyright (C) 1993,1994 Theodore Ts'o. This file may be redistributed
+ * under the terms of the GNU Public License.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <time.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <linux/ext2_fs.h>
+
+#include "ext2fs.h"
+
+errcode_t ext2fs_write_inode_bitmap(ext2_filsys fs)
+{
+ int i;
+ int nbytes;
+ errcode_t retval;
+ char * inode_bitmap = fs->inode_map->bitmap;
+ char * bitmap_block = NULL;
+
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
+ if (!(fs->flags & EXT2_FLAG_RW))
+ return EXT2_ET_RO_FILSYS;
+ if (!inode_bitmap)
+ return 0;
+ nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
+ bitmap_block = malloc(fs->blocksize);
+ if (!bitmap_block)
+ return ENOMEM;
+ memset(bitmap_block, 0xff, fs->blocksize);
+ for (i = 0; i < fs->group_desc_count; i++) {
+ memcpy(bitmap_block, inode_bitmap, nbytes);
+ retval = io_channel_write_blk(fs->io,
+ fs->group_desc[i].bg_inode_bitmap, 1,
+ bitmap_block);
+ if (retval)
+ return EXT2_ET_INODE_BITMAP_WRITE;
+ inode_bitmap += nbytes;
+ }
+ fs->flags |= EXT2_FLAG_CHANGED;
+ fs->flags &= ~EXT2_FLAG_IB_DIRTY;
+ free(bitmap_block);
+ return 0;
+}
+
+errcode_t ext2fs_write_block_bitmap (ext2_filsys fs)
+{
+ int i;
+ int j;
+ int nbytes;
+ int nbits;
+ errcode_t retval;
+ char * block_bitmap = fs->block_map->bitmap;
+ char * bitmap_block = NULL;
+
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
+ if (!(fs->flags & EXT2_FLAG_RW))
+ return EXT2_ET_RO_FILSYS;
+ if (!block_bitmap)
+ return 0;
+ nbytes = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
+ bitmap_block = malloc(fs->blocksize);
+ if (!bitmap_block)
+ return ENOMEM;
+ memset(bitmap_block, 0xff, fs->blocksize);
+ for (i = 0; i < fs->group_desc_count; i++) {
+ memcpy(bitmap_block, block_bitmap, nbytes);
+ if (i == fs->group_desc_count - 1) {
+ /* Force bitmap padding for the last group */
+ nbits = (fs->super->s_blocks_count
+ - fs->super->s_first_data_block)
+ % EXT2_BLOCKS_PER_GROUP(fs->super);
+ if (nbits)
+ for (j = nbits; j < fs->blocksize * 8; j++)
+ set_bit(j, bitmap_block);
+ }
+ retval = io_channel_write_blk(fs->io,
+ fs->group_desc[i].bg_block_bitmap, 1,
+ bitmap_block);
+ if (retval)
+ return EXT2_ET_BLOCK_BITMAP_WRITE;
+ block_bitmap += nbytes;
+ }
+ fs->flags |= EXT2_FLAG_CHANGED;
+ fs->flags &= ~EXT2_FLAG_BB_DIRTY;
+ free(bitmap_block);
+ return 0;
+}
+
+static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
+{
+ int i;
+ char *block_bitmap, *inode_bitmap;
+ char *buf;
+ errcode_t retval;
+ int block_nbytes = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
+ int inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
+
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
+ fs->write_bitmaps = ext2fs_write_bitmaps;
+
+ buf = malloc(strlen(fs->device_name) + 80);
+ if (do_block) {
+ if (fs->block_map)
+ ext2fs_free_block_bitmap(fs->block_map);
+ sprintf(buf, "block bitmap for %s", fs->device_name);
+ retval = ext2fs_allocate_block_bitmap(fs, buf, &fs->block_map);
+ if (retval)
+ goto cleanup;
+ block_bitmap = fs->block_map->bitmap;
+ }
+ if (do_inode) {
+ if (fs->inode_map)
+ ext2fs_free_inode_bitmap(fs->inode_map);
+ sprintf(buf, "inode bitmap for %s", fs->device_name);
+ retval = ext2fs_allocate_inode_bitmap(fs, buf, &fs->inode_map);
+ if (retval)
+ goto cleanup;
+ inode_bitmap = fs->inode_map->bitmap;
+ }
+ free(buf);
+ buf = malloc(fs->blocksize);
+ if (!buf) {
+ retval = ENOMEM;
+ goto cleanup;
+ }
+
+ for (i = 0; i < fs->group_desc_count; i++) {
+ if (do_block) {
+ retval = io_channel_read_blk
+ (fs->io,
+ fs->group_desc[i].bg_block_bitmap,
+ 1, buf);
+ if (retval) {
+ retval = EXT2_ET_BLOCK_BITMAP_READ;
+ goto cleanup;
+ }
+ memcpy(block_bitmap, buf, block_nbytes);
+ block_bitmap += block_nbytes;
+ }
+ if (do_inode) {
+ retval = io_channel_read_blk
+ (fs->io,
+ fs->group_desc[i].bg_inode_bitmap,
+ 1, buf);
+ if (retval) {
+ retval = EXT2_ET_INODE_BITMAP_READ;
+ goto cleanup;
+ }
+ memcpy(inode_bitmap, buf, inode_nbytes);
+ inode_bitmap += inode_nbytes;
+ }
+ }
+ free(buf);
+ return 0;
+
+cleanup:
+ if (do_block) {
+ free(fs->block_map);
+ fs->block_map = 0;
+ }
+ if (do_inode) {
+ free(fs->inode_map);
+ fs->inode_map = 0;
+ }
+ if (buf)
+ free(buf);
+ return retval;
+}
+
+errcode_t ext2fs_read_inode_bitmap (ext2_filsys fs)
+{
+ return read_bitmaps(fs, 1, 0);
+}
+
+errcode_t ext2fs_read_block_bitmap(ext2_filsys fs)
+{
+ return read_bitmaps(fs, 0, 1);
+}
+
+errcode_t ext2fs_read_bitmaps(ext2_filsys fs)
+{
+
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
+ return read_bitmaps(fs, !fs->inode_map, !fs->block_map);
+}
+
+errcode_t ext2fs_write_bitmaps(ext2_filsys fs)
+{
+ errcode_t retval;
+
+ EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
+ if (fs->block_map && ext2fs_test_bb_dirty(fs)) {
+ retval = ext2fs_write_block_bitmap(fs);
+ if (retval)
+ return retval;
+ }
+ if (fs->inode_map && ext2fs_test_ib_dirty(fs)) {
+ retval = ext2fs_write_inode_bitmap(fs);
+ if (retval)
+ return retval;
+ }
+ return 0;
+}
+
diff --git a/lib/ext2fs/rw_bitmaps.size b/lib/ext2fs/rw_bitmaps.size
new file mode 100644
index 0000000..5a3c944
--- /dev/null
+++ b/lib/ext2fs/rw_bitmaps.size
@@ -0,0 +1,2 @@
+text data bss dec hex
+1720 0 0 1720 6b8
diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c
index 1137870..5126583 100644
--- a/lib/ext2fs/unix_io.c
+++ b/lib/ext2fs/unix_io.c
@@ -20,7 +20,15 @@
#include "ext2_err.h"
#include "io.h"
+/*
+ * For checking structure magic numbers...
+ */
+
+#define EXT2_CHECK_MAGIC(struct, code) \
+ if ((struct)->magic != (code)) return (code)
+
struct unix_private_data {
+ int magic;
int dev;
int flags;
char *buf;
@@ -36,7 +44,8 @@
int count, const void *data);
static errcode_t unix_flush(io_channel channel);
-struct struct_io_manager struct_unix_manager = {
+static struct struct_io_manager struct_unix_manager = {
+ EXT2_ET_MAGIC_IO_MANAGER,
"Unix I/O Manager",
unix_open,
unix_close,
@@ -57,6 +66,8 @@
io = (io_channel) malloc(sizeof(struct struct_io_channel));
if (!io)
return ENOMEM;
+ memset(io, 0, sizeof(struct struct_io_channel));
+ io->magic = EXT2_ET_MAGIC_IO_CHANNEL;
data = (struct unix_private_data *)
malloc(sizeof(struct unix_private_data));
if (!data) {
@@ -71,9 +82,12 @@
}
strcpy(io->name, name);
io->private_data = data;
+ io->block_size = 1024;
+ io->read_error = 0;
+ io->write_error = 0;
memset(data, 0, sizeof(struct unix_private_data));
- io->block_size = 1024;
+ data->magic = EXT2_ET_MAGIC_UNIX_IO_CHANNEL;
data->buf = malloc(io->block_size);
data->buf_block_nr = -1;
if (!data->buf) {
@@ -104,7 +118,10 @@
struct unix_private_data *data;
errcode_t retval = 0;
+ EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
data = (struct unix_private_data *) channel->private_data;
+ EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
+
if (close(data->dev) < 0)
retval = errno;
if (data->buf)
@@ -121,7 +138,10 @@
{
struct unix_private_data *data;
+ EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
data = (struct unix_private_data *) channel->private_data;
+ EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
+
if (channel->block_size != blksize) {
channel->block_size = blksize;
free(data->buf);
@@ -140,9 +160,12 @@
struct unix_private_data *data;
errcode_t retval;
size_t size;
+ ext2_loff_t location;
int actual = 0;
+ EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
data = (struct unix_private_data *) channel->private_data;
+ EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
/*
* If it's in the cache, use it!
@@ -151,9 +174,12 @@
memcpy(buf, data->buf, channel->block_size);
return 0;
}
+#if 0
+ printf("read_block %lu (%d)\n", block, count);
+#endif
size = (count < 0) ? -count : count * channel->block_size;
- if (lseek(data->dev, block * channel->block_size, SEEK_SET) !=
- block * channel->block_size) {
+ location = (ext2_loff_t) block * channel->block_size;
+ if (ext2_llseek(data->dev, location, SEEK_SET) != location) {
retval = errno;
goto error_out;
}
@@ -183,10 +209,13 @@
{
struct unix_private_data *data;
size_t size;
+ ext2_loff_t location;
int actual = 0;
errcode_t retval;
+ EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
data = (struct unix_private_data *) channel->private_data;
+ EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
if (count == 1)
size = channel->block_size;
@@ -197,9 +226,9 @@
else
size = count * channel->block_size;
}
-
- if (lseek(data->dev, block * channel->block_size, SEEK_SET) !=
- block * channel->block_size) {
+
+ location = (ext2_loff_t) block * channel->block_size;
+ if (ext2_llseek(data->dev, location, SEEK_SET) != location) {
retval = errno;
goto error_out;
}
@@ -228,6 +257,12 @@
*/
static errcode_t unix_flush(io_channel channel)
{
+ struct unix_private_data *data;
+
+ EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+ data = (struct unix_private_data *) channel->private_data;
+ EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
+
return 0;
}