Changeset 55bc138


Ignore:
Timestamp:
Jan 7, 2009, 3:29:55 PM (16 years ago)
Author:
Jim Gifford <clfs@…>
Branches:
clfs-1.2, clfs-2.1, clfs-3.0.0-systemd, clfs-3.0.0-sysvinit, master, systemd, sysvinit
Children:
882703f
Parents:
1ebc2b5
Message:

Updated to Silo 1.4.14

Files:
5 edited
1 moved

Legend:

Unmodified
Added
Removed
  • BOOK/introduction/sparc/changelog.xml

    r1ebc2b5 r55bc138  
    3333
    3434-->
     35
     36    <listitem>
     37      <para>January 7, 2009</para>
     38      <itemizedlist>
     39        <listitem>
     40          <para>[Jim] - Updated to Silo 1.4.14.</para>
     41        </listitem>
     42      </itemizedlist>
     43    </listitem>
    3544
    3645   <listitem>
  • BOOK/introduction/sparc64-64/changelog.xml

    r1ebc2b5 r55bc138  
    3333
    3434-->
     35
     36    <listitem>
     37      <para>January 7, 2009</para>
     38      <itemizedlist>
     39        <listitem>
     40          <para>[Jim] - Updated to Silo 1.4.14.</para>
     41        </listitem>
     42      </itemizedlist>
     43    </listitem>
    3544
    3645    <listitem>
  • BOOK/introduction/sparc64/changelog.xml

    r1ebc2b5 r55bc138  
    3333
    3434-->
     35
     36    <listitem>
     37      <para>January 7, 2009</para>
     38      <itemizedlist>
     39        <listitem>
     40          <para>[Jim] - Updated to Silo 1.4.14.</para>
     41        </listitem>
     42      </itemizedlist>
     43    </listitem>
    3544
    3645    <listitem>
  • BOOK/packages.ent

    r1ebc2b5 r55bc138  
    364364<!ENTITY shadow-home "http://pkg-shadow.alioth.debian.org">
    365365
    366 <!ENTITY silo-version "1.4.13">
    367 <!ENTITY silo-size "140 KB">
     366<!ENTITY silo-version "1.4.14">
     367<!ENTITY silo-size "1520 KB">
    368368<!ENTITY silo-url "http://www.phunnypharm.org/pub/silo/silo-&silo-version;.tar.bz2">
    369 <!ENTITY silo-md5 "7039aabf3c1b3858ae8d0ccdde21343e">
    370 <!ENTITY silo-home "http://git.kernel.org/?p=linux/kernel/git/bcollins/silo.git;a=summary">
     369<!ENTITY silo-md5 "168182dfa0025914ceecac9591a6674c">
     370<!ENTITY silo-home "">
    371371
    372372<!ENTITY sysklogd-version "1.5">
  • BOOK/patches.ent

    r1ebc2b5 r55bc138  
    191191<!ENTITY elftoaout-fixes-patch-size "6.7 KB">
    192192
    193 <!ENTITY silo-fixes-patch "silo-&silo-version;-fixes-3.patch">
    194 <!ENTITY silo-fixes-patch-md5 "c65334fd6b3b99d824c458d0a3eac9b1">
    195 <!ENTITY silo-fixes-patch-size "668 KB">
     193<!ENTITY silo-fixes-patch "silo-&silo-version;-fixes-1.patch">
     194<!ENTITY silo-fixes-patch-md5 "03e8897c5d33d0e6ee81e8e8aeeb772f">
     195<!ENTITY silo-fixes-patch-size "704 KB">
    196196
    197197<!-- Start of x86/x86_64 patches -->
  • patches/silo-1.4.14-fixes-1.patch

    r1ebc2b5 r55bc138  
    1 Submitted By: Joe Ciccone <joeciccone at crazyeyesoft dot com>
    2 Date: 2007-04-05
    3 Initial Package Version: 1.4.13
     1Submitted By: Jonathan Norman <Jonathan [at] bluesquarelinux.co.uk>
     2Date: 2009-01-07
     3Initial Package Version: 1.4.14
    44Upstream Status: Unknown
    5 Origin: Rocklinux and Jim Gifford and Joe Ciccone
     5Origin: Rocklinux, Jim Gifford, Joe Ciccone, and Blue Square Linux
    66Description: Fixes cross-compilation issues and silo no longer links to
    77        libext2fs.so, it is integrated instead. Also allows silo to build
    8         and work properly on pure64 systems.
     8        and work properly on pure64 systems. Now works with 2.6.25.x
     9        kernel headers.
    910
    10 diff -Naur silo-1.4.13.orig/common/Makefile silo-1.4.13/common/Makefile
    11 --- silo-1.4.13.orig/common/Makefile    2006-06-01 13:24:53.000000000 -0400
    12 +++ silo-1.4.13/common/Makefile 2007-04-03 17:02:53.000000000 -0400
     11        Rediffed for 1.4.14
     12
     13diff -Naur silo-1.4.14.orig/Makefile silo-1.4.14/Makefile
     14--- silo-1.4.14.orig/Makefile   2008-06-12 09:39:12.000000000 -0700
     15+++ silo-1.4.14/Makefile        2009-01-07 15:07:56.000000000 -0800
     16@@ -3,7 +3,7 @@
     17 
     18 # These only get built on Linux
     19 ifeq ($(OPSYS),Linux)
     20-  SUBDIRS  = common first second first-isofs tilo
     21+  SUBDIRS  = common first libext2fs second first-isofs tilo
     22   MANPAGES = maketilo.1 tilo.1
     23 endif
     24 
     25diff -Naur silo-1.4.14.orig/Rules.make silo-1.4.14/Rules.make
     26--- silo-1.4.14.orig/Rules.make 2008-06-12 09:39:12.000000000 -0700
     27+++ silo-1.4.14/Rules.make      2009-01-07 15:07:56.000000000 -0800
     28@@ -2,12 +2,14 @@
     29 IMGVERSION=0.99
     30 SHELL=/bin/bash
     31 RM=rm -f
     32-# We want to force 32-bit builds
     33-CC=gcc -m32
     34-LD=ld -m elf32_sparc
     35-AS=as
     36-STRIP=strip
     37-NM=nm
     38+CC=$(CROSS_COMPILE)gcc
     39+CC-SILO=$(CC) -m32 -Wa,-32 -I../include/emul_32
     40+BUILD_CC=gcc
     41+LD=$(CROSS_COMPILE)ld -m elf32_sparc
     42+AS=$(CROSS_COMPILE)as
     43+STRIP=$(CROSS_COMPILE)strip
     44+NM=$(CROSS_COMPILE)nm
     45+
     46 ELFTOAOUT=elftoaout
     47 BIN2H=../common/bin2h
     48 
     49diff -Naur silo-1.4.14.orig/common/Makefile silo-1.4.14/common/Makefile
     50--- silo-1.4.14.orig/common/Makefile    2008-06-12 09:39:12.000000000 -0700
     51+++ silo-1.4.14/common/Makefile 2009-01-07 15:07:56.000000000 -0800
    1352@@ -5,19 +5,22 @@
    1453 include ../Rules.make
     
    4079+       $(RM) bin2h *.o
    4180+
    42 diff -Naur silo-1.4.13.orig/first/Makefile silo-1.4.13/first/Makefile
    43 --- silo-1.4.13.orig/first/Makefile     2006-06-01 13:24:53.000000000 -0400
    44 +++ silo-1.4.13/first/Makefile  2007-04-05 19:48:31.000000000 -0400
     81diff -Naur silo-1.4.14.orig/first/Makefile silo-1.4.14/first/Makefile
     82--- silo-1.4.14.orig/first/Makefile     2008-06-12 09:39:12.000000000 -0700
     83+++ silo-1.4.14/first/Makefile  2009-01-07 15:13:16.000000000 -0800
    4584@@ -1,4 +1,4 @@
    4685-##
     
    79118 ultra.b: ultra
    80119        $(ELFTOAOUT) -o ultra.b ultra
    81         echo -n 'SILO'$(IMGVERSION) | $(DD) of=ultra.b bs=8 conv=notrunc seek=3 count=1
    82 -       echo -n -e '\340' | $(DD) of=ultra.b bs=1 count=1 seek=7 conv=notrunc
    83 +       echo -n -e '\0340' | $(DD) of=ultra.b bs=1 count=1 seek=7 conv=notrunc
     120        printf 'SILO'$(IMGVERSION) | $(DD) of=ultra.b bs=8 conv=notrunc seek=3 count=1
     121-       printf '\340' | $(DD) of=ultra.b bs=1 count=1 seek=7 conv=notrunc
     122+       printf '\0340' | $(DD) of=ultra.b bs=1 count=1 seek=7 conv=notrunc
    84123        $(DD) if=/dev/zero of=ultra.b bs=4 count=1 seek=127
    85124 
     
    93132 generic.b: generic
    94133        $(ELFTOAOUT) -o generic.b generic
    95         echo -n 'SILO'$(IMGVERSION) | $(DD) of=generic.b bs=8 conv=notrunc seek=3 count=1
    96 -       echo -n -e '\340' | $(DD) of=generic.b bs=1 count=1 seek=7 conv=notrunc
    97 +       echo -n -e '\0340' | $(DD) of=generic.b bs=1 count=1 seek=7 conv=notrunc
     134        printf 'SILO'$(IMGVERSION) | $(DD) of=generic.b bs=8 conv=notrunc seek=3 count=1
     135-       printf '\340' | $(DD) of=generic.b bs=1 count=1 seek=7 conv=notrunc
     136+       printf '\0340' | $(DD) of=generic.b bs=1 count=1 seek=7 conv=notrunc
    98137        $(DD) if=/dev/zero of=generic.b bs=4 count=1 seek=255
    99138 
     
    107146 fd.b: fd
    108147        $(ELFTOAOUT) -o fd.b fd
    109         echo -n 'SILO'$(IMGVERSION) | $(DD) of=fd.b bs=8 conv=notrunc seek=3 count=1
    110 -       echo -n -e '\340' | $(DD) of=fd.b bs=1 count=1 seek=7 conv=notrunc
    111 +       echo -n -e '\0340' | $(DD) of=fd.b bs=1 count=1 seek=7 conv=notrunc
     148        printf 'SILO'$(IMGVERSION) | $(DD) of=fd.b bs=8 conv=notrunc seek=3 count=1
     149-       printf '\340' | $(DD) of=fd.b bs=1 count=1 seek=7 conv=notrunc
     150+       printf '\0340' | $(DD) of=fd.b bs=1 count=1 seek=7 conv=notrunc
    112151        $(DD) if=/dev/zero of=fd.b bs=4 count=1 seek=255
    113152 
     
    118157 ieee32.b: ieee32.o
    119158        $(LD) $(LDFLAGS) -o ieee32.b ieee32.o
    120 diff -Naur silo-1.4.13.orig/first-isofs/Makefile silo-1.4.13/first-isofs/Makefile
    121 --- silo-1.4.13.orig/first-isofs/Makefile       2006-06-01 13:24:53.000000000 -0400
    122 +++ silo-1.4.13/first-isofs/Makefile    2007-04-03 17:02:53.000000000 -0400
     159diff -Naur silo-1.4.14.orig/first-isofs/Makefile silo-1.4.14/first-isofs/Makefile
     160--- silo-1.4.14.orig/first-isofs/Makefile       2008-06-12 09:39:12.000000000 -0700
     161+++ silo-1.4.14/first-isofs/Makefile    2009-01-07 15:07:56.000000000 -0800
    123162@@ -11,10 +11,10 @@
    124163 all: $(NAME).b
     
    143182 clean:
    144183        $(RM) *.o $(NAME) $(NAME).b $(NAME).aout
    145 diff -Naur silo-1.4.13.orig/include/emul_32/asm/elf.h silo-1.4.13/include/emul_32/asm/elf.h
    146 --- silo-1.4.13.orig/include/emul_32/asm/elf.h  1969-12-31 19:00:00.000000000 -0500
    147 +++ silo-1.4.13/include/emul_32/asm/elf.h       2007-04-03 17:02:53.000000000 -0400
     184diff -Naur silo-1.4.14.orig/include/asm/page.h silo-1.4.14/include/asm/page.h
     185--- silo-1.4.14.orig/include/asm/page.h 1969-12-31 16:00:00.000000000 -0800
     186+++ silo-1.4.14/include/asm/page.h      2009-01-07 15:07:56.000000000 -0800
     187@@ -0,0 +1,15 @@
     188+/* File autogenerated by 'make headers_install' */
     189+#ifndef __ASM_STUB_PAGE_H
     190+#define __ASM_STUB_PAGE_H
     191+# if defined __sparc__ && defined __arch64__
     192+#ifndef _SPARC_PAGE_H
     193+#define _SPARC_PAGE_H
     194+#endif
     195+# elif defined __sparc__ && !defined __arch64__
     196+#ifndef _SPARC64_PAGE_H
     197+#define _SPARC64_PAGE_H
     198+#endif
     199+# else
     200+#  warning This machine appears to be neither sparc64 nor sparc.
     201+# endif
     202+#endif /* __ASM_STUB_PAGE_H */
     203diff -Naur silo-1.4.14.orig/include/emul_32/asm/elf.h silo-1.4.14/include/emul_32/asm/elf.h
     204--- silo-1.4.14.orig/include/emul_32/asm/elf.h  1969-12-31 16:00:00.000000000 -0800
     205+++ silo-1.4.14/include/emul_32/asm/elf.h       2009-01-07 15:07:56.000000000 -0800
    148206@@ -0,0 +1,162 @@
    149207+#ifndef __ASMSPARC_ELF_H
     
    309367+
    310368+#endif /* !(__ASMSPARC_ELF_H) */
    311 diff -Naur silo-1.4.13.orig/include/emul_32/asm/posix_types.h silo-1.4.13/include/emul_32/asm/posix_types.h
    312 --- silo-1.4.13.orig/include/emul_32/asm/posix_types.h  1969-12-31 19:00:00.000000000 -0500
    313 +++ silo-1.4.13/include/emul_32/asm/posix_types.h       2007-04-03 17:02:53.000000000 -0400
     369diff -Naur silo-1.4.14.orig/include/emul_32/asm/posix_types.h silo-1.4.14/include/emul_32/asm/posix_types.h
     370--- silo-1.4.14.orig/include/emul_32/asm/posix_types.h  1969-12-31 16:00:00.000000000 -0800
     371+++ silo-1.4.14/include/emul_32/asm/posix_types.h       2009-01-07 15:07:56.000000000 -0800
    314372@@ -0,0 +1,122 @@
    315373+#ifndef __ARCH_SPARC_POSIX_TYPES_H
     
    435493+
    436494+#endif /* !(__ARCH_SPARC_POSIX_TYPES_H) */
    437 diff -Naur silo-1.4.13.orig/include/emul_32/asm/types.h silo-1.4.13/include/emul_32/asm/types.h
    438 --- silo-1.4.13.orig/include/emul_32/asm/types.h        1969-12-31 19:00:00.000000000 -0500
    439 +++ silo-1.4.13/include/emul_32/asm/types.h     2007-04-03 17:02:53.000000000 -0400
     495diff -Naur silo-1.4.14.orig/include/emul_32/asm/types.h silo-1.4.14/include/emul_32/asm/types.h
     496--- silo-1.4.14.orig/include/emul_32/asm/types.h        1969-12-31 16:00:00.000000000 -0800
     497+++ silo-1.4.14/include/emul_32/asm/types.h     2009-01-07 15:07:56.000000000 -0800
    440498@@ -0,0 +1,41 @@
    441499+#ifndef _SPARC_TYPES_H
     
    480538+
    481539+#endif /* defined(_SPARC_TYPES_H) */
    482 diff -Naur silo-1.4.13.orig/include/ext2fs/ext2_err.h silo-1.4.13/include/ext2fs/ext2_err.h
    483 --- silo-1.4.13.orig/include/ext2fs/ext2_err.h  2006-06-01 13:24:53.000000000 -0400
    484 +++ silo-1.4.13/include/ext2fs/ext2_err.h       2007-04-03 17:02:53.000000000 -0400
     540diff -Naur silo-1.4.14.orig/include/ext2fs/ext2_err.h silo-1.4.14/include/ext2fs/ext2_err.h
     541--- silo-1.4.14.orig/include/ext2fs/ext2_err.h  2008-06-12 09:39:12.000000000 -0700
     542+++ silo-1.4.14/include/ext2fs/ext2_err.h       2009-01-07 15:07:56.000000000 -0800
    485543@@ -3,6 +3,8 @@
    486544  * This file is automatically generated; please do not edit it.
     
    529587 
    530588 /* for compatibility with older versions... */
    531 diff -Naur silo-1.4.13.orig/include/ext2fs/ext2_io.h silo-1.4.13/include/ext2fs/ext2_io.h
    532 --- silo-1.4.13.orig/include/ext2fs/ext2_io.h   2006-06-01 13:24:53.000000000 -0400
    533 +++ silo-1.4.13/include/ext2fs/ext2_io.h        2007-04-03 17:02:53.000000000 -0400
     589diff -Naur silo-1.4.14.orig/include/ext2fs/ext2_io.h silo-1.4.14/include/ext2fs/ext2_io.h
     590--- silo-1.4.14.orig/include/ext2fs/ext2_io.h   2008-06-12 09:39:12.000000000 -0700
     591+++ silo-1.4.14/include/ext2fs/ext2_io.h        2009-01-07 15:07:56.000000000 -0800
    534592@@ -27,6 +27,8 @@
    535593 typedef struct struct_io_manager *io_manager;
     
    578636 extern io_manager unix_io_manager;
    579637 
    580 diff -Naur silo-1.4.13.orig/libext2fs/alloc.c silo-1.4.13/libext2fs/alloc.c
    581 --- silo-1.4.13.orig/libext2fs/alloc.c  1969-12-31 19:00:00.000000000 -0500
    582 +++ silo-1.4.13/libext2fs/alloc.c       2007-04-03 17:02:53.000000000 -0400
     638diff -Naur silo-1.4.14.orig/include/linux/ufs_fs.h silo-1.4.14/include/linux/ufs_fs.h
     639--- silo-1.4.14.orig/include/linux/ufs_fs.h     1969-12-31 16:00:00.000000000 -0800
     640+++ silo-1.4.14/include/linux/ufs_fs.h  2009-01-07 15:07:56.000000000 -0800
     641@@ -0,0 +1,953 @@
     642+/*
     643+ *  linux/include/linux/ufs_fs.h
     644+ *
     645+ * Copyright (C) 1996
     646+ * Adrian Rodriguez (adrian@franklins-tower.rutgers.edu)
     647+ * Laboratory for Computer Science Research Computing Facility
     648+ * Rutgers, The State University of New Jersey
     649+ *
     650+ * Clean swab support by Fare <fare@tunes.org>
     651+ * just hope no one is using NNUUXXI on __?64 structure elements
     652+ * 64-bit clean thanks to Maciej W. Rozycki <macro@ds2.pg.gda.pl>
     653+ *
     654+ * 4.4BSD (FreeBSD) support added on February 1st 1998 by
     655+ * Niels Kristian Bech Jensen <nkbj@image.dk> partially based
     656+ * on code by Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>.
     657+ *
     658+ * NeXTstep support added on February 5th 1998 by
     659+ * Niels Kristian Bech Jensen <nkbj@image.dk>.
     660+ *
     661+ * Write support by Daniel Pirkl <daniel.pirkl@email.cz>
     662+ *
     663+ * HP/UX hfs filesystem support added by
     664+ * Martin K. Petersen <mkp@mkp.net>, August 1999
     665+ *
     666+ * UFS2 (of FreeBSD 5.x) support added by
     667+ * Niraj Kumar <niraj17@iitbombay.org>  , Jan 2004
     668+ *
     669+ */
     670+
     671+#ifndef __LINUX_UFS_FS_H
     672+#define __LINUX_UFS_FS_H
     673+
     674+#include <linux/types.h>
     675+#include <linux/kernel.h>
     676+#include <linux/stat.h>
     677+#include <linux/fs.h>
     678+
     679+#ifndef __KERNEL__
     680+typedef __u64 __fs64;
     681+typedef __u32 __fs32;
     682+typedef __u16 __fs16;
     683+#else
     684+#include <asm/div64.h>
     685+typedef __u64 __bitwise __fs64;
     686+typedef __u32 __bitwise __fs32;
     687+typedef __u16 __bitwise __fs16;
     688+#endif
     689+
     690+#define UFS_BBLOCK 0
     691+#define UFS_BBSIZE 8192
     692+#define UFS_SBLOCK 8192
     693+#define UFS_SBSIZE 8192
     694+
     695+#define UFS_SECTOR_SIZE 512
     696+#define UFS_SECTOR_BITS 9
     697+#define UFS_MAGIC  0x00011954
     698+#define UFS2_MAGIC 0x19540119
     699+#define UFS_CIGAM  0x54190100 /* byteswapped MAGIC */
     700+
     701+/* Copied from FreeBSD */
     702+/*
     703+ * Each disk drive contains some number of filesystems.
     704+ * A filesystem consists of a number of cylinder groups.
     705+ * Each cylinder group has inodes and data.
     706+ *
     707+ * A filesystem is described by its super-block, which in turn
     708+ * describes the cylinder groups.  The super-block is critical
     709+ * data and is replicated in each cylinder group to protect against
     710+ * catastrophic loss.  This is done at `newfs' time and the critical
     711+ * super-block data does not change, so the copies need not be
     712+ * referenced further unless disaster strikes.
     713+ *
     714+ * For filesystem fs, the offsets of the various blocks of interest
     715+ * are given in the super block as:
     716+ *      [fs->fs_sblkno]         Super-block
     717+ *      [fs->fs_cblkno]         Cylinder group block
     718+ *      [fs->fs_iblkno]         Inode blocks
     719+ *      [fs->fs_dblkno]         Data blocks
     720+ * The beginning of cylinder group cg in fs, is given by
     721+ * the ``cgbase(fs, cg)'' macro.
     722+ *
     723+ * Depending on the architecture and the media, the superblock may
     724+ * reside in any one of four places. For tiny media where every block
     725+ * counts, it is placed at the very front of the partition. Historically,
     726+ * UFS1 placed it 8K from the front to leave room for the disk label and
     727+ * a small bootstrap. For UFS2 it got moved to 64K from the front to leave
     728+ * room for the disk label and a bigger bootstrap, and for really piggy
     729+ * systems we check at 256K from the front if the first three fail. In
     730+ * all cases the size of the superblock will be SBLOCKSIZE. All values are
     731+ * given in byte-offset form, so they do not imply a sector size. The
     732+ * SBLOCKSEARCH specifies the order in which the locations should be searched.
     733+ */
     734+#define SBLOCK_FLOPPY        0
     735+#define SBLOCK_UFS1       8192
     736+#define SBLOCK_UFS2      65536
     737+#define SBLOCK_PIGGY    262144
     738+#define SBLOCKSIZE        8192
     739+#define SBLOCKSEARCH \
     740+        { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 }
     741+
     742+
     743+/* HP specific MAGIC values */
     744+
     745+#define UFS_MAGIC_LFN   0x00095014 /* fs supports filenames > 14 chars */
     746+#define UFS_CIGAM_LFN   0x14500900 /* srahc 41 < semanelif stroppus sf */
     747+
     748+#define UFS_MAGIC_SEC   0x00612195 /* B1 security fs */
     749+#define UFS_CIGAM_SEC   0x95216100
     750+
     751+#define UFS_MAGIC_FEA   0x00195612 /* fs_featurebits supported */
     752+#define UFS_CIGAM_FEA   0x12561900
     753+
     754+#define UFS_MAGIC_4GB   0x05231994 /* fs > 4 GB && fs_featurebits */
     755+#define UFS_CIGAM_4GB   0x94192305
     756+
     757+/* Seems somebody at HP goofed here. B1 and lfs are both 0x2 !?! */
     758+#define UFS_FSF_LFN     0x00000001 /* long file names */
     759+#define UFS_FSF_B1      0x00000002 /* B1 security */
     760+#define UFS_FSF_LFS     0x00000002 /* large files */
     761+#define UFS_FSF_LUID    0x00000004 /* large UIDs */
     762+
     763+/* End of HP stuff */
     764+
     765+
     766+#define UFS_BSIZE      8192
     767+#define UFS_MINBSIZE   4096
     768+#define UFS_FSIZE      1024
     769+#define UFS_MAXFRAG    (UFS_BSIZE / UFS_FSIZE)
     770+
     771+#define UFS_NDADDR 12
     772+#define UFS_NINDIR 3
     773+
     774+#define UFS_IND_BLOCK  (UFS_NDADDR + 0)
     775+#define UFS_DIND_BLOCK (UFS_NDADDR + 1)
     776+#define UFS_TIND_BLOCK (UFS_NDADDR + 2)
     777+
     778+#define UFS_NDIR_FRAGMENT (UFS_NDADDR << uspi->s_fpbshift)
     779+#define UFS_IND_FRAGMENT (UFS_IND_BLOCK << uspi->s_fpbshift)
     780+#define UFS_DIND_FRAGMENT (UFS_DIND_BLOCK << uspi->s_fpbshift)
     781+#define UFS_TIND_FRAGMENT (UFS_TIND_BLOCK << uspi->s_fpbshift)
     782+
     783+#define UFS_ROOTINO 2
     784+#define UFS_FIRST_INO (UFS_ROOTINO + 1)
     785+
     786+#define UFS_USEEFT  ((__u16)65535)
     787+
     788+#define UFS_FSOK      0x7c269d38
     789+#define UFS_FSACTIVE  ((__s8)0x00)
     790+#define UFS_FSCLEAN   ((__s8)0x01)
     791+#define UFS_FSSTABLE  ((__s8)0x02)
     792+#define UFS_FSOSF1    ((__s8)0x03)     /* is this correct for DEC OSF/1? */
     793+#define UFS_FSBAD     ((__s8)0xff)
     794+
     795+/* From here to next blank line, s_flags for ufs_sb_info */
     796+/* directory entry encoding */
     797+#define UFS_DE_MASK            0x00000010      /* mask for the following */
     798+#define UFS_DE_OLD             0x00000000
     799+#define UFS_DE_44BSD           0x00000010
     800+/* uid encoding */
     801+#define UFS_UID_MASK           0x00000060      /* mask for the following */
     802+#define UFS_UID_OLD            0x00000000
     803+#define UFS_UID_44BSD          0x00000020
     804+#define UFS_UID_EFT            0x00000040
     805+/* superblock state encoding */
     806+#define UFS_ST_MASK            0x00000700      /* mask for the following */
     807+#define UFS_ST_OLD             0x00000000
     808+#define UFS_ST_44BSD           0x00000100
     809+#define UFS_ST_SUN             0x00000200 /* Solaris */
     810+#define UFS_ST_SUNOS           0x00000300
     811+#define UFS_ST_SUNx86          0x00000400 /* Solaris x86 */
     812+/*cylinder group encoding */
     813+#define UFS_CG_MASK            0x00003000      /* mask for the following */
     814+#define UFS_CG_OLD             0x00000000
     815+#define UFS_CG_44BSD           0x00002000
     816+#define UFS_CG_SUN             0x00001000
     817+/* filesystem type encoding */
     818+#define UFS_TYPE_MASK          0x00010000      /* mask for the following */
     819+#define UFS_TYPE_UFS1          0x00000000
     820+#define UFS_TYPE_UFS2          0x00010000
     821+
     822+
     823+/* fs_inodefmt options */
     824+#define UFS_42INODEFMT -1
     825+#define UFS_44INODEFMT 2
     826+
     827+/*
     828+ * MINFREE gives the minimum acceptable percentage of file system
     829+ * blocks which may be free. If the freelist drops below this level
     830+ * only the superuser may continue to allocate blocks. This may
     831+ * be set to 0 if no reserve of free blocks is deemed necessary,
     832+ * however throughput drops by fifty percent if the file system
     833+ * is run at between 95% and 100% full; thus the minimum default
     834+ * value of fs_minfree is 5%. However, to get good clustering
     835+ * performance, 10% is a better choice. hence we use 10% as our
     836+ * default value. With 10% free space, fragmentation is not a
     837+ * problem, so we choose to optimize for time.
     838+ */
     839+#define UFS_MINFREE         5
     840+#define UFS_DEFAULTOPT      UFS_OPTTIME
     841+           
     842+/*
     843+ * Turn file system block numbers into disk block addresses.
     844+ * This maps file system blocks to device size blocks.
     845+ */
     846+#define ufs_fsbtodb(uspi, b)   ((b) << (uspi)->s_fsbtodb)
     847+#define        ufs_dbtofsb(uspi, b)    ((b) >> (uspi)->s_fsbtodb)
     848+
     849+/*
     850+ * Cylinder group macros to locate things in cylinder groups.
     851+ * They calc file system addresses of cylinder group data structures.
     852+ */
     853+#define        ufs_cgbase(c)   (uspi->s_fpg * (c))
     854+#define ufs_cgstart(c) ((uspi)->fs_magic == UFS2_MAGIC ?  ufs_cgbase(c) : \
     855+       (ufs_cgbase(c)  + uspi->s_cgoffset * ((c) & ~uspi->s_cgmask)))
     856+#define        ufs_cgsblock(c) (ufs_cgstart(c) + uspi->s_sblkno)       /* super blk */
     857+#define        ufs_cgcmin(c)   (ufs_cgstart(c) + uspi->s_cblkno)       /* cg block */
     858+#define        ufs_cgimin(c)   (ufs_cgstart(c) + uspi->s_iblkno)       /* inode blk */
     859+#define        ufs_cgdmin(c)   (ufs_cgstart(c) + uspi->s_dblkno)       /* 1st data */
     860+
     861+/*
     862+ * Macros for handling inode numbers:
     863+ *     inode number to file system block offset.
     864+ *     inode number to cylinder group number.
     865+ *     inode number to file system block address.
     866+ */
     867+#define        ufs_inotocg(x)          ((x) / uspi->s_ipg)
     868+#define        ufs_inotocgoff(x)       ((x) % uspi->s_ipg)
     869+#define        ufs_inotofsba(x)        (((u64)ufs_cgimin(ufs_inotocg(x))) + ufs_inotocgoff(x) / uspi->s_inopf)
     870+#define        ufs_inotofsbo(x)        ((x) % uspi->s_inopf)
     871+
     872+/*
     873+ * Compute the cylinder and rotational position of a cyl block addr.
     874+ */
     875+#define ufs_cbtocylno(bno) \
     876+       ((bno) * uspi->s_nspf / uspi->s_spc)
     877+#define ufs_cbtorpos(bno) \
     878+       ((((bno) * uspi->s_nspf % uspi->s_spc / uspi->s_nsect \
     879+       * uspi->s_trackskew + (bno) * uspi->s_nspf % uspi->s_spc \
     880+       % uspi->s_nsect * uspi->s_interleave) % uspi->s_nsect \
     881+       * uspi->s_nrpos) / uspi->s_npsect)
     882+
     883+/*
     884+ * The following macros optimize certain frequently calculated
     885+ * quantities by using shifts and masks in place of divisions
     886+ * modulos and multiplications.
     887+ */
     888+#define ufs_blkoff(loc)                ((loc) & uspi->s_qbmask)
     889+#define ufs_fragoff(loc)       ((loc) & uspi->s_qfmask)
     890+#define ufs_lblktosize(blk)    ((blk) << uspi->s_bshift)
     891+#define ufs_lblkno(loc)                ((loc) >> uspi->s_bshift)
     892+#define ufs_numfrags(loc)      ((loc) >> uspi->s_fshift)
     893+#define ufs_blkroundup(size)   (((size) + uspi->s_qbmask) & uspi->s_bmask)
     894+#define ufs_fragroundup(size)  (((size) + uspi->s_qfmask) & uspi->s_fmask)
     895+#define ufs_fragstoblks(frags) ((frags) >> uspi->s_fpbshift)
     896+#define ufs_blkstofrags(blks)  ((blks) << uspi->s_fpbshift)
     897+#define ufs_fragnum(fsb)       ((fsb) & uspi->s_fpbmask)
     898+#define ufs_blknum(fsb)                ((fsb) & ~uspi->s_fpbmask)
     899+
     900+#define        UFS_MAXNAMLEN 255
     901+#define UFS_MAXMNTLEN 512
     902+#define UFS2_MAXMNTLEN 468
     903+#define UFS2_MAXVOLLEN 32
     904+#define UFS_MAXCSBUFS 31
     905+#define UFS_LINK_MAX 32000
     906+/*
     907+#define        UFS2_NOCSPTRS   ((128 / sizeof(void *)) - 4)
     908+*/
     909+#define        UFS2_NOCSPTRS   28
     910+
     911+/*
     912+ * UFS_DIR_PAD defines the directory entries boundaries
     913+ * (must be a multiple of 4)
     914+ */
     915+#define UFS_DIR_PAD                    4
     916+#define UFS_DIR_ROUND                  (UFS_DIR_PAD - 1)
     917+#define UFS_DIR_REC_LEN(name_len)      (((name_len) + 1 + 8 + UFS_DIR_ROUND) & ~UFS_DIR_ROUND)
     918+
     919+struct ufs_timeval {
     920+       __fs32  tv_sec;
     921+       __fs32  tv_usec;
     922+};
     923+
     924+struct ufs_dir_entry {
     925+       __fs32  d_ino;                  /* inode number of this entry */
     926+       __fs16  d_reclen;               /* length of this entry */
     927+       union {
     928+               __fs16  d_namlen;               /* actual length of d_name */
     929+               struct {
     930+                       __u8    d_type;         /* file type */
     931+                       __u8    d_namlen;       /* length of string in d_name */
     932+               } d_44;
     933+       } d_u;
     934+       __u8    d_name[UFS_MAXNAMLEN + 1];      /* file name */
     935+};
     936+
     937+struct ufs_csum {
     938+       __fs32  cs_ndir;        /* number of directories */
     939+       __fs32  cs_nbfree;      /* number of free blocks */
     940+       __fs32  cs_nifree;      /* number of free inodes */
     941+       __fs32  cs_nffree;      /* number of free frags */
     942+};
     943+struct ufs2_csum_total {
     944+       __fs64  cs_ndir;        /* number of directories */
     945+       __fs64  cs_nbfree;      /* number of free blocks */
     946+       __fs64  cs_nifree;      /* number of free inodes */
     947+       __fs64  cs_nffree;      /* number of free frags */
     948+       __fs64   cs_numclusters;        /* number of free clusters */
     949+       __fs64   cs_spare[3];   /* future expansion */
     950+};
     951+
     952+struct ufs_csum_core {
     953+       __u64   cs_ndir;        /* number of directories */
     954+       __u64   cs_nbfree;      /* number of free blocks */
     955+       __u64   cs_nifree;      /* number of free inodes */
     956+       __u64   cs_nffree;      /* number of free frags */
     957+       __u64   cs_numclusters; /* number of free clusters */
     958+};
     959+
     960+/*
     961+ * File system flags
     962+ */
     963+#define UFS_UNCLEAN      0x01    /* file system not clean at mount (unused) */
     964+#define UFS_DOSOFTDEP    0x02    /* file system using soft dependencies */
     965+#define UFS_NEEDSFSCK    0x04    /* needs sync fsck (FreeBSD compat, unused) */
     966+#define UFS_INDEXDIRS    0x08    /* kernel supports indexed directories */
     967+#define UFS_ACLS         0x10    /* file system has ACLs enabled */
     968+#define UFS_MULTILABEL   0x20    /* file system is MAC multi-label */
     969+#define UFS_FLAGS_UPDATED 0x80   /* flags have been moved to new location */
     970+
     971+#if 0
     972+/*
     973+ * This is the actual superblock, as it is laid out on the disk.
     974+ * Do NOT use this structure, because of sizeof(ufs_super_block) > 512 and
     975+ * it may occupy several blocks, use
     976+ * struct ufs_super_block_(first,second,third) instead.
     977+ */
     978+struct ufs_super_block {
     979+       union {
     980+               struct {
     981+                       __fs32  fs_link;        /* UNUSED */
     982+               } fs_42;
     983+               struct {
     984+                       __fs32  fs_state;       /* file system state flag */
     985+               } fs_sun;
     986+       } fs_u0;
     987+       __fs32  fs_rlink;       /* UNUSED */
     988+       __fs32  fs_sblkno;      /* addr of super-block in filesys */
     989+       __fs32  fs_cblkno;      /* offset of cyl-block in filesys */
     990+       __fs32  fs_iblkno;      /* offset of inode-blocks in filesys */
     991+       __fs32  fs_dblkno;      /* offset of first data after cg */
     992+       __fs32  fs_cgoffset;    /* cylinder group offset in cylinder */
     993+       __fs32  fs_cgmask;      /* used to calc mod fs_ntrak */
     994+       __fs32  fs_time;        /* last time written -- time_t */
     995+       __fs32  fs_size;        /* number of blocks in fs */
     996+       __fs32  fs_dsize;       /* number of data blocks in fs */
     997+       __fs32  fs_ncg;         /* number of cylinder groups */
     998+       __fs32  fs_bsize;       /* size of basic blocks in fs */
     999+       __fs32  fs_fsize;       /* size of frag blocks in fs */
     1000+       __fs32  fs_frag;        /* number of frags in a block in fs */
     1001+/* these are configuration parameters */
     1002+       __fs32  fs_minfree;     /* minimum percentage of free blocks */
     1003+       __fs32  fs_rotdelay;    /* num of ms for optimal next block */
     1004+       __fs32  fs_rps;         /* disk revolutions per second */
     1005+/* these fields can be computed from the others */
     1006+       __fs32  fs_bmask;       /* ``blkoff'' calc of blk offsets */
     1007+       __fs32  fs_fmask;       /* ``fragoff'' calc of frag offsets */
     1008+       __fs32  fs_bshift;      /* ``lblkno'' calc of logical blkno */
     1009+       __fs32  fs_fshift;      /* ``numfrags'' calc number of frags */
     1010+/* these are configuration parameters */
     1011+       __fs32  fs_maxcontig;   /* max number of contiguous blks */
     1012+       __fs32  fs_maxbpg;      /* max number of blks per cyl group */
     1013+/* these fields can be computed from the others */
     1014+       __fs32  fs_fragshift;   /* block to frag shift */
     1015+       __fs32  fs_fsbtodb;     /* fsbtodb and dbtofsb shift constant */
     1016+       __fs32  fs_sbsize;      /* actual size of super block */
     1017+       __fs32  fs_csmask;      /* csum block offset */
     1018+       __fs32  fs_csshift;     /* csum block number */
     1019+       __fs32  fs_nindir;      /* value of NINDIR */
     1020+       __fs32  fs_inopb;       /* value of INOPB */
     1021+       __fs32  fs_nspf;        /* value of NSPF */
     1022+/* yet another configuration parameter */
     1023+       __fs32  fs_optim;       /* optimization preference, see below */
     1024+/* these fields are derived from the hardware */
     1025+       union {
     1026+               struct {
     1027+                       __fs32  fs_npsect;      /* # sectors/track including spares */
     1028+               } fs_sun;
     1029+               struct {
     1030+                       __fs32  fs_state;       /* file system state time stamp */
     1031+               } fs_sunx86;
     1032+       } fs_u1;
     1033+       __fs32  fs_interleave;  /* hardware sector interleave */
     1034+       __fs32  fs_trackskew;   /* sector 0 skew, per track */
     1035+/* a unique id for this filesystem (currently unused and unmaintained) */
     1036+/* In 4.3 Tahoe this space is used by fs_headswitch and fs_trkseek */
     1037+/* Neither of those fields is used in the Tahoe code right now but */
     1038+/* there could be problems if they are.                            */
     1039+       __fs32  fs_id[2];       /* file system id */
     1040+/* sizes determined by number of cylinder groups and their sizes */
     1041+       __fs32  fs_csaddr;      /* blk addr of cyl grp summary area */
     1042+       __fs32  fs_cssize;      /* size of cyl grp summary area */
     1043+       __fs32  fs_cgsize;      /* cylinder group size */
     1044+/* these fields are derived from the hardware */
     1045+       __fs32  fs_ntrak;       /* tracks per cylinder */
     1046+       __fs32  fs_nsect;       /* sectors per track */
     1047+       __fs32  fs_spc;         /* sectors per cylinder */
     1048+/* this comes from the disk driver partitioning */
     1049+       __fs32  fs_ncyl;        /* cylinders in file system */
     1050+/* these fields can be computed from the others */
     1051+       __fs32  fs_cpg;         /* cylinders per group */
     1052+       __fs32  fs_ipg;         /* inodes per cylinder group */
     1053+       __fs32  fs_fpg;         /* blocks per group * fs_frag */
     1054+/* this data must be re-computed after crashes */
     1055+       struct ufs_csum fs_cstotal;     /* cylinder summary information */
     1056+/* these fields are cleared at mount time */
     1057+       __s8    fs_fmod;        /* super block modified flag */
     1058+       __s8    fs_clean;       /* file system is clean flag */
     1059+       __s8    fs_ronly;       /* mounted read-only flag */
     1060+       __s8    fs_flags;
     1061+       union {
     1062+               struct {
     1063+                       __s8    fs_fsmnt[UFS_MAXMNTLEN];/* name mounted on */
     1064+                       __fs32  fs_cgrotor;     /* last cg searched */
     1065+                       __fs32  fs_csp[UFS_MAXCSBUFS];/*list of fs_cs info buffers */
     1066+                       __fs32  fs_maxcluster;
     1067+                       __fs32  fs_cpc;         /* cyl per cycle in postbl */
     1068+                       __fs16  fs_opostbl[16][8]; /* old rotation block list head */
     1069+               } fs_u1;
     1070+               struct {
     1071+                       __s8  fs_fsmnt[UFS2_MAXMNTLEN]; /* name mounted on */
     1072+                       __u8   fs_volname[UFS2_MAXVOLLEN]; /* volume name */
     1073+                       __fs64  fs_swuid;               /* system-wide uid */
     1074+                       __fs32  fs_pad; /* due to alignment of fs_swuid */
     1075+                       __fs32   fs_cgrotor;     /* last cg searched */
     1076+                       __fs32   fs_ocsp[UFS2_NOCSPTRS]; /*list of fs_cs info buffers */
     1077+                       __fs32   fs_contigdirs;/*# of contiguously allocated dirs */
     1078+                       __fs32   fs_csp;        /* cg summary info buffer for fs_cs */
     1079+                       __fs32   fs_maxcluster;
     1080+                       __fs32   fs_active;/* used by snapshots to track fs */
     1081+                       __fs32   fs_old_cpc;    /* cyl per cycle in postbl */
     1082+                       __fs32   fs_maxbsize;/*maximum blocking factor permitted */
     1083+                       __fs64   fs_sparecon64[17];/*old rotation block list head */
     1084+                       __fs64   fs_sblockloc; /* byte offset of standard superblock */
     1085+                       struct  ufs2_csum_total fs_cstotal;/*cylinder summary information*/
     1086+                       struct  ufs_timeval    fs_time;         /* last time written */
     1087+                       __fs64    fs_size;              /* number of blocks in fs */
     1088+                       __fs64    fs_dsize;     /* number of data blocks in fs */
     1089+                       __fs64   fs_csaddr;     /* blk addr of cyl grp summary area */
     1090+                       __fs64    fs_pendingblocks;/* blocks in process of being freed */
     1091+                       __fs32    fs_pendinginodes;/*inodes in process of being freed */
     1092+               } fs_u2;
     1093+       }  fs_u11;
     1094+       union {
     1095+               struct {
     1096+                       __fs32  fs_sparecon[53];/* reserved for future constants */
     1097+                       __fs32  fs_reclaim;
     1098+                       __fs32  fs_sparecon2[1];
     1099+                       __fs32  fs_state;       /* file system state time stamp */
     1100+                       __fs32  fs_qbmask[2];   /* ~usb_bmask */
     1101+                       __fs32  fs_qfmask[2];   /* ~usb_fmask */
     1102+               } fs_sun;
     1103+               struct {
     1104+                       __fs32  fs_sparecon[53];/* reserved for future constants */
     1105+                       __fs32  fs_reclaim;
     1106+                       __fs32  fs_sparecon2[1];
     1107+                       __fs32  fs_npsect;      /* # sectors/track including spares */
     1108+                       __fs32  fs_qbmask[2];   /* ~usb_bmask */
     1109+                       __fs32  fs_qfmask[2];   /* ~usb_fmask */
     1110+               } fs_sunx86;
     1111+               struct {
     1112+                       __fs32  fs_sparecon[50];/* reserved for future constants */
     1113+                       __fs32  fs_contigsumsize;/* size of cluster summary array */
     1114+                       __fs32  fs_maxsymlinklen;/* max length of an internal symlink */
     1115+                       __fs32  fs_inodefmt;    /* format of on-disk inodes */
     1116+                       __fs32  fs_maxfilesize[2];      /* max representable file size */
     1117+                       __fs32  fs_qbmask[2];   /* ~usb_bmask */
     1118+                       __fs32  fs_qfmask[2];   /* ~usb_fmask */
     1119+                       __fs32  fs_state;       /* file system state time stamp */
     1120+               } fs_44;
     1121+       } fs_u2;
     1122+       __fs32  fs_postblformat;        /* format of positional layout tables */
     1123+       __fs32  fs_nrpos;               /* number of rotational positions */
     1124+       __fs32  fs_postbloff;           /* (__s16) rotation block list head */
     1125+       __fs32  fs_rotbloff;            /* (__u8) blocks for each rotation */
     1126+       __fs32  fs_magic;               /* magic number */
     1127+       __u8    fs_space[1];            /* list of blocks for each rotation */
     1128+};
     1129+#endif/*struct ufs_super_block*/
     1130+
     1131+/*
     1132+ * Preference for optimization.
     1133+ */
     1134+#define UFS_OPTTIME    0       /* minimize allocation time */
     1135+#define UFS_OPTSPACE   1       /* minimize disk fragmentation */
     1136+
     1137+/*
     1138+ * Rotational layout table format types
     1139+ */
     1140+#define UFS_42POSTBLFMT                -1      /* 4.2BSD rotational table format */
     1141+#define UFS_DYNAMICPOSTBLFMT   1       /* dynamic rotational table format */
     1142+
     1143+/*
     1144+ * Convert cylinder group to base address of its global summary info.
     1145+ */
     1146+#define fs_cs(indx) s_csp[(indx)]
     1147+
     1148+/*
     1149+ * Cylinder group block for a file system.
     1150+ *
     1151+ * Writable fields in the cylinder group are protected by the associated
     1152+ * super block lock fs->fs_lock.
     1153+ */
     1154+#define        CG_MAGIC        0x090255
     1155+#define ufs_cg_chkmagic(sb, ucg) \
     1156+       (fs32_to_cpu((sb), (ucg)->cg_magic) == CG_MAGIC)
     1157+/*
     1158+ * Macros for access to old cylinder group array structures
     1159+ */
     1160+#define ufs_ocg_blktot(sb, ucg)      fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_btot)
     1161+#define ufs_ocg_blks(sb, ucg, cylno) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_b[cylno])
     1162+#define ufs_ocg_inosused(sb, ucg)    fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_iused)
     1163+#define ufs_ocg_blksfree(sb, ucg)    fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_free)
     1164+#define ufs_ocg_chkmagic(sb, ucg) \
     1165+       (fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_magic) == CG_MAGIC)
     1166+
     1167+/*
     1168+ * size of this structure is 172 B
     1169+ */
     1170+struct ufs_cylinder_group {
     1171+       __fs32  cg_link;                /* linked list of cyl groups */
     1172+       __fs32  cg_magic;               /* magic number */
     1173+       __fs32  cg_time;                /* time last written */
     1174+       __fs32  cg_cgx;                 /* we are the cgx'th cylinder group */
     1175+       __fs16  cg_ncyl;                /* number of cyl's this cg */
     1176+       __fs16  cg_niblk;               /* number of inode blocks this cg */
     1177+       __fs32  cg_ndblk;               /* number of data blocks this cg */
     1178+       struct  ufs_csum cg_cs;         /* cylinder summary information */
     1179+       __fs32  cg_rotor;               /* position of last used block */
     1180+       __fs32  cg_frotor;              /* position of last used frag */
     1181+       __fs32  cg_irotor;              /* position of last used inode */
     1182+       __fs32  cg_frsum[UFS_MAXFRAG];  /* counts of available frags */
     1183+       __fs32  cg_btotoff;             /* (__u32) block totals per cylinder */
     1184+       __fs32  cg_boff;                /* (short) free block positions */
     1185+       __fs32  cg_iusedoff;            /* (char) used inode map */
     1186+       __fs32  cg_freeoff;             /* (u_char) free block map */
     1187+       __fs32  cg_nextfreeoff;         /* (u_char) next available space */
     1188+       union {
     1189+               struct {
     1190+                       __fs32  cg_clustersumoff;       /* (u_int32) counts of avail clusters */
     1191+                       __fs32  cg_clusteroff;          /* (u_int8) free cluster map */
     1192+                       __fs32  cg_nclusterblks;        /* number of clusters this cg */
     1193+                       __fs32  cg_sparecon[13];        /* reserved for future use */
     1194+               } cg_44;
     1195+               struct {
     1196+                       __fs32  cg_clustersumoff;/* (u_int32) counts of avail clusters */
     1197+                       __fs32  cg_clusteroff;  /* (u_int8) free cluster map */
     1198+                       __fs32  cg_nclusterblks;/* number of clusters this cg */
     1199+                       __fs32   cg_niblk; /* number of inode blocks this cg */
     1200+                       __fs32   cg_initediblk; /* last initialized inode */
     1201+                       __fs32   cg_sparecon32[3];/* reserved for future use */
     1202+                       __fs64   cg_time;       /* time last written */
     1203+                       __fs64  cg_sparecon[3]; /* reserved for future use */
     1204+               } cg_u2;
     1205+               __fs32  cg_sparecon[16];        /* reserved for future use */
     1206+       } cg_u;
     1207+       __u8    cg_space[1];            /* space for cylinder group maps */
     1208+/* actually longer */
     1209+};
     1210+
     1211+/* Historic Cylinder group info */
     1212+struct ufs_old_cylinder_group {
     1213+       __fs32  cg_link;                /* linked list of cyl groups */
     1214+       __fs32  cg_rlink;               /* for incore cyl groups     */
     1215+       __fs32  cg_time;                /* time last written */
     1216+       __fs32  cg_cgx;                 /* we are the cgx'th cylinder group */
     1217+       __fs16  cg_ncyl;                /* number of cyl's this cg */
     1218+       __fs16  cg_niblk;               /* number of inode blocks this cg */
     1219+       __fs32  cg_ndblk;               /* number of data blocks this cg */
     1220+       struct  ufs_csum cg_cs;         /* cylinder summary information */
     1221+       __fs32  cg_rotor;               /* position of last used block */
     1222+       __fs32  cg_frotor;              /* position of last used frag */
     1223+       __fs32  cg_irotor;              /* position of last used inode */
     1224+       __fs32  cg_frsum[8];            /* counts of available frags */
     1225+       __fs32  cg_btot[32];            /* block totals per cylinder */
     1226+       __fs16  cg_b[32][8];            /* positions of free blocks */
     1227+       __u8    cg_iused[256];          /* used inode map */
     1228+       __fs32  cg_magic;               /* magic number */
     1229+       __u8    cg_free[1];             /* free block map */
     1230+/* actually longer */
     1231+};
     1232+
     1233+/*
     1234+ * structure of an on-disk inode
     1235+ */
     1236+struct ufs_inode {
     1237+       __fs16  ui_mode;                /*  0x0 */
     1238+       __fs16  ui_nlink;               /*  0x2 */
     1239+       union {
     1240+               struct {
     1241+                       __fs16  ui_suid;        /*  0x4 */
     1242+                       __fs16  ui_sgid;        /*  0x6 */
     1243+               } oldids;
     1244+               __fs32  ui_inumber;             /*  0x4 lsf: inode number */
     1245+               __fs32  ui_author;              /*  0x4 GNU HURD: author */
     1246+       } ui_u1;
     1247+       __fs64  ui_size;                /*  0x8 */
     1248+       struct ufs_timeval ui_atime;    /* 0x10 access */
     1249+       struct ufs_timeval ui_mtime;    /* 0x18 modification */
     1250+       struct ufs_timeval ui_ctime;    /* 0x20 creation */
     1251+       union {
     1252+               struct {
     1253+                       __fs32  ui_db[UFS_NDADDR];/* 0x28 data blocks */
     1254+                       __fs32  ui_ib[UFS_NINDIR];/* 0x58 indirect blocks */
     1255+               } ui_addr;
     1256+               __u8    ui_symlink[4*(UFS_NDADDR+UFS_NINDIR)];/* 0x28 fast symlink */
     1257+       } ui_u2;
     1258+       __fs32  ui_flags;               /* 0x64 immutable, append-only... */
     1259+       __fs32  ui_blocks;              /* 0x68 blocks in use */
     1260+       __fs32  ui_gen;                 /* 0x6c like ext2 i_version, for NFS support */
     1261+       union {
     1262+               struct {
     1263+                       __fs32  ui_shadow;      /* 0x70 shadow inode with security data */
     1264+                       __fs32  ui_uid;         /* 0x74 long EFT version of uid */
     1265+                       __fs32  ui_gid;         /* 0x78 long EFT version of gid */
     1266+                       __fs32  ui_oeftflag;    /* 0x7c reserved */
     1267+               } ui_sun;
     1268+               struct {
     1269+                       __fs32  ui_uid;         /* 0x70 File owner */
     1270+                       __fs32  ui_gid;         /* 0x74 File group */
     1271+                       __fs32  ui_spare[2];    /* 0x78 reserved */
     1272+               } ui_44;
     1273+               struct {
     1274+                       __fs32  ui_uid;         /* 0x70 */
     1275+                       __fs32  ui_gid;         /* 0x74 */
     1276+                       __fs16  ui_modeh;       /* 0x78 mode high bits */
     1277+                       __fs16  ui_spare;       /* 0x7A unused */
     1278+                       __fs32  ui_trans;       /* 0x7c filesystem translator */
     1279+               } ui_hurd;
     1280+       } ui_u3;
     1281+};
     1282+
     1283+#define UFS_NXADDR  2            /* External addresses in inode. */
     1284+struct ufs2_inode {
     1285+       __fs16     ui_mode;        /*   0: IFMT, permissions; see below. */
     1286+       __fs16     ui_nlink;       /*   2: File link count. */
     1287+       __fs32     ui_uid;         /*   4: File owner. */
     1288+       __fs32     ui_gid;         /*   8: File group. */
     1289+       __fs32     ui_blksize;     /*  12: Inode blocksize. */
     1290+       __fs64     ui_size;        /*  16: File byte count. */
     1291+       __fs64     ui_blocks;      /*  24: Bytes actually held. */
     1292+       __fs64   ui_atime;       /*  32: Last access time. */
     1293+       __fs64   ui_mtime;       /*  40: Last modified time. */
     1294+       __fs64   ui_ctime;       /*  48: Last inode change time. */
     1295+       __fs64   ui_birthtime;   /*  56: Inode creation time. */
     1296+       __fs32     ui_mtimensec;   /*  64: Last modified time. */
     1297+       __fs32     ui_atimensec;   /*  68: Last access time. */
     1298+       __fs32     ui_ctimensec;   /*  72: Last inode change time. */
     1299+       __fs32     ui_birthnsec;   /*  76: Inode creation time. */
     1300+       __fs32     ui_gen;         /*  80: Generation number. */
     1301+       __fs32     ui_kernflags;   /*  84: Kernel flags. */
     1302+       __fs32     ui_flags;       /*  88: Status flags (chflags). */
     1303+       __fs32     ui_extsize;     /*  92: External attributes block. */
     1304+       __fs64     ui_extb[UFS_NXADDR];/*  96: External attributes block. */
     1305+       union {
     1306+               struct {
     1307+                       __fs64     ui_db[UFS_NDADDR]; /* 112: Direct disk blocks. */
     1308+                       __fs64     ui_ib[UFS_NINDIR];/* 208: Indirect disk blocks.*/
     1309+               } ui_addr;
     1310+       __u8    ui_symlink[2*4*(UFS_NDADDR+UFS_NINDIR)];/* 0x28 fast symlink */
     1311+       } ui_u2;
     1312+       __fs64     ui_spare[3];    /* 232: Reserved; currently unused */
     1313+};
     1314+
     1315+
     1316+/* FreeBSD has these in sys/stat.h */
     1317+/* ui_flags that can be set by a file owner */
     1318+#define UFS_UF_SETTABLE   0x0000ffff
     1319+#define UFS_UF_NODUMP     0x00000001  /* do not dump */
     1320+#define UFS_UF_IMMUTABLE  0x00000002  /* immutable (can't "change") */
     1321+#define UFS_UF_APPEND     0x00000004  /* append-only */
     1322+#define UFS_UF_OPAQUE     0x00000008  /* directory is opaque (unionfs) */
     1323+#define UFS_UF_NOUNLINK   0x00000010  /* can't be removed or renamed */
     1324+/* ui_flags that only root can set */
     1325+#define UFS_SF_SETTABLE   0xffff0000
     1326+#define UFS_SF_ARCHIVED   0x00010000  /* archived */
     1327+#define UFS_SF_IMMUTABLE  0x00020000  /* immutable (can't "change") */
     1328+#define UFS_SF_APPEND     0x00040000  /* append-only */
     1329+#define UFS_SF_NOUNLINK   0x00100000  /* can't be removed or renamed */
     1330+
     1331+/*
     1332+ * This structure is used for reading disk structures larger
     1333+ * than the size of fragment.
     1334+ */
     1335+struct ufs_buffer_head {
     1336+       __u64 fragment;                 /* first fragment */
     1337+       __u64 count;                            /* number of fragments */
     1338+       struct buffer_head * bh[UFS_MAXFRAG];   /* buffers */
     1339+};
     1340+
     1341+struct ufs_cg_private_info {
     1342+       struct ufs_buffer_head c_ubh;
     1343+       __u32   c_cgx;          /* number of cylidner group */
     1344+       __u16   c_ncyl;         /* number of cyl's this cg */
     1345+       __u16   c_niblk;        /* number of inode blocks this cg */
     1346+       __u32   c_ndblk;        /* number of data blocks this cg */
     1347+       __u32   c_rotor;        /* position of last used block */
     1348+       __u32   c_frotor;       /* position of last used frag */
     1349+       __u32   c_irotor;       /* position of last used inode */
     1350+       __u32   c_btotoff;      /* (__u32) block totals per cylinder */
     1351+       __u32   c_boff;         /* (short) free block positions */
     1352+       __u32   c_iusedoff;     /* (char) used inode map */
     1353+       __u32   c_freeoff;      /* (u_char) free block map */
     1354+       __u32   c_nextfreeoff;  /* (u_char) next available space */
     1355+       __u32   c_clustersumoff;/* (u_int32) counts of avail clusters */
     1356+       __u32   c_clusteroff;   /* (u_int8) free cluster map */
     1357+       __u32   c_nclusterblks; /* number of clusters this cg */
     1358+};     
     1359+
     1360+
     1361+struct ufs_sb_private_info {
     1362+       struct ufs_buffer_head s_ubh; /* buffer containing super block */
     1363+       struct ufs_csum_core cs_total;
     1364+       __u32   s_sblkno;       /* offset of super-blocks in filesys */
     1365+       __u32   s_cblkno;       /* offset of cg-block in filesys */
     1366+       __u32   s_iblkno;       /* offset of inode-blocks in filesys */
     1367+       __u32   s_dblkno;       /* offset of first data after cg */
     1368+       __u32   s_cgoffset;     /* cylinder group offset in cylinder */
     1369+       __u32   s_cgmask;       /* used to calc mod fs_ntrak */
     1370+       __u32   s_size;         /* number of blocks (fragments) in fs */
     1371+       __u32   s_dsize;        /* number of data blocks in fs */
     1372+       __u64   s_u2_size;      /* ufs2: number of blocks (fragments) in fs */
     1373+       __u64   s_u2_dsize;     /*ufs2:  number of data blocks in fs */
     1374+       __u32   s_ncg;          /* number of cylinder groups */
     1375+       __u32   s_bsize;        /* size of basic blocks */
     1376+       __u32   s_fsize;        /* size of fragments */
     1377+       __u32   s_fpb;          /* fragments per block */
     1378+       __u32   s_minfree;      /* minimum percentage of free blocks */
     1379+       __u32   s_bmask;        /* `blkoff'' calc of blk offsets */
     1380+       __u32   s_fmask;        /* s_fsize mask */
     1381+       __u32   s_bshift;       /* `lblkno'' calc of logical blkno */
     1382+       __u32   s_fshift;       /* s_fsize shift */
     1383+       __u32   s_fpbshift;     /* fragments per block shift */
     1384+       __u32   s_fsbtodb;      /* fsbtodb and dbtofsb shift constant */
     1385+       __u32   s_sbsize;       /* actual size of super block */
     1386+       __u32   s_csmask;       /* csum block offset */
     1387+       __u32   s_csshift;      /* csum block number */
     1388+       __u32   s_nindir;       /* value of NINDIR */
     1389+       __u32   s_inopb;        /* value of INOPB */
     1390+       __u32   s_nspf;         /* value of NSPF */
     1391+       __u32   s_npsect;       /* # sectors/track including spares */
     1392+       __u32   s_interleave;   /* hardware sector interleave */
     1393+       __u32   s_trackskew;    /* sector 0 skew, per track */
     1394+       __u64   s_csaddr;       /* blk addr of cyl grp summary area */
     1395+       __u32   s_cssize;       /* size of cyl grp summary area */
     1396+       __u32   s_cgsize;       /* cylinder group size */
     1397+       __u32   s_ntrak;        /* tracks per cylinder */
     1398+       __u32   s_nsect;        /* sectors per track */
     1399+       __u32   s_spc;          /* sectors per cylinder */
     1400+       __u32   s_ipg;          /* inodes per cylinder group */
     1401+       __u32   s_fpg;          /* fragments per group */
     1402+       __u32   s_cpc;          /* cyl per cycle in postbl */
     1403+       __s32   s_contigsumsize;/* size of cluster summary array, 44bsd */
     1404+       __s64   s_qbmask;       /* ~usb_bmask */
     1405+       __s64   s_qfmask;       /* ~usb_fmask */
     1406+       __s32   s_postblformat; /* format of positional layout tables */
     1407+       __s32   s_nrpos;        /* number of rotational positions */
     1408+        __s32  s_postbloff;    /* (__s16) rotation block list head */
     1409+       __s32   s_rotbloff;     /* (__u8) blocks for each rotation */
     1410+
     1411+       __u32   s_fpbmask;      /* fragments per block mask */
     1412+       __u32   s_apb;          /* address per block */
     1413+       __u32   s_2apb;         /* address per block^2 */
     1414+       __u32   s_3apb;         /* address per block^3 */
     1415+       __u32   s_apbmask;      /* address per block mask */
     1416+       __u32   s_apbshift;     /* address per block shift */
     1417+       __u32   s_2apbshift;    /* address per block shift * 2 */
     1418+       __u32   s_3apbshift;    /* address per block shift * 3 */
     1419+       __u32   s_nspfshift;    /* number of sector per fragment shift */
     1420+       __u32   s_nspb;         /* number of sector per block */
     1421+       __u32   s_inopf;        /* inodes per fragment */
     1422+       __u32   s_sbbase;       /* offset of NeXTstep superblock */
     1423+       __u32   s_bpf;          /* bits per fragment */
     1424+       __u32   s_bpfshift;     /* bits per fragment shift*/
     1425+       __u32   s_bpfmask;      /* bits per fragment mask */
     1426+
     1427+       __u32   s_maxsymlinklen;/* upper limit on fast symlinks' size */
     1428+       __s32   fs_magic;       /* filesystem magic */
     1429+       unsigned int s_dirblksize;
     1430+};
     1431+
     1432+/*
     1433+ * Sizes of this structures are:
     1434+ *     ufs_super_block_first   512
     1435+ *     ufs_super_block_second  512
     1436+ *     ufs_super_block_third   356
     1437+ */
     1438+struct ufs_super_block_first {
     1439+       union {
     1440+               struct {
     1441+                       __fs32  fs_link;        /* UNUSED */
     1442+               } fs_42;
     1443+               struct {
     1444+                       __fs32  fs_state;       /* file system state flag */
     1445+               } fs_sun;
     1446+       } fs_u0;
     1447+       __fs32  fs_rlink;
     1448+       __fs32  fs_sblkno;
     1449+       __fs32  fs_cblkno;
     1450+       __fs32  fs_iblkno;
     1451+       __fs32  fs_dblkno;
     1452+       __fs32  fs_cgoffset;
     1453+       __fs32  fs_cgmask;
     1454+       __fs32  fs_time;
     1455+       __fs32  fs_size;
     1456+       __fs32  fs_dsize;
     1457+       __fs32  fs_ncg;
     1458+       __fs32  fs_bsize;
     1459+       __fs32  fs_fsize;
     1460+       __fs32  fs_frag;
     1461+       __fs32  fs_minfree;
     1462+       __fs32  fs_rotdelay;
     1463+       __fs32  fs_rps;
     1464+       __fs32  fs_bmask;
     1465+       __fs32  fs_fmask;
     1466+       __fs32  fs_bshift;
     1467+       __fs32  fs_fshift;
     1468+       __fs32  fs_maxcontig;
     1469+       __fs32  fs_maxbpg;
     1470+       __fs32  fs_fragshift;
     1471+       __fs32  fs_fsbtodb;
     1472+       __fs32  fs_sbsize;
     1473+       __fs32  fs_csmask;
     1474+       __fs32  fs_csshift;
     1475+       __fs32  fs_nindir;
     1476+       __fs32  fs_inopb;
     1477+       __fs32  fs_nspf;
     1478+       __fs32  fs_optim;
     1479+       union {
     1480+               struct {
     1481+                       __fs32  fs_npsect;
     1482+               } fs_sun;
     1483+               struct {
     1484+                       __fs32  fs_state;
     1485+               } fs_sunx86;
     1486+       } fs_u1;
     1487+       __fs32  fs_interleave;
     1488+       __fs32  fs_trackskew;
     1489+       __fs32  fs_id[2];
     1490+       __fs32  fs_csaddr;
     1491+       __fs32  fs_cssize;
     1492+       __fs32  fs_cgsize;
     1493+       __fs32  fs_ntrak;
     1494+       __fs32  fs_nsect;
     1495+       __fs32  fs_spc;
     1496+       __fs32  fs_ncyl;
     1497+       __fs32  fs_cpg;
     1498+       __fs32  fs_ipg;
     1499+       __fs32  fs_fpg;
     1500+       struct ufs_csum fs_cstotal;
     1501+       __s8    fs_fmod;
     1502+       __s8    fs_clean;
     1503+       __s8    fs_ronly;
     1504+       __s8    fs_flags;
     1505+       __s8    fs_fsmnt[UFS_MAXMNTLEN - 212];
     1506+
     1507+};
     1508+
     1509+struct ufs_super_block_second {
     1510+       union {
     1511+               struct {
     1512+                       __s8    fs_fsmnt[212];
     1513+                       __fs32  fs_cgrotor;
     1514+                       __fs32  fs_csp[UFS_MAXCSBUFS];
     1515+                       __fs32  fs_maxcluster;
     1516+                       __fs32  fs_cpc;
     1517+                       __fs16  fs_opostbl[82];
     1518+               } fs_u1;
     1519+               struct {
     1520+                       __s8  fs_fsmnt[UFS2_MAXMNTLEN - UFS_MAXMNTLEN + 212];
     1521+                       __u8   fs_volname[UFS2_MAXVOLLEN];
     1522+                       __fs64  fs_swuid;
     1523+                       __fs32  fs_pad;
     1524+                       __fs32   fs_cgrotor;
     1525+                       __fs32   fs_ocsp[UFS2_NOCSPTRS];
     1526+                       __fs32   fs_contigdirs;
     1527+                       __fs32   fs_csp;
     1528+                       __fs32   fs_maxcluster;
     1529+                       __fs32   fs_active;
     1530+                       __fs32   fs_old_cpc;
     1531+                       __fs32   fs_maxbsize;
     1532+                       __fs64   fs_sparecon64[17];
     1533+                       __fs64   fs_sblockloc;
     1534+                       __fs64  cs_ndir;
     1535+                       __fs64  cs_nbfree;
     1536+               } fs_u2;
     1537+       } fs_un;
     1538+};
     1539+
     1540+struct ufs_super_block_third {
     1541+       union {
     1542+               struct {
     1543+                       __fs16  fs_opostbl[46];
     1544+               } fs_u1;
     1545+               struct {
     1546+                       __fs64  cs_nifree;      /* number of free inodes */
     1547+                       __fs64  cs_nffree;      /* number of free frags */
     1548+                       __fs64   cs_numclusters;        /* number of free clusters */
     1549+                       __fs64   cs_spare[3];   /* future expansion */
     1550+                       struct  ufs_timeval    fs_time;         /* last time written */
     1551+                       __fs64    fs_size;              /* number of blocks in fs */
     1552+                       __fs64    fs_dsize;     /* number of data blocks in fs */
     1553+                       __fs64   fs_csaddr;     /* blk addr of cyl grp summary area */
     1554+                       __fs64    fs_pendingblocks;/* blocks in process of being freed */
     1555+                       __fs32    fs_pendinginodes;/*inodes in process of being freed */
     1556+               } __attribute__ ((packed)) fs_u2;
     1557+       } fs_un1;
     1558+       union {
     1559+               struct {
     1560+                       __fs32  fs_sparecon[53];/* reserved for future constants */
     1561+                       __fs32  fs_reclaim;
     1562+                       __fs32  fs_sparecon2[1];
     1563+                       __fs32  fs_state;       /* file system state time stamp */
     1564+                       __fs32  fs_qbmask[2];   /* ~usb_bmask */
     1565+                       __fs32  fs_qfmask[2];   /* ~usb_fmask */
     1566+               } fs_sun;
     1567+               struct {
     1568+                       __fs32  fs_sparecon[53];/* reserved for future constants */
     1569+                       __fs32  fs_reclaim;
     1570+                       __fs32  fs_sparecon2[1];
     1571+                       __fs32  fs_npsect;      /* # sectors/track including spares */
     1572+                       __fs32  fs_qbmask[2];   /* ~usb_bmask */
     1573+                       __fs32  fs_qfmask[2];   /* ~usb_fmask */
     1574+               } fs_sunx86;
     1575+               struct {
     1576+                       __fs32  fs_sparecon[50];/* reserved for future constants */
     1577+                       __fs32  fs_contigsumsize;/* size of cluster summary array */
     1578+                       __fs32  fs_maxsymlinklen;/* max length of an internal symlink */
     1579+                       __fs32  fs_inodefmt;    /* format of on-disk inodes */
     1580+                       __fs32  fs_maxfilesize[2];      /* max representable file size */
     1581+                       __fs32  fs_qbmask[2];   /* ~usb_bmask */
     1582+                       __fs32  fs_qfmask[2];   /* ~usb_fmask */
     1583+                       __fs32  fs_state;       /* file system state time stamp */
     1584+               } fs_44;
     1585+       } fs_un2;
     1586+       __fs32  fs_postblformat;
     1587+       __fs32  fs_nrpos;
     1588+       __fs32  fs_postbloff;
     1589+       __fs32  fs_rotbloff;
     1590+       __fs32  fs_magic;
     1591+       __u8    fs_space[1];
     1592+};
     1593+
     1594+#endif /* __LINUX_UFS_FS_H */
     1595diff -Naur silo-1.4.14.orig/libext2fs/ChangeLog silo-1.4.14/libext2fs/ChangeLog
     1596--- silo-1.4.14.orig/libext2fs/ChangeLog        1969-12-31 16:00:00.000000000 -0800
     1597+++ silo-1.4.14/libext2fs/ChangeLog     2009-01-07 15:07:56.000000000 -0800
     1598@@ -0,0 +1,3311 @@
     1599+2006-06-30  Theodore Ts'o  <tytso@mit.edu>
     1600+
     1601+       * Release of E2fsprogs 1.38
     1602+
     1603+2005-06-30  Theodore Ts'o  <tytso@mit.edu>
     1604+
     1605+       * bitops.h, bitops.c (ext2fs_set_bit, ext2fs_clear_bit,
     1606+               ext2fs_test_bit): Change these function prototypes to be
     1607+               unsigned int's.  Negative bit numbers were never allowed
     1608+               (and never made any sense), so this should be a safe
     1609+               change.  This is needed to allow safe use of block numbers
     1610+               greater than or equal to 2**31.
     1611+
     1612+2005-06-27  Stephen Tweedie  <sct@redhat.com>
     1613+
     1614+       * ext2fs.h (ext2fs_resize_mem): Fix C99 strict type aliasing
     1615+               problems.  Addresses Red Hat Bugzilla #161183.
     1616+
     1617+2005-06-19  Theodore Ts'o  <tytso@mit.edu>
     1618+
     1619+       * getsectsize.c (BLKSSZGET): Clean up test for when to manually
     1620+               define the BLKSSZGET ioctl.
     1621+
     1622+2005-05-29  Theodore Ts'o  <tytso@mit.edu>
     1623+
     1624+       * ismounted.c (ext2fs_check_mount_point): Add test to see if the
     1625+               device appears to be busy; this only works on Linux 2.6+
     1626+               systems, but provides some additional bullet-proofing in
     1627+               those cases.
     1628+
     1629+2005-05-08  Theodore Ts'o  <tytso@mit.edu>
     1630+
     1631+       * test_io.c (safe_getenv): Fix bug so it would fetch the right
     1632+               environment variable.
     1633+
     1634+2005-04-09  Theodore Ts'o  <tytso@mit.edu>
     1635+
     1636+       * inode.c (ext2fs_write_new_inode),
     1637+               ind_block.c (ext2fs_read_ind_block): Add missing return
     1638+               value in error return case.  (Otherwise we return garbage
     1639+               instead of the error code.)
     1640+
     1641+2005-03-31  Theodore Ts'o  <tytso@mit.edu>
     1642+
     1643+       * test_io.c (test_open): If called by a setuid/setgid or an
     1644+               otherwise privileged program, be paranoid and ignore the
     1645+               TEST_IO_* environment variables.
     1646+
     1647+2005-03-21  Theodore Ts'o  <tytso@mit.edu>
     1648+
     1649+       * Release of E2fsprogs 1.37
     1650+
     1651+2005-03-21  Theodore Ts'o  <tytso@mit.edu>
     1652+
     1653+       * ext2_ext_attr.h (EXT2_XATTR_LEN, EXT2_XATTR_SIZE): Add new
     1654+               convenience cpp macros.
     1655+
     1656+2005-03-20  Theodore Ts'o  <tytso@mit.edu>
     1657+
     1658+       * mkdir.c (ext2fs_mkdir): Call ext2fs_write_new_inode() instead of
     1659+               ext2fs_write_inode().
     1660+
     1661+       * inode.c (ext2fs_write_new_inode): New function which should be
     1662+               used when the caller is writing an inode for the first
     1663+               time.  It makes sure that the extra portion of the large
     1664+               inode is initialized properly.
     1665+
     1666+2005-03-18  Theodore Ts'o  <tytso@mit.edu>
     1667+
     1668+       * Makefile.in: Fix clean target to remove tst_getsectsize.
     1669+
     1670+       * getsize.c (ext2fs_get_device_size): Check to see if the number
     1671+               of blocks is greater than 2**32 when we are doing a binary
     1672+               search to determine the device size.  Thanks to Stephen
     1673+               Tweedie for the patch.
     1674+       
     1675+2006-02-05  Theodore Ts'o  <tytso@mit.edu>
     1676+
     1677+       * Release of E2fsprogs 1.36
     1678+
     1679+2005-02-05  Theodore Ts'o  <tytso@mit.edu>
     1680+
     1681+       * Makefile.in: Remove ext2fs.pc on a "make distclean"
     1682+
     1683+2005-02-04  Theodore Ts'o  <tytso@mit.edu>
     1684+
     1685+       * Makefile.in (clean): Remove tst_getsize when doing a make clean
     1686+
     1687+2005-02-03  Theodore Ts'o  <tytso@mit.edu>
     1688+
     1689+       * bitops.c: Make the generic functions more efficient.
     1690+
     1691+       * bitops.h: Drop SPARC assembly code. It's less efficient than GCC
     1692+               3.4 compiled code and also triggers nasty compiler
     1693+               warnings on sparc64.  Thanks to Matthias Andree for his
     1694+               analysis and suggestion.
     1695+       
     1696+2005-01-27  Theodore Ts'o  <tytso@mit.edu>
     1697+
     1698+       * res_gdt.c (ext2fs_create_resize_inode): Create the resize inode
     1699+               even if s_reserved_gdt_blocks is zero.
     1700+
     1701+2005-01-26  Theodore Ts'o  <tytso@mit.edu>
     1702+
     1703+       * ext2fs.pc.in: Add pkg-config files.
     1704+
     1705+2005-01-25  Theodore Ts'o  <tytso@mit.edu>
     1706+
     1707+       * ext2fs.h: Add definition of struct ext2_inode_large
     1708+
     1709+       * ext2_fs.h: Add new function prototypes
     1710+
     1711+       * ext_attr.c (ext2fs_read_ext_attr, ext2fs_write_ext_attr): The
     1712+               ext2fs_swap_ext_attr() has been moved to swapfs.c, and
     1713+               given a new argument, has_header.
     1714+
     1715+       * swapfs.c (ext2fs_swap_ext_attr): Moved from ext_attr.c, and
     1716+               takes an argument which controls whether or not there is
     1717+               an EA header which needs to be byteswaped.
     1718+               (ext2fs_swap_inode_full): New function which byte-swaps
     1719+               the EA in inode.
     1720+
     1721+       * inode.c (ext2fs_get_next_inode_full, ext2fs_read_inode_full,
     1722+               ext2fs_write_inode_full): New functions, originally from
     1723+               Alex Tomas, but which needed to be substantially fixed so
     1724+               that the tests wouldn't cause major stack overwrite bugs
     1725+               in byte-swapping is enabled.
     1726+       
     1727+2005-01-18  Theodore Ts'o  <tytso@mit.edu>
     1728+
     1729+       * Makefile.in: Fix the kernel compile-time echo commands to be
     1730+               consistent and portable
     1731+
     1732+2005-01-07  Theodore Ts'o  <tytso@mit.edu>
     1733+
     1734+       * unlink.c (ext2fs_unlink): If both the name and the inode number
     1735+               are unspecified, then return an error, so that we don't do
     1736+               something surprising such as unconditionally deleting the
     1737+               first directory entry.
     1738+               (unlink_proc): Delete directory entries by coalescing it
     1739+               with the previous entry, to avoid directory fragmentation.
     1740+
     1741+2005-01-06  Theodore Ts'o  <tytso@mit.edu>
     1742+
     1743+       * version.c (ext2fs_parse_version_string): Change parsing
     1744+               algorithm so that version strings such as 1.36-rc1 returns
     1745+               a non-surprising result (i.e., 136, and not 1361).
     1746+
     1747+2005-01-05  Theodore Ts'o  <tytso@mit.edu>
     1748+
     1749+       * block.c (block_iterate_ind, block_iterate_dind,
     1750+               block_iterate_tind): Move the code which byte swaps and
     1751+               read/writes indirect blocks to ext2fs_{read,write}_ind_block.
     1752+               This saves 400 bytes, and we need them for the
     1753+               resize_inode handling.
     1754+
     1755+       * ind_block.c (ext2fs_read_ind_block, ext2fs_write_ind_block): New
     1756+               functions.
     1757+
     1758+       * res_gdt.c (ext2fs_create_resize_inode): Use
     1759+               ext2fs_{read,write}_ind_block so that byte swapping is
     1760+               handled on big-endian systems.
     1761+
     1762+       * dupfs.c (ext2fs_dup_handle): Make sure the new filesystem handle
     1763+               has its own copy of the orig_super data structure.  (This
     1764+               is a better way of fixing a double-free problem in
     1765+               resize2fs which Fedora attempted to fix in
     1766+               e2fsprogs-1.35-double_free.patch.   Addresses Red Hat
     1767+               Bugzilla #132707.)
     1768+       
     1769+2004-12-23  Theodore Ts'o  <tytso@mit.edu>
     1770+
     1771+       * inode.c (ext2fs_flush_icache): When flushing the icache, clear
     1772+               the last-read block information as well.
     1773+
     1774+       * ext2fs.h (BMAP_SET), bmap.c (ext2fs_bmap): Add support for new
     1775+               flag, BMAP_SET, which allows the caller to set a
     1776+               particular logical->physical block mapping.
     1777+
     1778+       * ext2_err.et.in (EXT2_ET_SET_BMAP_NO_IND): New error code
     1779+
     1780+       * initialize.c (calc_reserved_gdt_blocks): #ifdef out all
     1781+               debugging printf statements.
     1782+       
     1783+       * res_gdt.c (ext2fs_create_resize_inode): Return
     1784+               EXT2_ET_RESIZE_INODE_CORRUPT if the resize inode is not
     1785+               what we expect.  #ifdef out all debugging printf
     1786+               statements.
     1787+
     1788+       * ext2_err.et.in (EXT2_ET_RESIZE_INODE_CORRUPT): Add new error code.
     1789+
     1790+2004-12-22  Theodore Ts'o  <tytso@mit.edu>
     1791+
     1792+       * swapfs.c (ext2fs_swap_super): Byteswap the reserved_gdt_blocks
     1793+               superblocks field.
     1794+
     1795+2004-12-15  Theodore Ts'o  <tytso@mit.edu>
     1796+
     1797+       * sparse.c (ext2fs_list_backups, ext2fs_bg_has_super),
     1798+               res_gdt.c (list_backups), closefs.c (ext2fs_bg_has_super),
     1799+               ext2fs.h: Move ext2fs_list_backups() to res_gdt.c, and
     1800+               ext2fs_bg_has_super() back to closefs.c.  There's no
     1801+               reason for the new file, since list_backups() isn't being
     1802+               used by any other functions, and can be made static, and
     1803+               all users of the ext2fs filesystem will have to call
     1804+               ext2fs_close() anyway.
     1805+
     1806+2004-12-15  Theodore Ts'o  <tytso@mit.edu>
     1807+
     1808+       * Applied resize inode patch from Andreas Dilger
     1809+
     1810+       * res_gdt.c (ext2fs_create_resize_inode): New function that
     1811+               creates the resize inode.
     1812+
     1813+       * initialize.c (ext2fs_initialize): Reserve space for the resize
     1814+               inode.
     1815+
     1816+       * ext2fs.h (EXT2_LIB_FEATURE_COMPAT_SUPP): Add
     1817+               EXT2_FEATURE_COMPAT_RESIZE_INODE to the list of supported
     1818+               capabilities.
     1819+               Add function prototypes for res_gdt.c and sparse.c.
     1820+
     1821+       * closefs.c (ext2fs_super_and_bgd_loc): Take the reserved blocks
     1822+               into account when calculating the number of overhead
     1823+               blocks.
     1824+
     1825+       * closefs.c (ext2fs_bg_has_super, test_root), sparse.c: Move these
     1826+               functions to the new file sparse.c
     1827+
     1828+       * alloc_sb.c (ext2fs_reserve_super_and_bgd): Reserve the blocks
     1829+               saved in the resize inode as being in use.
     1830+
     1831+       * ext2_err.et.in (EXT2_ET_RES_GDT_BLOCKS): Add new error code.
     1832+
     1833+       * Makefile.in (srcdir): Add res_gdt.c and sparse.c to the ext2fs
     1834+               library.
     1835+
     1836+2004-12-14  Theodore Ts'o  <tytso@mit.edu>
     1837+
     1838+       * Makefile.in: Use Linux-kernel-style makefile output for "make
     1839+               install"
     1840+
     1841+       * Makefile.in (installdirs): Use $(MKINSTALLDIRS) macro
     1842+               Update dependencies.
     1843+
     1844+2004-11-30  Theodore Ts'o  <tytso@mit.edu>
     1845+
     1846+       * unix_io.c (unix_set_option): Add support for the offset option.
     1847+
     1848+       * test_io.c (test_set_option): Add support for the set_option method.
     1849+
     1850+       * ext2_io.h: Add new io_channel method, set_option(), and change
     1851+               io_channel_write_byte() from a macro to a library function.
     1852+
     1853+       * ext2fs.h, openfs.c(ext2fs_open2): New version of ext2fs_open
     1854+               which adds a new parameter, io_options.
     1855+               (ext2fs_open): If there is a question mark in the
     1856+               filename, and no io_options are specified, assumed that
     1857+               the text following the question mark are io_options.
     1858+       
     1859+       * io_manager.c, Makefile.in: New source file which contains
     1860+               high-level functions for the io_channel layer.
     1861+
     1862+       * freefs.c (ext2fs_free): Make sure we don't free the io_channel
     1863+               if image_io is NULL.
     1864+
     1865+       * Makefile.in: Use Linux-kernel-style makefile output to make it
     1866+               easier to see errors/warnings.
     1867+
     1868+2004-11-29  Theodore Ts'o  <tytso@mit.edu>
     1869+
     1870+       * ext2_fs.h (EXT2_EXTENTS_FL, EXT3_FEATURE_INCOMPAT_EXTENTS,
     1871+               EXT2_MAX_BLOCK_LOG_SIZE): Add definition for extent
     1872+               feature and inode flag.  Change maximum allowable block
     1873+               size to be 65536.
     1874+
     1875+2004-10-08  Theodore Ts'o  <tytso@mit.edu>
     1876+
     1877+       * getsize.c (ext2fs_get_device_size): Add support for Windows
     1878+               9x/NT under Cygwin.  Thanks to Sam Robb
     1879+               (samrobb@users.sourceforge.net) for pointing this and the
     1880+               suggested code patch.
     1881+
     1882+2004-09-17  Theodore Ts'o  <tytso@mit.edu>
     1883+
     1884+       * getsize.c: Clean up header #include's.
     1885+
     1886+       * llseek.c (ext2fs_llseek): On non-linux systems, use lseek64() if
     1887+               it is present.  (Addresses Debian bug #269044)
     1888+
     1889+2004-07-28  Theodore Ts'o  <tytso@mit.edu>
     1890+
     1891+       * rw_bitmaps.c (read_bitmaps), block.c (block_iterate_ind,
     1892+               block_iterate_dind, block_iterate_tind), inode.c
     1893+               (ext2fs_read_inode): If EXT2_FLAG_IMAGE_FILE is set, so
     1894+               read the metadata from fs->image_io instead of fs->io.
     1895+
     1896+       * initialize.c (ext2fs_initialize), openfs.c (ext2fs_open):
     1897+               Initialize fs->image_io to be the same as fs->io.
     1898+       
     1899+       * ext2_err.et.in (EXT2_ET_NOT_IMAGE_FILE): Add new error code.
     1900+
     1901+       * openfs.c (ext2fs_get_data_io, ext2fs_set_data_io,
     1902+               ext2fs_rewrite_to_io): New functions that allow
     1903+               applications to manipulate fs->image_io and fs->io safely.
     1904+
     1905+       * freefs.c (ext2fs_free): If fs->image_io is different fs->io,
     1906+               then call io_channel_close on fs->image_io.
     1907+
     1908+       * ext2fs.h: Add image_io element to the ext2_filsys data
     1909+               structure.  Add ext2fs_get_data_io() ext2fs_set_data_io(),
     1910+               and ext2fs_rewrite_to_io() prototypes.
     1911+
     1912+2004-05-26  Theodore Ts'o  <tytso@mit.edu>
     1913+
     1914+       * closefs.c (ext2fs_flush): Make sure the master superblock is
     1915+               written last, and only after other I/O has been flushed to
     1916+               disk.  Thanks to Junfeng Yang from the Stanford
     1917+               Metacompilation group for pointing a potential ordering
     1918+               constraint problem if we don't write things out in the
     1919+               right order.
     1920+
     1921+       * test_io.c: Implement the ability to abort after n reads or
     1922+               writes to a particular block.  The block is specified by
     1923+               TEST_IO_BLOCK environment variable, and the read/write
     1924+               count by the TEST_IO_READ_ABORT and TEST_IO_WRITE_ABORT
     1925+               environment variables.  The block data is now only dumped
     1926+               if the 0x10 bit is set in TEST_IO_FLAGS.
     1927+
     1928+2004-04-03  Theodore Ts'o  <tytso@mit.edu>
     1929+
     1930+       * ext2_types.h.in: Remove check for _UUID_TYPES since uuid_types.h
     1931+               is no longer used.
     1932+
     1933+2004-03-08  Theodore Ts'o  <tytso@mit.edu>
     1934+
     1935+       * getsize.c (ext2fs_get_device_size): Only use the BLKGETSIZE64
     1936+               ioctl on Linux 2.6 since it is unreliable in Linux 2.4.
     1937+               (Addresses Debian Bug #236528).  Fix typo in the ioctl
     1938+               used for Mac OS X.
     1939+
     1940+2004-03-02  Theodore Ts'o  <tytso@mit.edu>
     1941+
     1942+       * getsize.c (ext2fs_get_device_size): Update getsize functions to
     1943+               use Apple Darwin and Linux 64-bit ioctl's
     1944+
     1945+2004-02-29  Brian Bergstrand  <brian@bergstrand.org>
     1946+
     1947+       * Makefile.in: Use $(BSDLIB_PIC_FLAG) to determine whether to use
     1948+               -fpic or -fPIC
     1949+
     1950+2004-02-28  Theodore Ts'o  <tytso@mit.edu>
     1951+
     1952+       * Release of E2fsprogs 1.35
     1953+
     1954+2004-02-21  Theodore Ts'o  <tytso@mit.edu>
     1955+
     1956+       * ext2fs.h (ext2fs_resize_mem): Fix C++ problem.  (Addresses Red
     1957+               Hat Bugzilla #112448; thanks Thomas Woerner from Red Hat.)
     1958+
     1959+2004-02-14  Theodore Ts'o  <tytso@mit.edu>
     1960+
     1961+       * namei.c (follow_link): Correctly deal with symlinks that have
     1962+               extended attribute information.  (Addresses Debian Bug
     1963+               #232328)
     1964+
     1965+2004-01-30  Theodore Ts'o  <tytso@mit.edu>
     1966+
     1967+       * ext2_fs.h: Reserve an extra 4 bytes for the journal backup,
     1968+               which we're using due to a typo in the e2fsck code.  (Oops)
     1969+
     1970+       * swapfs.c (ext2fs_swap_inode): Fix byte swap bug which causes SE
     1971+               Linux created symlinks with mandatory attributes to fail
     1972+               to be properly handled on big endian systems.  (Addresses
     1973+               Debian Bug #228723).
     1974+               (ext2fs_swap_super): Byte swap some new fields in the
     1975+               superblock, including the journal backup fields.
     1976+
     1977+2003-12-02  Theodore Ts'o  <tytso@mit.edu>
     1978+
     1979+       * alloc.c, bb_inode.c, bitops.c, block.c, check_desc.c, closefs.c,
     1980+               dir_iterate.c, dirblock.c, expanddir.c, ext2fs.h,
     1981+               get_pathname.c, icount.c, imager.c, initalize.c, inode.c,
     1982+               lookup.c, openfs.c, read_bb.c, read_bb_file.c,
     1983+               rw_bitmaps.c, unix_io.c, unlink.c, write_bb_file.c: Fix
     1984+               gcc -Wall complaints.  Mainly marking variables as being
     1985+               unsued, and catching signed vs. unsigned comparisons.
     1986+
     1987+2003-09-03  Theodore Ts'o  <tytso@mit.edu>
     1988+
     1989+       * closefs.c (ext2fs_super_and_bgd_loc): New function which
     1990+               centralizes the calculation of the superblock and block
     1991+               group descriptors.
     1992+               (ext2fs_flush): Use ext2fs_super_and_bgd_lock to figure
     1993+               out where to write the superblock and block group
     1994+               descriptors.
     1995+
     1996+       * alloc_sb.c (ext2fs_reserve_super_and_bgd): New function which
     1997+               reserves space in the block bitmap using
     1998+               ext2fs_super_and_bgd_loc.
     1999+
     2000+       * initialize.c (ext2fs_initialize): Use
     2001+               ext2fs_reserve_super_and_bgd to initialize the block bitmap.
     2002+
     2003+2003-08-20  Theodore Ts'o  <tytso@mit.edu>
     2004+
     2005+       * inode_io.c (ext2fs_inode_io_intern2), ext2fs.h: Add new function
     2006+               allows the caller to pass in the inode data structure.
     2007+
     2008+       * fileio.c (ext2fs_file_open2), ext2fs.h: Add new function which
     2009+               allows the caller to pass in the inode to be used in the
     2010+               file I/O.
     2011+
     2012+       * ext2_fs.h: Add a backup of the location of the journal inode
     2013+               blocks to the superblock.
     2014+
     2015+       * mkjournal.c (write_journal_inode): Save the location of the
     2016+               journal inode to the backup location in the superblock.
     2017+
     2018+2003-08-01  Philipp Thomas <pthomas@suse.de>
     2019+
     2020+       * alloc.c, badblocks.c, bb_inode.c, bitmaps.c, block.c, bmap.c,
     2021+               bmove.c, brel_ma.c, closefs.c, dblist.c, dblist_dir.c,
     2022+               dir_iterate.c, dirblock.c, dupfs.c, expanddir.c, ext2fs.h,
     2023+               ext_attr.c, fileio.c, freefs.c, get_pathname.c, icount.c,
     2024+               initialize.c, inode.c, inode_io.c, irel_ma.c, mkdir.c,
     2025+               mkjournal.c, namei.c, newdir.c, openfs.c, rs_bitmap.c,
     2026+               rw_bitmaps.c, test_io.c, unix_io.c: ext2fs_getmem(),
     2027+               ext2fs_free_mem(), and ext2fs_resize_mem() all now take a
     2028+               'void *' instead of a 'void **' in order to avoid pointer
     2029+               aliasing problems with GCC 3.x.
     2030+
     2031+2003-07-25  Theodore Ts'o  <tytso@mit.edu>
     2032+
     2033+       * Release of E2fsprogs 1.34
     2034+
     2035+2003-07-06  Theodore Ts'o  <tytso@mit.edu>
     2036+
     2037+       * kernel-jbd.h, flushb.c: Fix gcc -Wall nitpicks (indented cpp
     2038+               directives)
     2039+
     2040+       * ext2_types.h.in, initialize.c: Fix gcc -Wall nitpicks
     2041+               (don't use #elsif)
     2042+
     2043+       * ismounted.c: Fix gcc -Wall nitpicks (Don't use exit as a goto label)
     2044+
     2045+       * llseek.c: Fix gcc -Wall nitpicks (don't use #elsif)
     2046+
     2047+       * lookup.c, read_bb.c: Fix gcc -Wall nitpicks (indent
     2048+               non-traditional #pragma)
     2049+
     2050+       * test_io.c: Fix gcc -Wall nitpicks (const/unsigned type issues)
     2051+
     2052+2003-06-24    <tytso@snap.thunk.org>
     2053+
     2054+       * badblocks.c, ext2fs.h (ext2fs_u32_list_find,
     2055+               ext2fs_u32_list_test, ext2fs_u32_list_del,
     2056+               ext2fs_badblocks_list_del): Add functions to delete a
     2057+               block from the badblocks list.
     2058+       * tst_badblocks.c: Add test cases for ext2fs_badblocks_list_del().
     2059+
     2060+2003-05-21  Theodore Ts'o  <tytso@mit.edu>
     2061+
     2062+       * getsectsize.c (ext2fs_get_device_sectsize): New function which
     2063+               returns the hardware sector size (if it is available).
     2064+
     2065+2003-05-13  Theodore Ts'o  <tytso@mit.edu>
     2066+
     2067+       * unix_io.c: Add #ifdef NO_IO_CACHE which disables all userspace
     2068+               caching by the unix_io layer.  Not enabled, only for
     2069+               debugging.
     2070+
     2071+2003-05-05  Theodore Ts'o  <tytso@mit.edu>
     2072+
     2073+       * test_io.c: Pay attention to the environment variables
     2074+               TEST_IO_LOGFILE, TEST_IO_FLAGS, and TEST_IO_BLOCK to
     2075+               determine whether or not we should log io activity, and to
     2076+               where.
     2077+
     2078+2003-05-03  Theodore Ts'o  <tytso@mit.edu>
     2079+
     2080+       * tst_badblocks.c (file_test): Use tmpfile() instead of mktemp().
     2081+
     2082+2003-04-29  Theodore Ts'o  <tytso@mit.edu>
     2083+
     2084+       * getsize.c (ext2fs_get_device_size): Allow windows code to get
     2085+               the resize for filesystems that are in regular files.
     2086+
     2087+2003-04-21  Theodore Ts'o  <tytso@mit.edu>
     2088+
     2089+       * Release of E2fsprogs 1.33
     2090+
     2091+2003-04-21  Theodore Ts'o  <tytso@mit.edu>
     2092+
     2093+       * Makefile.in: Use DYLD_LIBRAY_PATH so that "make check" works on
     2094+               Darwin systems when building with shared libraries.
     2095+
     2096+2003-04-18  Theodore Ts'o  <tytso@mit.edu>
     2097+
     2098+       * unix_io.c: Use __CYGWIN__ instead of CYGWIN.
     2099+
     2100+2003-04-17  Theodore Ts'o  <tytso@mit.edu>
     2101+
     2102+       * getsize.c: Add Cygwin/Windows version of ext2fs_get_device_size()
     2103+
     2104+2003-04-12  Theodore Ts'o  <tytso@mit.edu>
     2105+
     2106+       * unix_io.c (raw_read_blk): Add Cygwin support (the Windows block
     2107+               device only accepts sector aligned read requests.
     2108+
     2109+       * ismounted.c (check_mntent_file): Deal with OS's that don't
     2110+               define MNTOPT_RO.
     2111+
     2112+       * imager.c: If the OS doesn't define ssize_t, typedef it to int.
     2113+
     2114+2003-04-11  Theodore Ts'o  <tytso@mit.edu>
     2115+
     2116+       * ext2_fs.h (EXT2_FEATURE_RO_COMPAT_BTREE_DIR): Comment out unused
     2117+               feature flag
     2118+
     2119+2003-03-30  Theodore Ts'o  <tytso@mit.edu>
     2120+
     2121+       * Makefile.in: Use the compile_et --build-tree option.
     2122+
     2123+2003-03-14  Theodore Ts'o  <tytso@mit.edu>
     2124+
     2125+       * getsize.c: Add support for Apple Darwin's ioctl to get the hard
     2126+               disk size.
     2127+
     2128+       * badblocks.c (ext2fs_u32_list_count), ext2fs.h: Add new function
     2129+               which returns the number of entries in the list.
     2130+
     2131+2003-03-10  Theodore Ts'o  <tytso@mit.edu>
     2132+
     2133+       * fileio.c (ext2fs_file_lseek): Fix bug added when adding 64-bit
     2134+               support; avoid null dereference when ret_pos is NULL.
     2135+
     2136+2003-03-06  Theodore Tso  <tytso@mit.edu>
     2137+
     2138+       * ext2_types.h.in: Don't redefine types if other e2fsprogs
     2139+               *_types.h files have been included already.
     2140+
     2141+       * kernel-jbd.h: Use C99 variadic cpp macros if not using GCC.
     2142+               (Older GCC's don't support the C99 variadic macros.)
     2143+
     2144+       * flushb.c (ext2fs_sync_device),
     2145+       ismounted.c (ext2fs_check_mount_point): Avoid GCC extension:
     2146+       #warning not supported by Solaris suncc
     2147+
     2148+       * ext2_ext_attr.h: Avoid GCC extension: 0 length arrays in
     2149+               structure definition.  Not needed for now in
     2150+               ext2_ext_attr_entry.
     2151+
     2152+2003-01-25  Theodore Ts'o  <tytso@mit.edu>
     2153+
     2154+       * dirhash.c: Fix gcc -Wall nits.
     2155+
     2156+2003-01-22  Theodore Ts'o  <tytso@mit.edu>
     2157+
     2158+       * unix_io.c (unix_write_blk): Fix up GCC -Wall nits.
     2159+
     2160+2003-01-21  Theodore Ts'o  <tytso@mit.edu>
     2161+
     2162+       * fileio.c (ext2fs_file_read, ext2_file_lseek,
     2163+               ext2_file_get_size): Add 64-bit support.
     2164+
     2165+       * ext2fs.h (EXT2_I_SIZE): Add macro which caluates a 64bit size
     2166+               from i_size and i_size_high.
     2167+
     2168+2003-01-19  Theodore Ts'o  <tytso@mit.edu>
     2169+
     2170+       * initialize.c (ext2fs_initialize): If the user specifies a really
     2171+               large number of inodes, then reduce the number of blocks
     2172+               per group until we find a workable set of filesystem
     2173+               parameters.
     2174+
     2175+       * ext2_err.et.in (EXT2_ET_TOO_MANY_INODES): Add new error code.
     2176+
     2177+2002-11-09  Theodore Ts'o  <tytso@mit.edu>
     2178+
     2179+       * Release of E2fsprogs 1.32
     2180+
     2181+2002-11-09  Theodore Ts'o  <tytso@mit.edu>
     2182+
     2183+       * unix_io.c (find_cached_block, reuse_cache, unix_read_blk,
     2184+               unix_write_blk): Optimize routines so that we don't end up
     2185+               searching the cache twice when a block isn't in the
     2186+               cache.  If reads are larger than READ_DIRECT_SIZE, don't
     2187+               let them go through the cache.
     2188+
     2189+       * unix_io.c (find_cached_block): Fixed bug which caused some clean
     2190+               blocks to be erroneously marked as dirty, so they would
     2191+               get written back to the disk before they are evicted from
     2192+               the cache.  Harmless, but it slows down e2fsck
     2193+               significantly.
     2194+
     2195+2002-11-08  Theodore Ts'o  <tytso@mit.edu>
     2196+
     2197+       * Release of E2fsprogs 1.31
     2198+
     2199+2002-11-08    <tytso@snap.thunk.org>
     2200+
     2201+       * Makefile.in (check): Skip trying to compile test_byteswap
     2202+               if --disable-byteswaap had been given to configure.
     2203+
     2204+2002-11-07    <tytso@snap.thunk.org>
     2205+
     2206+       * closefs.c (write_bgdesc, ext2fs_flush): Fix bug in meta_bg
     2207+               support when the MASTER_SB_ONLY flag is set.  Some of
     2208+               the descriptor blocks that should have been written out
     2209+               were getting skipped.
     2210+
     2211+2002-10-31  Theodore Ts'o  <tytso@mit.edu>
     2212+
     2213+       * Release of E2fsprogs 1.30
     2214+
     2215+2002-10-31  Theodore Ts'o  <tytso@mit.edu>
     2216+
     2217+       * ext2_fs.h: Add support for a new inode flag, which is to be used
     2218+               for indicating the top of directory hierarchies for the
     2219+               Orlov block allocator.
     2220+       
     2221+       * ismounted.c (check_mntent, check_mntent_file): Add better
     2222+               support for loopback-mounted filesystems.  Check /etc/mtab
     2223+               if /proc/mounts doesn't turn up any mount flags, since
     2224+               /etc/mtab has the loopback image filename, instead of
     2225+               /dev/loop0.  Also, check based on st_dev and st_ino, so
     2226+               that if a relative pathname or a pathnames using symbolic
     2227+               links are used, we can detect the the filesystem correctly
     2228+               in those cases.  (Addresses Sourceforge bug #619119)
     2229+
     2230+       * flushb.c (ext2fs_sync_device): If the BLKFLSBUF ioctl succeeds,
     2231+               don't try the FDFLUSH ioctl that was required for floppies
     2232+               with older kernels.  This avoids needless whining from the
     2233+               MD device driver.  (Addresses Sourceforge bug #545832).
     2234+
     2235+       * openfs.c (ext2fs_open): Fix bug which caused us to pass the
     2236+               wrong group_block to ext2fs_descriptor_block_loc if we're
     2237+               using the backup superblock/block group descriptors.
     2238+               (ext2fs_descriptor_block_loc): If we're using the backup
     2239+               superblock descriptors, use the backup descriptor block in
     2240+               the next block group.
     2241+
     2242+2002-10-30  Theodore Ts'o  <tytso@mit.edu>
     2243+
     2244+       * alloc_tables.c (ext2fs_allocate_group_table): Allocate the inode
     2245+               table so that it buts up against the bitmap blocks, to
     2246+               avoid block fragmentation.
     2247+
     2248+       * closefs.c (write_bgdesc), initalize.c (ext2fs_initialize): Fix
     2249+               bug; only allocate group descriptor blocks up to
     2250+               s_first_meta_bg.
     2251+
     2252+2002-10-25  Theodore Ts'o  <tytso@mit.edu>
     2253+
     2254+       * ext2_fs.h: Add a new superblock field, s_mkfs_time, so that we
     2255+               know when a filesystem was created.  (Sometimes this can
     2256+               be useful...)
     2257+
     2258+       * initialize.c (ext2fs_initialize): Set the s_mkfs_time field.
     2259+
     2260+2002-10-20  Theodore Ts'o  <tytso@valinux.com>
     2261+
     2262+       * ext2_fs.h (EXT3_DEFM_JMODE): Add new default mount options for
     2263+               the journal data mode.
     2264+
     2265+       * closefs.c (ext2fs_flush, write_bgdesc), ext2_fs.h, ext2fs.h,
     2266+       openfs.c (ext2fs_descriptor_block_loc, ext2fs_open), initialize.c
     2267+       (ext2fs_initialize), swapfs.c (ext2fs_swap_super): Add support for
     2268+       the meta_blockgroup filesystem format.
     2269+
     2270+2002-10-15    <tytso@snap.thunk.org>
     2271+
     2272+       * ext2_fs.h: Add new field in superblock for default mount options.
     2273+
     2274+2002-10-13  Theodore Ts'o  <tytso@mit.edu>
     2275+
     2276+       * ext2fs.h: Add #include of header files necessary for ext2fs.h to
     2277+               compile cleanly.
     2278+
     2279+2002-10-02  Theodore Y. Ts'o  <tytso@mit.edu>
     2280+
     2281+       * rw_bitmaps.c (ext2fs_write_block_bitmap,
     2282+               ext2fs_read_block_bitmap): Don't set the CHANGED bit just
     2283+               because the bitmap is getting written to disk.  Make
     2284+               ext2fs_swap_bitmap be a static function, since it's not
     2285+               intended to be exported.
     2286+
     2287+       * swapfs.c (ext2fs_swap_super): Byte-swap the hash seed
     2288+
     2289+2001-09-24  Theodore Tso  <tytso@mit.edu>
     2290+
     2291+       * Release of E2fsprogs 1.29
     2292+
     2293+2001-08-31  Theodore Tso  <tytso@thunk.org>
     2294+
     2295+       * Release of E2fsprogs 1.28
     2296+
     2297+2002-08-31  Theodore Ts'o  <tytso@valinux.com>
     2298+
     2299+       * dblist.c (ext2fs_dblist_sort): New function which allows the
     2300+               caller to pass in a special sort comparison function.
     2301+
     2302+2002-08-20  Theodore Ts'o  <tytso@mit.edu>
     2303+
     2304+       * valid_blk.c (ext2fs_inode_has_valid_blocks): Fix bug which
     2305+               failed to accurately characterize non-standard slow
     2306+               symlinks.  (Which don't appear in practice on real-life
     2307+               systems, fortunately.)
     2308+
     2309+2002-08-17  Theodore Ts'o  <tytso@mit.edu>
     2310+
     2311+       * Makefile.in: Remove inode_io.o from the standard object files,
     2312+               and only build it if debugfs is enabled (it requires
     2313+               fileio.o, which is only built if --disable-debugfs isn't
     2314+               specified to configure).
     2315+
     2316+       * dirhash.c (ext2fs_dirhash): Change the MD4 hash in a backwards
     2317+               incompatible way so that it is no longer
     2318+               endian-dependent.  Add the TEA hash.  Allow the seed
     2319+               parameter to be optional.
     2320+
     2321+       * ext2_fs.h: Remove the HALF_MD4_SEED and HALF_MD4_64 hashes.
     2322+               These features are all now in the HALF_MD4 hash.  Add
     2323+               definition for EXT2_HASH_TEA.
     2324+
     2325+       * ext2fs.h (ext2fs_dirhash): Change function prototype so it takes
     2326+               a pointer instead of an array.
     2327+
     2328+2002-08-16  Theodore Ts'o  <tytso@mit.edu>
     2329+
     2330+       * ext2_err.et.in (EXT2_ET_BAD_EA_BLOCK_NUM): New error code
     2331+
     2332+       * ext2fs.h (ext2fs_inode_data_blocks): New function which returns
     2333+               the number of data blocks used by an inode exclusive of
     2334+               the EA block.
     2335+
     2336+       * ext_attr.c (ext2fs_adjust_ea_refcount): New function which
     2337+               adjusts the reference count in an extended attribute block.
     2338+
     2339+       * valid_blk.c (ext2fs_inode_has_valid_blocks): Add code to
     2340+               correctly deal with extended attribute blocks in symbolic
     2341+               links.
     2342+
     2343+2002-08-13    <tytso@snap.thunk.org>
     2344+
     2345+       * Makefile.in: Move dupfs.o and test_io.o from the
     2346+               needed-by-debugfs object list to the needed-by-resizer
     2347+               object list.  Fixes compile problem if the system is built
     2348+               with only --disable-debugfs.
     2349+
     2350+2002-07-29  Theodore Ts'o  <tytso@mit.edu>
     2351+
     2352+       * link.c (ext2fs_link): When adding a new link to a directory,
     2353+               clear the HTREE bit.
     2354+
     2355+2002-07-23  Theodore Ts'o  <tytso@mit.edu>
     2356+
     2357+       * dirhash.c (ext2fs_dirhash): Fix bug which caused MD4
     2358+               calculations for names > 32 characters to be completely
     2359+               bogus.  Changed MD4 calculation to match what is currently
     2360+               being used in the CVS gkernel tree.
     2361+
     2362+2002-07-19  Theodore Ts'o  <tytso@mit.edu>
     2363+
     2364+       * ext2_fs.h: Add s_hash_seed and s_def_hash_version to the
     2365+               superblock definition.
     2366+
     2367+       * badblocks.c, freefs.c, ext2fs.h: Use the badblocks functions to
     2368+               create a set of u32_list functions.
     2369+
     2370+       * dirhash.c (halfMD4Transform): Shift the hash by one bit,
     2371+               since that's required by the directory indexing code.
     2372+
     2373+2002-07-14  Theodore Ts'o  <tytso@mit.edu>
     2374+
     2375+       * ext2fs.h, read_bb_file.c: Change private to priv_data, to avoid
     2376+               using a C++ reserved word.
     2377+
     2378+       * unix_io.c (unix_open): Only attempt the setrlimit workaround if
     2379+               the kernel version is 2.4.10 -- 2.4.17, since otherwise an
     2380+               old version of glibc (built against 2.2 headers) will
     2381+               interact badly with the workaround to actually cause more
     2382+               problems.  I hate it when the glibc folks think they're
     2383+               being smarter than the kernel....
     2384+
     2385+2002-06-28  Andreas Dilger <adilger@clusterfs.com>
     2386+
     2387+       * ext2_fs.h: Add superblock field for reserved group descriptors.
     2388+
     2389+2002-06-28  Theodore Ts'o  <tytso@mit.edu>
     2390+
     2391+       * bitops.h: Add #define's for ext2fs_{l,b}e{32,16}_to_cpu and
     2392+               ext2fs_cpu_to_{l,b}e{32,16}
     2393+
     2394+2002-06-27  Theodore Ts'o  <tytso@mit.edu>
     2395+
     2396+       * ismounted.c (check_mntent): In AIX 4.3, MOUNTED isn't defined.
     2397+               Add appropriate fallbacks in this case.
     2398+
     2399+2002-06-26  Theodore Ts'o  <tytso@mit.edu>
     2400+
     2401+       * dirhash.c (ext2fs_dirhash): Change function signature to support
     2402+               a hash seed, and to return the minor hash (for 64-bit hash
     2403+               support).   Add support for the half MD4, half MD4 with
     2404+               seed, and half MD4 with seed and 64 bits.
     2405+
     2406+2002-06-15  Theodore Ts'o  <tytso@mit.edu>
     2407+
     2408+       * ext2_fs.h (EXT2_DIRSYNC_FL): Add new file.
     2409+
     2410+2002-06-09  Andreas Dilger <adilger@clusterfs.com>
     2411+
     2412+       * ext2_fs.h: Add macros for maximum block/inode counts:
     2413+               EXT2_INODES_PER_BLOCK, EXT2_MAX_BLOCKS_PER_GROUP,
     2414+               and EXT2_MAX_INODES_PER_GROUP.
     2415+
     2416+       * openfs.c (ext2fs_open): Check that the number of blocks in a group
     2417+               is less than 2^16, otherwise we need an INCOMPAT flag (not
     2418+               in existence yet, if ever) to open such a filesystem.
     2419+
     2420+       * initialize.c (ext2fs_initialize): Limit the number of blocks and
     2421+               inodes in a group to less than 2^16.
     2422+
     2423+2002-06-09  Andreas Dilger <adilger@clusterfs.com>
     2424+
     2425+       * ext2_fs.h: Further minor cleanups of the header.  Consolidate
     2426+               some checks for __KERNEL__ into one place.
     2427+
     2428+2002-05-22  Andreas Dilger <adilger@clusterfs.com>
     2429+
     2430+       * ext2_fs.h: Remove macros accessing u.ext2_sb field and use
     2431+               the EXT2_SB() macro instead.  Remove kernel function
     2432+               prototypes also.  This matches the 2.5 kernel, and
     2433+               is also cleaner for other reasons.  Whitespace cleanup.
     2434+
     2435+2002-05-21  Theodore Ts'o  <tytso@mit.edu>
     2436+
     2437+       * ext2_ext_attr.h: Update to V2 version of the Bestbits format.
     2438+
     2439+2002-05-16  Andreas Dilger <adilger@clusterfs.com>
     2440+
     2441+       * ext2_fs.h: Change limits to support filesystems with 8k blocks.
     2442+
     2443+       * initialize.c (ext2fs_initialize): Remove assumption that
     2444+               blocksizes are always <= 4k.
     2445+
     2446+2002-05-11  Theodore Ts'o  <tytso@mit.edu>
     2447+
     2448+       * bmap.c (ext2fs_bmap): Fix bug which caused ext2fs_bmap to fail
     2449+               silently if inode pointer is NULL (and ext2fs_bmap is
     2450+               expected to read the inode itself).
     2451+
     2452+2002-04-27  Theodore Ts'o  <tytso@mit.edu>
     2453+
     2454+       * ismounted.c (check_mntent_file, is_swap_device): Verify that the
     2455+               file we are checking is a block device file before looking
     2456+               at st_rdev, since it's not valid for normal files.
     2457+               (is_swap_device): Move so that it is outside the
     2458+               HAVE_MNTENT_H, so that it is always built.
     2459+
     2460+2002-03-11  Theodore Tso  <tytso@mit.edu>
     2461+
     2462+       * dirblock.c (ext2fs_read_dir_block2, ext2fs_write_dir_block): New
     2463+               functions which take an extra flags argument.  The flag
     2464+               EXT2_DIRBLOCK_V2_STRUCT will reverse when the name_len
     2465+               field is byte swampped on big-endian machines, since in
     2466+               the V2 structure, name_len is a char field which is
     2467+               doesn't need to be byte swapped --- except if an
     2468+               old-style kernel had byte-swapped the name_len field
     2469+               as part of the V1 structure.
     2470+
     2471+       * ext2_err.et.in (EXT2_ET_DIRHASH_UNSUPP): New error code
     2472+
     2473+       * dirhash.c (ext2fs_dirhash): New function which calculates the
     2474+               hash for a filename in an indexed directory.
     2475+
     2476+2002-03-08  Theodore Tso  <tytso@mit.edu>
     2477+
     2478+       * Release of E2fsprogs 1.27
     2479+
     2480+2002-03-07  Theodore Tso  <tytso@mit.edu>
     2481+
     2482+       * ext2fs.h (ext2fs_inode_io_intern): Add missing function prototype.
     2483+
     2484+       * bmap.c, fileio.c, inode_io.c, tst_badblocks.c,
     2485+               tst_byteswap.c: Fix gcc -Wall complaints
     2486+
     2487+       * Makefile.in (check): Use LD_LIBRARY_PATH to run test programs.
     2488+               (From Philipp Thomas <pthomas@suse.de>)
     2489+
     2490+2002-02-25  Theodore Tso  <tytso@mit.edu>
     2491+
     2492+       * ext2_fs.h: Add structure definitions for the directory indexing
     2493+               extension.
     2494+
     2495+2002-02-23  Theodore Tso  <tytso@mit.edu>
     2496+
     2497+       * unix_io.c (unix_open): Fix 2.4 resource limit workaround so that
     2498+               it doesn't break things on mis32, sparc32, and alpha
     2499+               platforms.
     2500+
     2501+2002-02-21  Theodore Tso  <tytso@mit.edu>
     2502+
     2503+       * ismounted.c (is_swap_device): Fix file descriptor/memory leak;
     2504+               we were missing an fclose().
     2505+
     2506+2002-02-20  Theodore Tso  <tytso@mit.edu>
     2507+
     2508+       * Makefile.in, inode_io.c, ext2fs.h, ext2_err.et.in: Add new io
     2509+               abstraction interface which exports an ext2 inode.
     2510+
     2511+       * ext2fs.h, fileio.c (ext2fs_file_flush): Export ext2fs_file_flush
     2512+               as a public interface.  Change void * to const void * in
     2513+               ext2fs_file_write's interface.
     2514+
     2515+       * test_io.c (test_close), unix_io.c (unix_close): Remove unneeded
     2516+               conditional; save a few bytes.
     2517+       
     2518+2002-02-12  Theodore Tso  <tytso@mit.edu>
     2519+
     2520+       * Makefile.in (tst_badblocks): Add some extra .o files when
     2521+               linking the debugging program tst_badblocks which are
     2522+               needed if we aren't compiling with inline functions enable.
     2523+
     2524+       * kernel-list.h (__inline__): On non-gcc and non-Watcom compilers,
     2525+               define away __inline__ since it may not be supported.
     2526+
     2527+       * kernel-jbd.h (jbd_debug): For systems that don't do STDC, use a
     2528+               stripped down jbd_debug that doesn't use variadic
     2529+               arguments.  This will cause warnings under AIX, but things
     2530+               should still build.
     2531+
     2532+2002-02-03  Theodore Tso  <tytso@thunk.org>
     2533+
     2534+       * Release of E2fsprogs 1.26
     2535+
     2536+2002-02-03  Theodore Tso  <tytso@mit.edu>
     2537+
     2538+       * mkdir.c (ext2fs_mkdir): Change to use ext2fs_inode_alloc_stats2
     2539+               so that the number of directories in use is adjusted
     2540+               appropriately.
     2541+
     2542+       * alloc_stats.c (ext2fs_inode_alloc_stats2): Add new function
     2543+               which optionally will modify the number of directories
     2544+               count.
     2545+
     2546+2002-01-03  Theodore Tso  <tytso@mit.edu>
     2547+
     2548+       * dir_iterate.c (ext2fs_dir_iterate2, ext2fs_process_dir_block):
     2549+               Add support for a new flag, DIRENT_FLAG_INCLUDE_REMOVED,
     2550+               which will return deleted directory entries.
     2551+               ext2fs_dir_iterate2 takes a new callback function which
     2552+               is identical with the one used by
     2553+               ext2fs_dblist_dir_iterate().  If the directory entry is
     2554+               deleted, the callback function will be called with the
     2555+               entry paraemter set to DIRENT_DELETED_FILE.
     2556+
     2557+       * Makefile.in, alloc_stats.c (ext2fs_inode_alloc_stats,
     2558+               ext2fs_block_alloc_stats): New functions which update
     2559+               block/inode allocation statistics in the bitmaps, block
     2560+               group descriptors, and superblock.
     2561+
     2562+       * mkjournal.c (mkjournal_proc), mkdir.c (ext2fs_mkdir),
     2563+               expanddir.c (expand_dir_proc), bb_inode.c
     2564+               (clear_bad_block_proc, set_bad_block_proc,
     2565+               ext2fs_update_bb_inode), alloc.c (ext2fs_alloc_block):
     2566+               Update to use new block/inode allocation statistics.
     2567+
     2568+2001-12-24  Theodore Tso  <tytso@mit.edu>
     2569+
     2570+       * ismounted.c (is_swap_device): New function used by
     2571+               ext2fs_check_if_mounted and ext2fs_check_mount_point which
     2572+               determines whether or not the specified device is a swap
     2573+               device by using /proc/swaps.  More bulletproofing for
     2574+               idiotic/careless system administrators!
     2575+
     2576+       * ext2fs.h, openfs.c (ext2fs_open), initialize.c
     2577+               (ext2fs_initialize), mkdir.c (ext2fs_mkdir): Add a new
     2578+               field to struct_ext2_filsys, umask.  This field is
     2579+               initialize to 022, and affects ext2fs_mkdir in the obvious
     2580+               way.  (In the future umask should also affect new file
     2581+               creation routines, but the fileio functions don't
     2582+               currently support this yes.)
     2583+
     2584+       * ismounted.c (check_mntent_file): Stat all of the entries in
     2585+               /etc/mtab and/or /proc/mounts in order to catch dim-witted
     2586+               system administrators who might have created alias
     2587+               devices.
     2588+
     2589+2001-12-23  Theodore Tso  <tytso@mit.edu>
     2590+
     2591+       * Makefile.in, jfs_user.h: Move linux/jbd.h to
     2592+               ext2fs/kernel-jbd.h, to avoid using the system header
     2593+               file version of hbd.h when using diet glibc (since it
     2594+               forcibly adds /usr/include to the beginning of the
     2595+               include search path.)
     2596+
     2597+       * kernel-jbd.h, kernel-list.h, jfs_compat.h: Move files from
     2598+               include/linux directory.
     2599+
     2600+2001-12-16  Theodore Tso  <tytso@mit.edu>
     2601+
     2602+       * bitops.h (ext2fs_mark_generic_bitmap, ext2fs_unmark_generic_bitmap),
     2603+               ext_attr.c (ext2fs_read_ext_attr, ext2fs_write_ext_attr),
     2604+               fileio.c (ext2fs_file_write): Fix gcc -Wall nits
     2605+
     2606+       * Makefile.in, jfs_user.h: linux/jfs.h has been renamed to
     2607+               linux/jbd.h
     2608+
     2609+2001-12-03  Theodore Tso  <tytso@mit.edu>
     2610+
     2611+       * unix_io.c (unix_open): Make sure the ulimit workaround works
     2612+               regardless of the version of glibc which is used to
     2613+               compild e2fsprogs.
     2614+
     2615+2001-11-26  Theodore Tso  <tytso@mit.edu>
     2616+
     2617+       * unix_io.c (unix_open): Work around a bug in 2.4.10+ kernels by
     2618+               trying to unset the filesize limit if at all possible,
     2619+               if a block device is getting opened.  (The filesize limit
     2620+               shouldn't be applied against writes to a block device, but
     2621+               starting in 2.4.10, the kernel is doing this.)
     2622+       
     2623+2001-11-05  Theodore Tso  <tytso@mit.edu>
     2624+
     2625+       * mkjournal.c (ext2fs_add_journal_inode): When creating a .journal
     2626+               file on adding a journal to an already-mounted filesystem,
     2627+               try to clear the ext2 file attributes on an already
     2628+               existing .journal file so that we don't fail if on a
     2629+               partially added journal to the filesystem.
     2630+
     2631+       * ext2_fs.h: Define a new ext2 file attribute, EXT2_NOTAIL_FL,
     2632+               which signals that a particular inode should not have the
     2633+               last bits of data (the "tail") be merged with another
     2634+               file.  This is necessary to keep LILO happy.
     2635+
     2636+2001-09-20  Theodore Tso  <tytso@thunk.org>
     2637+
     2638+       * Release of E2fsprogs 1.25
     2639+
     2640+2001-09-16  Theodore Tso  <tytso@mit.edu>
     2641+
     2642+       * ext2_ext_attr.h: Remove unneeded #include of <linux/config.h>
     2643+               which was breaking the build on the Hurd.  (Addresses
     2644+               Debian bug #112414).
     2645+
     2646+2001-09-13  Theodore Ts'o  <tytso@mit.edu>
     2647+
     2648+       * ismounted.c (check_mntent_file): We now validate the entry in
     2649+               /etc/mtab to make sure the filesystem is really mounted,
     2650+               since some broken distributions (read: Slackware) have
     2651+               buggy boot scripts that don't initialize /etc/mtab before
     2652+               checking non-root filesystems.  (Slackware also doesn't
     2653+               check the root filesystem separately, and reboot if the
     2654+               root filesystem had changes applied to it, which is
     2655+               dangerous and broken.)   
     2656+
     2657+2001-09-02  Theodore Tso  <tytso@thunk.org>
     2658+
     2659+       * Release of E2fsprogs 1.24a
     2660+
     2661+2001-08-30  Theodore Tso  <tytso@thunk.org>
     2662+
     2663+       * Release of E2fsprogs 1.24
     2664+
     2665+2001-08-30  Theodore Tso  <tytso@valinux.com>
     2666+
     2667+       * getsize.c (ext2fs_get_device_size): Back out BLKGETSIZE64
     2668+               changes, since the ioctl number has been reused by another
     2669+               unofficial patch.
     2670+
     2671+2001-08-15  Theodore Tso  <tytso@valinux.com>
     2672+
     2673+       * Release of E2fsprogs 1.23
     2674+
     2675+2001-08-05  Theodore Tso  <tytso@valinux.com>
     2676+
     2677+       * alloc.c (ext2fs_new_inode, ext2fs_new_block): Use the fast
     2678+               version of the bitmap test routines to speed up these
     2679+               routines.  (At some point I may want to make these
     2680+               routines use the find_first_bit functions, but that will
     2681+               add a lot of complexity since it means that these
     2682+               functions will have to break the bitmap abstraction
     2683+               boundary.  It's not clear it's worth it.)
     2684+
     2685+       * mkjournal.c (mkjournal_proc): Remember the last block allocated
     2686+               to speed up ext2fs_new_block().
     2687+
     2688+2001-07-29  Theodore Tso  <tytso@valinux.com>
     2689+
     2690+       * finddev.c (scan_dir): Fix memory leak; we weren't calling
     2691+               closedir() when exiting the function in all cases.
     2692+
     2693+2001-07-27  Theodore Tso  <tytso@valinux.com>
     2694+
     2695+       * mkjournal.c (ext2fs_create_journal_superblock): Set the first
     2696+               block usable in the journal for external journals to be 2
     2697+               or 3, depending on the blocksize, so that the existing
     2698+               kernel code does the right thing.
     2699+
     2700+       * getsize.c (ext2fs_get_device_size): Add support for the
     2701+               BLKGETSIZE64 ioctl.  (Ioctl defined by unofficial patches
     2702+               from Ben LaHaise, but it's likely this interface won't
     2703+               change.)
     2704+
     2705+       * mkjournal.c (ext2fs_add_journal_device): Use the correct block
     2706+               when writing the journal superblock, too.  (Oops! Needed
     2707+               to make 1k filesystems with external journal to work.)
     2708+
     2709+2001-07-26  Theodore Tso  <tytso@valinux.com>
     2710+
     2711+       * mkjournal.c (ext2fs_add_journal_device): Use the correct block
     2712+               to find the journal superblock if the blocksize is 1024.
     2713+
     2714+2001-07-21  Theodore Tso  <tytso@valinux.com>
     2715+
     2716+       * ext2_err.et.in (EXT2_ET_LOAD_EXT_JOURNAL): Add new error code
     2717+
     2718+2001-07-20  Theodore Tso  <tytso@valinux.com>
     2719+
     2720+       * ext_attr.c (ext2fs_write_ext_attr): When writing the extended
     2721+               attribute block, set the filesystem changed bit.
     2722+
     2723+       * bitops.h (ext2fs_find_first_bit_set, ext2fs_find_next_bit_set):
     2724+               Comment out these functions since we're not using them.
     2725+
     2726+2001-07-10  Theodore Tso  <tytso@valinux.com>
     2727+
     2728+       * closefs.c (write_primary_superblock): After writing changes to
     2729+               the primary superblock, update the original superblock
     2730+               copy so we don't have to re-write those changes in the
     2731+               future.
     2732+               (ext2fs_flush): Clear the superblock dirty flag after
     2733+               we've flushed out changes to disk.
     2734+
     2735+2001-07-07  Theodore Tso  <tytso@valinux.com>
     2736+
     2737+       * bitops.h (ext2fs_find_first_bit_set): Use %esi instead of %ebx
     2738+               to avoid register conflicts when compiling in PIC mode.
     2739+
     2740+2001-07-04  Theodore Tso  <tytso@valinux.com>
     2741+
     2742+       * bitops.h (ext2fs_find_first_bit_set, ext2fs_find_next_bit_set):
     2743+               Add new functions (C and in i386 assembler) which quickly
     2744+               find bits set in a bitmask.
     2745+
     2746+2001-06-23  Theodore Tso  <tytso@valinux.com>
     2747+
     2748+       * Makefile.in, ext_attr.c, ext2_attr.c, ext2fs.h: Add new files
     2749+               ext2_ext_attr.h and ext_attr.c for extended attributes
     2750+               support.
     2751+
     2752+       * Release of E2fsprogs 1.22
     2753+
     2754+2001-06-22  Theodore Tso  <tytso@valinux.com>
     2755+
     2756+       * mkjournal.c (ext2fs_add_journal_inode): Move close of file
     2757+               descriptor so that adding a journal to a mounted
     2758+               filesystem doesn't die.  (Fixes a bug accidentally
     2759+               introduced in e2fsprogs 1.21.)
     2760+
     2761+       * mkjournal.c (ext2fs_add_journal_inode): Only use fchflags if
     2762+               HAVE_CHFLAGS and UF_NODUMP are defined, since the Hurd has
     2763+               fchflags without defining UF_NODUMP.  (Addresses Debian
     2764+               bug #101361)
     2765+
     2766+       * flushb.c: Use platform independent method of defining the
     2767+               BLKFLSBUF and FDFLUSH ioctl's.  Also include sys/mount.h
     2768+               since on newer glibc's BLKFLSBUF is defined there.
     2769+
     2770+       * bitops.h: The C language versions of ext2fs_swab16/32 need to be
     2771+               included if EXT2FS_ENABLE_SWAPFS is defined, since we need
     2772+               to support byte swapping even if we don't support the
     2773+               conversion functions.  (Fixes Debian bug #101686).
     2774+
     2775+       * dirblock.c (ext2fs_read_dir_block): Remove use of dir_entry_2
     2776+               since the byte-swapping code all assumes the
     2777+               ext2_dir_entry structure.  (It's a question of whether or
     2778+               not name_len should be byte-swapped or not, and whether
     2779+               it's a 16 bit or 8 bit field.)
     2780+
     2781+2001-06-15  Theodore Tso  <tytso@valinux.com>
     2782+
     2783+       * Release of E2fsprogs 1.21
     2784+
     2785+2001-06-15  Theodore Tso  <tytso@valinux.com>
     2786+
     2787+       * Makefile.in: Fix bug in installation of ext2_types.h.  It is a
     2788+               file which is generated and is therefore found in the
     2789+               build directory, not source directory.
     2790+
     2791+       * ismounted.c (check_mntent_file): Use a test file in / to check
     2792+               to see if the root filesystem is mounted read-only.  This
     2793+               protects against the case where /etc might not be on /, as
     2794+               well as the case where /etc/mtab doesn't exist.  (Both are
     2795+               should-never happen scenarios, but you never know...)
     2796+
     2797+2001-06-14  Theodore Tso  <tytso@valinux.com>
     2798+
     2799+       * ismounted.c (ext2fs_check_if_mounted): Fix grammer in comment.
     2800+               Remove unneeded #pragma argsused, since the arguments are
     2801+               always used.
     2802+
     2803+2001-06-13  Theodore Tso  <tytso@valinux.com>
     2804+
     2805+       * ext2_types.h.in: If linux/types.h has been defined, then don't
     2806+               try to redefine the typedefs.
     2807+
     2808+       * Makefile.in (HFILES): Add ext2_types.h to the list of files
     2809+               which should be installed.
     2810+
     2811+       * ismounted.c (check_mntent_file): Work around GNU hurd brain
     2812+               damage.  Addresses Debian bug #100304.
     2813+
     2814+       * Makefile.in: Limit some .o files from being included into the
     2815+               library if --disable-debugfs, --disable-swapfs,
     2816+               --disable-imager, or --disable-resizer are used.
     2817+
     2818+2001-06-12  Theodore Tso  <tytso@valinux.com>
     2819+
     2820+       * inode.c, tst_iscan.c: Stop using the compatibility badblocks
     2821+               function, and use the ext2fs_badblocks_* functions
     2822+               instead.
     2823+
     2824+2001-06-11  Theodore Tso  <tytso@valinux.com>
     2825+
     2826+       * Makefile.in, gen_bitmap.c, bitops.h: Move inline functions
     2827+               ext2fs_mark_generic_bitmap and
     2828+               ext2fs_unmark_generic_bitmap to gen_bitmap.c as normal
     2829+               functions.  (This saves space and doesn't significantly
     2830+               change the speed of e2fsck on a P-III.)
     2831+
     2832+       * ext2fs.h, bitops.h, block.c, bmap.c, closefs.c, dirblock.c,
     2833+               inode.c, native.c, openfs.c, rw_bitmaps.c, swapfs.c: Only
     2834+               include the byte-swapping logic if ENABLE_SWAPFS is turned
     2835+               on or if we're on a big-endian machine.
     2836+       
     2837+       * initialize.c (ext2fs_initialize):Use WORDS_BIGENDIAN directly to
     2838+               set EXT2_FLAG_SWAP_BYTES, instead of using
     2839+               ext2fs_native_flag.
     2840+       
     2841+       * native.c (ext2fs_native_flag): Use WORDS_BIGENDIAN provided by
     2842+               autoconf to determine whether or not return
     2843+               EXT2_FLAG_SWAP_BYTES.
     2844+
     2845+2001-06-10  Theodore Tso  <tytso@valinux.com>
     2846+
     2847+       * Makefile.in: Remove the dependence on the libe2p library.
     2848+
     2849+       * mkjournal.c (ext2fs_add_journal_inode): Replace use of fsetflags
     2850+               with direct usage of the ioctl/fchflags so that we don't
     2851+               have to depend on the libe2p library.
     2852+
     2853+2001-06-08  Theodore Tso  <tytso@valinux.com>
     2854+
     2855+       * ext2_types.h.in: Use unsigned ints in favor of unsigned longs
     2856+               when trying to find a 32-bit wide type.
     2857+
     2858+       * icount.c (insert_icount_el): Fix the code used to estimate the
     2859+               size of the new icount array to be more intelligent, to
     2860+               avoid reallocating the array too many times.  Thanks to
     2861+               Enrique Perez-Terron for pointing this out.
     2862+
     2863+2001-06-02  Theodore Tso  <tytso@valinux.com>
     2864+
     2865+       * valid_blk.c (ext2fs_inode_has_valid_blocks): Only check i_blocks
     2866+               for a symlink to determine whether it is a fast symlink.
     2867+
     2868+2001-06-01  Theodore Tso  <tytso@valinux.com>
     2869+
     2870+       * Makefile.in, dosio.c, ext2_fs.h, ext2_types.h.in, ext2fs.h:
     2871+               Move include/asm/types.h.in to lib/ext2fs/ext2_types.h.in.
     2872+
     2873+2001-05-25  Theodore Tso  <tytso@valinux.com>
     2874+
     2875+       * Release of E2fsprogs 1.20
     2876+
     2877+2001-05-25  Theodore Tso  <tytso@valinux.com>
     2878+
     2879+       * ismounted.c: More cleanups for ismounted.c, some from Andreas,
     2880+               some to clean up Andreas's patches.  Use strncpy instead
     2881+               of strcpy to save the root's mountpoint.  Clean up #ifdef
     2882+               structure.  Remove uneeded variable in testing/debug driver.
     2883+
     2884+2001-05-24  Andreas Dilger  <adilger@turbolinux.com>
     2885+
     2886+       * ismounted.c: Add check for root device which doesn't depend on
     2887+               /etc/fstab or /proc/mounts to be correct.  Don't call
     2888+               endmntent() before we are done with mnt struct.
     2889+
     2890+2001-05-23  Theodore Tso  <tytso@valinux.com>
     2891+
     2892+       * ext2_err.et.in (EXT2_ET_JOURNAL_UNSUPP_VERSION): Added new error
     2893+               code.
     2894+
     2895+2001-05-21  Theodore Tso  <tytso@valinux.com>
     2896+
     2897+       * ext2_fs.h: Change assignment of EXT2_FEATURE_COMPAT_DIR_INDEX to
     2898+               make room for pre-existing usage of
     2899+               EXT2_FEATURE_COMPAT_EXT_ATTR.  Add flag EXT2_INDEX_FL with
     2900+               the same codepoint as EXT2_BTREE_FL.
     2901+
     2902+2001-05-20  Theodore Tso  <tytso@valinux.com>
     2903+
     2904+       * ext2fs.h: #include <> instead of "" for ext2fs and et header
     2905+               files, since they will be installed in /usr/include
     2906+
     2907+2001-05-14  Theodore Tso  <tytso@valinux.com>
     2908+
     2909+       * alloc.c, alloc_tables.c, badblocks.c, bb_compat.c, bb_inode.c,
     2910+               bitmaps.c, bitops.c, block.c, bmap.c, bmove.c, brel_ma.c,
     2911+               check_desc.c, closefs.c, cmp_bitmaps.c, dblist.c,
     2912+               dblist_dir.c, dir_iterate.c, dirblock.c, dupfs.c,
     2913+               expanddir.c, ext2_fs.h, fileio.c, finddev.c, flushb.c,
     2914+               freefs.c, get_pathname.c, getsize.c, icount.c, imager.c,
     2915+               initialize.c, inline.c, inode.c, irel_ma.c, ismounted.c,
     2916+               link.c, lookup.c, mkdir.c, mkjournal.c, namei.c, native.c,
     2917+               newdir.c, nt_io.c, openfs.c, read_bb.c, read_bb_file.c,
     2918+               rs_bitmap.c, rw_bitmaps.c, swapfs.c, test_io.c,
     2919+               tst_badblocks.c, tst_byteswap.c, tst_getsize.c,
     2920+               tst_iscan.c, unix_io.c, unlink.c, valid_blk.c, version.c,
     2921+               write_bb_file.c, ext2_fs.h: Moved file from include/linux.
     2922+               Adjust all files in this directroy to include this file.
     2923+
     2924+       * mkjournal.c (ext2fs_create_journal_superblock): Remove redundant
     2925+               code.
     2926+
     2927+2001-05-05  Theodore Tso  <tytso@valinux.com>
     2928+
     2929+       * fileio.c (ext2fs_file_read): Factored out common code and
     2930+               cleaned up function.  Fixed a bug where if there was an
     2931+               error reading from the disk, the number of bytes read
     2932+               wasn't reliably set.  (Fixes Debian bug #79163)
     2933+               (ext2fs_file_write): Factored out common code and made
     2934+               function more efficient; if writing a full block, don't
     2935+               bother to do a read-modify-write cycle.
     2936+
     2937+2001-05-04  Theodore Tso  <tytso@valinux.com>
     2938+
     2939+       * dirblock.c (ext2fs_read_dir_block): Check for an directory
     2940+               record length which isn't a multiple four, and treat that
     2941+               as an invalid.  Scan the directory and return an error
     2942+               (EXT2_ET_DIR_CORRUPTED) if the directory records are
     2943+               corrupted.
     2944+               (ext2fs_write_dir_block): If while byte-swapping the
     2945+               directory block, if there's an error, abort and return
     2946+               EXT2_ET_DIR_CORRUPTED.
     2947+
     2948+2001-05-02  Theodore Tso  <tytso@valinux.com>
     2949+
     2950+       * ext2fs.h (EXT2_FLAG_IMAGE_FILE): Add new flag, and add
     2951+               image_header field in the ext2_filsys structure
     2952+
     2953+       * block.c (block_iterate_ind, block_iterate_dind, block_iterate_tind):
     2954+       * inode.c (ext2fs_read_inode):
     2955+       * rw_bitmaps.c (read_bitmaps):
     2956+       * openfs.c (ext2fs_open): Add support for EXT2_FLAG_IMAGE_FILE
     2957+
     2958+       * imager.c (ext2fs_image_bitmap_read): Fix bug in imager to make
     2959+               sure the full bitmap is saved.
     2960+
     2961+2001-05-01  Theodore Tso  <tytso@valinux.com>
     2962+
     2963+       * e2image.h (struct ext2_image_hdr): Add space for the device name
     2964+               in the image header.
     2965+
     2966+       * dir_iterate.c (ext2fs_process_dir_block): Add a double-check to
     2967+               make sure the rec_len is a multiple of 4, to prevent
     2968+               bus-errors on architectures which care about mis-aligned
     2969+               pointer references.
     2970+
     2971+2001-04-25  Theodore Tso  <tytso@valinux.com>
     2972+
     2973+       * getsize.c (ext2fs_get_device_size): Use an unsigned long to
     2974+               query the device sizes using the BLKGETSIZE ioctl.
     2975+
     2976+2001-04-16  Theodore Tso  <tytso@valinux.com>
     2977+
     2978+       * ismounted.c (check_mntent): Check /proc/mounts on Linux systems
     2979+               before checking /etc/mtab.  The EXT2_MF_READONLY flag is
     2980+               now set from the /etc/mtab options field for all
     2981+               filesystems, not just the root filesystem.  Add debugging
     2982+               code to make it easier to test ext2fs_check_if_mounted().
     2983+
     2984+       * mkjournal.c (ext2fs_create_journal_superblock): Add safety
     2985+               check; return an error if there's an attempt to create a
     2986+               journal less than 1024 filesystem blocks.
     2987+
     2988+       * ext2_err.et.in, mkjournal.c: Change EXT2_JOURNAL_NOT_BLOCK and
     2989+               EXT2_NO_JOURNAL_SB to be EXT2_ET_*.
     2990+
     2991+2001-02-20  Theodore Tso  <tytso@valinux.com>
     2992+
     2993+       * bitops.h (ext2fs_swab16, ext2fs_swab32): Add i386 assembly
     2994+               inline functions.
     2995+
     2996+       * tst_byteswap.c: New function to test the byteswap functions.
     2997+               Add to regression test suite.
     2998+
     2999+2001-02-08  Theodore Tso  <tytso@valinux.com>
     3000+
     3001+       * e2image.h (struct ext2_image_hdr): Fix type for fs_hostname
     3002+
     3003+2001-02-07  Theodore Tso  <tytso@valinux.com>
     3004+
     3005+       * mkjournal.c (ext2fs_create_journal_superblock): Fix the setting
     3006+               of s_first for external devices to always be 1, since
     3007+               jsb->s_first is always relative to the start of the
     3008+               journal superblock.  Use htonl(1) when setting s_nr_users.
     3009+
     3010+2001-01-17  Theodore Ts'o  <tytso@valinux.com>
     3011+
     3012+       * mkjournal.c (ext2fs_add_journal_device): Fix bug where the
     3013+               device number of the filesystem (instead of the journal)
     3014+               was being dropped into s_journal_dev.
     3015+
     3016+2001-01-15  Theodore Ts'o  <tytso@valinux.com>
     3017+
     3018+       * initialize.c (ext2fs_initialize): Add support for initializing
     3019+               the ext2 superblock for external journal devices.  This
     3020+               basically means we don't bother to allocate any block
     3021+               group descriptors.
     3022+
     3023+       * openfs.c (ext2fs_open): Only open external journal devices if
     3024+               the new flag EXT2_FLAG_JOURNAL_DEV_OK is passed to
     3025+               ext2fs_open.  When opening such devices, don't try to read
     3026+               the block group descriptors, since they're not there.
     3027+
     3028+       * ext2_err.et.in (EXT2_NO_JOURNAL_SB): Add new error code
     3029+       
     3030+       * mkjournal.c: Export a new function,
     3031+               ext2fs_create_journal_superblock(), which allocates and
     3032+               returns a buffer containing a journal superblock.  This is
     3033+               needed by mke2fs to create an external journal.  Rewrote
     3034+               ext2fs_add_journal_device() so that it no longer creates
     3035+               the external journal, but rather adds a filesystem to an
     3036+               existing external journal.  It handles all of the UUID
     3037+               manipulation.
     3038+
     3039+       * ext2fs.h: List the EXT3_FEATURE_JOURNAL_DEV as a flag supported
     3040+               by the library.  Define the EXT2_FLAG_JOURNAL_DEV_OK.
     3041+               Changed function prototype for ext2fs_add_journal_device().
     3042+               
     3043+2001-01-14  Theodore Ts'o  <tytso@valinux.com>
     3044+
     3045+       * closefs.c (ext2fs_flush): Don't write out anything beyond the
     3046+                primary superblock if EXT2_INCOMPAT_JOURNAL_DEV is
     3047+                listed.
     3048+
     3049+2001-01-12  Theodore Ts'o  <tytso@valinux.com>
     3050+
     3051+       * imager.c: Fix gcc -Wall complaints and a series of bugs where
     3052+               retval wasn't set correctly.  (Thanks to Andreas Dilger
     3053+               for pointing this out.)
     3054+
     3055+2001-01-11    <tytso@snap.thunk.org>
     3056+
     3057+       * flushb.c (ext2fs_sync_device): New function which centralizes
     3058+               all of the places which might try to use the BLKFLSBUF
     3059+               or FDFLUSH ioctls (and usually failing to define them
     3060+               since the system header files don't usually do this for
     3061+               us, and we're trying to avoid usage of kernel include
     3062+               files now).
     3063+
     3064+2001-01-10    <tytso@snap.thunk.org>
     3065+
     3066+       * alloc.c, bb_inode.c, bitmaps.c, bitops.h, block.c, bmap.c,
     3067+               bmove.c, brel.h, cmp_bitmaps.c, dblist.c, dblist_dir.c,
     3068+               dir_iterate.c, expanddir.c, ext2fs.h, ext2fsP.h, fileio.c,
     3069+               finddev.c, get_pathname.c, icount.c, inode.c, irel.h,
     3070+               irel_ma.c, ismounted.c, link.c, lookup.c, mkdir.c,
     3071+               mkjournal.c, namei.c, newdir.c, read_bb_file.c, test_io.c,
     3072+               tst_iscan.c, unix_io.c, unlink.c: Change use of ino_t to
     3073+               ext2_ino_t, to protect applications that attempt to
     3074+               compile -D_FILE_OFFSET_BITS=64, since this inexplicably
     3075+               changes ino_t(!?).  So we use ext2_ino_t  to avoid an
     3076+               unexpected ABI change.
     3077+
     3078+2001-01-05    <tytso@snap.thunk.org>
     3079+
     3080+       * dirblock.c (ext2fs_read_dir_block): Fix a potential case where
     3081+               we may overrun allocated memory in case of a corrupted
     3082+               filesystem (or an e2fsck test case :-) when byte-swapping
     3083+               the directory block.
     3084+
     3085+       * ext2fs.h: Indent the #warning to fix gcc -Wall complaint.
     3086+
     3087+       * mkjournal.c (ext2fs_add_journal_device): Fix various gcc -Wall
     3088+               complaints including a missing return 0 at the end of
     3089+               ext2fs_add_journal_device.
     3090+
     3091+2001-01-03    <tytso@snap.thunk.org>
     3092+
     3093+       * Makefile.in: Link in libe2p when creating libext2fs as a shared
     3094+               library, since mkjournal.c now references fsetflags().
     3095+
     3096+       * mkjournal.c (ext2fs_add_journal_inode): Folded in Andreas
     3097+               Dilger's changes (with fixups) to allow on-line creation
     3098+               of a journal file.
     3099+
     3100+       * ext2fs.h, closefs.c (ext2fs_flush): Add new flag,
     3101+               EXT2_FLAG_SUPER_ONLY, which the close routines to only
     3102+               update the superblock, and not the group descriptors.
     3103+
     3104+2000-12-30  Andreas Dilger  <adilger@turbolinux.com>
     3105+
     3106+       * ismounted.c: add ext2fs_check_mount_point() function, which will
     3107+               optionally return the mount point of a device if mounted
     3108+
     3109+2000-12-14  Andreas Dilger  <adilger@turbolinux.com>
     3110+
     3111+       * mkjournal.c: rename ext2fs_add_journal_fs() to the more descriptive
     3112+               ext2fs_add_journal_inode()
     3113+
     3114+2001-01-01    <tytso@snap.thunk.org>
     3115+
     3116+       * ext2fs.h: Remove definition of ext2fs_sb.  Note: this may break
     3117+               source (but not binary) compatibility of some users of the
     3118+               ext2 library.  They should just simply do a global search
     3119+               and replace of struct ext2fs_sb with struct
     3120+               ext2_super_block, and use their own private copy of
     3121+               ext2_fs.h if they aren't already.
     3122+
     3123+       * closefs.c, initialize.c, link.c, newdir.c, openfs.c, swapfs.c:
     3124+               Replace use of ext2fs_sb with ext2_super_block.
     3125+
     3126+2000-12-31    <tytso@snap.thunk.org>
     3127+
     3128+       * ext2fs.h: Cleaned up header file by removing definitions of
     3129+               feature flags that might not have been defined in older
     3130+               ext2 header files.  Now that we're using our own
     3131+               include/linux/ext2fs.h header file, this can never happen.
     3132+
     3133+       * jfs_dat.h: Removed old header file which is no longer needed.
     3134+
     3135+2000-12-13  Theodore Ts'o  <tytso@valinux.com>
     3136+
     3137+       * closefs.c (ext2fs_update_dynamic_rev): New function suggested
     3138+               by Andreas Dilger to update the filesystem revision to
     3139+               EXT2_DYNAMIC_REV.
     3140+
     3141+       * swapfs.c (ext2fs_swap_super): Add byte swapping for the journal
     3142+               fields.
     3143+
     3144+2000-12-09    <tytso@snap.thunk.org>
     3145+
     3146+       * ext2fs.h, mkjournal.c (ext2fs_add_journal_inode,
     3147+               ext2fs_add_journal_device): Add a new argument to the APIs
     3148+               of these function, which is a flags word.  This is used to
     3149+               allow the creation of a V1 superblock for those folks who
     3150+               are using ext3 0.3b in production.  Note, the user-land
     3151+               interface for getting at this flag won't be documented, as
     3152+               the V1 superblock is deprecated.
     3153+
     3154+       * mkjournal.c (init_journal_superblock): Sync Stephen's changes
     3155+               which creates a V2 superblock instead of a V1 superblock.
     3156+
     3157+2000-11-21    <tytso@snap.thunk.org>
     3158+
     3159+       * test_io.c (test_write_blk, test_write_byte): Fix typos pointed
     3160+               out by Andreas Dilger.
     3161+
     3162+2000-11-05    <tytso@snap.thunk.org>
     3163+
     3164+       * imager.c (ext2fs_image_{inode,super,bitmap}_{read,write},
     3165+               ext2_fs.h, Makefile.in: New file that has routines that
     3166+               save ext2fs metadata to a file.
     3167+
     3168+       * ext2_err.et.in (EXT2_ET_MAGIC_E2IMAGE): New error code assigned.
     3169+
     3170+       * e2image.h: New file which defines the file format for the ext2
     3171+               image file.  (Saved copy of ext2 metadata to a file as a
     3172+               saving throw against worst-case damage.)
     3173+
     3174+2000-11-01    <tytso@snap.thunk.org>
     3175+
     3176+       * inode.c (ext2fs_flush_icache): Add new function
     3177+               ext2fs_flush_icache() which flushes the internal inode
     3178+               cache.  Applications which modify the inode table blocks
     3179+               directly must call this function.
     3180+
     3181+2000-10-26    <tytso@snap.thunk.org>
     3182+
     3183+       * mkjournal.c: Add #include of netinet/in.h, since Solaris
     3184+               requires it for ntohl().
     3185+
     3186+       * ext2_io.h (io_channel_write_byte): Add new interface to allow
     3187+               callers to write specific byte ranges.  This is an
     3188+               optional interface, which not all IO channels may
     3189+               implement.
     3190+
     3191+       * unix_io.c (unix_write_byte):
     3192+       * test_io.c (test_write_byte): Add implementation of the
     3193+               write_byte function.
     3194+
     3195+       * closefs.c (write_primary_superblock, ext2fs_flush): Add a new
     3196+               function which writes the primary superblock.  If the IO
     3197+               channel supports writing raw bytes directly, only fields
     3198+               which were modified are written to the disk.  This makes
     3199+               it safe(r) to use utilities like tune2fs on a mounted
     3200+               filesystem.
     3201+
     3202+       * freefs.c (ext2fs_free): Free the original superblock if it is
     3203+               available.
     3204+
     3205+       * openfs.c (ext2fs_open): Store a copy of the original superblock
     3206+               when opening it.
     3207+
     3208+       * ext2fs.h: Add a field to store the original superblock in the
     3209+               ext2 context structure.
     3210+
     3211+2000-10-24    <tytso@snap.thunk.org>
     3212+
     3213+       * llseek.c: Add #ifdef's for IA64 (it's a 64-bit platform, so we
     3214+               don't need to use llseek).
     3215+
     3216+2000-10-24    <tytso@valinux.com>
     3217+
     3218+       * Makefile.in, ext2fs.h, jfs_dat.h, mkjournal.c: Add functions for
     3219+               creating an ext3 journal on a filesystem.
     3220+
     3221+2000-08-21    <tytso@valinux.com>
     3222+
     3223+       * ext2_err.et.in (EXT2_JOURNAL_NOT_BLOCK): Add new error code.
     3224+
     3225+2000-08-22    <tytso@valinux.com>
     3226+
     3227+       * unix_io.c: Make massive changes to support a multiple block
     3228+               writethrough cacheing.
     3229+
     3230+       * ext2_io.h: Added flags field to the io_channel structure.
     3231+
     3232+2000-08-19    <tytso@valinux.com>
     3233+
     3234+       * finddev.c, ext2fs.h, Makefile.in: Add new file, finddev.c, which
     3235+               provides the function ext2fs_find_block_device().  This
     3236+               function returns the pathname to a block device, given its
     3237+               device number.
     3238+
     3239+2000-07-13    <tytso@valinux.com>
     3240+
     3241+       * Release of E2fsprogs 1.19
     3242+
     3243+2000-07-07  Theodore Ts'o  <tytso@valinux.com>
     3244+
     3245+       * ext2fs.h (EXT2_LIB_FEATURE_INCOMPAT_SUPP): Add
     3246+               EXT3_FEATURE_INCOMPAT_RECOVER (aka needs_recovery) to the
     3247+               list of filesystem flags supported by the library.
     3248+
     3249+2000-07-04  Theodore Ts'o  <tytso@valinux.com>
     3250+
     3251+       * ext2fs.h: Update to include latest journalling additions to the
     3252+               superblock.
     3253+
     3254+       * dll/jump.funcs: Add new jumptable entries for
     3255+               ext2fs_write_bb_FILE, ext2fs_read_bb_FILE2, and
     3256+               ext2fs_badblocks_equal.
     3257+
     3258+       * tst_badblocks.c: Update test program to test
     3259+               ext2fs_read_bb_FILE2 and ext2fs_write_FILE.
     3260+
     3261+       * write_bb_file.c (ext2fs_write_bb_FILE): New function which
     3262+               writes out bad blocks list to a file.
     3263+
     3264+       * read_bb_file.c (ext2fs_read_bb_FILE2): Add new function which
     3265+               changes the callback function to take two additional
     3266+               arguments; a private blind pointer supplied by the caller,
     3267+               and pointer to a char * containing a pointer to the
     3268+               invalid string.
     3269+
     3270+       * badblocks.c (ext2fs_badblocks_equal): Add new function which
     3271+               returns true if two badblocks list are equal.
     3272+
     3273+       * Makefile.in: Remove explicit link of -lc in the shared library.
     3274+               (It shouldn't be necessary, and is harmful in some cases).
     3275+
     3276+2000-06-10  Theodore Ts'o  <tytso@valinux.com>
     3277+
     3278+       * getsize.c (main): Add debugging code under #ifdef DEBUG
     3279+
     3280+2000-05-27  Theodore Ts'o  <tytso@valinux.com>
     3281+
     3282+       * mkdir.c (ext2fs_mkdir): Read the parent directory's inode
     3283+               earlier, so that if there's an error reading it, we can
     3284+               more cleanly back out of the operation.
     3285+
     3286+2000-05-25    <tytso@snap.thunk.org>
     3287+
     3288+       * getsize.c (ext2fs_get_device_size): Use open64() instead of
     3289+               open() if it exists.  Under linux, manually define the
     3290+               ioctl for BLKGETSIZE if it isn't already defined and it's
     3291+               safe to do so.
     3292+
     3293+       * unix_io.c (unix_open): Use open64() instead of open() if it
     3294+               exists.
     3295+
     3296+       * llseek.c: Simplify header includes of unistd.h.  If lseek64 is
     3297+               available (and prototypes are defined) use it in
     3298+               preference to llseek.
     3299+
     3300+       * Makefile: Add hack dependency rule so that parallel makes work
     3301+               correctly.
     3302+
     3303+2000-05-18  Theodore Ts'o  <tytso@valinux.com>
     3304+
     3305+       * ext2fs.h: Add appropriate ifdef's to support C++ compilation.
     3306+
     3307+2000-04-03  Theodore Ts'o  <tytso@valinux.com>
     3308+
     3309+       * block.c: Readibility tweak in conditionals involving
     3310+               ctx->fs->flags.
     3311+
     3312+       * ext2fs.h: Use AUTOCONF SIZEOF_* macros if available to determine
     3313+               how to define __s64 and __u64.  Turn off "compression is
     3314+               experimental" warning if the cpp macro
     3315+               I_KNOW_THAT_COMPRESSION_IS_EXPERIMENTAL is defined.
     3316+
     3317+2000-02-11    <tytso@snap.thunk.org>
     3318+
     3319+       * ext2fs.h: Define EXT2FS_COMPRESSED_BLKADDR and HOLE_BLKADDR.
     3320+               Conditionally include Compression as a supported type if
     3321+               ENABLE_COMPRESSION (via --enable-compression) is turned on.
     3322+
     3323+       * swapfs.c (ext2fs_swap_super): Swap the compression usage bitmap.
     3324+
     3325+2000-02-08    <tytso@snap.thunk.org>
     3326+
     3327+       * bitops.h (ext2fs_mark_generic_bitmap, ext2fs_unmark_generic_bitmap,
     3328+               ext2fs_mark_block_bitmap, ext2fs_unmark_block_bitmap,
     3329+               ext2fs_mark_inode_bitmap, ext2fs_unmark_inode_bitmap):
     3330+               Change to return the previous state of the bit that is
     3331+               being marked or unmarked.  For speed optimization.
     3332+       
     3333+2000-02-02  Theodore Ts'o  <tytso@valinux.com>
     3334+
     3335+       * getsize.c, ismounted.c: Remove unneeded include of linux/fs.h
     3336+
     3337+       * swapfs.c: Remove #ifdef HAVE_EXT2_INODE_VERSION since it's not
     3338+               needed any more; we know it will always be i_generation.
     3339+               Add support for swapping the high bits of the uid and gid.
     3340+
     3341+1999-11-19    <tytso@valinux.com>
     3342+
     3343+       * mkdir.c (ext2fs_mkdir): Only update the parent's inode link
     3344+               counts if the link was successful.  Patch suggested by
     3345+               jeremy@goop.org.
     3346+
     3347+       * Makefile.in (distclean): Remove TAGS and Makefile.in.old from
     3348+               the source directory.
     3349+
     3350+1999-11-10    <tytso@valinux.com>
     3351+
     3352+       * Release of E2fsprogs 1.18
     3353+
     3354+1999-11-08    <tytso@valinux.com>
     3355+
     3356+       * Makefile.in (tst_badblocks): Add freefs.o to the object list,
     3357+               since ext2fs_badblocks_list_free was moved to freefs.c.
     3358+
     3359+       * tst_badblocks.c: Use the newer badblocks API names.  Add
     3360+               duplicate blocks to the test inputs to test dealing with
     3361+               adding blocks which are already in the badblocks list.
     3362+
     3363+       * badblocks.c (ext2fs_badblocks_list_add): If appending to the end
     3364+               of the list, use a shortcut O(1) operations instead of an
     3365+               O(n) operation.  (Idea suggested by David Beattie.)
     3366+
     3367+       * freefs.c (ext2fs_free): Use ext2fs_badblocks_list_free() instead
     3368+               of badblocks_list_free(), to save a procedure call.
     3369+
     3370+1999-10-26    <tytso@valinux.com>
     3371+
     3372+       * Release of E2fsprogs 1.17
     3373+
     3374+1999-10-26    <tytso@valinux.com>
     3375+
     3376+       * ext2fs.h: Add kludge to deal with the fact that egcs cpp doesn't
     3377+               seem to handle ~0UL the same way as they used to.
     3378+
     3379+1999-10-25    <tytso@valinux.com>
     3380+
     3381+       * nt_io.c (_OpenNtName): Open the device using
     3382+               FILE_SYNCHRONOUS_IO_NONALERT instead of
     3383+               FILE_SYNCHRONOUS_IO_ALERT
     3384+               (nt_open): At the end of the device open routine, unlock
     3385+               the drive but do not dismount it.
     3386+
     3387+       * initialize.c (CREATOR_OS): Use __GNU__ instead of __gnu__ to
     3388+               detect the Hurd OS.
     3389+
     3390+1999-10-22    <tytso@valinux.com>
     3391+
     3392+       * Release of E2fsprogs 1.16
     3393+
     3394+1999-10-22    <tytso@valinux.com>
     3395+
     3396+       * mkdir.c (ext2fs_mkdir): Pass EXT2_FT_DIR flag to ext2fs_link().
     3397+
     3398+       * link.c (ext2fs_link): This call now uses the low three bits of
     3399+               the flags parameter to pass the directory filetype
     3400+               information; it will set the directory entry FILETYPE
     3401+               information if the filesystem supports it.
     3402+
     3403+       * newdir.c (ext2fs_new_dir_block): If the FILETYPE superblock
     3404+               option is set, then create the '.' and '..' entries with
     3405+               the filetype set to EXT2_FT_DIR.
     3406+
     3407+1999-09-24    <tytso@valinux.com>
     3408+
     3409+       * nt_io.c: New file which supports I/O under Windows NT.
     3410+
     3411+1999-09-07    <tytso@valinux.com>
     3412+
     3413+       * ext2fs.h: Add new fields for journalling and define new
     3414+               feature bits used by newer filesystems: IMAGIC_INODES,
     3415+               HAS_JOURNAL, RECOVER.
     3416+
     3417+       * expanddir.c (ext2fs_expand_dir, expand_dir_proc): Change where
     3418+               we update the inode block count and size files so that the
     3419+               block count field is updated correctly when we create an
     3420+               indirect block.
     3421+
     3422+1999-07-18  Theodore Ts'o  <tytso@valinux.com>
     3423+
     3424+       * Release of E2fsprogs 1.15
     3425+
     3426+1999-06-23    <tytso@valinux.com>
     3427+
     3428+       * swapfs.c (ext2fs_swap_inode): Add compatibility for Linux 2.3
     3429+               kernels that use i_generation instead of i_version.  Patch
     3430+               supplied by Jon Bright <sircus@sircus.demon.co.uk>.
     3431+
     3432+1999-06-21    <tytso@valinux.com>
     3433+
     3434+       * dir_iterate.c (ext2fs_process_dir_block): Check for corrupted
     3435+               directory entry before calling the callback function.
     3436+               This should prevent some core dumps of insufficiently
     3437+               paranoid callback functions.
     3438+
     3439+1999-05-29    <tytso@rsts-11.mit.edu>
     3440+
     3441+       * ext2fs.h: Add feature definition for AFS IMAGIC inodes.
     3442+
     3443+       * fileio.c (ext2fs_file_open): Remove obsolete comment stating
     3444+               that we don't handle writing yet (we do).  Fixed bug where
     3445+               we weren't allocating a big enough buffer for ext2_bmap.
     3446+
     3447+1999-05-03    <tytso@rsts-11.mit.edu>
     3448+
     3449+       * openfs.c (ext2fs_open): Check to make sure that the number of
     3450+               blocks per group is not zero --- if so, it must be a bad
     3451+               superblock!
     3452+
     3453+1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3454+
     3455+       * Release of E2fsprogs 1.14
     3456+
     3457+1999-01-07  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3458+
     3459+       * inode.c (ext2fs_read_inode, ext2fs_write_inode): Check to see if
     3460+               the inode number is zero; if it's zero, return
     3461+               EXT2_ET_BAD_INODE_NUM.
     3462+
     3463+1998-12-30  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3464+
     3465+       * initialize.c (ext2fs_initialize): Use EXT2_FIRST_INODE instead
     3466+               of EXT2_FIRST_INO to ensure compatibility with Linux 1.2
     3467+               header files.
     3468+
     3469+Mon Jan  4 02:32:09 1999  Theodore Y. Ts'o  <tytso@mit.edu>
     3470+
     3471+       * llseek.c (ext2fs_llseek): Change ext2fs_llseek() in the
     3472+               non-Linux case to use EINVAL by default, unless it isn't
     3473+               defined, in which case we use EXT2_ET_INVALID_ARGUMENT
     3474+               instead.
     3475+
     3476+1998-12-15  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3477+
     3478+       * Release of E2fsprogs 1.13
     3479+
     3480+1998-12-03  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3481+
     3482+       * Makefile.in: Updated dependencies.
     3483+
     3484+1998-09-22  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3485+
     3486+       * initialize.c (ext2fs_initialize): Make sure that we allocate
     3487+               enough inodes so that we can make a valid filesystem.
     3488+
     3489+1998-09-02  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3490+
     3491+       * rw_bitmaps.c: Fixed signed/unsigned warnings.
     3492+
     3493+       * fileio.c (ext2fs_file_set_size): Remove unneeded extern from the
     3494+               function declaration.
     3495+
     3496+       * dblist.c (make_dblist): Add safety check in case the dblist
     3497+               pointer passed in is null (in which case, assign it to
     3498+               fs->dblist).  Fixed some signed/unsigned warnings.
     3499+
     3500+       * bmap.c: Make addr_per_block be of type blk_t to avoid
     3501+               signed/unsigned warnings.
     3502+
     3503+       * namei.c (ext2fs_follow_link): Remove uneeded extern from the
     3504+               function declaration.
     3505+
     3506+       * get_pathname.c (get_pathname_proc): Use return value from
     3507+               ext2fs_get_mem, instead of checking if &gp->name is
     3508+               NULL.
     3509+
     3510+       * dir_iterate.c (ext2fs_process_dir_block):
     3511+       * dblist_dir.c (ext2fs_dblist_dir_iterate): Remove uneeded extern
     3512+               from the function declaration.
     3513+
     3514+       * block.c (ext2fs_block_iterate2): If the read_inode call fails,
     3515+               return the error directly instead of jumping to the
     3516+               cleanup routine, since we don't need to do any cleanup.
     3517+
     3518+       * alloc_table.c (ext2fs_allocate_group_table): Make this
     3519+               function take a dgrp_t for its group argument.
     3520+
     3521+       * ext2fs.h: Make dgrp_t an __u32 type, and make
     3522+               fs->desc_group_count be of type dgrp_t.
     3523+
     3524+1998-07-27  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3525+
     3526+       * badblocks.c (ext2fs_badblocks_list_add): Use a bigger increment
     3527+               than 10 blocks when we need to expand the size of the
     3528+               badblocks list.
     3529+
     3530+1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3531+
     3532+       * Release of E2fsprogs 1.12
     3533+
     3534+1998-06-30  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3535+
     3536+       * closefs.c (ext2fs_flush): Update the s_block_group_nr field as
     3537+               appropriate for all of the block group copies, so that
     3538+               it's clear where the beginning of the filesystem is on the
     3539+               disk.  (For when the partition table gets scrod.)
     3540+
     3541+       * ext2fs.h: Change the name of the feature from
     3542+               EXT2_FEATURE_INCOMPAT_DIRNAME_SIZE to
     3543+               EXT2_FEATURE_INCOMPAT_FILESIZE (to match with the kernel).
     3544+
     3545+1998-06-18  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3546+
     3547+       * inode.c (get_next_blockgroup): Fix bug where if
     3548+               get_next_blockgroup() is called early because of a missing
     3549+               inode table in a block group, the current_inode counter
     3550+               wasn't incremented correctly.
     3551+
     3552+1998-06-16  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3553+
     3554+       * read_bb.c (ext2fs_read_bb_inode): Make function more robust
     3555+               against a completely trashed bad block inode.
     3556+
     3557+1998-06-10  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3558+
     3559+       * alloc_tables.c (ext2fs_allocate_group_table): Fix bug so that if
     3560+               the stride length hits a bad value, we retry the block
     3561+               allocation starting at the beginning of the block group.
     3562+
     3563+       * ext2fs.h, bb_inode.c, block.c, bmove.c, dir_iterate.c,
     3564+               expanddir.c, ext2fsP.h, read_bb.c: Change blkcnt_t to be
     3565+               e2_blkcnt_t to avoid collision with LFS API.
     3566+
     3567+1998-05-01  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3568+
     3569+       * initialize.c (ext2fs_initialize): Initialize s_inodes_count in a
     3570+               way that avoids overflows on disk sizes greater than 4GB.
     3571+
     3572+1998-04-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3573+
     3574+       * ext2fs.h: Define EXT2_QSORT_TYPE appropriately for the
     3575+               return type for comparison functions for qsort.
     3576+
     3577+       * dblist.c (dir_block_cmp): Use EXT2_QSORT_TYPE in function
     3578+               declaration.
     3579+
     3580+1998-04-26  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3581+
     3582+       * ext2fs.h, bitops.h: Add support for the Watcom C compiler to do
     3583+               inline functions.
     3584+
     3585+       * ext2fs.h, dosio.c: Use asm/types.h instead of linux/types.h to
     3586+               evade a potential problem with glibc's header files trying
     3587+               to spike out linux/types.h.
     3588+
     3589+       * ext2fs.h (ext2fs_resize_mem): Change the function prototype to
     3590+               include the old size of the memory, which is needed for
     3591+               some braindamaged memory allocation systems that don't
     3592+               support realloc().
     3593+
     3594+       * badblocks.c (ext2fs_badblocks_list_add):
     3595+         bb_inode.c (clear_bad_block_proc):
     3596+         dblist.c (ext2fs_add_dir_block):
     3597+         icount.c (insert_icount_el):
     3598+         irel_ma.c (ima_put):
     3599+         rs_bitmap.c (ext2fs_resize_generic_bitmap): Update functions to
     3600+                 pass the old size of the memory to be resized to
     3601+                 ext2fs_resize_mem().
     3602+
     3603+1998-03-30  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3604+
     3605+       * Makefile.in: Change to use new installation directory variables
     3606+               convention.  Fix uninstall rules to take $(DESTDIR) into
     3607+               account.
     3608+
     3609+1998-03-29  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3610+
     3611+       * ext2fs.h: If __STRICT_ANSI__ is defined and we're on a platform
     3612+               with 32 bit longs, then we need to manually define __s64
     3613+               and __u64, since the current kernel header files don't
     3614+               define these if __STRICT_ANSI__ is defined.  This is a
     3615+               problem if we are compiling with full GCC warnings, since
     3616+               we do need 64 bit support.
     3617+       
     3618+       * Makefile.in (OBJS): Remove bmove.o from files to be built,
     3619+               since we're not using ext2fs_move_blocks() and there
     3620+               is some question as to its usefulness in its current
     3621+               form.
     3622+
     3623+       * bmap.c (block_bmap): Remove unused function.
     3624+
     3625+       * bmove.c (process_block): Fix -Wall warning.
     3626+
     3627+1998-03-23  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3628+
     3629+       * block.c (ext2fs_block_iterate3): Make the ref_offset field
     3630+               contain the offset into the inode.i_blocks array when
     3631+               ref_block is zero.  Since we haven't done a formal
     3632+               release of e2fsprogs since block_iterate2 was first
     3633+               introduced, I removed block_iterate2, and renamed
     3634+               block_iterate3 to be block_iterate2.
     3635+
     3636+       * bb_inode.c, bmove.c, dblist_dir.c, dir_iterate.c,
     3637+               expanddir.c, ext2fs.h, ext2fsP.h, read_bb.c: Change
     3638+               use of block_iterate and block_iterate2 to
     3639+               block_iterate2 with the new prototype for the
     3640+               interator function.  (using blkcnt_t forr blockcount)
     3641+
     3642+1998-03-21  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3643+
     3644+       * ext2fs.h: Add new superblock fields (s_algorithm_usage_bitmap,
     3645+               s_prealloc_blocks, s_prealloc_dir_blocks).  Added
     3646+               conditional defines of new features COMPAT_DIR_PREALLOC,
     3647+               RO_COMPAT_LARGE_FILE RO_COMPAT_BTREE_DIR,
     3648+               INCOMPAT_COMPRESSION, INCOMPAT_DIRNAME_SIZE.  Changed
     3649+               the library to declare that we support COMPAT_DIR_PREALLOC,
     3650+               INCOMPAT_DIRNAME_SIZE, RO_COMPAT_LARGE_FILE.
     3651+
     3652+       * fileio.c: Rename function ext2fs_file_llseek to be
     3653+               ext2fs_file_lseek, which is more accurate.
     3654+
     3655+       * block.c: Add new function ext2fs_block_iterate3 which calls
     3656+               the iterator function with the blockcount argument of
     3657+               type blkcnt_t.  This version of the function is
     3658+               allowed to handle large files; the other fucntions are
     3659+               not.
     3660+
     3661+       * ext2fs.h: Add new type blkcnt_t
     3662+
     3663+       * ext2_err.et.in: Add error code EXT2_ET_FILE_TOO_BIG
     3664+
     3665+       * block.c (ext2fs_block_iterate2): Fix bug where the block count
     3666+               field wasn't getting correctly incremented for sparse
     3667+               files when the indirect or doubly-indirect block
     3668+               specified in the inode was zero.
     3669+
     3670+Sun Mar  8 22:42:47 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3671+
     3672+       * unlink.c (unlink_proc):
     3673+       * lookup.c (lookup_proc):
     3674+       * link.c (link_proc):
     3675+       * get_pathname.c (get_pathname_proc):
     3676+       * dir_iterate.c (ext2fs_process_dir_block): Mask off high 8 bits
     3677+               from dirent->name_len, so it can be used for other
     3678+               purposes.
     3679+
     3680+       * ext2fs.h: Add definition of EXT2_FEATURE_INCOMPAT_DIRNAME_SIZE,
     3681+               and indicate that we have support for this incompatible
     3682+               option.
     3683+
     3684+Mon Feb 23 08:46:33 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3685+
     3686+       * ext2_err.et.in: Added new error code, EXT2_ET_CANCEL_REQUESTED.
     3687+
     3688+Fri Feb 20 23:58:01 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3689+
     3690+       * dblist.c (ext2fs_get_num_dirs): Improve the estimation of the
     3691+               number of directories when the block group information is
     3692+               unreliable.
     3693+
     3694+1998-02-20  Theodore Y. Ts'o  <tytso@edt.mit.edu>
     3695+
     3696+       * inode.c (ext2fs_get_next_inode): Always do the check to see if the
     3697+               inode table is missing so that we catch the case where the
     3698+               first block group is missing.
     3699+
     3700+       * getsize.c, ismounted.c, unix_io.c: #include errno.h since it's
     3701+               needed.
     3702+
     3703+Mon Feb 16 16:16:00 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3704+
     3705+       * ext2_io.h, ext2fs.h: Protect against being included multiple times.
     3706+
     3707+       * bmove.c: #include ext2fsP.h instead of "ext2fs/ext2fs.h"
     3708+
     3709+       * test_io.c (test_flush): Add a debugging printf when the flush
     3710+               method is called.
     3711+
     3712+       * rw_bitmaps.c (ext2fs_read_bitmaps): If the bitmaps are already
     3713+               read in, return right away.
     3714+
     3715+Sun Feb  1 08:20:24 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3716+
     3717+       * bitops.h: Don't try to do i386 inline asm functions if the
     3718+               compiler isn't GCC.
     3719+
     3720+       * ext2fs.h: If EXT2_FLAT_INCLUDES is defined, #include e2_types.h,
     3721+               instead of linux/types.h, and e2_bitops.h instead of
     3722+               ext2fs/bitops.h.
     3723+
     3724+       * icount.c, version.c: Don't #include <et/com_err.h>, as it isn't
     3725+               necessary.
     3726+
     3727+Sat Jan 17 13:13:31 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3728+
     3729+       * inode.c (ext2fs_open_inode_scan): Initialize the group variables
     3730+               so that we don't need to call get_next_blockgroup() the
     3731+               first time around.  Saves a bit of time, and prevents us
     3732+               from needing to assign -1 to current_group (which is an
     3733+               unsigned value).
     3734+
     3735+       * icount.c (insert_icount_el): Cast the estimated number of inodes
     3736+               from a float to an ino_t.
     3737+
     3738+       * alloc.c, alloc_tables.c, badlbocks.c, bb_compat.c, bb_inode.c,
     3739+               bitmaps.c, bitops.c, block.c, bmap.c, bmove.c, brel_ma.c,
     3740+               check_desc.c, closefs.c, cmp_bitmaps.c, dblist.c,
     3741+               dblist_dir.c, dir_iterate.c, dirblock.c, dupfs.c,
     3742+               expanddir.c, ext2fs.h, fileio.c, freefs.c,
     3743+               get_pathname.c, getsize.c, icount.c, initialize.c,
     3744+               inline.c, inode.c, irel_ma.c, ismounted.c, link.c,
     3745+               lookup.c, mkdir.c, namei.c, native.c, newdir.c,
     3746+               openfs.c, read_bb.c, read_bb_file.c, rs_bitmap.c,
     3747+               rw_bitmaps.c, swapfs.c, test_io.c, tst_badblocks.c,
     3748+               tst_getsize.c, tst_iscan.c, unix_io.c, unlink.c,
     3749+               valid_blk.c, version.c: If EXT2_FLAT_INCLUDES is
     3750+               defined, then assume all of the
     3751+               ext2-specific header files are in a flat directory.
     3752+
     3753+       * block.c, bmove.c, dirblock.c, fileio.c: Explicitly cast
     3754+               all assignments from void * to be compatible with C++.
     3755+
     3756+Tue Jan  6 11:28:15 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3757+
     3758+       * closefs.c (ext2fs_flush): Add a call to io_channel_flush() to
     3759+               make sure the contents of the disk are flushed to disk.
     3760+
     3761+Mon Dec 29 14:39:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3762+
     3763+       * dblist.c (ext2fs_add_dir_block): Change new to be new_entry to
     3764+               avoid C++ namespace clash.
     3765+
     3766+       * bitmaps.c (ext2fs_copy_bitmap): Change new to be new_map to
     3767+               avoid C++ namespace clash.
     3768+
     3769+       * ext2fs.h, bb_inode.c, block.c, bmove.c, brel.h, brel_ma.c,
     3770+               irel.h, irel_ma.c, dblist.c, dblist_dir.c, dir_iterate.c,
     3771+               ext2fsP.h, expanddir.c, get_pathname.c, inode.c, link.c,
     3772+               unlink.c: Change private to be priv_data (to avoid C++
     3773+               namespace clash)
     3774+
     3775+Fri Nov 28 09:26:31 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3776+
     3777+       * dblist.c (ext2fs_get_num_dirs): Make ext2fs_get_num_dirs more
     3778+               paranoid about validating the directory counts from the
     3779+               block group information.
     3780+
     3781+       * all files: Don't include stdlib.h anymore; include it in
     3782+               ext2_fs.h, since that file requires stdlib.h
     3783+
     3784+Thu Nov 20 16:07:38 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3785+
     3786+       * expanddir.c (ext2fs_expand_dir): Check to make sure the block
     3787+               bitmap is loaded, and return an error if it is not.
     3788+               (expand_dir_proc): Only use ext2fs_write_dir_block when
     3789+               writing a directory block, not when writing out a fresh
     3790+               indirect block.
     3791+
     3792+Tue Nov 11 22:46:45 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3793+
     3794+       * Makefile.in, tst_getsize.c: Added new file which is used to test
     3795+               the ext2fs_get_device_size function.
     3796+
     3797+       * ext2_err.et.in (EXT2_ET_UNIMPLEMENTED): Added new error code.
     3798+
     3799+Sun Nov  2 20:36:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3800+
     3801+       * ext2fs.h: Make ext2fs_get_mem take an unsigned argument.
     3802+
     3803+       * fileio.c (ext2fs_file_get_size, ext2fs_file_set_size,
     3804+               ext2fs_file_get_fs): New functions added.
     3805+
     3806+
     3807+Fri Oct 31 12:16:52 1997    <tytso@EDT.MIT.EDU>
     3808+
     3809+       * bitops.c (ext2fs_warn_bitmap, ext2fs_warn_bitmap2): Don't call
     3810+               com_err if OMIT_COM_ERR is defined.
     3811+
     3812+Thu Oct 30 11:33:57 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3813+
     3814+       * Rename new error codes to _ET_ in them for consistency.
     3815+
     3816+Sat Oct 25 00:06:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3817+
     3818+       * [all files, basically]: Added definition of ext2fs_get_mem,
     3819+               ext2fs_free_mem, and ext2fs_resize_mem in ext2fs.h, and
     3820+               changed all library routines to use these wrapper functions.
     3821+
     3822+       * dblist.c, mkdir.c: use EXT2_DIR_EXISTS and EXT2_DB_NOT_FOUND
     3823+               instead of the system error messages.
     3824+       
     3825+       * ext2_err.et.in: Added new error messages EXT2_DIR_EXISTS and
     3826+               EXT2_DB_NOT_FOUND
     3827+
     3828+       * ext2fs.h: Added function declarations and constants for bmap.c
     3829+               and fileio.c.
     3830+
     3831+       * ext2_err.et.in: Added new error messages EXT2_FILE_RO and
     3832+               EXT2_ET_MAGIC_EXT2_FILE
     3833+
     3834+       * Makefile.in: Added files bmap.c and fileio.c, and temporarily
     3835+               commented out brel_ma.c and irel_ma.c
     3836+
     3837+       * bmap.c: New file which maps a file's logical block number to its
     3838+               physical block number.
     3839+
     3840+       * fileio.c: New file which implements simple file reading and
     3841+               writing primitives.
     3842+
     3843+       * alloc.c (ext2fs_alloc_block): New function which allocates a
     3844+               block, zeros it, and updates the filesystem accounting
     3845+               records appropriately.
     3846+
     3847+Wed Oct 22 16:47:27 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3848+
     3849+       * ext2_err.et.in: Added new error codes: EXT2_NO_MEMORY,
     3850+               EXT2_INVALID_ARGUMENT, EXT2_BLOCK_ALLOC_FAIL,
     3851+               EXT2_INODE_ALLOC_FAIL, EXT2_NOT_DIRECTORY
     3852+
     3853+       * Change various library files to use these functions instead of
     3854+               EINVAL, ENOENT, etc.
     3855+
     3856+Mon Oct 20 19:32:40 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3857+
     3858+       * llseek.c: Check HAVE_LLSEEK_PROTOTYPE to see whether or not we
     3859+               need to declare llseek().
     3860+
     3861+Sun Oct 19 18:56:22 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3862+
     3863+       * Rename io.h to be ext2_io.h (avoid namespace collisions)
     3864+
     3865+       * Add #ifdef's for HAVE_SYS_STAT_H and HAVE_SYS_TYPES_H
     3866+
     3867+Fri Oct  3 13:35:59 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3868+
     3869+       * llseek.c (ext2fs_llseek): Fix type error for ext2fs_llseek()
     3870+
     3871+       * icount.c (ext2fs_icount_validate):
     3872+       * bmove.c (process_block): Fix lint error in type for fprintf().
     3873+
     3874+Mon Sep 15 11:45:09 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3875+
     3876+       * inode.c (ext2fs_check_directory): Add support for the callback
     3877+               to return the error code EXT2_ET_CALLBACK_NOTHANDLED.
     3878+
     3879+Thu Sep  4 12:28:22 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3880+
     3881+       * bitmaps.c (ext2fs_set_bitmap_padding): New function which sets the
     3882+               padding of the bitmap to be all one's.
     3883+
     3884+Wed Sep  3 14:27:30 1997  Theodore Y. Ts'o  <tytso@edt.mit.edu>
     3885+
     3886+       * llseek.c: Added missing semicolon to glibc fixup declaration of
     3887+       llseek().
     3888+
     3889+       * bmove.c: Add #include of errno.h
     3890+
     3891+Sat Aug 23 22:47:46 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3892+
     3893+       * Makefile.in (ELF_SO_VERSION): Bump version to be 2.4 since we've
     3894+               added a new field to the io_channel (app_data).
     3895+
     3896+       * io.h: Add a new element to the io_channel structure, app_data.
     3897+
     3898+       * initialize.c, openfs.c: Set io->app_data to point at the
     3899+               filesystem handle.
     3900+
     3901+Thu Aug 14 08:14:17 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3902+
     3903+       * io.h: Change the prototype of ext2fs_llseek() to use int's
     3904+               instead of unsigned int's.
     3905+
     3906+       * llseek.c: Change to allow PIC and !HAVE_LLSEEK.  Add a prototype
     3907+               to make life easer for GNU Libc 2.
     3908+
     3909+       * rw_bitmaps.c: On the PowerPC, the big-endian variant of the ext2
     3910+               filesystem has its bitmaps stored as 32-bit words with bit
     3911+               0 as the LSB of each word.  Thus a bitmap with only bit 0
     3912+               set would be, as a string of bytes, 00 00 00 01 00 ...  To
     3913+               cope with this, we byte-reverse each word of a bitmap if
     3914+               we have a big-endian filesystem, that is, if we are *not*
     3915+               byte-swapping other word-sized numbers.
     3916+
     3917+Mon Aug 11 03:30:48 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3918+
     3919+       * dosio.c: New file to do DOS/BIOS disk accesses.
     3920+
     3921+       * namei.c (open_namei): Make pathlen be of type size_t.
     3922+
     3923+       * llseek.c: Always #include stdlib.h since it's need to define
     3924+               size_t. 
     3925+
     3926+       * io.h: Use errcode_t for magic numbers.
     3927+
     3928+       * icount.c (get_icount_el): Use size_t where appropriate
     3929+       
     3930+       * dupfs.c (ext2fs_dup_handle):
     3931+       * dblist.c (dir_block_cmp): Use size_t where appropriate.
     3932+
     3933+       * read_bb.c (ext2fs_read_bb_inode):
     3934+       * cmp_bitmaps.c (ext2fs_compare_inode_bitmap): Use blk_t, ino_t
     3935+               and size_t where appropriate.
     3936+
     3937+       * closefs.c (ext2fs_flush): Use dgrp_t instead of int where
     3938+               appropriate.
     3939+
     3940+       * openfs.c (ext2fs_open):
     3941+       * check_desc.c (ext2fs_check_desc): Use blk_t instead of int where
     3942+               appropriate.
     3943+
     3944+       * rw_bitmaps.c (read_bitmaps):
     3945+       * irel_ma.c:
     3946+       * inode.c (ext2fs_write_inode):
     3947+       * initialize.c (ext2fs_initialize):
     3948+       * brel_ma.c: Fix to make be 16-bit safe.
     3949+
     3950+       * link.c (ext2fs_link):
     3951+       * unlink.c (ext2fs_unlink):
     3952+       * lookup.c (lookup_proc):
     3953+       * ismounted.c (ext2fs_check_if_mounted):
     3954+       * block.c (xlate_func): Add #pragma argsused for Turbo C.
     3955+
     3956+Sun Aug 10 10:05:22 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3957+
     3958+       * block.c (ext2fs_block_iterate2): Use retval which is a errcode_t
     3959+               type.
     3960+
     3961+       * bitmaps.c (make_bitmap): Use size_t instead of int where
     3962+               appropriate.
     3963+
     3964+       * bb_inode.c (set_bad_block_proc): Add #pragma argsused for Turbo C.
     3965+
     3966+       * alloc.c (ext2fs_new_inode): Use ino_t instead of int for the
     3967+               group number.
     3968+
     3969+       * get_pathname.c: Use ino_t instead of int where appropriate.
     3970+
     3971+       * ext2fs.h: Make the magic structure element be errcode_t instead
     3972+               of int.
     3973+
     3974+       * alloc.c alloc_tables.c badblocks.c bb_compat.c bb_inode.c
     3975+               bitmaps.c block.c bmove.c brel_ma.c check_desc.c closefs.c
     3976+               cmp_bitmaps.c dblist.c dblist_dir.c dir_iterate.c
     3977+               dirblock.c dupfs.c expanddir.c freefs.c get_pathname.c
     3978+               icount.c initialize.c inline.c inode.c irel_ma.c link.c
     3979+               llseek.c lookup.c mkdir.c namei.c newdir.c read_bb.c
     3980+               read_bb_file.c rs_bitmap.c rw_bitmaps.c swapfs.c
     3981+               test_io.c tst_badblocks.c tst_iscan.c unix_io.c unlink.c
     3982+               valid_blk.c version.c: Add an #ifdef for HAVE_UNISTD_H
     3983+
     3984+Tue Jun 17 01:33:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3985+
     3986+       * unix_io.c (unix_read_blk): If ext2fs_llseek() fails, but errno
     3987+               is zero, then return EXT2_IO_LLSEEK_FAILED.
     3988+
     3989+       * ext2_err.et.in: Add a new error code, EXT2_IO_LLSEEK_FAILED.
     3990+
     3991+       * Release of E2fsprogs 1.11
     3992+
     3993+Mon Jun 16 23:53:06 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3994+
     3995+       * dblist.c (ext2fs_dblist_count): Added new function which returns
     3996+               the number of directory blocks in dblist.
     3997+
     3998+Sat Jun 14 01:39:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     3999+
     4000+       * unix_io.c (unix_flush): Make the io_channel flush function do a
     4001+               fsync to flush the kernel buffers to disk.
     4002+
     4003+Wed Jun 11 18:25:31 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4004+
     4005+       * inode.c (ext2fs_inode_scan_goto_blockgroup): Fix bug; the
     4006+               current inode number wasn't being set by the
     4007+               goto_blockgroup function.
     4008+
     4009+Mon Jun  9 10:45:48 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4010+
     4011+       * bmove.c (ext2fs_move_blocks): New function which takes a bitmap
     4012+               of blocks which need to be moved, and moves those blocks
     4013+               to another location in the filesystem.
     4014+
     4015+       * rs_bitmap.c (ext2fs_resize_generic_bitmap): When expanding a
     4016+               bitmap, make sure all of the new parts of the bitmap are
     4017+               zero.
     4018+
     4019+Sun Jun  8 16:24:39 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4020+
     4021+       * bitmaps.c (ext2fs_copy_bitmap): Fix bug; the destination bitmap
     4022+               wasn't being returned to the caller.
     4023+
     4024+       * alloc_tables.c (ext2fs_allocate_group_table): Add new function
     4025+               ext2fs_allocate_group_table() which sets the group tables
     4026+               for a particular block group.  The relevant code was
     4027+               factored out of ext2fs_allocate_tables().
     4028+
     4029+       * dblist.c (make_dblist): Adjust the initial size of the directory
     4030+               block list to be a bit more realistic (ten plus twice the
     4031+               number of directories in the filesystem).
     4032+
     4033+Thu May  8 22:19:09 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4034+
     4035+       * badblocks.c (ext2fs_badblocks_list_test): Fix bug where
     4036+               ext2fs_badblocks_list_test would test the list (and exceed
     4037+               array boundaries) if there were no bad blocks on the bad
     4038+               blocks list.  (Showed up when user tried: mke2fs -c -b 4096).
     4039+
     4040+Thu Apr 24 12:16:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>
     4041+
     4042+       * Release of E2fsprogs version 1.10
     4043+
     4044+Thu Apr 24 10:13:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>
     4045+
     4046+       * alloc_tables.c (ext2fs_allocate_tables): Correctly place the
     4047+               inode and block bitmaps based on the RAID 0 stride
     4048+               parameter (which is passed by mke2fs).
     4049+
     4050+       * ext2fs.h: Add "stride" parameter to ext2_filsys, to be used by
     4051+               mke2fs to communicate the stride length to
     4052+               ext2fs_allocate_tables()
     4053+
     4054+Wed Apr 23 21:50:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>
     4055+
     4056+       * initialize.c (ext2fs_initialize): Fix to compile under Linux 1.2
     4057+               systems.  (We can't assume that the new filesystem types
     4058+               are supported.)
     4059+
     4060+Wed Apr 23 18:40:53 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4061+
     4062+       * alloc_tables.c (ext2fs_allocate_tables): Make sure that we
     4063+               allocate the inode and block bitmaps inside block group at
     4064+               all times.
     4065+
     4066+Mon Apr 21 00:06:28 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4067+
     4068+       * alloc.c (ext2fs_new_block): Fix bug where if goal==0 and the
     4069+               filesystem has no free blocks, ext2fs_new_block would loop
     4070+               forever.
     4071+
     4072+       * dupfs.c (ext2fs_dup_handle): Duplicate an ext2 filesystem handle
     4073+
     4074+       * freefs.c (ext2fs_free_inode_cache): Decrement refcount and only
     4075+               free if refcount goes to zero.
     4076+
     4077+       * inode.c (create_icache): Initialize refcount to 1.
     4078+
     4079+       * ext2fsP.h: Added refcount to ext2_inode_cache
     4080+
     4081+       * dblist.c (ext2fs_copy_dblist): New function to copy a directory
     4082+               block list.
     4083+
     4084+       * badblocks.c (ext2fs_badblocks_copy): New function to copy a
     4085+               badblocks structure.
     4086+
     4087+Sun Apr 20 23:19:51 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4088+
     4089+       * bitmaps.c (ext2fs_copy_bitmap): New function to copy a bitmap.
     4090+
     4091+       * unix_io.c, test_io.c (unix_open, test_open): Initialize the
     4092+               refcount to 1.
     4093+               (unix_close, test_close): Decrement the refcount and only
     4094+               close the io_channel if the refcount goes to 0.
     4095+
     4096+       * io.h: Add refcount to the io_channel structure.  Add new macro
     4097+               interface io_channel_bumpcount() to bump the refcount.
     4098+
     4099+Thu Apr 17 20:25:03 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4100+
     4101+       * inode.c (ext2fs_read_inode, ext2fs_write_inode): Use the inode
     4102+               cache in the filesystem handle, instead of the inode cache
     4103+               in a static variable.
     4104+
     4105+       * freefs.c: Added static function to free the inode cache (called by
     4106+               ext2fs_free).
     4107+
     4108+       * ext2fsP.h: Added definition of the ext2_inode_cache structures.
     4109+
     4110+       * ext2fs.h: Added pointer to the inode_cache structure.
     4111+
     4112+       * block.c (block_iterate_ind, block_iterate_dind,
     4113+               block_iterate_tind): If there are holes in the indirect,
     4114+               doubly indirect, or triply indirect blocks, increment the
     4115+               block count field automatically.
     4116+
     4117+Thu Apr 17 12:23:38 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4118+
     4119+       * Release of E2fsprogs version 1.09
     4120+
     4121+Mon Apr 14 20:38:56 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4122+
     4123+       * version.c (ext2fs_parse_version_string): Check the passed in
     4124+               version string (instead of the hard-coded one).
     4125+
     4126+       * alloc_tables.c (ext2fs_allocate_tables): If the last block is
     4127+               greater filesystem size, clamp it to prevent allocating a
     4128+               block or inode bitmap beyond the filesystem.
     4129+
     4130+       * initialize.c (ext2fs_initialize): Fix bug where the metatdata
     4131+               overhead calculation was accidentally removed.
     4132+
     4133+Fri Apr 11 18:56:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4134+
     4135+       * Release of E2fsprogs version 1.08
     4136+
     4137+Thu Apr 10 13:15:15 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4138+
     4139+       * dblist.c (ext2fs_set_dir_block): New function which sets the
     4140+               block of a dblist entry, given the directory inode and
     4141+               blockcnt.
     4142+
     4143+Sat Apr  5 12:42:42 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4144+
     4145+       * alloc_tables.c (ext2fs_allocate_tables): Allocate the bitmap and
     4146+               inode bitmaps at staggered locations across the block
     4147+               groups, to avoid concentrating the bitmaps on a small
     4148+               number of disks when using striped RAID arrays.
     4149+
     4150+       * initialize.c (ext2fs_initialize): By default, choose the maximum
     4151+               possible number of blocks per group (based on the size of
     4152+               the bitmaps in the blocksize).
     4153+
     4154+Fri Apr  4 11:28:16 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4155+
     4156+       * initialize.c (ext2fs_initialize): Add support for
     4157+               EXT2_COMPAT_SPARSE_SUPER feature.
     4158+
     4159+       * closefs.c (ext2fs_bg_has_super): New function to determine
     4160+               whether or a particular block group should have a
     4161+               superblock and block group descriptor.  Used for the
     4162+               EXT2_COMPAT_SPARSE_SUPER feature is turned on.
     4163+               (ext2fs_flush):  Check ext2fs_bg_has_super to see whether
     4164+               or not the superblock should be written out for the block
     4165+               group.
     4166+
     4167+       * ext2fs.h (EXT2_COMPAT_SPARSE_SUPER): Define compatibility flag
     4168+               for sparse duplicate superblocks.
     4169+
     4170+       * version.c (ext2fs_get_library_version): New function which
     4171+               returns the library version.
     4172+
     4173+       * version.c (ext2fs_parse_version_string): New function which
     4174+               parses a version string and returns a version number,
     4175+               so application programs can compare version numbers as
     4176+               integers.
     4177+
     4178+Wed Mar 26 00:43:52 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4179+
     4180+       * icount.c (ext2fs_create_icount): Change function so that it also
     4181+               takes a new argument which contains a "hint" icount
     4182+               structure.  This "hint" icount allows the create function
     4183+               to set up the sorted list in advance.  This reduces
     4184+               significantly the amount of data moving needed to insert
     4185+               these inodes into the list later.
     4186+       
     4187+       * icount.c (ext2fs_icount_validate): New function which validates
     4188+               that the icount structure's rep invariant.
     4189+
     4190+       * icount.c (get_icount_el): Completely revamped implementation
     4191+               to subsume put_icount_el().  Put_icount_el() used to
     4192+               use an O(N) implementation to insert in the middle
     4193+               of the icount list.  It now uses a O(ln N) to search
     4194+               for where the icount should be inserted, and then uses
     4195+               a memcpy to move the list down (instead of a for loop).
     4196+       
     4197+       * icount.c (ext2fs_icount_fetch, ext2fs_icount_store,
     4198+               ext2fs_icount_increment, ext2fs_icount_decrement): Check
     4199+               to see if the inode is within bounds; if it isn't, return
     4200+               EINVAL.
     4201+
     4202+       * bitops.h (ext2fs_test_generic_bitmap): Fix error message given
     4203+               when a bad inode number is passed to test_generic_bitmap
     4204+               to be EXT2FS_TEST_ERROR instead of the wrong
     4205+               EXT2FS_UNMARK_ERROR.
     4206+
     4207+Wed Mar 12 13:32:05 1997  Theodore Y. Ts'o  <tytso@mit.edu>
     4208+
     4209+       * Release of E2fsprogs version 1.07
     4210+
     4211+Sun Mar  2 16:46:18 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4212+
     4213+       * Makefile.in (ELF_VERSION): Change version to be 2.2
     4214+
     4215+Tue Feb 11 14:54:02 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4216+
     4217+       * alloc.c (ext2fs_get_free_blocks): Change routine to use
     4218+               ext2fs_fast_test_block_bitmap_range().
     4219+
     4220+       * bitops.h (ext2fs_fast_test_block_bitmap_range,
     4221+               ext2fs_test_block_bitmap_range: New inline functions which
     4222+               test to see whether a contiguous range of blocks is
     4223+               available.
     4224+
     4225+Thu Feb  6 10:00:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4226+
     4227+       * badblocks.c (ext2fs_badblocks_list_create): Rename sybmols to use
     4228+               use ext2fs_badblocks_* instead of badblocks_*
     4229+
     4230+       * bb_compat.c: New file which translates between old badblocks_*()
     4231+               names to ext2fs_badblocks_*()
     4232+
     4233+       * unlink.c (ext2fs_unlink): New file, moved ext2fs_unlink() from
     4234+               link.c (since e2fsck doesn't use ext2fs_unlink()).
     4235+
     4236+       * rs_bitmap.c (ext2fs_resize_generic_bitmap): New file, contains
     4237+               bitmap resizing routine moved from bitmaps.c, since e2fsck
     4238+               doesn't need to use this function.
     4239+
     4240+       * lookup.c (ext2fs_lookup): Moved ext2fs_lookup to its own file,
     4241+               since e2fsck only needs ext2fs_lookup.
     4242+
     4243+Mon Feb  3 10:11:40 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4244+
     4245+       * inode.c (ext2fs_open_inode_scan): Set fs->badblocks if it is not
     4246+               already set; this is needed so that programs like dump
     4247+               which use the inode scan functions will deal with
     4248+               filesystems that have bad blocks in the inode table.
     4249+
     4250+Sun Feb  2 00:17:36 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4251+
     4252+       * ext2fs.h (struct_badblocks_list, struct_badblocks_iterate):
     4253+               Moved to ext2fsP.h, since it doesn't need to be part of
     4254+               the public interface.
     4255+
     4256+       * dir_iterate.c: Move ext2_dir_iterate out of namei.c.
     4257+
     4258+Sat Feb  1 10:14:55 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4259+
     4260+       * dblist.c (ext2fs_get_num_dirs): New file, which implements a
     4261+               directory block list abstraction.  (Code moved from
     4262+               e2fsck).
     4263+
     4264+       * ext2fs.h, inode.c: Moved definition of ext2_struct_inode_scan to
     4265+               to inode.c (since no one else should be peeking inside it!)
     4266+
     4267+       * valid_blk.c (ext2_inode_has_valid_blocks): New function.
     4268+
     4269+       * openfs.c (ext2fs_open): Check the feature set in the ext2
     4270+               superblock, and refuse to open filesystems if they contain
     4271+               incompatible features.  (Can be overriden with the
     4272+               EXT2_FLAG_FORCE
     4273+
     4274+Sun Jan 12 11:31:46 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4275+
     4276+       * block.c (ext2fs_block_iterate2): Added new function
     4277+               ext2fs_block_iterate2 which changes the function
     4278+               signature of the callback function to include the
     4279+               referencing block and offset.
     4280+
     4281+       * inode.c (ext2fs_inode_scan_goto_blockgroup): Added new function
     4282+               ext2fs_inode_scan_goto_blockgroup which allows an
     4283+               application to jump to a particular block group while
     4284+               doing an inode scan.
     4285+
     4286+Wed Jan  1 23:50:12 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4287+
     4288+       * dirblock.c: Include string.h, since we use memcpy().
     4289+
     4290+Tue Dec  3 12:27:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4291+
     4292+       * getsize.c (ext2fs_get_device_size): The ioctl BLKGETSIZE returns
     4293+               a long not an int; this doesn't matter on i386 machines,
     4294+               but it does on Alpha's.
     4295+       
     4296+Fri Nov 29 20:57:37 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4297+
     4298+       * inode.c (ext2fs_write_inode, ext2fs_read_inode): If the inode
     4299+               table pointer is NULL, then return an error indicating
     4300+               that the inode table is missing.
     4301+               (get_next_blockgroup, get_next_blocks,
     4302+               ext2fs_get_next_inode): Don't treat a missing inode table
     4303+               as permanent error.  Return MISSING_INODE_TABLE, but as an
     4304+               advisory error code, much like BAD_BLOCK_IN_INODE_TABLE.
     4305+
     4306+       * rw_bitmaps.c (ext2fs_write_block_bitmap,
     4307+               ext2fs_write_inode_bitmap): If the inode or block bitmap
     4308+               block is zero, then don't write out the inode or block
     4309+               bitmap.  The idea here is to avoid stomping on the
     4310+               superblock.
     4311+               (read_bitmaps): If the inode or block bitmap block is
     4312+               zero, then fill in that portion of the inode or block
     4313+               bitmap with all zeros.
     4314+
     4315+       * inode.c (ext2fs_get_next_inode): Fix bug in handling of bad
     4316+               blocks in inode table when the inode table size is
     4317+               non-standard (and can therefore span blocks).
     4318+
     4319+Tue Oct 29 20:13:14 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4320+
     4321+       * alloc.c (ext2fs_new_block): Fix fencepost error in
     4322+               ext2fs_new_block; make sure we don't try to allocate the
     4323+               first block beyond the end of the filesystem.
     4324+
     4325+Mon Oct 14 11:00:48 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4326+
     4327+       * inode.c (check_for_inode_bad_blocks): New function called by
     4328+               get_next_blocks() to avoid reading in bad blocks marked in
     4329+               fs->badblocks.  Inodes located in bad blocks are returned
     4330+               by ext2fs_get_next_inode() returns the error code
     4331+               EXT2_ET_BAD_BLOCK_IN_INODE_TABLE.
     4332+       
     4333+       * alloc_tables.c (ext2fs_allocate_tables): New function which
     4334+               performs the part of mke2fs's job of allocating the
     4335+               filesystem tables.
     4336+
     4337+       * test_io.c (test_close): IO manager which is used for testing
     4338+               purposes.
     4339+
     4340+Sun Oct 13 04:31:57 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4341+
     4342+       * inode.c (ext2fs_get_next_inode): Separate out the function of
     4343+               setting up for a new block group to get_next_blockgroup().
     4344+               Separate out the function of reading in blocks of the
     4345+               inode table to get_next_blocks().
     4346+
     4347+       * ext2fs.h: Add the badblocks list to the ext2_filsys entry
     4348+
     4349+       * badblocks.c (badblocks_list_add, badblocks_list_test): Add
     4350+               blocks to the badblock list in sorted order.  This allows
     4351+               badblocks_list_test to be coded using a binary search for
     4352+               speed.
     4353+
     4354+Tue Oct  8 02:02:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4355+
     4356+       * Release of E2fsprogs version 1.06
     4357+
     4358+Mon Oct  7 00:44:17 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4359+
     4360+       * ext2fs.h, block.c, closefs.c, dirblock.c, inode.c, native.c,
     4361+               open.c: Change EXT2_SWAP to EXT2_FLAG_SWAP for
     4362+               consistency's sake.
     4363+       
     4364+       * closefs.c (ext2fs_flush): If the flag EXT2_MASTER_SB_ONLY is
     4365+               set, then only write out the master superblock.
     4366+
     4367+Sun Oct  6 21:45:26 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4368+
     4369+       * block.c (ext2fs_block_iterate): Fixed bug which caused
     4370+               block_iterate to fail to handle HURD created filesystems;
     4371+               it tested the inode translator field before the inode was
     4372+               loaded.
     4373+
     4374+Tue Sep 17 14:08:24 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4375+
     4376+       * initialize.c (ext2fs_initialize): Make sure the description for
     4377+               the inode bitmap is set correctly.
     4378+
     4379+       * bitmaps.c (ext2fs_allocate_generic_bitmap): Fix minor type typo.
     4380+
     4381+Thu Sep 12 15:23:07 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4382+
     4383+       * Release of E2fsprogs version 1.05
     4384+
     4385+Sat Sep  7 07:36:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4386+
     4387+       * initialize.c: Override the kernel's idea of default
     4388+               checkinterval from 0 (never) to 180 days.
     4389+
     4390+Wed Aug 28 03:20:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4391+
     4392+       * namei.c (ext2fs_namei_follow): New function which follows
     4393+               symbolic link (if any) at the target.
     4394+
     4395+Tue Aug 27 01:48:43 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4396+
     4397+       * inode.c (ext2fs_read_inode, ext2fs_write_inode): Add support
     4398+               for shortcut function fs->read_inode() and fs->write_inode().
     4399+               Added inode_cache to reduce CPU time spent in doing
     4400+               byte swapping.
     4401+
     4402+       * swapfs.c (ext2fs_swap_super): Swap the new fields in a V2
     4403+               superblock.
     4404+
     4405+       * namei.c (ext2fs_follow_link): New function.
     4406+               (ext2fs_namei): Extended to have support for chasing
     4407+               symbolic links.  ext2fs_namei() still returns an inode
     4408+               which is a symbolic link.  Symbolic links are only chased
     4409+               while resolving the containing directory.  To chase
     4410+               symbolic links of the final result, use
     4411+               ext2fs_follow_link().
     4412+
     4413+Mon Aug 26 23:46:07 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4414+
     4415+       * ext2_err.et.in: Added new error code EXT2_ET_SYMLINK_LOOP.
     4416+
     4417+       * bitops.h (ext2fs_set_bit, ext2fs_celar_bit): Use asm inlines
     4418+               provided by Pete A. Zaitcev (zaitcev@lab.sun.mcst.ru).
     4419+
     4420+Thu Aug 22 00:40:18 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4421+
     4422+       * initialize.c (ext2fs_initialize): On systems where the byte
     4423+               order is not i386 compatible, set the swap_byte flag.
     4424+
     4425+       * inode.c (inocpy_with_swap): Check to see if inode contains a
     4426+               fast symlink before swapping the inode block fields.  This
     4427+               required adding a new argument to inocpy_with_swap to
     4428+               determine whether the mode field is in host order or not.
     4429+
     4430+Wed Aug 21 00:45:42 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4431+
     4432+       * bitops.h (ext2fs_set_bit, ext2fs_clear_bit, ext2fs_test_bit): On
     4433+               the sparc, if EXT2_STD_BITOPS set, use the standard
     4434+               i386-compatible bitmask operations, instead on the
     4435+               non-standard native bitmask operators.
     4436+
     4437+Fri Aug  9 11:11:35 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4438+
     4439+       * block.c (ext2fs_block_iterate): Cause block iterator to return
     4440+               the HURD translator block (along with everything else).
     4441+               If the flag BLOCK_FLAG_DATA_ONLY is passed to the block
     4442+               iterator, then don't return any meta data blocks
     4443+               (including the HURD translator).
     4444+
     4445+Wed Jul 17 17:13:34 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4446+
     4447+       * gen_uuid.c: New file, which generates DCE-compatible UUIDs.
     4448+
     4449+       * uuid.c: New file, containing UUID utility functions.
     4450+
     4451+Tue Jul 16 10:19:16 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4452+
     4453+       * ext2fs.h: Add a definition of the "real" ext2 superblock.
     4454+
     4455+Fri May 24 14:54:55 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4456+
     4457+       * ext2fs.h: Fix erroneous ino_t type used in block_bitmap type.
     4458+
     4459+Sun May 19 15:39:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4460+
     4461+       * openfs.c (ext2fs_open): If the blocksize in the superblock is
     4462+               zero, return the error EXT2_ET_CORRUPT_SUPERBLOCK, since
     4463+               that's a basic value that must be correct for the rest of
     4464+               the library to work.
     4465+
     4466+       * ext2_err.et.in (EXT2_ET_CORRUPT_SUPERBLOCK): Added new error
     4467+               code.
     4468+
     4469+Thu May 16 11:12:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
     4470+
     4471+       * Release of E2fsprogs version 1.04
     4472+
     4473+Wed Mar 27 00:33:40 1996    <tytso@rsts-11.mit.edu>
     4474+
     4475+       * Release of E2fsprogs version 1.03
     4476+
     4477+Tue Mar 26 12:06:32 1996    <tytso@rsts-11.mit.edu>
     4478+
     4479+       * bitops.h (ext2fs_set_bit, ext2fs_clear_bit, ext2fs_test_bit):
     4480+               Change the m68k bit numbering for bitmasks to match with
     4481+               the bit numbering used by all other ext2 implementations.
     4482+
     4483+Thu Mar  7 03:37:00 1996    <tytso@rsts-11.mit.edu>
     4484+
     4485+       * inode.c (ext2fs_get_next_inode, ext2fs_close_inode_scan,
     4486+       ext2fs_open_inode_scan): Support dynamically-sized inodes.
     4487+
     4488+Wed Mar  6 12:26:29 1996    <tytso@rsts-11.mit.edu>
     4489+
     4490+       * inode.c (ext2fs_read_inode, ext2fs_write_inode): Support
     4491+               dynamically-sized inodes.
     4492+
     4493+       * openfs.c (ext2fs_open): Allow dynamic revision filesystem to be
     4494+               loaded.
     4495+
     4496+Tue Mar  5 03:49:37 1996    <tytso@rsts-11.mit.edu>
     4497+
     4498+       * initialize.c (ext2fs_initialize): Catch an error condition where
     4499+               the passed in size is *really* too small.
     4500+
     4501+       * alloc.c (ext2fs_new_inode):
     4502+       * ext2fs.h (EXT2_FIRST_INODE): Add support for dynamic revision to
     4503+               get first inode.
     4504+
     4505+Wed Feb 21 15:56:17 1996    <tytso@rsts-11.mit.edu>
     4506+
     4507+       * getsize.c (ext2fs_get_device_size): Open the device read-only
     4508+               when trying to determine its size.
     4509+
     4510+Wed Jan 31 11:06:08 1996    <tytso@rsts-11.mit.edu>
     4511+
     4512+       * Release of E2fsprogs version 1.02
     4513+
     4514+Sat Dec  9 09:57:50 1995    <tytso@rsts-11.mit.edu>
     4515+
     4516+       * rw_bitops.c (ext2fs_write_block_bitmap):
     4517+       * bitops.c (ext2fs_test_bit, ext2fs_clear_bit, ext2fs_set_bit):
     4518+       * bitops.h (ext2fs_test_bit, ext2fs_clear_bit, ext2fs_set_bit):
     4519+               Rename {test,set,clear}_bit to ext2fs_{test,set,clear}_bit,
     4520+               to avoid conflicts with with kernel include files.  Also
     4521+               rename ADDR and CONST_ADDR to EXT2FS_ADDR and
     4522+               EXT2FS_CONST_ADDR.
     4523+
     4524+Thu Oct 26 12:09:16 1995    <tytso@rsts-11.mit.edu>
     4525+
     4526+       * ext2_err.et: Updated message in EXT2_ET_BASE to say version 0.5c
     4527+
     4528+       * swapfs.c (ext2fs_swap_super): Put an #ifdef check around
     4529+               s_def_resuid and s_def_resgid for backwards compatibility.
     4530+
     4531+Fri Oct 20 23:33:31 1995    <tytso@rsts-11.mit.edu>
     4532+
     4533+       * bitops.h: Added #ifdef's for Sparc.
     4534+
     4535+Wed Sep  6 22:14:46 1995    <tytso@rsts-11.mit.edu>
     4536+
     4537+       * getsize.c: #include <sys/ioctl.h> under Linux to pick up ioctl()
     4538+               declaration
     4539+
     4540+       * closefs.c: #include <string.h> to pick up memset() declaration
     4541+
     4542+Mon Sep  4 21:45:29 1995  Remy Card  <card@bbj>
     4543+
     4544+       * Makefile.in: Added support for BSD shared libraries.
     4545+
     4546+       * initialize.c (ext2fs_initialize): Correctly set the s_creator_os
     4547+               flag.
     4548+
     4549+Mon Sep  4 09:55:30 1995    <tytso@rsts-11.mit.edu>
     4550+
     4551+       * unix_io.c (unix_open): Add a double check; if the passed in name
     4552+               is NULL, return EXT2_ET_BAD_DEVICE_NAME.
     4553+
     4554+       * ext2_err.et (EXT2_ET_BAD_DEVICE_NAME): Added new error code
     4555+
     4556+Wed Aug 16 15:44:10 1995    <tytso@rsts-11.mit.edu>
     4557+
     4558+       * inode.c (ext2fs_check_directory): Use LINUX_S_ISDIR instead of
     4559+               S_ISDIR.
     4560+
     4561+Tue Aug 15 13:08:36 1995    <tytso@rsts-11.mit.edu>
     4562+
     4563+       * getsize.c (ext2fs_get_device_size): Add support for reading the
     4564+               partition size from a BSD disk label.
     4565+
     4566+Thu Aug 10 09:33:26 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
     4567+
     4568+       * getsize.c (ext2fs_get_device_size): New function that determins
     4569+               the size of a device.  Used by mke2fs and e2fsck.
     4570+
     4571+Sat Aug 12 03:09:54 1995  Remy Card  <card@bbj>
     4572+
     4573+       * Makefile.in (install): Install static libraries in $(ulibdir)
     4574+               (/usr/lib on Linux) instead of $(libdir) (/lib on Linux).
     4575+
     4576+Wed Aug  9 17:04:23 1995  Theodore Y. Ts'o  <tytso@dcl>
     4577+
     4578+       * bitmaps.c (ext2fs_free_inode_bitmap, ext2fs_free_block_bitmap):
     4579+               Move these functions to freefs.c.
     4580+
     4581+       * closefs.c (ext2fs_flush): If swapping blocks, clear the group
     4582+               descriptors shadow memory to keep purify quiet.  (This
     4583+               also has the nice benefit that the unused portion of the
     4584+               shadow descriptors are zeroed out.)
     4585+
     4586+       * dirblock.c (ext2fs_write_dir_block): We need to use
     4587+               dirent->rec_len *before* it's byteswapped to find the
     4588+               location of the next directory structure!
     4589+
     4590+       * alloc.c (ext2fs_new_inode): Fix bug which could potentially
     4591+               cause ext2fs_new_inode to loop infinitely if we're trying
     4592+               to allocate an inode in group #0 and there are no free
     4593+               inodes at all in the system.
     4594+
     4595+       * closefs.c: #include <errno.h> if it exists.
     4596+
     4597+Sun Aug  6 13:27:50 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
     4598+
     4599+       * ext2fs.h (BLOCK_FLAG_HOLE): Added new definition for
     4600+               BLOCK_FLAG_APPEND.  Added documentation for the block
     4601+               interator flags.
     4602+
     4603+Sat Aug  5 11:44:05 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
     4604+
     4605+       * Makefile.in (DLL_INSTALL_DIR, ELF_INSTALL_DIR): Set the
     4606+               installation directories correctly.
     4607+
     4608+Tue Jul 18 09:27:38 1995    <tytso@rsx-11.mit.edu>
     4609+
     4610+       * namei.c (process_dir_block):
     4611+       * mkdir.c (ext2fs_mkdir):
     4612+       * expanddir.c (expand_dir_proc): Use ext2fs_{read,write}_dir_block
     4613+               to read/write the directory block.
     4614+
     4615+       * dirblock.c (ext2fs_read_dir_block), ext2fs_write_dir_block): New
     4616+               file containing functions for reading and writing
     4617+               directory blocks (byte swapping if necesssary)
     4618+
     4619+       * block.c (block_iterate_ind, block_iterate_dind,
     4620+               block_iterate_tind): Byte swap the block addresses if
     4621+               EXT2_SWAP_BYTES is set (and swap them back before writing
     4622+               them out.)
     4623+
     4624+       * inode.c (inocpy_with_swap): New function.
     4625+       (ext2fs_get_next_inode, ext2fs_read_inode, ext2fs_write_inode):
     4626+               Call inocpy_with_swap if EXT2_SWAP_BYTES if set.
     4627+
     4628+       * closefs.c (ext2fs_flush): If EXT2_SWAP_BYTES is set, then swap
     4629+               the superblock and group descriptors before writing it out.
     4630+
     4631+       * openfs.c (ext2fs_open): If the magic number is byte-swapped,
     4632+               then set the EXT2_SWAP_BYTES and byte-swap the superblock
     4633+               and group descriptors.
     4634+
     4635+       * swapfs.c (ext2fs_swap_super, ext2fs_swap_group_desc): New functions
     4636+               to desp ext2 filesystem structures.
     4637+
     4638+       * bitops.c (set_bit, clear_bit, test_bit): Use modifications
     4639+               supplied by Pete A. Zaitcev so that the C language
     4640+               versions of these functions are more portable.  They will
     4641+               now work on both little and big endian systems, and the
     4642+               assumption that 32-bit integers are used is gone.
     4643+
     4644+       * bitops.h (ext2_swab16, ext2_swab32): Added new functions for
     4645+               doing byte swapping.
     4646+
     4647+       * ext2fs.h (EXT2_SWAP_BYTES): Add new flag which indicates that
     4648+               byte swapping should take place.
     4649+
     4650+Sun Jul 16 06:21:43 1995    <tytso@rsx-11.mit.edu>
     4651+
     4652+       * Makefile.in, cmp_bitmaps.c (ext2fs_compare_block_bitmap_end,
     4653+               ext2fs_compare_inode_bitmap_end): Added new file
     4654+               containing routines to compare bitmaps.
     4655+
     4656+       * ext2_err.et (EXT2_ET_NEQ_BLOCK_BITMAP, EXT2_ET_NEQ_INODE_BITMAP):
     4657+               Added new error codes.
     4658+
     4659+Sat Jul 15 04:23:37 1995    <tytso@rsx-11.mit.edu>
     4660+
     4661+       * inode.c (ext2fs_get_next_inode): Don't check scan->inode_buffer;
     4662+               if the magic number is correct, it will be allocated.
     4663+
     4664+Fri Jul 14 19:02:59 1995    <tytso@rsx-11.mit.edu>
     4665+
     4666+       * block.c (block_iterate_ind, block_iterate_dind,
     4667+               block_iterate_tind): Don't recompute block_nr each loop;
     4668+               just increment it!  Factor check of BLOCK_FLAG_APPEND out
     4669+               of the loop.  Factor mask of BLOCK_CHANGED into changed
     4670+               variable out of the loop.  (block_iterate_ind, in
     4671+               particular, gets called a lot, so every little
     4672+               optimization helps.)
     4673+
     4674+Thu Jul 13 08:02:45 1995    <tytso@rsx-11.mit.edu>
     4675+
     4676+       * block.c (block_iterate_ind, block_iterate_dind,
     4677+               block_iterate_tind): Precompute limit of loop to speed up
     4678+               block_iterate_ind and company.
     4679+
     4680+       * bitops.h (ext2fs_fast_mark_block_bitmap,
     4681+               ext2fs_fast_unmark_block_bitmap, ext2fs_fast_test_block_bitmap,
     4682+               ext2fs_fast_mark_inode_bitmap, ext2fs_fast_unmark_inode_bitmap,
     4683+               ext2fs_fast_test_inode_bitmap): Add fast version of these
     4684+               functions, which don't do range checking.
     4685+
     4686+       * bitops.h (ext2fs_get_block_bitmap_start,
     4687+               ext2fs_get_inode_bitmap_start, ext2fs_get_block_bitmap_end,
     4688+               ext2fs_get_inode_bitmap_end): Add new accessor functions
     4689+               which return the start and end points of the bitmaps.
     4690+
     4691+Tue Jul 11 18:59:41 1995    <tytso@rsx-11.mit.edu>
     4692+
     4693+       * llseek.c (ext2_llseek): If the offset is small enough, use lseek
     4694+               instead of llseek.  The errno if the offset is too large
     4695+               and lseek is not supported should be EINVAL, not -EINVAL.
     4696+
     4697+Thu Jun 15 23:43:02 1995  Remy Card  <card@bbj>
     4698+
     4699+       * Makefile.in: Added support for ELF shared libraries.
     4700+               Fixed typos in the compilation rules.
     4701+               (distclean): Added Makefile.
     4702+
     4703+       * llseek.c (llseek): New function, if llseek() does not exist in the
     4704+       C library.
     4705+       (ext2_llseek): Changed to call llseek().
     4706+
     4707+Mon Jun 12 08:29:07 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
     4708+
     4709+       * ext2fs.h: Use __u32 to define blk_t, instead of unsigned long.
     4710+
     4711+Sun Jun 11 15:02:54 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
     4712+
     4713+       * mkdir.c (ext2fs_mkdir): Use LINUX_S_IFDIR instead of S_IFDIR.
     4714+
     4715+       * ext2fs.h (LINUX_S_IFDIR): Define a linux specific versions of
     4716+               the S_*, which are normally defined in <sys/stat.h>.  This
     4717+               allows us to compile e2fsprogs on a non-Linux system,
     4718+               which may have a different value for S_IFDIR.
     4719+
     4720+Sat Jun 10 23:47:05 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
     4721+
     4722+       * bitops.c (clear_bit, set_bit): Remove calls to cli() and sti();
     4723+               this is a user-mode application!
     4724+
     4725+Thu Jun  8 13:13:22 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>
     4726+
     4727+       * llseek.c: Put the include of <linux/unistd.h> inside the #ifdef
     4728+       __linux__ so that non-linux systems won't see it.
     4729+
     4730+       * alloc.c: Include <errno.h> if possible.
     4731+       * badblocks.c: Ditto.
     4732+       * bb_inode.c: Ditto.
     4733+       * bitmaps.c: Ditto.
     4734+       * block.c: Ditto.
     4735+       * expanddir.c: Ditto.
     4736+       * get_pathname.c: Ditto.
     4737+       * initialize.c: Ditto.
     4738+       * inode.c: Ditto.
     4739+       * llseek.c: Ditto.
     4740+       * mkdir.c: Ditto.
     4741+       * namei.c: Ditto.
     4742+       * newdir.c: Ditto.
     4743+       * openfs.c: Ditto.
     4744+       * rw_bitmaps.c: Ditto.
     4745+       * unix_io.c: Ditto.
     4746+
     4747+       * Makefile.in: Rewritten to conform to GNU coding standards and
     4748+       support separate compilation directories.
     4749+
     4750+Thu May 11 04:13:12 1995    <tytso@rsx-11.mit.edu>
     4751+
     4752+       * initialize.c (ext2fs_initialize): Don't allow more than one
     4753+               bitmaps's worth of inodes in a group.
     4754+
     4755+Sat Mar 11 14:07:11 1995  Theodore Y. Ts'o  <tytso@localhost>
     4756+
     4757+       * llseek.c (ext2_llseek): Added error checking to the llseek()
     4758+               compat code to protect against overflow.  This only
     4759+               applies to 1.0 and early 1.1 kernels, which don't support
     4760+               the llseek() system call.
     4761+
     4762+Thu Nov 24 16:29:00 1994  Theodore Y. Ts'o  (tytso@rt-11)
     4763+
     4764+       * unix_io.c (unix_open): Initialize the read_error and write_error
     4765+               io_channel pointers to be null.
     4766+
     4767+       * bb_inode.c (clear_bad_block_proc): If an illegal block number is
     4768+               found, clear it but don't try to update the filesystem
     4769+               accounting information, since that's hopeless anyway.
     4770+
     4771+       * block.c (bloblock_iterate_ind, bloblock_iterate_dind,
     4772+       bloblock_iterate_tind): Check to see if the indirect blocks are
     4773+               valid before trying to read them.
     4774+
     4775+       * ext2_err.et (EXT2_ET_BAD_IND_BLOCK, EX2_ET_BAD_DIND_BLOCK,
     4776+       EXT2_ET_BAD_TIND_BLOCK): Add new error codes.
     4777+
     4778+       * bitops.h (ext2fs_mark_block_bitmap, ext2fs_unmark_block_bitmap,
     4779+       ext2fs_test_block_bitmap, ext2fs_mark_inode_bitmap,
     4780+       ext2fs_unmark_inode_bitmap, ext2fs_test_inode_bitmap):  If an
     4781+               illegal block or inode number is passed in, return instead
     4782+               of trying to test, set, or clear the bit.
     4783+
     4784+Mon Nov  7 21:32:33 1994  Remy Card  <card@bbj>
     4785+
     4786+       * Makefile: Added a dummy install target in case shared libraries
     4787+               are not built.
     4788+
     4789+Mon Oct 24 14:11:44 1994    (tytso@rsx-11)
     4790+
     4791+       * bitmaps.c (ext2fs_allocate_block_bitmap): Fix calculation of how
     4792+               the real last block of the bitmap should be calculated.
     4793+
     4794+Wed Sep  7 10:05:36 1994    (tytso@rsx-11)
     4795+
     4796+       * bitmaps.c (ext2fs_fudge_inode_bitmap_end,
     4797+               ext2fs_fudge_block_bitmap_end, ext2fs_clear_inode_bitmap,
     4798+               ext2fs_clear_block_bitmap, ext2fs_free_inode_bitmap,
     4799+               ext2fs_free_block_bitmap): Add magic number checking for
     4800+               the inode and block bitmaps.
     4801+
     4802+       * bitmaps.c (ext2fs_allocate_block_bitmap): Fix to set the correct
     4803+               magic number for a block bitmap instead of an inode bitmap.
     4804+
     4805+       * inode.c (ext2fs_close_inode_scan, ext2fs_get_next_inode):  Add
     4806+               magic number checking for the inode_scan structure.
     4807+
     4808+       * badblocks.c (badblocks_list_free, badblocks_list_add,
     4809+               badblocks_list_test, badblocks_list_iterate_begin,
     4810+               badblocks_list_iterate, badblocks_list_iterate_end): Add
     4811+               magic number checking for the badblocks_list and
     4812+               badblocks_iterate structures.
     4813+
     4814+       * ext2_err.et (EXT2_ET_MAGIC_UNIX_IO_CHANNEL):
     4815+       * unix_io.c (unix_open, unix_close, unix_set_blksize, unix_read_blk,
     4816+               unix_write_blk, unix_flush): Add magic number checking
     4817+               both for io_channel structure and unix_private_data
     4818+               structure.
     4819+
     4820+       * openfs.c (ext2fs_open): Add check for io_manager structure's
     4821+               magic number.
     4822+
     4823+       * rw_bitmaps.c (ext2fs_write_inode_bitmap, ext2fs_write_block_bitmap,
     4824+               ext2fs_read_inode_bitmap, ext2fs_read_block_bitmap,
     4825+               ext2fs_read_bitmaps, ext2fs_write_bitmaps):
     4826+       * read_bb.c (ext2fs_read_bb_inode):
     4827+       * read_bb_file.c (ext2fs_read_bb_FILE):
     4828+       * newdir.c (ext2fs_new_dir_block):
     4829+       * namei.c (ext2fs_dir_iterate, ext2fs_lookup, ext2fs_namei):
     4830+       * link.c (ext2fs_link, ext2fs_unlink):
     4831+       * inode.c (ext2fs_open_inode_scan, ext2fs_read_inode,
     4832+               ext2fs_write_inode, ext2fs_get_blocks,
     4833+               ext2fs_check_directory):
     4834+       * get_pathname.c (ext2fs_get_pathname):
     4835+       * expanddir.c (ext2fs_expand_dir):
     4836+       * block.c (ext2fs_block_iterate):
     4837+       * bitmaps.c (ext2fs_allocate_inode_bitmap,
     4838+               ext2fs_allocate_block_bitmap):
     4839+       * bb_inode.c (ext2fs_update_bb_inode):
     4840+       * alloc.c (ext2fs_new_inode,ext2fs_new_block,ext2fs_get_free_blocks):
     4841+       * check_desc.c (ext2fs_check_desc):
     4842+       * closefs.c (ext2fs_close, ext2fs_flush):
     4843+       * freefs.c (ext2fs_free): Add check for ext2_filsys magic number.
     4844+
     4845+       * Makefile:
     4846+       * ext2fs.h:
     4847+       * openfs.c:
     4848+       * check_desc.c (ext2fs_check_desc): Move ext2fs_check_desc from
     4849+       openfs.c into its own file.
     4850+
     4851+       * ext2fs.h (EXT2_CHECK_MAGIC): Added macro for checking for
     4852+       structure magic numbers.
     4853+
     4854+       * closefs.c (ext2fs_flush): Folded in Remy Card's changes to clear
     4855+       the EXT2_VALID_FS flag in the backup superblock blocks, so that if
     4856+       someone uses the -b option to specify the use of the backup
     4857+       superblock --- this usually means that the main superblock is
     4858+       toast.  :-)
     4859+
     4860+       * ext2fs.h:
     4861+       * ext2_err.et (EXT2_ET_REV_TOO_HIGH):
     4862+       * openfs.c (ext2fs_open): Folded in Remy Card's changes to add a
     4863+       revision level to the superblock.
     4864+
     4865+Sun Aug 21 00:50:08 1994  Theodore Y. Ts'o  (tytso@rt-11)
     4866+
     4867+       * ext2fs.h:
     4868+       * bitmaps.c:
     4869+       * bitops.c
     4870+       * bitops.h:
     4871+       * openfs.c:
     4872+       * initialize.c: Completely revamped the inode and block bitmap
     4873+       structures, so that they can be better chance of being extensible
     4874+       in a shared library.  They are now their own type, instead of
     4875+       being a char *.  Also, the function signatures of
     4876+       ext2fs_test_block_bitmap, ext2fs_mark_block_bitmap,
     4877+       ext2fs_unmark_block_bitmap, ext2fs_test_inode_bitmap,
     4878+       ext2fs_mark_inode_bitmap, and ext2fs_unmark_inode_bitmap were
     4879+       changed to eliminate the ext2_filsys argument, since it is no
     4880+       longer necessary.
     4881+
     4882+Wed Aug 17 21:46:44 1994  Remy Card  (card@bbj)
     4883+
     4884+       * unix_io.c (unix_read_blk and unix_write_blk): use the llseek
     4885+       system call if available.
     4886+
     4887+       * llseek.c: new file.  This is the stub calling the llseek system
     4888+       call which allows supports for 2GB+ file systems.
     4889+
     4890+       * initialize.c (ext2fs_initialize): Ext2fs_initialize now stores
     4891+       the creator operating system.
     4892+
     4893+Wed Aug 17 10:03:24 1994  Theodore Y. Ts'o  (tytso@rt-11)
     4894+
     4895+       * initialize.c (ext2fs_initialize): Ext2fs_initialize now sets up
     4896+       the group descriptor statistics in addition to everything else.
     4897+       This relieves mke2fs of the responsibility of doing it.
     4898+
     4899+       * bitops.c, bitops.h: Add assembly inline functions for the 68000.
     4900+       Added a new #define, _EXT2_HAVE_ASM_BITOPS_ to control whether or
     4901+       not the generic C function equivalents should be included or not.
     4902+
     4903+       * openfs.c (ext2fs_open): If a superblock is specified, then use
     4904+       the backup group descriptors that go along with this superblock,
     4905+       instead of using the primary group descriptors.  This allows
     4906+       e2fsck to recover filesystems where the primary group descriptors
     4907+       have been trashed.
     4908+
     4909+
     4910diff -Naur silo-1.4.14.orig/libext2fs/Makefile silo-1.4.14/libext2fs/Makefile
     4911--- silo-1.4.14.orig/libext2fs/Makefile 1969-12-31 16:00:00.000000000 -0800
     4912+++ silo-1.4.14/libext2fs/Makefile      2009-01-07 15:07:56.000000000 -0800
     4913@@ -0,0 +1,21 @@
     4914+
     4915+include ../Rules.make
     4916+
     4917+DEFS = -DLOCALEDIR=\"$(localedir)\" -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DENABLE_HTREE=1 -DENABLE_SWAPFS=1 -DPACKAGE=\"e2fsprogs\" -DVERSION=\"0.14.1\" -DHAVE_LONG_LONG=1 -DHAVE_LONG_DOUBLE=1 -DHAVE_WCHAR_T=1 -DHAVE_WINT_T=1 -DHAVE_INTTYPES_H_WITH_UINTMAX=1 -DHAVE_STDINT_H_WITH_UINTMAX=1 -DHAVE_INTMAX_T=1 -DHAVE_POSIX_PRINTF=1 -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DHAVE_STDLIB_H=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DINTDIV0_RAISES_SIGFPE=1 -DHAVE_UNSIGNED_LONG_LONG=1 -DHAVE_UINTMAX_T=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STDINT_H=1 -DHAVE_ARGZ_H=1 -DHAVE_LIMITS_H=1 -DHAVE_LOCALE_H=1 -DHAVE_NL_TYPES_H=1 -DHAVE_MALLOC_H=1 -DHAVE_STDDEF_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_ASPRINTF=1 -DHAVE_FWPRINTF=1 -DHAVE_GETCWD=1 -DHAVE_GETEGID=1 -DHAVE_GETEUID=1 -DHAVE_GETGID=1 -DHAVE_GETUID=1 -DHAVE_MEMPCPY=1 -DHAVE_MUNMAP=1 -DHAVE_PUTENV=1 -DHAVE_SETENV=1 -DHAVE_SETLOCALE=1 -DHAVE_SNPRINTF=1 -DHAVE_STPCPY=1 -DHAVE_STRCASECMP=1 -DHAVE_STRDUP=1 -DHAVE_STRTOUL=1 -DHAVE_TSEARCH=1 -DHAVE_WCSLEN=1 -DHAVE___ARGZ_COUNT=1 -DHAVE___ARGZ_STRINGIFY=1 -DHAVE___ARGZ_NEXT=1 -DHAVE___FSETLOCKING=1 -DHAVE_DECL__SNPRINTF=0 -DHAVE_DECL__SNWPRINTF=0 -DHAVE_DECL_FEOF_UNLOCKED=1 -DHAVE_DECL_FGETS_UNLOCKED=0 -DHAVE_DECL_GETC_UNLOCKED=1 -DHAVE_ICONV=1 -DICONV_CONST= -DHAVE_LANGINFO_CODESET=1 -DHAVE_LC_MESSAGES=1 -DENABLE_NLS=1 -DHAVE_GETTEXT=1 -DHAVE_DCGETTEXT=1 -DHAVE_STDLIB_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STDARG_H=1 -DHAVE_STDINT_H=1 -DHAVE_ERRNO_H=1 -DHAVE_MALLOC_H=1 -DHAVE_MNTENT_H=1 -DHAVE_PATHS_H=1 -DHAVE_DIRENT_H=1 -DHAVE_GETOPT_H=1 -DHAVE_SETJMP_H=1 -DHAVE_SIGNAL_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_LINUX_FD_H=1 -DHAVE_LINUX_MAJOR_H=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_PRCTL_H=1 -DHAVE_SYS_QUEUE_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_SYS_SYSMACROS_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_NETINET_IN_H=1 -DHAVE_SYS_MOUNT_H=1 -DHAVE_NET_IF_H=1 -DHAVE_VPRINTF=1 -DHAVE_RECLEN_DIRENT=1 -DHAVE_TYPE_SSIZE_T=1 -DHAVE_LSEEK64_PROTOTYPE=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=4 -DSIZEOF_LONG_LONG=8 -DHAVE_INTTYPES_H=1 -DHAVE_INTPTR_T=1 -DHAVE_GETRUSAGE=1 -DHAVE_LLSEEK=1 -DHAVE_LSEEK64=1 -DHAVE_OPEN64=1 -DHAVE_STRTOULL=1 -DHAVE_STRCASECMP=1 -DHAVE_SRANDOM=1 -DHAVE_FCHOWN=1 -DHAVE_MALLINFO=1 -DHAVE_FDATASYNC=1 -DHAVE_STRNLEN=1 -DHAVE_STRPTIME=1 -DHAVE_SYSCONF=1 -DHAVE_PATHCONF=1 -DHAVE_POSIX_MEMALIGN=1 -DHAVE_MEMALIGN=1 -DHAVE_VALLOC=1 -DHAVE___SECURE_GETENV=1 -DHAVE_PRCTL=1 -DHAVE_DLOPEN=1 -DHAVE_EXT2_IOCTLS=1
     4918+
     4919+DEBUGFS_LIB_OBJS = inode_io.o namei.o write_bb_file.o
     4920+RESIZE_LIB_OBJS = rs_bitmap.o dupfs.o test_io.o
     4921+E2IMAGE_LIB_OBJS = imager.o
     4922+OBJS= $(DEBUGFS_LIB_OBJS) $(RESIZE_LIB_OBJS) $(E2IMAGE_LIB_OBJS) ext2_err.o alloc.o alloc_sb.o alloc_stats.o alloc_tables.o badblocks.o bb_inode.o bitmaps.o bitops.o block.o bmap.o check_desc.o closefs.o dblist.o dblist_dir.o dirblock.o dirhash.o dir_iterate.o expanddir.o ext_attr.o finddev.o flushb.o freefs.o gen_bitmap.o get_pathname.o getsize.o getsectsize.o icount.o ind_block.o initialize.o inline.o inode.o io_manager.o ismounted.o link.o llseek.o lookup.o mkdir.o mkjournal.o native.o newdir.o openfs.o read_bb.o read_bb_file.o res_gdt.o rw_bitmaps.o swapfs.o unix_io.o unlink.o valid_blk.o version.o
     4923+
     4924+all: libext2fs.a
     4925+
     4926+libext2fs.a: $(OBJS)
     4927+       $(RM) libext2fs.a
     4928+       $(AR) rc libext2fs.a $(OBJS)
     4929+
     4930+clean:
     4931+       $(RM) -f libext2fs.a $(OBJS)
     4932+
     4933+.c.o:
     4934+       $(CC-SILO) $(CFLAGS) $(DEFS) -c $< -o $@
     4935diff -Naur silo-1.4.14.orig/libext2fs/alloc.c silo-1.4.14/libext2fs/alloc.c
     4936--- silo-1.4.14.orig/libext2fs/alloc.c  1969-12-31 16:00:00.000000000 -0800
     4937+++ silo-1.4.14/libext2fs/alloc.c       2009-01-07 15:07:56.000000000 -0800
    5834938@@ -0,0 +1,173 @@
    5844939+/*
     
    7555110+}
    7565111+
    757 diff -Naur silo-1.4.13.orig/libext2fs/alloc_sb.c silo-1.4.13/libext2fs/alloc_sb.c
    758 --- silo-1.4.13.orig/libext2fs/alloc_sb.c       1969-12-31 19:00:00.000000000 -0500
    759 +++ silo-1.4.13/libext2fs/alloc_sb.c    2007-04-03 17:02:53.000000000 -0400
     5112diff -Naur silo-1.4.14.orig/libext2fs/alloc_sb.c silo-1.4.14/libext2fs/alloc_sb.c
     5113--- silo-1.4.14.orig/libext2fs/alloc_sb.c       1969-12-31 16:00:00.000000000 -0800
     5114+++ silo-1.4.14/libext2fs/alloc_sb.c    2009-01-07 15:07:56.000000000 -0800
    7605115@@ -0,0 +1,57 @@
    7615116+/*
     
    8165171+       return num_blocks;
    8175172+}
    818 diff -Naur silo-1.4.13.orig/libext2fs/alloc_stats.c silo-1.4.13/libext2fs/alloc_stats.c
    819 --- silo-1.4.13.orig/libext2fs/alloc_stats.c    1969-12-31 19:00:00.000000000 -0500
    820 +++ silo-1.4.13/libext2fs/alloc_stats.c 2007-04-03 17:02:53.000000000 -0400
     5173diff -Naur silo-1.4.14.orig/libext2fs/alloc_stats.c silo-1.4.14/libext2fs/alloc_stats.c
     5174--- silo-1.4.14.orig/libext2fs/alloc_stats.c    1969-12-31 16:00:00.000000000 -0800
     5175+++ silo-1.4.14/libext2fs/alloc_stats.c 2009-01-07 15:07:56.000000000 -0800
    8215176@@ -0,0 +1,52 @@
    8225177+/*
     
    8725227+       ext2fs_mark_bb_dirty(fs);
    8735228+}
    874 diff -Naur silo-1.4.13.orig/libext2fs/alloc_tables.c silo-1.4.13/libext2fs/alloc_tables.c
    875 --- silo-1.4.13.orig/libext2fs/alloc_tables.c   1969-12-31 19:00:00.000000000 -0500
    876 +++ silo-1.4.13/libext2fs/alloc_tables.c        2007-04-03 17:02:53.000000000 -0400
     5229diff -Naur silo-1.4.14.orig/libext2fs/alloc_tables.c silo-1.4.14/libext2fs/alloc_tables.c
     5230--- silo-1.4.14.orig/libext2fs/alloc_tables.c   1969-12-31 16:00:00.000000000 -0800
     5231+++ silo-1.4.14/libext2fs/alloc_tables.c        2009-01-07 15:07:56.000000000 -0800
    8775232@@ -0,0 +1,117 @@
    8785233+/*
     
    9935348+}
    9945349+
    995 diff -Naur silo-1.4.13.orig/libext2fs/badblocks.c silo-1.4.13/libext2fs/badblocks.c
    996 --- silo-1.4.13.orig/libext2fs/badblocks.c      1969-12-31 19:00:00.000000000 -0500
    997 +++ silo-1.4.13/libext2fs/badblocks.c   2007-04-03 17:02:53.000000000 -0400
     5350diff -Naur silo-1.4.14.orig/libext2fs/badblocks.c silo-1.4.14/libext2fs/badblocks.c
     5351--- silo-1.4.14.orig/libext2fs/badblocks.c      1969-12-31 16:00:00.000000000 -0800
     5352+++ silo-1.4.14/libext2fs/badblocks.c   2009-01-07 15:07:56.000000000 -0800
    9985353@@ -0,0 +1,327 @@
    9995354+/*
     
    13245679+       return bb->num;
    13255680+}
    1326 diff -Naur silo-1.4.13.orig/libext2fs/bb_compat.c silo-1.4.13/libext2fs/bb_compat.c
    1327 --- silo-1.4.13.orig/libext2fs/bb_compat.c      1969-12-31 19:00:00.000000000 -0500
    1328 +++ silo-1.4.13/libext2fs/bb_compat.c   2007-04-03 17:02:53.000000000 -0400
     5681diff -Naur silo-1.4.14.orig/libext2fs/bb_compat.c silo-1.4.14/libext2fs/bb_compat.c
     5682--- silo-1.4.14.orig/libext2fs/bb_compat.c      1969-12-31 16:00:00.000000000 -0800
     5683+++ silo-1.4.14/libext2fs/bb_compat.c   2009-01-07 15:07:56.000000000 -0800
    13295684@@ -0,0 +1,63 @@
    13305685+/*
     
    13915746+       ext2fs_badblocks_list_iterate_end(iter);
    13925747+}
    1393 diff -Naur silo-1.4.13.orig/libext2fs/bb_inode.c silo-1.4.13/libext2fs/bb_inode.c
    1394 --- silo-1.4.13.orig/libext2fs/bb_inode.c       1969-12-31 19:00:00.000000000 -0500
    1395 +++ silo-1.4.13/libext2fs/bb_inode.c    2007-04-03 17:02:53.000000000 -0400
     5748diff -Naur silo-1.4.14.orig/libext2fs/bb_inode.c silo-1.4.14/libext2fs/bb_inode.c
     5749--- silo-1.4.14.orig/libext2fs/bb_inode.c       1969-12-31 16:00:00.000000000 -0800
     5750+++ silo-1.4.14/libext2fs/bb_inode.c    2009-01-07 15:07:56.000000000 -0800
    13965751@@ -0,0 +1,267 @@
    13975752+/*
     
    16626017+
    16636018+
    1664 diff -Naur silo-1.4.13.orig/libext2fs/bitmaps.c silo-1.4.13/libext2fs/bitmaps.c
    1665 --- silo-1.4.13.orig/libext2fs/bitmaps.c        1969-12-31 19:00:00.000000000 -0500
    1666 +++ silo-1.4.13/libext2fs/bitmaps.c     2007-04-03 17:02:53.000000000 -0400
     6019diff -Naur silo-1.4.14.orig/libext2fs/bitmaps.c silo-1.4.14/libext2fs/bitmaps.c
     6020--- silo-1.4.14.orig/libext2fs/bitmaps.c        1969-12-31 16:00:00.000000000 -0800
     6021+++ silo-1.4.14/libext2fs/bitmaps.c     2009-01-07 15:07:56.000000000 -0800
    16676022@@ -0,0 +1,212 @@
    16686023+/*
     
    18786233+              (size_t) (((bitmap->real_end - bitmap->start) / 8) + 1));
    18796234+}
    1880 diff -Naur silo-1.4.13.orig/libext2fs/bitops.c silo-1.4.13/libext2fs/bitops.c
    1881 --- silo-1.4.13.orig/libext2fs/bitops.c 1969-12-31 19:00:00.000000000 -0500
    1882 +++ silo-1.4.13/libext2fs/bitops.c      2007-04-03 17:02:53.000000000 -0400
     6235diff -Naur silo-1.4.14.orig/libext2fs/bitops.c silo-1.4.14/libext2fs/bitops.c
     6236--- silo-1.4.14.orig/libext2fs/bitops.c 1969-12-31 16:00:00.000000000 -0800
     6237+++ silo-1.4.14/libext2fs/bitops.c      2009-01-07 15:07:56.000000000 -0800
    18836238@@ -0,0 +1,91 @@
    18846239+/*
     
    19736328+}
    19746329+
    1975 diff -Naur silo-1.4.13.orig/libext2fs/bitops.h silo-1.4.13/libext2fs/bitops.h
    1976 --- silo-1.4.13.orig/libext2fs/bitops.h 1969-12-31 19:00:00.000000000 -0500
    1977 +++ silo-1.4.13/libext2fs/bitops.h      2007-04-03 17:02:53.000000000 -0400
     6330diff -Naur silo-1.4.14.orig/libext2fs/bitops.h silo-1.4.14/libext2fs/bitops.h
     6331--- silo-1.4.14.orig/libext2fs/bitops.h 1969-12-31 16:00:00.000000000 -0800
     6332+++ silo-1.4.14/libext2fs/bitops.h      2009-01-07 15:07:56.000000000 -0800
    19786333@@ -0,0 +1,617 @@
    19796334+/*
     
    25946949+#endif
    25956950+
    2596 diff -Naur silo-1.4.13.orig/libext2fs/block.c silo-1.4.13/libext2fs/block.c
    2597 --- silo-1.4.13.orig/libext2fs/block.c  1969-12-31 19:00:00.000000000 -0500
    2598 +++ silo-1.4.13/libext2fs/block.c       2007-04-03 17:02:53.000000000 -0400
     6951diff -Naur silo-1.4.14.orig/libext2fs/block.c silo-1.4.14/libext2fs/block.c
     6952--- silo-1.4.14.orig/libext2fs/block.c  1969-12-31 16:00:00.000000000 -0800
     6953+++ silo-1.4.14/libext2fs/block.c       2009-01-07 15:07:56.000000000 -0800
    25996954@@ -0,0 +1,437 @@
    26006955+/*
     
    30357390+}
    30367391+
    3037 diff -Naur silo-1.4.13.orig/libext2fs/bmap.c silo-1.4.13/libext2fs/bmap.c
    3038 --- silo-1.4.13.orig/libext2fs/bmap.c   1969-12-31 19:00:00.000000000 -0500
    3039 +++ silo-1.4.13/libext2fs/bmap.c        2007-04-03 17:02:53.000000000 -0400
     7392diff -Naur silo-1.4.14.orig/libext2fs/bmap.c silo-1.4.14/libext2fs/bmap.c
     7393--- silo-1.4.14.orig/libext2fs/bmap.c   1969-12-31 16:00:00.000000000 -0800
     7394+++ silo-1.4.14/libext2fs/bmap.c        2009-01-07 15:07:56.000000000 -0800
    30407395@@ -0,0 +1,270 @@
    30417396+/*
     
    33097664+
    33107665+
    3311 diff -Naur silo-1.4.13.orig/libext2fs/bmove.c silo-1.4.13/libext2fs/bmove.c
    3312 --- silo-1.4.13.orig/libext2fs/bmove.c  1969-12-31 19:00:00.000000000 -0500
    3313 +++ silo-1.4.13/libext2fs/bmove.c       2007-04-03 17:02:53.000000000 -0400
     7666diff -Naur silo-1.4.14.orig/libext2fs/bmove.c silo-1.4.14/libext2fs/bmove.c
     7667--- silo-1.4.14.orig/libext2fs/bmove.c  1969-12-31 16:00:00.000000000 -0800
     7668+++ silo-1.4.14/libext2fs/bmove.c       2009-01-07 15:07:56.000000000 -0800
    33147669@@ -0,0 +1,160 @@
    33157670+/*
     
    34737828+}
    34747829+
    3475 diff -Naur silo-1.4.13.orig/libext2fs/brel.h silo-1.4.13/libext2fs/brel.h
    3476 --- silo-1.4.13.orig/libext2fs/brel.h   1969-12-31 19:00:00.000000000 -0500
    3477 +++ silo-1.4.13/libext2fs/brel.h        2007-04-03 17:02:53.000000000 -0400
     7830diff -Naur silo-1.4.14.orig/libext2fs/brel.h silo-1.4.14/libext2fs/brel.h
     7831--- silo-1.4.14.orig/libext2fs/brel.h   1969-12-31 16:00:00.000000000 -0800
     7832+++ silo-1.4.14/libext2fs/brel.h        2009-01-07 15:07:56.000000000 -0800
    34787833@@ -0,0 +1,86 @@
    34797834+/*
     
    35637918+#define ext2fs_brel_free(brel) ((brel)->free((brel)))
    35647919+
    3565 diff -Naur silo-1.4.13.orig/libext2fs/brel_ma.c silo-1.4.13/libext2fs/brel_ma.c
    3566 --- silo-1.4.13.orig/libext2fs/brel_ma.c        1969-12-31 19:00:00.000000000 -0500
    3567 +++ silo-1.4.13/libext2fs/brel_ma.c     2007-04-03 17:02:53.000000000 -0400
     7920diff -Naur silo-1.4.14.orig/libext2fs/brel_ma.c silo-1.4.14/libext2fs/brel_ma.c
     7921--- silo-1.4.14.orig/libext2fs/brel_ma.c        1969-12-31 16:00:00.000000000 -0800
     7922+++ silo-1.4.14/libext2fs/brel_ma.c     2009-01-07 15:07:56.000000000 -0800
    35687923@@ -0,0 +1,197 @@
    35697924+/*
     
    37648119+       return 0;
    37658120+}
    3766 diff -Naur silo-1.4.13.orig/libext2fs/ChangeLog silo-1.4.13/libext2fs/ChangeLog
    3767 --- silo-1.4.13.orig/libext2fs/ChangeLog        1969-12-31 19:00:00.000000000 -0500
    3768 +++ silo-1.4.13/libext2fs/ChangeLog     2007-04-03 17:02:53.000000000 -0400
    3769 @@ -0,0 +1,3311 @@
    3770 +2006-06-30  Theodore Ts'o  <tytso@mit.edu>
    3771 +
    3772 +       * Release of E2fsprogs 1.38
    3773 +
    3774 +2005-06-30  Theodore Ts'o  <tytso@mit.edu>
    3775 +
    3776 +       * bitops.h, bitops.c (ext2fs_set_bit, ext2fs_clear_bit,
    3777 +               ext2fs_test_bit): Change these function prototypes to be
    3778 +               unsigned int's.  Negative bit numbers were never allowed
    3779 +               (and never made any sense), so this should be a safe
    3780 +               change.  This is needed to allow safe use of block numbers
    3781 +               greater than or equal to 2**31.
    3782 +
    3783 +2005-06-27  Stephen Tweedie  <sct@redhat.com>
    3784 +
    3785 +       * ext2fs.h (ext2fs_resize_mem): Fix C99 strict type aliasing
    3786 +               problems.  Addresses Red Hat Bugzilla #161183.
    3787 +
    3788 +2005-06-19  Theodore Ts'o  <tytso@mit.edu>
    3789 +
    3790 +       * getsectsize.c (BLKSSZGET): Clean up test for when to manually
    3791 +               define the BLKSSZGET ioctl.
    3792 +
    3793 +2005-05-29  Theodore Ts'o  <tytso@mit.edu>
    3794 +
    3795 +       * ismounted.c (ext2fs_check_mount_point): Add test to see if the
    3796 +               device appears to be busy; this only works on Linux 2.6+
    3797 +               systems, but provides some additional bullet-proofing in
    3798 +               those cases.
    3799 +
    3800 +2005-05-08  Theodore Ts'o  <tytso@mit.edu>
    3801 +
    3802 +       * test_io.c (safe_getenv): Fix bug so it would fetch the right
    3803 +               environment variable.
    3804 +
    3805 +2005-04-09  Theodore Ts'o  <tytso@mit.edu>
    3806 +
    3807 +       * inode.c (ext2fs_write_new_inode),
    3808 +               ind_block.c (ext2fs_read_ind_block): Add missing return
    3809 +               value in error return case.  (Otherwise we return garbage
    3810 +               instead of the error code.)
    3811 +
    3812 +2005-03-31  Theodore Ts'o  <tytso@mit.edu>
    3813 +
    3814 +       * test_io.c (test_open): If called by a setuid/setgid or an
    3815 +               otherwise privileged program, be paranoid and ignore the
    3816 +               TEST_IO_* environment variables.
    3817 +
    3818 +2005-03-21  Theodore Ts'o  <tytso@mit.edu>
    3819 +
    3820 +       * Release of E2fsprogs 1.37
    3821 +
    3822 +2005-03-21  Theodore Ts'o  <tytso@mit.edu>
    3823 +
    3824 +       * ext2_ext_attr.h (EXT2_XATTR_LEN, EXT2_XATTR_SIZE): Add new
    3825 +               convenience cpp macros.
    3826 +
    3827 +2005-03-20  Theodore Ts'o  <tytso@mit.edu>
    3828 +
    3829 +       * mkdir.c (ext2fs_mkdir): Call ext2fs_write_new_inode() instead of
    3830 +               ext2fs_write_inode().
    3831 +
    3832 +       * inode.c (ext2fs_write_new_inode): New function which should be
    3833 +               used when the caller is writing an inode for the first
    3834 +               time.  It makes sure that the extra portion of the large
    3835 +               inode is initialized properly.
    3836 +
    3837 +2005-03-18  Theodore Ts'o  <tytso@mit.edu>
    3838 +
    3839 +       * Makefile.in: Fix clean target to remove tst_getsectsize.
    3840 +
    3841 +       * getsize.c (ext2fs_get_device_size): Check to see if the number
    3842 +               of blocks is greater than 2**32 when we are doing a binary
    3843 +               search to determine the device size.  Thanks to Stephen
    3844 +               Tweedie for the patch.
    3845 +       
    3846 +2006-02-05  Theodore Ts'o  <tytso@mit.edu>
    3847 +
    3848 +       * Release of E2fsprogs 1.36
    3849 +
    3850 +2005-02-05  Theodore Ts'o  <tytso@mit.edu>
    3851 +
    3852 +       * Makefile.in: Remove ext2fs.pc on a "make distclean"
    3853 +
    3854 +2005-02-04  Theodore Ts'o  <tytso@mit.edu>
    3855 +
    3856 +       * Makefile.in (clean): Remove tst_getsize when doing a make clean
    3857 +
    3858 +2005-02-03  Theodore Ts'o  <tytso@mit.edu>
    3859 +
    3860 +       * bitops.c: Make the generic functions more efficient.
    3861 +
    3862 +       * bitops.h: Drop SPARC assembly code. It's less efficient than GCC
    3863 +               3.4 compiled code and also triggers nasty compiler
    3864 +               warnings on sparc64.  Thanks to Matthias Andree for his
    3865 +               analysis and suggestion.
    3866 +       
    3867 +2005-01-27  Theodore Ts'o  <tytso@mit.edu>
    3868 +
    3869 +       * res_gdt.c (ext2fs_create_resize_inode): Create the resize inode
    3870 +               even if s_reserved_gdt_blocks is zero.
    3871 +
    3872 +2005-01-26  Theodore Ts'o  <tytso@mit.edu>
    3873 +
    3874 +       * ext2fs.pc.in: Add pkg-config files.
    3875 +
    3876 +2005-01-25  Theodore Ts'o  <tytso@mit.edu>
    3877 +
    3878 +       * ext2fs.h: Add definition of struct ext2_inode_large
    3879 +
    3880 +       * ext2_fs.h: Add new function prototypes
    3881 +
    3882 +       * ext_attr.c (ext2fs_read_ext_attr, ext2fs_write_ext_attr): The
    3883 +               ext2fs_swap_ext_attr() has been moved to swapfs.c, and
    3884 +               given a new argument, has_header.
    3885 +
    3886 +       * swapfs.c (ext2fs_swap_ext_attr): Moved from ext_attr.c, and
    3887 +               takes an argument which controls whether or not there is
    3888 +               an EA header which needs to be byteswaped.
    3889 +               (ext2fs_swap_inode_full): New function which byte-swaps
    3890 +               the EA in inode.
    3891 +
    3892 +       * inode.c (ext2fs_get_next_inode_full, ext2fs_read_inode_full,
    3893 +               ext2fs_write_inode_full): New functions, originally from
    3894 +               Alex Tomas, but which needed to be substantially fixed so
    3895 +               that the tests wouldn't cause major stack overwrite bugs
    3896 +               in byte-swapping is enabled.
    3897 +       
    3898 +2005-01-18  Theodore Ts'o  <tytso@mit.edu>
    3899 +
    3900 +       * Makefile.in: Fix the kernel compile-time echo commands to be
    3901 +               consistent and portable
    3902 +
    3903 +2005-01-07  Theodore Ts'o  <tytso@mit.edu>
    3904 +
    3905 +       * unlink.c (ext2fs_unlink): If both the name and the inode number
    3906 +               are unspecified, then return an error, so that we don't do
    3907 +               something surprising such as unconditionally deleting the
    3908 +               first directory entry.
    3909 +               (unlink_proc): Delete directory entries by coalescing it
    3910 +               with the previous entry, to avoid directory fragmentation.
    3911 +
    3912 +2005-01-06  Theodore Ts'o  <tytso@mit.edu>
    3913 +
    3914 +       * version.c (ext2fs_parse_version_string): Change parsing
    3915 +               algorithm so that version strings such as 1.36-rc1 returns
    3916 +               a non-surprising result (i.e., 136, and not 1361).
    3917 +
    3918 +2005-01-05  Theodore Ts'o  <tytso@mit.edu>
    3919 +
    3920 +       * block.c (block_iterate_ind, block_iterate_dind,
    3921 +               block_iterate_tind): Move the code which byte swaps and
    3922 +               read/writes indirect blocks to ext2fs_{read,write}_ind_block.
    3923 +               This saves 400 bytes, and we need them for the
    3924 +               resize_inode handling.
    3925 +
    3926 +       * ind_block.c (ext2fs_read_ind_block, ext2fs_write_ind_block): New
    3927 +               functions.
    3928 +
    3929 +       * res_gdt.c (ext2fs_create_resize_inode): Use
    3930 +               ext2fs_{read,write}_ind_block so that byte swapping is
    3931 +               handled on big-endian systems.
    3932 +
    3933 +       * dupfs.c (ext2fs_dup_handle): Make sure the new filesystem handle
    3934 +               has its own copy of the orig_super data structure.  (This
    3935 +               is a better way of fixing a double-free problem in
    3936 +               resize2fs which Fedora attempted to fix in
    3937 +               e2fsprogs-1.35-double_free.patch.   Addresses Red Hat
    3938 +               Bugzilla #132707.)
    3939 +       
    3940 +2004-12-23  Theodore Ts'o  <tytso@mit.edu>
    3941 +
    3942 +       * inode.c (ext2fs_flush_icache): When flushing the icache, clear
    3943 +               the last-read block information as well.
    3944 +
    3945 +       * ext2fs.h (BMAP_SET), bmap.c (ext2fs_bmap): Add support for new
    3946 +               flag, BMAP_SET, which allows the caller to set a
    3947 +               particular logical->physical block mapping.
    3948 +
    3949 +       * ext2_err.et.in (EXT2_ET_SET_BMAP_NO_IND): New error code
    3950 +
    3951 +       * initialize.c (calc_reserved_gdt_blocks): #ifdef out all
    3952 +               debugging printf statements.
    3953 +       
    3954 +       * res_gdt.c (ext2fs_create_resize_inode): Return
    3955 +               EXT2_ET_RESIZE_INODE_CORRUPT if the resize inode is not
    3956 +               what we expect.  #ifdef out all debugging printf
    3957 +               statements.
    3958 +
    3959 +       * ext2_err.et.in (EXT2_ET_RESIZE_INODE_CORRUPT): Add new error code.
    3960 +
    3961 +2004-12-22  Theodore Ts'o  <tytso@mit.edu>
    3962 +
    3963 +       * swapfs.c (ext2fs_swap_super): Byteswap the reserved_gdt_blocks
    3964 +               superblocks field.
    3965 +
    3966 +2004-12-15  Theodore Ts'o  <tytso@mit.edu>
    3967 +
    3968 +       * sparse.c (ext2fs_list_backups, ext2fs_bg_has_super),
    3969 +               res_gdt.c (list_backups), closefs.c (ext2fs_bg_has_super),
    3970 +               ext2fs.h: Move ext2fs_list_backups() to res_gdt.c, and
    3971 +               ext2fs_bg_has_super() back to closefs.c.  There's no
    3972 +               reason for the new file, since list_backups() isn't being
    3973 +               used by any other functions, and can be made static, and
    3974 +               all users of the ext2fs filesystem will have to call
    3975 +               ext2fs_close() anyway.
    3976 +
    3977 +2004-12-15  Theodore Ts'o  <tytso@mit.edu>
    3978 +
    3979 +       * Applied resize inode patch from Andreas Dilger
    3980 +
    3981 +       * res_gdt.c (ext2fs_create_resize_inode): New function that
    3982 +               creates the resize inode.
    3983 +
    3984 +       * initialize.c (ext2fs_initialize): Reserve space for the resize
    3985 +               inode.
    3986 +
    3987 +       * ext2fs.h (EXT2_LIB_FEATURE_COMPAT_SUPP): Add
    3988 +               EXT2_FEATURE_COMPAT_RESIZE_INODE to the list of supported
    3989 +               capabilities.
    3990 +               Add function prototypes for res_gdt.c and sparse.c.
    3991 +
    3992 +       * closefs.c (ext2fs_super_and_bgd_loc): Take the reserved blocks
    3993 +               into account when calculating the number of overhead
    3994 +               blocks.
    3995 +
    3996 +       * closefs.c (ext2fs_bg_has_super, test_root), sparse.c: Move these
    3997 +               functions to the new file sparse.c
    3998 +
    3999 +       * alloc_sb.c (ext2fs_reserve_super_and_bgd): Reserve the blocks
    4000 +               saved in the resize inode as being in use.
    4001 +
    4002 +       * ext2_err.et.in (EXT2_ET_RES_GDT_BLOCKS): Add new error code.
    4003 +
    4004 +       * Makefile.in (srcdir): Add res_gdt.c and sparse.c to the ext2fs
    4005 +               library.
    4006 +
    4007 +2004-12-14  Theodore Ts'o  <tytso@mit.edu>
    4008 +
    4009 +       * Makefile.in: Use Linux-kernel-style makefile output for "make
    4010 +               install"
    4011 +
    4012 +       * Makefile.in (installdirs): Use $(MKINSTALLDIRS) macro
    4013 +               Update dependencies.
    4014 +
    4015 +2004-11-30  Theodore Ts'o  <tytso@mit.edu>
    4016 +
    4017 +       * unix_io.c (unix_set_option): Add support for the offset option.
    4018 +
    4019 +       * test_io.c (test_set_option): Add support for the set_option method.
    4020 +
    4021 +       * ext2_io.h: Add new io_channel method, set_option(), and change
    4022 +               io_channel_write_byte() from a macro to a library function.
    4023 +
    4024 +       * ext2fs.h, openfs.c(ext2fs_open2): New version of ext2fs_open
    4025 +               which adds a new parameter, io_options.
    4026 +               (ext2fs_open): If there is a question mark in the
    4027 +               filename, and no io_options are specified, assumed that
    4028 +               the text following the question mark are io_options.
    4029 +       
    4030 +       * io_manager.c, Makefile.in: New source file which contains
    4031 +               high-level functions for the io_channel layer.
    4032 +
    4033 +       * freefs.c (ext2fs_free): Make sure we don't free the io_channel
    4034 +               if image_io is NULL.
    4035 +
    4036 +       * Makefile.in: Use Linux-kernel-style makefile output to make it
    4037 +               easier to see errors/warnings.
    4038 +
    4039 +2004-11-29  Theodore Ts'o  <tytso@mit.edu>
    4040 +
    4041 +       * ext2_fs.h (EXT2_EXTENTS_FL, EXT3_FEATURE_INCOMPAT_EXTENTS,
    4042 +               EXT2_MAX_BLOCK_LOG_SIZE): Add definition for extent
    4043 +               feature and inode flag.  Change maximum allowable block
    4044 +               size to be 65536.
    4045 +
    4046 +2004-10-08  Theodore Ts'o  <tytso@mit.edu>
    4047 +
    4048 +       * getsize.c (ext2fs_get_device_size): Add support for Windows
    4049 +               9x/NT under Cygwin.  Thanks to Sam Robb
    4050 +               (samrobb@users.sourceforge.net) for pointing this and the
    4051 +               suggested code patch.
    4052 +
    4053 +2004-09-17  Theodore Ts'o  <tytso@mit.edu>
    4054 +
    4055 +       * getsize.c: Clean up header #include's.
    4056 +
    4057 +       * llseek.c (ext2fs_llseek): On non-linux systems, use lseek64() if
    4058 +               it is present.  (Addresses Debian bug #269044)
    4059 +
    4060 +2004-07-28  Theodore Ts'o  <tytso@mit.edu>
    4061 +
    4062 +       * rw_bitmaps.c (read_bitmaps), block.c (block_iterate_ind,
    4063 +               block_iterate_dind, block_iterate_tind), inode.c
    4064 +               (ext2fs_read_inode): If EXT2_FLAG_IMAGE_FILE is set, so
    4065 +               read the metadata from fs->image_io instead of fs->io.
    4066 +
    4067 +       * initialize.c (ext2fs_initialize), openfs.c (ext2fs_open):
    4068 +               Initialize fs->image_io to be the same as fs->io.
    4069 +       
    4070 +       * ext2_err.et.in (EXT2_ET_NOT_IMAGE_FILE): Add new error code.
    4071 +
    4072 +       * openfs.c (ext2fs_get_data_io, ext2fs_set_data_io,
    4073 +               ext2fs_rewrite_to_io): New functions that allow
    4074 +               applications to manipulate fs->image_io and fs->io safely.
    4075 +
    4076 +       * freefs.c (ext2fs_free): If fs->image_io is different fs->io,
    4077 +               then call io_channel_close on fs->image_io.
    4078 +
    4079 +       * ext2fs.h: Add image_io element to the ext2_filsys data
    4080 +               structure.  Add ext2fs_get_data_io() ext2fs_set_data_io(),
    4081 +               and ext2fs_rewrite_to_io() prototypes.
    4082 +
    4083 +2004-05-26  Theodore Ts'o  <tytso@mit.edu>
    4084 +
    4085 +       * closefs.c (ext2fs_flush): Make sure the master superblock is
    4086 +               written last, and only after other I/O has been flushed to
    4087 +               disk.  Thanks to Junfeng Yang from the Stanford
    4088 +               Metacompilation group for pointing a potential ordering
    4089 +               constraint problem if we don't write things out in the
    4090 +               right order.
    4091 +
    4092 +       * test_io.c: Implement the ability to abort after n reads or
    4093 +               writes to a particular block.  The block is specified by
    4094 +               TEST_IO_BLOCK environment variable, and the read/write
    4095 +               count by the TEST_IO_READ_ABORT and TEST_IO_WRITE_ABORT
    4096 +               environment variables.  The block data is now only dumped
    4097 +               if the 0x10 bit is set in TEST_IO_FLAGS.
    4098 +
    4099 +2004-04-03  Theodore Ts'o  <tytso@mit.edu>
    4100 +
    4101 +       * ext2_types.h.in: Remove check for _UUID_TYPES since uuid_types.h
    4102 +               is no longer used.
    4103 +
    4104 +2004-03-08  Theodore Ts'o  <tytso@mit.edu>
    4105 +
    4106 +       * getsize.c (ext2fs_get_device_size): Only use the BLKGETSIZE64
    4107 +               ioctl on Linux 2.6 since it is unreliable in Linux 2.4.
    4108 +               (Addresses Debian Bug #236528).  Fix typo in the ioctl
    4109 +               used for Mac OS X.
    4110 +
    4111 +2004-03-02  Theodore Ts'o  <tytso@mit.edu>
    4112 +
    4113 +       * getsize.c (ext2fs_get_device_size): Update getsize functions to
    4114 +               use Apple Darwin and Linux 64-bit ioctl's
    4115 +
    4116 +2004-02-29  Brian Bergstrand  <brian@bergstrand.org>
    4117 +
    4118 +       * Makefile.in: Use $(BSDLIB_PIC_FLAG) to determine whether to use
    4119 +               -fpic or -fPIC
    4120 +
    4121 +2004-02-28  Theodore Ts'o  <tytso@mit.edu>
    4122 +
    4123 +       * Release of E2fsprogs 1.35
    4124 +
    4125 +2004-02-21  Theodore Ts'o  <tytso@mit.edu>
    4126 +
    4127 +       * ext2fs.h (ext2fs_resize_mem): Fix C++ problem.  (Addresses Red
    4128 +               Hat Bugzilla #112448; thanks Thomas Woerner from Red Hat.)
    4129 +
    4130 +2004-02-14  Theodore Ts'o  <tytso@mit.edu>
    4131 +
    4132 +       * namei.c (follow_link): Correctly deal with symlinks that have
    4133 +               extended attribute information.  (Addresses Debian Bug
    4134 +               #232328)
    4135 +
    4136 +2004-01-30  Theodore Ts'o  <tytso@mit.edu>
    4137 +
    4138 +       * ext2_fs.h: Reserve an extra 4 bytes for the journal backup,
    4139 +               which we're using due to a typo in the e2fsck code.  (Oops)
    4140 +
    4141 +       * swapfs.c (ext2fs_swap_inode): Fix byte swap bug which causes SE
    4142 +               Linux created symlinks with mandatory attributes to fail
    4143 +               to be properly handled on big endian systems.  (Addresses
    4144 +               Debian Bug #228723).
    4145 +               (ext2fs_swap_super): Byte swap some new fields in the
    4146 +               superblock, including the journal backup fields.
    4147 +
    4148 +2003-12-02  Theodore Ts'o  <tytso@mit.edu>
    4149 +
    4150 +       * alloc.c, bb_inode.c, bitops.c, block.c, check_desc.c, closefs.c,
    4151 +               dir_iterate.c, dirblock.c, expanddir.c, ext2fs.h,
    4152 +               get_pathname.c, icount.c, imager.c, initalize.c, inode.c,
    4153 +               lookup.c, openfs.c, read_bb.c, read_bb_file.c,
    4154 +               rw_bitmaps.c, unix_io.c, unlink.c, write_bb_file.c: Fix
    4155 +               gcc -Wall complaints.  Mainly marking variables as being
    4156 +               unsued, and catching signed vs. unsigned comparisons.
    4157 +
    4158 +2003-09-03  Theodore Ts'o  <tytso@mit.edu>
    4159 +
    4160 +       * closefs.c (ext2fs_super_and_bgd_loc): New function which
    4161 +               centralizes the calculation of the superblock and block
    4162 +               group descriptors.
    4163 +               (ext2fs_flush): Use ext2fs_super_and_bgd_lock to figure
    4164 +               out where to write the superblock and block group
    4165 +               descriptors.
    4166 +
    4167 +       * alloc_sb.c (ext2fs_reserve_super_and_bgd): New function which
    4168 +               reserves space in the block bitmap using
    4169 +               ext2fs_super_and_bgd_loc.
    4170 +
    4171 +       * initialize.c (ext2fs_initialize): Use
    4172 +               ext2fs_reserve_super_and_bgd to initialize the block bitmap.
    4173 +
    4174 +2003-08-20  Theodore Ts'o  <tytso@mit.edu>
    4175 +
    4176 +       * inode_io.c (ext2fs_inode_io_intern2), ext2fs.h: Add new function
    4177 +               allows the caller to pass in the inode data structure.
    4178 +
    4179 +       * fileio.c (ext2fs_file_open2), ext2fs.h: Add new function which
    4180 +               allows the caller to pass in the inode to be used in the
    4181 +               file I/O.
    4182 +
    4183 +       * ext2_fs.h: Add a backup of the location of the journal inode
    4184 +               blocks to the superblock.
    4185 +
    4186 +       * mkjournal.c (write_journal_inode): Save the location of the
    4187 +               journal inode to the backup location in the superblock.
    4188 +
    4189 +2003-08-01  Philipp Thomas <pthomas@suse.de>
    4190 +
    4191 +       * alloc.c, badblocks.c, bb_inode.c, bitmaps.c, block.c, bmap.c,
    4192 +               bmove.c, brel_ma.c, closefs.c, dblist.c, dblist_dir.c,
    4193 +               dir_iterate.c, dirblock.c, dupfs.c, expanddir.c, ext2fs.h,
    4194 +               ext_attr.c, fileio.c, freefs.c, get_pathname.c, icount.c,
    4195 +               initialize.c, inode.c, inode_io.c, irel_ma.c, mkdir.c,
    4196 +               mkjournal.c, namei.c, newdir.c, openfs.c, rs_bitmap.c,
    4197 +               rw_bitmaps.c, test_io.c, unix_io.c: ext2fs_getmem(),
    4198 +               ext2fs_free_mem(), and ext2fs_resize_mem() all now take a
    4199 +               'void *' instead of a 'void **' in order to avoid pointer
    4200 +               aliasing problems with GCC 3.x.
    4201 +
    4202 +2003-07-25  Theodore Ts'o  <tytso@mit.edu>
    4203 +
    4204 +       * Release of E2fsprogs 1.34
    4205 +
    4206 +2003-07-06  Theodore Ts'o  <tytso@mit.edu>
    4207 +
    4208 +       * kernel-jbd.h, flushb.c: Fix gcc -Wall nitpicks (indented cpp
    4209 +               directives)
    4210 +
    4211 +       * ext2_types.h.in, initialize.c: Fix gcc -Wall nitpicks
    4212 +               (don't use #elsif)
    4213 +
    4214 +       * ismounted.c: Fix gcc -Wall nitpicks (Don't use exit as a goto label)
    4215 +
    4216 +       * llseek.c: Fix gcc -Wall nitpicks (don't use #elsif)
    4217 +
    4218 +       * lookup.c, read_bb.c: Fix gcc -Wall nitpicks (indent
    4219 +               non-traditional #pragma)
    4220 +
    4221 +       * test_io.c: Fix gcc -Wall nitpicks (const/unsigned type issues)
    4222 +
    4223 +2003-06-24    <tytso@snap.thunk.org>
    4224 +
    4225 +       * badblocks.c, ext2fs.h (ext2fs_u32_list_find,
    4226 +               ext2fs_u32_list_test, ext2fs_u32_list_del,
    4227 +               ext2fs_badblocks_list_del): Add functions to delete a
    4228 +               block from the badblocks list.
    4229 +       * tst_badblocks.c: Add test cases for ext2fs_badblocks_list_del().
    4230 +
    4231 +2003-05-21  Theodore Ts'o  <tytso@mit.edu>
    4232 +
    4233 +       * getsectsize.c (ext2fs_get_device_sectsize): New function which
    4234 +               returns the hardware sector size (if it is available).
    4235 +
    4236 +2003-05-13  Theodore Ts'o  <tytso@mit.edu>
    4237 +
    4238 +       * unix_io.c: Add #ifdef NO_IO_CACHE which disables all userspace
    4239 +               caching by the unix_io layer.  Not enabled, only for
    4240 +               debugging.
    4241 +
    4242 +2003-05-05  Theodore Ts'o  <tytso@mit.edu>
    4243 +
    4244 +       * test_io.c: Pay attention to the environment variables
    4245 +               TEST_IO_LOGFILE, TEST_IO_FLAGS, and TEST_IO_BLOCK to
    4246 +               determine whether or not we should log io activity, and to
    4247 +               where.
    4248 +
    4249 +2003-05-03  Theodore Ts'o  <tytso@mit.edu>
    4250 +
    4251 +       * tst_badblocks.c (file_test): Use tmpfile() instead of mktemp().
    4252 +
    4253 +2003-04-29  Theodore Ts'o  <tytso@mit.edu>
    4254 +
    4255 +       * getsize.c (ext2fs_get_device_size): Allow windows code to get
    4256 +               the resize for filesystems that are in regular files.
    4257 +
    4258 +2003-04-21  Theodore Ts'o  <tytso@mit.edu>
    4259 +
    4260 +       * Release of E2fsprogs 1.33
    4261 +
    4262 +2003-04-21  Theodore Ts'o  <tytso@mit.edu>
    4263 +
    4264 +       * Makefile.in: Use DYLD_LIBRAY_PATH so that "make check" works on
    4265 +               Darwin systems when building with shared libraries.
    4266 +
    4267 +2003-04-18  Theodore Ts'o  <tytso@mit.edu>
    4268 +
    4269 +       * unix_io.c: Use __CYGWIN__ instead of CYGWIN.
    4270 +
    4271 +2003-04-17  Theodore Ts'o  <tytso@mit.edu>
    4272 +
    4273 +       * getsize.c: Add Cygwin/Windows version of ext2fs_get_device_size()
    4274 +
    4275 +2003-04-12  Theodore Ts'o  <tytso@mit.edu>
    4276 +
    4277 +       * unix_io.c (raw_read_blk): Add Cygwin support (the Windows block
    4278 +               device only accepts sector aligned read requests.
    4279 +
    4280 +       * ismounted.c (check_mntent_file): Deal with OS's that don't
    4281 +               define MNTOPT_RO.
    4282 +
    4283 +       * imager.c: If the OS doesn't define ssize_t, typedef it to int.
    4284 +
    4285 +2003-04-11  Theodore Ts'o  <tytso@mit.edu>
    4286 +
    4287 +       * ext2_fs.h (EXT2_FEATURE_RO_COMPAT_BTREE_DIR): Comment out unused
    4288 +               feature flag
    4289 +
    4290 +2003-03-30  Theodore Ts'o  <tytso@mit.edu>
    4291 +
    4292 +       * Makefile.in: Use the compile_et --build-tree option.
    4293 +
    4294 +2003-03-14  Theodore Ts'o  <tytso@mit.edu>
    4295 +
    4296 +       * getsize.c: Add support for Apple Darwin's ioctl to get the hard
    4297 +               disk size.
    4298 +
    4299 +       * badblocks.c (ext2fs_u32_list_count), ext2fs.h: Add new function
    4300 +               which returns the number of entries in the list.
    4301 +
    4302 +2003-03-10  Theodore Ts'o  <tytso@mit.edu>
    4303 +
    4304 +       * fileio.c (ext2fs_file_lseek): Fix bug added when adding 64-bit
    4305 +               support; avoid null dereference when ret_pos is NULL.
    4306 +
    4307 +2003-03-06  Theodore Tso  <tytso@mit.edu>
    4308 +
    4309 +       * ext2_types.h.in: Don't redefine types if other e2fsprogs
    4310 +               *_types.h files have been included already.
    4311 +
    4312 +       * kernel-jbd.h: Use C99 variadic cpp macros if not using GCC.
    4313 +               (Older GCC's don't support the C99 variadic macros.)
    4314 +
    4315 +       * flushb.c (ext2fs_sync_device),
    4316 +       ismounted.c (ext2fs_check_mount_point): Avoid GCC extension:
    4317 +       #warning not supported by Solaris suncc
    4318 +
    4319 +       * ext2_ext_attr.h: Avoid GCC extension: 0 length arrays in
    4320 +               structure definition.  Not needed for now in
    4321 +               ext2_ext_attr_entry.
    4322 +
    4323 +2003-01-25  Theodore Ts'o  <tytso@mit.edu>
    4324 +
    4325 +       * dirhash.c: Fix gcc -Wall nits.
    4326 +
    4327 +2003-01-22  Theodore Ts'o  <tytso@mit.edu>
    4328 +
    4329 +       * unix_io.c (unix_write_blk): Fix up GCC -Wall nits.
    4330 +
    4331 +2003-01-21  Theodore Ts'o  <tytso@mit.edu>
    4332 +
    4333 +       * fileio.c (ext2fs_file_read, ext2_file_lseek,
    4334 +               ext2_file_get_size): Add 64-bit support.
    4335 +
    4336 +       * ext2fs.h (EXT2_I_SIZE): Add macro which caluates a 64bit size
    4337 +               from i_size and i_size_high.
    4338 +
    4339 +2003-01-19  Theodore Ts'o  <tytso@mit.edu>
    4340 +
    4341 +       * initialize.c (ext2fs_initialize): If the user specifies a really
    4342 +               large number of inodes, then reduce the number of blocks
    4343 +               per group until we find a workable set of filesystem
    4344 +               parameters.
    4345 +
    4346 +       * ext2_err.et.in (EXT2_ET_TOO_MANY_INODES): Add new error code.
    4347 +
    4348 +2002-11-09  Theodore Ts'o  <tytso@mit.edu>
    4349 +
    4350 +       * Release of E2fsprogs 1.32
    4351 +
    4352 +2002-11-09  Theodore Ts'o  <tytso@mit.edu>
    4353 +
    4354 +       * unix_io.c (find_cached_block, reuse_cache, unix_read_blk,
    4355 +               unix_write_blk): Optimize routines so that we don't end up
    4356 +               searching the cache twice when a block isn't in the
    4357 +               cache.  If reads are larger than READ_DIRECT_SIZE, don't
    4358 +               let them go through the cache.
    4359 +
    4360 +       * unix_io.c (find_cached_block): Fixed bug which caused some clean
    4361 +               blocks to be erroneously marked as dirty, so they would
    4362 +               get written back to the disk before they are evicted from
    4363 +               the cache.  Harmless, but it slows down e2fsck
    4364 +               significantly.
    4365 +
    4366 +2002-11-08  Theodore Ts'o  <tytso@mit.edu>
    4367 +
    4368 +       * Release of E2fsprogs 1.31
    4369 +
    4370 +2002-11-08    <tytso@snap.thunk.org>
    4371 +
    4372 +       * Makefile.in (check): Skip trying to compile test_byteswap
    4373 +               if --disable-byteswaap had been given to configure.
    4374 +
    4375 +2002-11-07    <tytso@snap.thunk.org>
    4376 +
    4377 +       * closefs.c (write_bgdesc, ext2fs_flush): Fix bug in meta_bg
    4378 +               support when the MASTER_SB_ONLY flag is set.  Some of
    4379 +               the descriptor blocks that should have been written out
    4380 +               were getting skipped.
    4381 +
    4382 +2002-10-31  Theodore Ts'o  <tytso@mit.edu>
    4383 +
    4384 +       * Release of E2fsprogs 1.30
    4385 +
    4386 +2002-10-31  Theodore Ts'o  <tytso@mit.edu>
    4387 +
    4388 +       * ext2_fs.h: Add support for a new inode flag, which is to be used
    4389 +               for indicating the top of directory hierarchies for the
    4390 +               Orlov block allocator.
    4391 +       
    4392 +       * ismounted.c (check_mntent, check_mntent_file): Add better
    4393 +               support for loopback-mounted filesystems.  Check /etc/mtab
    4394 +               if /proc/mounts doesn't turn up any mount flags, since
    4395 +               /etc/mtab has the loopback image filename, instead of
    4396 +               /dev/loop0.  Also, check based on st_dev and st_ino, so
    4397 +               that if a relative pathname or a pathnames using symbolic
    4398 +               links are used, we can detect the the filesystem correctly
    4399 +               in those cases.  (Addresses Sourceforge bug #619119)
    4400 +
    4401 +       * flushb.c (ext2fs_sync_device): If the BLKFLSBUF ioctl succeeds,
    4402 +               don't try the FDFLUSH ioctl that was required for floppies
    4403 +               with older kernels.  This avoids needless whining from the
    4404 +               MD device driver.  (Addresses Sourceforge bug #545832).
    4405 +
    4406 +       * openfs.c (ext2fs_open): Fix bug which caused us to pass the
    4407 +               wrong group_block to ext2fs_descriptor_block_loc if we're
    4408 +               using the backup superblock/block group descriptors.
    4409 +               (ext2fs_descriptor_block_loc): If we're using the backup
    4410 +               superblock descriptors, use the backup descriptor block in
    4411 +               the next block group.
    4412 +
    4413 +2002-10-30  Theodore Ts'o  <tytso@mit.edu>
    4414 +
    4415 +       * alloc_tables.c (ext2fs_allocate_group_table): Allocate the inode
    4416 +               table so that it buts up against the bitmap blocks, to
    4417 +               avoid block fragmentation.
    4418 +
    4419 +       * closefs.c (write_bgdesc), initalize.c (ext2fs_initialize): Fix
    4420 +               bug; only allocate group descriptor blocks up to
    4421 +               s_first_meta_bg.
    4422 +
    4423 +2002-10-25  Theodore Ts'o  <tytso@mit.edu>
    4424 +
    4425 +       * ext2_fs.h: Add a new superblock field, s_mkfs_time, so that we
    4426 +               know when a filesystem was created.  (Sometimes this can
    4427 +               be useful...)
    4428 +
    4429 +       * initialize.c (ext2fs_initialize): Set the s_mkfs_time field.
    4430 +
    4431 +2002-10-20  Theodore Ts'o  <tytso@valinux.com>
    4432 +
    4433 +       * ext2_fs.h (EXT3_DEFM_JMODE): Add new default mount options for
    4434 +               the journal data mode.
    4435 +
    4436 +       * closefs.c (ext2fs_flush, write_bgdesc), ext2_fs.h, ext2fs.h,
    4437 +       openfs.c (ext2fs_descriptor_block_loc, ext2fs_open), initialize.c
    4438 +       (ext2fs_initialize), swapfs.c (ext2fs_swap_super): Add support for
    4439 +       the meta_blockgroup filesystem format.
    4440 +
    4441 +2002-10-15    <tytso@snap.thunk.org>
    4442 +
    4443 +       * ext2_fs.h: Add new field in superblock for default mount options.
    4444 +
    4445 +2002-10-13  Theodore Ts'o  <tytso@mit.edu>
    4446 +
    4447 +       * ext2fs.h: Add #include of header files necessary for ext2fs.h to
    4448 +               compile cleanly.
    4449 +
    4450 +2002-10-02  Theodore Y. Ts'o  <tytso@mit.edu>
    4451 +
    4452 +       * rw_bitmaps.c (ext2fs_write_block_bitmap,
    4453 +               ext2fs_read_block_bitmap): Don't set the CHANGED bit just
    4454 +               because the bitmap is getting written to disk.  Make
    4455 +               ext2fs_swap_bitmap be a static function, since it's not
    4456 +               intended to be exported.
    4457 +
    4458 +       * swapfs.c (ext2fs_swap_super): Byte-swap the hash seed
    4459 +
    4460 +2001-09-24  Theodore Tso  <tytso@mit.edu>
    4461 +
    4462 +       * Release of E2fsprogs 1.29
    4463 +
    4464 +2001-08-31  Theodore Tso  <tytso@thunk.org>
    4465 +
    4466 +       * Release of E2fsprogs 1.28
    4467 +
    4468 +2002-08-31  Theodore Ts'o  <tytso@valinux.com>
    4469 +
    4470 +       * dblist.c (ext2fs_dblist_sort): New function which allows the
    4471 +               caller to pass in a special sort comparison function.
    4472 +
    4473 +2002-08-20  Theodore Ts'o  <tytso@mit.edu>
    4474 +
    4475 +       * valid_blk.c (ext2fs_inode_has_valid_blocks): Fix bug which
    4476 +               failed to accurately characterize non-standard slow
    4477 +               symlinks.  (Which don't appear in practice on real-life
    4478 +               systems, fortunately.)
    4479 +
    4480 +2002-08-17  Theodore Ts'o  <tytso@mit.edu>
    4481 +
    4482 +       * Makefile.in: Remove inode_io.o from the standard object files,
    4483 +               and only build it if debugfs is enabled (it requires
    4484 +               fileio.o, which is only built if --disable-debugfs isn't
    4485 +               specified to configure).
    4486 +
    4487 +       * dirhash.c (ext2fs_dirhash): Change the MD4 hash in a backwards
    4488 +               incompatible way so that it is no longer
    4489 +               endian-dependent.  Add the TEA hash.  Allow the seed
    4490 +               parameter to be optional.
    4491 +
    4492 +       * ext2_fs.h: Remove the HALF_MD4_SEED and HALF_MD4_64 hashes.
    4493 +               These features are all now in the HALF_MD4 hash.  Add
    4494 +               definition for EXT2_HASH_TEA.
    4495 +
    4496 +       * ext2fs.h (ext2fs_dirhash): Change function prototype so it takes
    4497 +               a pointer instead of an array.
    4498 +
    4499 +2002-08-16  Theodore Ts'o  <tytso@mit.edu>
    4500 +
    4501 +       * ext2_err.et.in (EXT2_ET_BAD_EA_BLOCK_NUM): New error code
    4502 +
    4503 +       * ext2fs.h (ext2fs_inode_data_blocks): New function which returns
    4504 +               the number of data blocks used by an inode exclusive of
    4505 +               the EA block.
    4506 +
    4507 +       * ext_attr.c (ext2fs_adjust_ea_refcount): New function which
    4508 +               adjusts the reference count in an extended attribute block.
    4509 +
    4510 +       * valid_blk.c (ext2fs_inode_has_valid_blocks): Add code to
    4511 +               correctly deal with extended attribute blocks in symbolic
    4512 +               links.
    4513 +
    4514 +2002-08-13    <tytso@snap.thunk.org>
    4515 +
    4516 +       * Makefile.in: Move dupfs.o and test_io.o from the
    4517 +               needed-by-debugfs object list to the needed-by-resizer
    4518 +               object list.  Fixes compile problem if the system is built
    4519 +               with only --disable-debugfs.
    4520 +
    4521 +2002-07-29  Theodore Ts'o  <tytso@mit.edu>
    4522 +
    4523 +       * link.c (ext2fs_link): When adding a new link to a directory,
    4524 +               clear the HTREE bit.
    4525 +
    4526 +2002-07-23  Theodore Ts'o  <tytso@mit.edu>
    4527 +
    4528 +       * dirhash.c (ext2fs_dirhash): Fix bug which caused MD4
    4529 +               calculations for names > 32 characters to be completely
    4530 +               bogus.  Changed MD4 calculation to match what is currently
    4531 +               being used in the CVS gkernel tree.
    4532 +
    4533 +2002-07-19  Theodore Ts'o  <tytso@mit.edu>
    4534 +
    4535 +       * ext2_fs.h: Add s_hash_seed and s_def_hash_version to the
    4536 +               superblock definition.
    4537 +
    4538 +       * badblocks.c, freefs.c, ext2fs.h: Use the badblocks functions to
    4539 +               create a set of u32_list functions.
    4540 +
    4541 +       * dirhash.c (halfMD4Transform): Shift the hash by one bit,
    4542 +               since that's required by the directory indexing code.
    4543 +
    4544 +2002-07-14  Theodore Ts'o  <tytso@mit.edu>
    4545 +
    4546 +       * ext2fs.h, read_bb_file.c: Change private to priv_data, to avoid
    4547 +               using a C++ reserved word.
    4548 +
    4549 +       * unix_io.c (unix_open): Only attempt the setrlimit workaround if
    4550 +               the kernel version is 2.4.10 -- 2.4.17, since otherwise an
    4551 +               old version of glibc (built against 2.2 headers) will
    4552 +               interact badly with the workaround to actually cause more
    4553 +               problems.  I hate it when the glibc folks think they're
    4554 +               being smarter than the kernel....
    4555 +
    4556 +2002-06-28  Andreas Dilger <adilger@clusterfs.com>
    4557 +
    4558 +       * ext2_fs.h: Add superblock field for reserved group descriptors.
    4559 +
    4560 +2002-06-28  Theodore Ts'o  <tytso@mit.edu>
    4561 +
    4562 +       * bitops.h: Add #define's for ext2fs_{l,b}e{32,16}_to_cpu and
    4563 +               ext2fs_cpu_to_{l,b}e{32,16}
    4564 +
    4565 +2002-06-27  Theodore Ts'o  <tytso@mit.edu>
    4566 +
    4567 +       * ismounted.c (check_mntent): In AIX 4.3, MOUNTED isn't defined.
    4568 +               Add appropriate fallbacks in this case.
    4569 +
    4570 +2002-06-26  Theodore Ts'o  <tytso@mit.edu>
    4571 +
    4572 +       * dirhash.c (ext2fs_dirhash): Change function signature to support
    4573 +               a hash seed, and to return the minor hash (for 64-bit hash
    4574 +               support).   Add support for the half MD4, half MD4 with
    4575 +               seed, and half MD4 with seed and 64 bits.
    4576 +
    4577 +2002-06-15  Theodore Ts'o  <tytso@mit.edu>
    4578 +
    4579 +       * ext2_fs.h (EXT2_DIRSYNC_FL): Add new file.
    4580 +
    4581 +2002-06-09  Andreas Dilger <adilger@clusterfs.com>
    4582 +
    4583 +       * ext2_fs.h: Add macros for maximum block/inode counts:
    4584 +               EXT2_INODES_PER_BLOCK, EXT2_MAX_BLOCKS_PER_GROUP,
    4585 +               and EXT2_MAX_INODES_PER_GROUP.
    4586 +
    4587 +       * openfs.c (ext2fs_open): Check that the number of blocks in a group
    4588 +               is less than 2^16, otherwise we need an INCOMPAT flag (not
    4589 +               in existence yet, if ever) to open such a filesystem.
    4590 +
    4591 +       * initialize.c (ext2fs_initialize): Limit the number of blocks and
    4592 +               inodes in a group to less than 2^16.
    4593 +
    4594 +2002-06-09  Andreas Dilger <adilger@clusterfs.com>
    4595 +
    4596 +       * ext2_fs.h: Further minor cleanups of the header.  Consolidate
    4597 +               some checks for __KERNEL__ into one place.
    4598 +
    4599 +2002-05-22  Andreas Dilger <adilger@clusterfs.com>
    4600 +
    4601 +       * ext2_fs.h: Remove macros accessing u.ext2_sb field and use
    4602 +               the EXT2_SB() macro instead.  Remove kernel function
    4603 +               prototypes also.  This matches the 2.5 kernel, and
    4604 +               is also cleaner for other reasons.  Whitespace cleanup.
    4605 +
    4606 +2002-05-21  Theodore Ts'o  <tytso@mit.edu>
    4607 +
    4608 +       * ext2_ext_attr.h: Update to V2 version of the Bestbits format.
    4609 +
    4610 +2002-05-16  Andreas Dilger <adilger@clusterfs.com>
    4611 +
    4612 +       * ext2_fs.h: Change limits to support filesystems with 8k blocks.
    4613 +
    4614 +       * initialize.c (ext2fs_initialize): Remove assumption that
    4615 +               blocksizes are always <= 4k.
    4616 +
    4617 +2002-05-11  Theodore Ts'o  <tytso@mit.edu>
    4618 +
    4619 +       * bmap.c (ext2fs_bmap): Fix bug which caused ext2fs_bmap to fail
    4620 +               silently if inode pointer is NULL (and ext2fs_bmap is
    4621 +               expected to read the inode itself).
    4622 +
    4623 +2002-04-27  Theodore Ts'o  <tytso@mit.edu>
    4624 +
    4625 +       * ismounted.c (check_mntent_file, is_swap_device): Verify that the
    4626 +               file we are checking is a block device file before looking
    4627 +               at st_rdev, since it's not valid for normal files.
    4628 +               (is_swap_device): Move so that it is outside the
    4629 +               HAVE_MNTENT_H, so that it is always built.
    4630 +
    4631 +2002-03-11  Theodore Tso  <tytso@mit.edu>
    4632 +
    4633 +       * dirblock.c (ext2fs_read_dir_block2, ext2fs_write_dir_block): New
    4634 +               functions which take an extra flags argument.  The flag
    4635 +               EXT2_DIRBLOCK_V2_STRUCT will reverse when the name_len
    4636 +               field is byte swampped on big-endian machines, since in
    4637 +               the V2 structure, name_len is a char field which is
    4638 +               doesn't need to be byte swapped --- except if an
    4639 +               old-style kernel had byte-swapped the name_len field
    4640 +               as part of the V1 structure.
    4641 +
    4642 +       * ext2_err.et.in (EXT2_ET_DIRHASH_UNSUPP): New error code
    4643 +
    4644 +       * dirhash.c (ext2fs_dirhash): New function which calculates the
    4645 +               hash for a filename in an indexed directory.
    4646 +
    4647 +2002-03-08  Theodore Tso  <tytso@mit.edu>
    4648 +
    4649 +       * Release of E2fsprogs 1.27
    4650 +
    4651 +2002-03-07  Theodore Tso  <tytso@mit.edu>
    4652 +
    4653 +       * ext2fs.h (ext2fs_inode_io_intern): Add missing function prototype.
    4654 +
    4655 +       * bmap.c, fileio.c, inode_io.c, tst_badblocks.c,
    4656 +               tst_byteswap.c: Fix gcc -Wall complaints
    4657 +
    4658 +       * Makefile.in (check): Use LD_LIBRARY_PATH to run test programs.
    4659 +               (From Philipp Thomas <pthomas@suse.de>)
    4660 +
    4661 +2002-02-25  Theodore Tso  <tytso@mit.edu>
    4662 +
    4663 +       * ext2_fs.h: Add structure definitions for the directory indexing
    4664 +               extension.
    4665 +
    4666 +2002-02-23  Theodore Tso  <tytso@mit.edu>
    4667 +
    4668 +       * unix_io.c (unix_open): Fix 2.4 resource limit workaround so that
    4669 +               it doesn't break things on mis32, sparc32, and alpha
    4670 +               platforms.
    4671 +
    4672 +2002-02-21  Theodore Tso  <tytso@mit.edu>
    4673 +
    4674 +       * ismounted.c (is_swap_device): Fix file descriptor/memory leak;
    4675 +               we were missing an fclose().
    4676 +
    4677 +2002-02-20  Theodore Tso  <tytso@mit.edu>
    4678 +
    4679 +       * Makefile.in, inode_io.c, ext2fs.h, ext2_err.et.in: Add new io
    4680 +               abstraction interface which exports an ext2 inode.
    4681 +
    4682 +       * ext2fs.h, fileio.c (ext2fs_file_flush): Export ext2fs_file_flush
    4683 +               as a public interface.  Change void * to const void * in
    4684 +               ext2fs_file_write's interface.
    4685 +
    4686 +       * test_io.c (test_close), unix_io.c (unix_close): Remove unneeded
    4687 +               conditional; save a few bytes.
    4688 +       
    4689 +2002-02-12  Theodore Tso  <tytso@mit.edu>
    4690 +
    4691 +       * Makefile.in (tst_badblocks): Add some extra .o files when
    4692 +               linking the debugging program tst_badblocks which are
    4693 +               needed if we aren't compiling with inline functions enable.
    4694 +
    4695 +       * kernel-list.h (__inline__): On non-gcc and non-Watcom compilers,
    4696 +               define away __inline__ since it may not be supported.
    4697 +
    4698 +       * kernel-jbd.h (jbd_debug): For systems that don't do STDC, use a
    4699 +               stripped down jbd_debug that doesn't use variadic
    4700 +               arguments.  This will cause warnings under AIX, but things
    4701 +               should still build.
    4702 +
    4703 +2002-02-03  Theodore Tso  <tytso@thunk.org>
    4704 +
    4705 +       * Release of E2fsprogs 1.26
    4706 +
    4707 +2002-02-03  Theodore Tso  <tytso@mit.edu>
    4708 +
    4709 +       * mkdir.c (ext2fs_mkdir): Change to use ext2fs_inode_alloc_stats2
    4710 +               so that the number of directories in use is adjusted
    4711 +               appropriately.
    4712 +
    4713 +       * alloc_stats.c (ext2fs_inode_alloc_stats2): Add new function
    4714 +               which optionally will modify the number of directories
    4715 +               count.
    4716 +
    4717 +2002-01-03  Theodore Tso  <tytso@mit.edu>
    4718 +
    4719 +       * dir_iterate.c (ext2fs_dir_iterate2, ext2fs_process_dir_block):
    4720 +               Add support for a new flag, DIRENT_FLAG_INCLUDE_REMOVED,
    4721 +               which will return deleted directory entries.
    4722 +               ext2fs_dir_iterate2 takes a new callback function which
    4723 +               is identical with the one used by
    4724 +               ext2fs_dblist_dir_iterate().  If the directory entry is
    4725 +               deleted, the callback function will be called with the
    4726 +               entry paraemter set to DIRENT_DELETED_FILE.
    4727 +
    4728 +       * Makefile.in, alloc_stats.c (ext2fs_inode_alloc_stats,
    4729 +               ext2fs_block_alloc_stats): New functions which update
    4730 +               block/inode allocation statistics in the bitmaps, block
    4731 +               group descriptors, and superblock.
    4732 +
    4733 +       * mkjournal.c (mkjournal_proc), mkdir.c (ext2fs_mkdir),
    4734 +               expanddir.c (expand_dir_proc), bb_inode.c
    4735 +               (clear_bad_block_proc, set_bad_block_proc,
    4736 +               ext2fs_update_bb_inode), alloc.c (ext2fs_alloc_block):
    4737 +               Update to use new block/inode allocation statistics.
    4738 +
    4739 +2001-12-24  Theodore Tso  <tytso@mit.edu>
    4740 +
    4741 +       * ismounted.c (is_swap_device): New function used by
    4742 +               ext2fs_check_if_mounted and ext2fs_check_mount_point which
    4743 +               determines whether or not the specified device is a swap
    4744 +               device by using /proc/swaps.  More bulletproofing for
    4745 +               idiotic/careless system administrators!
    4746 +
    4747 +       * ext2fs.h, openfs.c (ext2fs_open), initialize.c
    4748 +               (ext2fs_initialize), mkdir.c (ext2fs_mkdir): Add a new
    4749 +               field to struct_ext2_filsys, umask.  This field is
    4750 +               initialize to 022, and affects ext2fs_mkdir in the obvious
    4751 +               way.  (In the future umask should also affect new file
    4752 +               creation routines, but the fileio functions don't
    4753 +               currently support this yes.)
    4754 +
    4755 +       * ismounted.c (check_mntent_file): Stat all of the entries in
    4756 +               /etc/mtab and/or /proc/mounts in order to catch dim-witted
    4757 +               system administrators who might have created alias
    4758 +               devices.
    4759 +
    4760 +2001-12-23  Theodore Tso  <tytso@mit.edu>
    4761 +
    4762 +       * Makefile.in, jfs_user.h: Move linux/jbd.h to
    4763 +               ext2fs/kernel-jbd.h, to avoid using the system header
    4764 +               file version of hbd.h when using diet glibc (since it
    4765 +               forcibly adds /usr/include to the beginning of the
    4766 +               include search path.)
    4767 +
    4768 +       * kernel-jbd.h, kernel-list.h, jfs_compat.h: Move files from
    4769 +               include/linux directory.
    4770 +
    4771 +2001-12-16  Theodore Tso  <tytso@mit.edu>
    4772 +
    4773 +       * bitops.h (ext2fs_mark_generic_bitmap, ext2fs_unmark_generic_bitmap),
    4774 +               ext_attr.c (ext2fs_read_ext_attr, ext2fs_write_ext_attr),
    4775 +               fileio.c (ext2fs_file_write): Fix gcc -Wall nits
    4776 +
    4777 +       * Makefile.in, jfs_user.h: linux/jfs.h has been renamed to
    4778 +               linux/jbd.h
    4779 +
    4780 +2001-12-03  Theodore Tso  <tytso@mit.edu>
    4781 +
    4782 +       * unix_io.c (unix_open): Make sure the ulimit workaround works
    4783 +               regardless of the version of glibc which is used to
    4784 +               compild e2fsprogs.
    4785 +
    4786 +2001-11-26  Theodore Tso  <tytso@mit.edu>
    4787 +
    4788 +       * unix_io.c (unix_open): Work around a bug in 2.4.10+ kernels by
    4789 +               trying to unset the filesize limit if at all possible,
    4790 +               if a block device is getting opened.  (The filesize limit
    4791 +               shouldn't be applied against writes to a block device, but
    4792 +               starting in 2.4.10, the kernel is doing this.)
    4793 +       
    4794 +2001-11-05  Theodore Tso  <tytso@mit.edu>
    4795 +
    4796 +       * mkjournal.c (ext2fs_add_journal_inode): When creating a .journal
    4797 +               file on adding a journal to an already-mounted filesystem,
    4798 +               try to clear the ext2 file attributes on an already
    4799 +               existing .journal file so that we don't fail if on a
    4800 +               partially added journal to the filesystem.
    4801 +
    4802 +       * ext2_fs.h: Define a new ext2 file attribute, EXT2_NOTAIL_FL,
    4803 +               which signals that a particular inode should not have the
    4804 +               last bits of data (the "tail") be merged with another
    4805 +               file.  This is necessary to keep LILO happy.
    4806 +
    4807 +2001-09-20  Theodore Tso  <tytso@thunk.org>
    4808 +
    4809 +       * Release of E2fsprogs 1.25
    4810 +
    4811 +2001-09-16  Theodore Tso  <tytso@mit.edu>
    4812 +
    4813 +       * ext2_ext_attr.h: Remove unneeded #include of <linux/config.h>
    4814 +               which was breaking the build on the Hurd.  (Addresses
    4815 +               Debian bug #112414).
    4816 +
    4817 +2001-09-13  Theodore Ts'o  <tytso@mit.edu>
    4818 +
    4819 +       * ismounted.c (check_mntent_file): We now validate the entry in
    4820 +               /etc/mtab to make sure the filesystem is really mounted,
    4821 +               since some broken distributions (read: Slackware) have
    4822 +               buggy boot scripts that don't initialize /etc/mtab before
    4823 +               checking non-root filesystems.  (Slackware also doesn't
    4824 +               check the root filesystem separately, and reboot if the
    4825 +               root filesystem had changes applied to it, which is
    4826 +               dangerous and broken.)   
    4827 +
    4828 +2001-09-02  Theodore Tso  <tytso@thunk.org>
    4829 +
    4830 +       * Release of E2fsprogs 1.24a
    4831 +
    4832 +2001-08-30  Theodore Tso  <tytso@thunk.org>
    4833 +
    4834 +       * Release of E2fsprogs 1.24
    4835 +
    4836 +2001-08-30  Theodore Tso  <tytso@valinux.com>
    4837 +
    4838 +       * getsize.c (ext2fs_get_device_size): Back out BLKGETSIZE64
    4839 +               changes, since the ioctl number has been reused by another
    4840 +               unofficial patch.
    4841 +
    4842 +2001-08-15  Theodore Tso  <tytso@valinux.com>
    4843 +
    4844 +       * Release of E2fsprogs 1.23
    4845 +
    4846 +2001-08-05  Theodore Tso  <tytso@valinux.com>
    4847 +
    4848 +       * alloc.c (ext2fs_new_inode, ext2fs_new_block): Use the fast
    4849 +               version of the bitmap test routines to speed up these
    4850 +               routines.  (At some point I may want to make these
    4851 +               routines use the find_first_bit functions, but that will
    4852 +               add a lot of complexity since it means that these
    4853 +               functions will have to break the bitmap abstraction
    4854 +               boundary.  It's not clear it's worth it.)
    4855 +
    4856 +       * mkjournal.c (mkjournal_proc): Remember the last block allocated
    4857 +               to speed up ext2fs_new_block().
    4858 +
    4859 +2001-07-29  Theodore Tso  <tytso@valinux.com>
    4860 +
    4861 +       * finddev.c (scan_dir): Fix memory leak; we weren't calling
    4862 +               closedir() when exiting the function in all cases.
    4863 +
    4864 +2001-07-27  Theodore Tso  <tytso@valinux.com>
    4865 +
    4866 +       * mkjournal.c (ext2fs_create_journal_superblock): Set the first
    4867 +               block usable in the journal for external journals to be 2
    4868 +               or 3, depending on the blocksize, so that the existing
    4869 +               kernel code does the right thing.
    4870 +
    4871 +       * getsize.c (ext2fs_get_device_size): Add support for the
    4872 +               BLKGETSIZE64 ioctl.  (Ioctl defined by unofficial patches
    4873 +               from Ben LaHaise, but it's likely this interface won't
    4874 +               change.)
    4875 +
    4876 +       * mkjournal.c (ext2fs_add_journal_device): Use the correct block
    4877 +               when writing the journal superblock, too.  (Oops! Needed
    4878 +               to make 1k filesystems with external journal to work.)
    4879 +
    4880 +2001-07-26  Theodore Tso  <tytso@valinux.com>
    4881 +
    4882 +       * mkjournal.c (ext2fs_add_journal_device): Use the correct block
    4883 +               to find the journal superblock if the blocksize is 1024.
    4884 +
    4885 +2001-07-21  Theodore Tso  <tytso@valinux.com>
    4886 +
    4887 +       * ext2_err.et.in (EXT2_ET_LOAD_EXT_JOURNAL): Add new error code
    4888 +
    4889 +2001-07-20  Theodore Tso  <tytso@valinux.com>
    4890 +
    4891 +       * ext_attr.c (ext2fs_write_ext_attr): When writing the extended
    4892 +               attribute block, set the filesystem changed bit.
    4893 +
    4894 +       * bitops.h (ext2fs_find_first_bit_set, ext2fs_find_next_bit_set):
    4895 +               Comment out these functions since we're not using them.
    4896 +
    4897 +2001-07-10  Theodore Tso  <tytso@valinux.com>
    4898 +
    4899 +       * closefs.c (write_primary_superblock): After writing changes to
    4900 +               the primary superblock, update the original superblock
    4901 +               copy so we don't have to re-write those changes in the
    4902 +               future.
    4903 +               (ext2fs_flush): Clear the superblock dirty flag after
    4904 +               we've flushed out changes to disk.
    4905 +
    4906 +2001-07-07  Theodore Tso  <tytso@valinux.com>
    4907 +
    4908 +       * bitops.h (ext2fs_find_first_bit_set): Use %esi instead of %ebx
    4909 +               to avoid register conflicts when compiling in PIC mode.
    4910 +
    4911 +2001-07-04  Theodore Tso  <tytso@valinux.com>
    4912 +
    4913 +       * bitops.h (ext2fs_find_first_bit_set, ext2fs_find_next_bit_set):
    4914 +               Add new functions (C and in i386 assembler) which quickly
    4915 +               find bits set in a bitmask.
    4916 +
    4917 +2001-06-23  Theodore Tso  <tytso@valinux.com>
    4918 +
    4919 +       * Makefile.in, ext_attr.c, ext2_attr.c, ext2fs.h: Add new files
    4920 +               ext2_ext_attr.h and ext_attr.c for extended attributes
    4921 +               support.
    4922 +
    4923 +       * Release of E2fsprogs 1.22
    4924 +
    4925 +2001-06-22  Theodore Tso  <tytso@valinux.com>
    4926 +
    4927 +       * mkjournal.c (ext2fs_add_journal_inode): Move close of file
    4928 +               descriptor so that adding a journal to a mounted
    4929 +               filesystem doesn't die.  (Fixes a bug accidentally
    4930 +               introduced in e2fsprogs 1.21.)
    4931 +
    4932 +       * mkjournal.c (ext2fs_add_journal_inode): Only use fchflags if
    4933 +               HAVE_CHFLAGS and UF_NODUMP are defined, since the Hurd has
    4934 +               fchflags without defining UF_NODUMP.  (Addresses Debian
    4935 +               bug #101361)
    4936 +
    4937 +       * flushb.c: Use platform independent method of defining the
    4938 +               BLKFLSBUF and FDFLUSH ioctl's.  Also include sys/mount.h
    4939 +               since on newer glibc's BLKFLSBUF is defined there.
    4940 +
    4941 +       * bitops.h: The C language versions of ext2fs_swab16/32 need to be
    4942 +               included if EXT2FS_ENABLE_SWAPFS is defined, since we need
    4943 +               to support byte swapping even if we don't support the
    4944 +               conversion functions.  (Fixes Debian bug #101686).
    4945 +
    4946 +       * dirblock.c (ext2fs_read_dir_block): Remove use of dir_entry_2
    4947 +               since the byte-swapping code all assumes the
    4948 +               ext2_dir_entry structure.  (It's a question of whether or
    4949 +               not name_len should be byte-swapped or not, and whether
    4950 +               it's a 16 bit or 8 bit field.)
    4951 +
    4952 +2001-06-15  Theodore Tso  <tytso@valinux.com>
    4953 +
    4954 +       * Release of E2fsprogs 1.21
    4955 +
    4956 +2001-06-15  Theodore Tso  <tytso@valinux.com>
    4957 +
    4958 +       * Makefile.in: Fix bug in installation of ext2_types.h.  It is a
    4959 +               file which is generated and is therefore found in the
    4960 +               build directory, not source directory.
    4961 +
    4962 +       * ismounted.c (check_mntent_file): Use a test file in / to check
    4963 +               to see if the root filesystem is mounted read-only.  This
    4964 +               protects against the case where /etc might not be on /, as
    4965 +               well as the case where /etc/mtab doesn't exist.  (Both are
    4966 +               should-never happen scenarios, but you never know...)
    4967 +
    4968 +2001-06-14  Theodore Tso  <tytso@valinux.com>
    4969 +
    4970 +       * ismounted.c (ext2fs_check_if_mounted): Fix grammer in comment.
    4971 +               Remove unneeded #pragma argsused, since the arguments are
    4972 +               always used.
    4973 +
    4974 +2001-06-13  Theodore Tso  <tytso@valinux.com>
    4975 +
    4976 +       * ext2_types.h.in: If linux/types.h has been defined, then don't
    4977 +               try to redefine the typedefs.
    4978 +
    4979 +       * Makefile.in (HFILES): Add ext2_types.h to the list of files
    4980 +               which should be installed.
    4981 +
    4982 +       * ismounted.c (check_mntent_file): Work around GNU hurd brain
    4983 +               damage.  Addresses Debian bug #100304.
    4984 +
    4985 +       * Makefile.in: Limit some .o files from being included into the
    4986 +               library if --disable-debugfs, --disable-swapfs,
    4987 +               --disable-imager, or --disable-resizer are used.
    4988 +
    4989 +2001-06-12  Theodore Tso  <tytso@valinux.com>
    4990 +
    4991 +       * inode.c, tst_iscan.c: Stop using the compatibility badblocks
    4992 +               function, and use the ext2fs_badblocks_* functions
    4993 +               instead.
    4994 +
    4995 +2001-06-11  Theodore Tso  <tytso@valinux.com>
    4996 +
    4997 +       * Makefile.in, gen_bitmap.c, bitops.h: Move inline functions
    4998 +               ext2fs_mark_generic_bitmap and
    4999 +               ext2fs_unmark_generic_bitmap to gen_bitmap.c as normal
    5000 +               functions.  (This saves space and doesn't significantly
    5001 +               change the speed of e2fsck on a P-III.)
    5002 +
    5003 +       * ext2fs.h, bitops.h, block.c, bmap.c, closefs.c, dirblock.c,
    5004 +               inode.c, native.c, openfs.c, rw_bitmaps.c, swapfs.c: Only
    5005 +               include the byte-swapping logic if ENABLE_SWAPFS is turned
    5006 +               on or if we're on a big-endian machine.
    5007 +       
    5008 +       * initialize.c (ext2fs_initialize):Use WORDS_BIGENDIAN directly to
    5009 +               set EXT2_FLAG_SWAP_BYTES, instead of using
    5010 +               ext2fs_native_flag.
    5011 +       
    5012 +       * native.c (ext2fs_native_flag): Use WORDS_BIGENDIAN provided by
    5013 +               autoconf to determine whether or not return
    5014 +               EXT2_FLAG_SWAP_BYTES.
    5015 +
    5016 +2001-06-10  Theodore Tso  <tytso@valinux.com>
    5017 +
    5018 +       * Makefile.in: Remove the dependence on the libe2p library.
    5019 +
    5020 +       * mkjournal.c (ext2fs_add_journal_inode): Replace use of fsetflags
    5021 +               with direct usage of the ioctl/fchflags so that we don't
    5022 +               have to depend on the libe2p library.
    5023 +
    5024 +2001-06-08  Theodore Tso  <tytso@valinux.com>
    5025 +
    5026 +       * ext2_types.h.in: Use unsigned ints in favor of unsigned longs
    5027 +               when trying to find a 32-bit wide type.
    5028 +
    5029 +       * icount.c (insert_icount_el): Fix the code used to estimate the
    5030 +               size of the new icount array to be more intelligent, to
    5031 +               avoid reallocating the array too many times.  Thanks to
    5032 +               Enrique Perez-Terron for pointing this out.
    5033 +
    5034 +2001-06-02  Theodore Tso  <tytso@valinux.com>
    5035 +
    5036 +       * valid_blk.c (ext2fs_inode_has_valid_blocks): Only check i_blocks
    5037 +               for a symlink to determine whether it is a fast symlink.
    5038 +
    5039 +2001-06-01  Theodore Tso  <tytso@valinux.com>
    5040 +
    5041 +       * Makefile.in, dosio.c, ext2_fs.h, ext2_types.h.in, ext2fs.h:
    5042 +               Move include/asm/types.h.in to lib/ext2fs/ext2_types.h.in.
    5043 +
    5044 +2001-05-25  Theodore Tso  <tytso@valinux.com>
    5045 +
    5046 +       * Release of E2fsprogs 1.20
    5047 +
    5048 +2001-05-25  Theodore Tso  <tytso@valinux.com>
    5049 +
    5050 +       * ismounted.c: More cleanups for ismounted.c, some from Andreas,
    5051 +               some to clean up Andreas's patches.  Use strncpy instead
    5052 +               of strcpy to save the root's mountpoint.  Clean up #ifdef
    5053 +               structure.  Remove uneeded variable in testing/debug driver.
    5054 +
    5055 +2001-05-24  Andreas Dilger  <adilger@turbolinux.com>
    5056 +
    5057 +       * ismounted.c: Add check for root device which doesn't depend on
    5058 +               /etc/fstab or /proc/mounts to be correct.  Don't call
    5059 +               endmntent() before we are done with mnt struct.
    5060 +
    5061 +2001-05-23  Theodore Tso  <tytso@valinux.com>
    5062 +
    5063 +       * ext2_err.et.in (EXT2_ET_JOURNAL_UNSUPP_VERSION): Added new error
    5064 +               code.
    5065 +
    5066 +2001-05-21  Theodore Tso  <tytso@valinux.com>
    5067 +
    5068 +       * ext2_fs.h: Change assignment of EXT2_FEATURE_COMPAT_DIR_INDEX to
    5069 +               make room for pre-existing usage of
    5070 +               EXT2_FEATURE_COMPAT_EXT_ATTR.  Add flag EXT2_INDEX_FL with
    5071 +               the same codepoint as EXT2_BTREE_FL.
    5072 +
    5073 +2001-05-20  Theodore Tso  <tytso@valinux.com>
    5074 +
    5075 +       * ext2fs.h: #include <> instead of "" for ext2fs and et header
    5076 +               files, since they will be installed in /usr/include
    5077 +
    5078 +2001-05-14  Theodore Tso  <tytso@valinux.com>
    5079 +
    5080 +       * alloc.c, alloc_tables.c, badblocks.c, bb_compat.c, bb_inode.c,
    5081 +               bitmaps.c, bitops.c, block.c, bmap.c, bmove.c, brel_ma.c,
    5082 +               check_desc.c, closefs.c, cmp_bitmaps.c, dblist.c,
    5083 +               dblist_dir.c, dir_iterate.c, dirblock.c, dupfs.c,
    5084 +               expanddir.c, ext2_fs.h, fileio.c, finddev.c, flushb.c,
    5085 +               freefs.c, get_pathname.c, getsize.c, icount.c, imager.c,
    5086 +               initialize.c, inline.c, inode.c, irel_ma.c, ismounted.c,
    5087 +               link.c, lookup.c, mkdir.c, mkjournal.c, namei.c, native.c,
    5088 +               newdir.c, nt_io.c, openfs.c, read_bb.c, read_bb_file.c,
    5089 +               rs_bitmap.c, rw_bitmaps.c, swapfs.c, test_io.c,
    5090 +               tst_badblocks.c, tst_byteswap.c, tst_getsize.c,
    5091 +               tst_iscan.c, unix_io.c, unlink.c, valid_blk.c, version.c,
    5092 +               write_bb_file.c, ext2_fs.h: Moved file from include/linux.
    5093 +               Adjust all files in this directroy to include this file.
    5094 +
    5095 +       * mkjournal.c (ext2fs_create_journal_superblock): Remove redundant
    5096 +               code.
    5097 +
    5098 +2001-05-05  Theodore Tso  <tytso@valinux.com>
    5099 +
    5100 +       * fileio.c (ext2fs_file_read): Factored out common code and
    5101 +               cleaned up function.  Fixed a bug where if there was an
    5102 +               error reading from the disk, the number of bytes read
    5103 +               wasn't reliably set.  (Fixes Debian bug #79163)
    5104 +               (ext2fs_file_write): Factored out common code and made
    5105 +               function more efficient; if writing a full block, don't
    5106 +               bother to do a read-modify-write cycle.
    5107 +
    5108 +2001-05-04  Theodore Tso  <tytso@valinux.com>
    5109 +
    5110 +       * dirblock.c (ext2fs_read_dir_block): Check for an directory
    5111 +               record length which isn't a multiple four, and treat that
    5112 +               as an invalid.  Scan the directory and return an error
    5113 +               (EXT2_ET_DIR_CORRUPTED) if the directory records are
    5114 +               corrupted.
    5115 +               (ext2fs_write_dir_block): If while byte-swapping the
    5116 +               directory block, if there's an error, abort and return
    5117 +               EXT2_ET_DIR_CORRUPTED.
    5118 +
    5119 +2001-05-02  Theodore Tso  <tytso@valinux.com>
    5120 +
    5121 +       * ext2fs.h (EXT2_FLAG_IMAGE_FILE): Add new flag, and add
    5122 +               image_header field in the ext2_filsys structure
    5123 +
    5124 +       * block.c (block_iterate_ind, block_iterate_dind, block_iterate_tind):
    5125 +       * inode.c (ext2fs_read_inode):
    5126 +       * rw_bitmaps.c (read_bitmaps):
    5127 +       * openfs.c (ext2fs_open): Add support for EXT2_FLAG_IMAGE_FILE
    5128 +
    5129 +       * imager.c (ext2fs_image_bitmap_read): Fix bug in imager to make
    5130 +               sure the full bitmap is saved.
    5131 +
    5132 +2001-05-01  Theodore Tso  <tytso@valinux.com>
    5133 +
    5134 +       * e2image.h (struct ext2_image_hdr): Add space for the device name
    5135 +               in the image header.
    5136 +
    5137 +       * dir_iterate.c (ext2fs_process_dir_block): Add a double-check to
    5138 +               make sure the rec_len is a multiple of 4, to prevent
    5139 +               bus-errors on architectures which care about mis-aligned
    5140 +               pointer references.
    5141 +
    5142 +2001-04-25  Theodore Tso  <tytso@valinux.com>
    5143 +
    5144 +       * getsize.c (ext2fs_get_device_size): Use an unsigned long to
    5145 +               query the device sizes using the BLKGETSIZE ioctl.
    5146 +
    5147 +2001-04-16  Theodore Tso  <tytso@valinux.com>
    5148 +
    5149 +       * ismounted.c (check_mntent): Check /proc/mounts on Linux systems
    5150 +               before checking /etc/mtab.  The EXT2_MF_READONLY flag is
    5151 +               now set from the /etc/mtab options field for all
    5152 +               filesystems, not just the root filesystem.  Add debugging
    5153 +               code to make it easier to test ext2fs_check_if_mounted().
    5154 +
    5155 +       * mkjournal.c (ext2fs_create_journal_superblock): Add safety
    5156 +               check; return an error if there's an attempt to create a
    5157 +               journal less than 1024 filesystem blocks.
    5158 +
    5159 +       * ext2_err.et.in, mkjournal.c: Change EXT2_JOURNAL_NOT_BLOCK and
    5160 +               EXT2_NO_JOURNAL_SB to be EXT2_ET_*.
    5161 +
    5162 +2001-02-20  Theodore Tso  <tytso@valinux.com>
    5163 +
    5164 +       * bitops.h (ext2fs_swab16, ext2fs_swab32): Add i386 assembly
    5165 +               inline functions.
    5166 +
    5167 +       * tst_byteswap.c: New function to test the byteswap functions.
    5168 +               Add to regression test suite.
    5169 +
    5170 +2001-02-08  Theodore Tso  <tytso@valinux.com>
    5171 +
    5172 +       * e2image.h (struct ext2_image_hdr): Fix type for fs_hostname
    5173 +
    5174 +2001-02-07  Theodore Tso  <tytso@valinux.com>
    5175 +
    5176 +       * mkjournal.c (ext2fs_create_journal_superblock): Fix the setting
    5177 +               of s_first for external devices to always be 1, since
    5178 +               jsb->s_first is always relative to the start of the
    5179 +               journal superblock.  Use htonl(1) when setting s_nr_users.
    5180 +
    5181 +2001-01-17  Theodore Ts'o  <tytso@valinux.com>
    5182 +
    5183 +       * mkjournal.c (ext2fs_add_journal_device): Fix bug where the
    5184 +               device number of the filesystem (instead of the journal)
    5185 +               was being dropped into s_journal_dev.
    5186 +
    5187 +2001-01-15  Theodore Ts'o  <tytso@valinux.com>
    5188 +
    5189 +       * initialize.c (ext2fs_initialize): Add support for initializing
    5190 +               the ext2 superblock for external journal devices.  This
    5191 +               basically means we don't bother to allocate any block
    5192 +               group descriptors.
    5193 +
    5194 +       * openfs.c (ext2fs_open): Only open external journal devices if
    5195 +               the new flag EXT2_FLAG_JOURNAL_DEV_OK is passed to
    5196 +               ext2fs_open.  When opening such devices, don't try to read
    5197 +               the block group descriptors, since they're not there.
    5198 +
    5199 +       * ext2_err.et.in (EXT2_NO_JOURNAL_SB): Add new error code
    5200 +       
    5201 +       * mkjournal.c: Export a new function,
    5202 +               ext2fs_create_journal_superblock(), which allocates and
    5203 +               returns a buffer containing a journal superblock.  This is
    5204 +               needed by mke2fs to create an external journal.  Rewrote
    5205 +               ext2fs_add_journal_device() so that it no longer creates
    5206 +               the external journal, but rather adds a filesystem to an
    5207 +               existing external journal.  It handles all of the UUID
    5208 +               manipulation.
    5209 +
    5210 +       * ext2fs.h: List the EXT3_FEATURE_JOURNAL_DEV as a flag supported
    5211 +               by the library.  Define the EXT2_FLAG_JOURNAL_DEV_OK.
    5212 +               Changed function prototype for ext2fs_add_journal_device().
    5213 +               
    5214 +2001-01-14  Theodore Ts'o  <tytso@valinux.com>
    5215 +
    5216 +       * closefs.c (ext2fs_flush): Don't write out anything beyond the
    5217 +                primary superblock if EXT2_INCOMPAT_JOURNAL_DEV is
    5218 +                listed.
    5219 +
    5220 +2001-01-12  Theodore Ts'o  <tytso@valinux.com>
    5221 +
    5222 +       * imager.c: Fix gcc -Wall complaints and a series of bugs where
    5223 +               retval wasn't set correctly.  (Thanks to Andreas Dilger
    5224 +               for pointing this out.)
    5225 +
    5226 +2001-01-11    <tytso@snap.thunk.org>
    5227 +
    5228 +       * flushb.c (ext2fs_sync_device): New function which centralizes
    5229 +               all of the places which might try to use the BLKFLSBUF
    5230 +               or FDFLUSH ioctls (and usually failing to define them
    5231 +               since the system header files don't usually do this for
    5232 +               us, and we're trying to avoid usage of kernel include
    5233 +               files now).
    5234 +
    5235 +2001-01-10    <tytso@snap.thunk.org>
    5236 +
    5237 +       * alloc.c, bb_inode.c, bitmaps.c, bitops.h, block.c, bmap.c,
    5238 +               bmove.c, brel.h, cmp_bitmaps.c, dblist.c, dblist_dir.c,
    5239 +               dir_iterate.c, expanddir.c, ext2fs.h, ext2fsP.h, fileio.c,
    5240 +               finddev.c, get_pathname.c, icount.c, inode.c, irel.h,
    5241 +               irel_ma.c, ismounted.c, link.c, lookup.c, mkdir.c,
    5242 +               mkjournal.c, namei.c, newdir.c, read_bb_file.c, test_io.c,
    5243 +               tst_iscan.c, unix_io.c, unlink.c: Change use of ino_t to
    5244 +               ext2_ino_t, to protect applications that attempt to
    5245 +               compile -D_FILE_OFFSET_BITS=64, since this inexplicably
    5246 +               changes ino_t(!?).  So we use ext2_ino_t  to avoid an
    5247 +               unexpected ABI change.
    5248 +
    5249 +2001-01-05    <tytso@snap.thunk.org>
    5250 +
    5251 +       * dirblock.c (ext2fs_read_dir_block): Fix a potential case where
    5252 +               we may overrun allocated memory in case of a corrupted
    5253 +               filesystem (or an e2fsck test case :-) when byte-swapping
    5254 +               the directory block.
    5255 +
    5256 +       * ext2fs.h: Indent the #warning to fix gcc -Wall complaint.
    5257 +
    5258 +       * mkjournal.c (ext2fs_add_journal_device): Fix various gcc -Wall
    5259 +               complaints including a missing return 0 at the end of
    5260 +               ext2fs_add_journal_device.
    5261 +
    5262 +2001-01-03    <tytso@snap.thunk.org>
    5263 +
    5264 +       * Makefile.in: Link in libe2p when creating libext2fs as a shared
    5265 +               library, since mkjournal.c now references fsetflags().
    5266 +
    5267 +       * mkjournal.c (ext2fs_add_journal_inode): Folded in Andreas
    5268 +               Dilger's changes (with fixups) to allow on-line creation
    5269 +               of a journal file.
    5270 +
    5271 +       * ext2fs.h, closefs.c (ext2fs_flush): Add new flag,
    5272 +               EXT2_FLAG_SUPER_ONLY, which the close routines to only
    5273 +               update the superblock, and not the group descriptors.
    5274 +
    5275 +2000-12-30  Andreas Dilger  <adilger@turbolinux.com>
    5276 +
    5277 +       * ismounted.c: add ext2fs_check_mount_point() function, which will
    5278 +               optionally return the mount point of a device if mounted
    5279 +
    5280 +2000-12-14  Andreas Dilger  <adilger@turbolinux.com>
    5281 +
    5282 +       * mkjournal.c: rename ext2fs_add_journal_fs() to the more descriptive
    5283 +               ext2fs_add_journal_inode()
    5284 +
    5285 +2001-01-01    <tytso@snap.thunk.org>
    5286 +
    5287 +       * ext2fs.h: Remove definition of ext2fs_sb.  Note: this may break
    5288 +               source (but not binary) compatibility of some users of the
    5289 +               ext2 library.  They should just simply do a global search
    5290 +               and replace of struct ext2fs_sb with struct
    5291 +               ext2_super_block, and use their own private copy of
    5292 +               ext2_fs.h if they aren't already.
    5293 +
    5294 +       * closefs.c, initialize.c, link.c, newdir.c, openfs.c, swapfs.c:
    5295 +               Replace use of ext2fs_sb with ext2_super_block.
    5296 +
    5297 +2000-12-31    <tytso@snap.thunk.org>
    5298 +
    5299 +       * ext2fs.h: Cleaned up header file by removing definitions of
    5300 +               feature flags that might not have been defined in older
    5301 +               ext2 header files.  Now that we're using our own
    5302 +               include/linux/ext2fs.h header file, this can never happen.
    5303 +
    5304 +       * jfs_dat.h: Removed old header file which is no longer needed.
    5305 +
    5306 +2000-12-13  Theodore Ts'o  <tytso@valinux.com>
    5307 +
    5308 +       * closefs.c (ext2fs_update_dynamic_rev): New function suggested
    5309 +               by Andreas Dilger to update the filesystem revision to
    5310 +               EXT2_DYNAMIC_REV.
    5311 +
    5312 +       * swapfs.c (ext2fs_swap_super): Add byte swapping for the journal
    5313 +               fields.
    5314 +
    5315 +2000-12-09    <tytso@snap.thunk.org>
    5316 +
    5317 +       * ext2fs.h, mkjournal.c (ext2fs_add_journal_inode,
    5318 +               ext2fs_add_journal_device): Add a new argument to the APIs
    5319 +               of these function, which is a flags word.  This is used to
    5320 +               allow the creation of a V1 superblock for those folks who
    5321 +               are using ext3 0.3b in production.  Note, the user-land
    5322 +               interface for getting at this flag won't be documented, as
    5323 +               the V1 superblock is deprecated.
    5324 +
    5325 +       * mkjournal.c (init_journal_superblock): Sync Stephen's changes
    5326 +               which creates a V2 superblock instead of a V1 superblock.
    5327 +
    5328 +2000-11-21    <tytso@snap.thunk.org>
    5329 +
    5330 +       * test_io.c (test_write_blk, test_write_byte): Fix typos pointed
    5331 +               out by Andreas Dilger.
    5332 +
    5333 +2000-11-05    <tytso@snap.thunk.org>
    5334 +
    5335 +       * imager.c (ext2fs_image_{inode,super,bitmap}_{read,write},
    5336 +               ext2_fs.h, Makefile.in: New file that has routines that
    5337 +               save ext2fs metadata to a file.
    5338 +
    5339 +       * ext2_err.et.in (EXT2_ET_MAGIC_E2IMAGE): New error code assigned.
    5340 +
    5341 +       * e2image.h: New file which defines the file format for the ext2
    5342 +               image file.  (Saved copy of ext2 metadata to a file as a
    5343 +               saving throw against worst-case damage.)
    5344 +
    5345 +2000-11-01    <tytso@snap.thunk.org>
    5346 +
    5347 +       * inode.c (ext2fs_flush_icache): Add new function
    5348 +               ext2fs_flush_icache() which flushes the internal inode
    5349 +               cache.  Applications which modify the inode table blocks
    5350 +               directly must call this function.
    5351 +
    5352 +2000-10-26    <tytso@snap.thunk.org>
    5353 +
    5354 +       * mkjournal.c: Add #include of netinet/in.h, since Solaris
    5355 +               requires it for ntohl().
    5356 +
    5357 +       * ext2_io.h (io_channel_write_byte): Add new interface to allow
    5358 +               callers to write specific byte ranges.  This is an
    5359 +               optional interface, which not all IO channels may
    5360 +               implement.
    5361 +
    5362 +       * unix_io.c (unix_write_byte):
    5363 +       * test_io.c (test_write_byte): Add implementation of the
    5364 +               write_byte function.
    5365 +
    5366 +       * closefs.c (write_primary_superblock, ext2fs_flush): Add a new
    5367 +               function which writes the primary superblock.  If the IO
    5368 +               channel supports writing raw bytes directly, only fields
    5369 +               which were modified are written to the disk.  This makes
    5370 +               it safe(r) to use utilities like tune2fs on a mounted
    5371 +               filesystem.
    5372 +
    5373 +       * freefs.c (ext2fs_free): Free the original superblock if it is
    5374 +               available.
    5375 +
    5376 +       * openfs.c (ext2fs_open): Store a copy of the original superblock
    5377 +               when opening it.
    5378 +
    5379 +       * ext2fs.h: Add a field to store the original superblock in the
    5380 +               ext2 context structure.
    5381 +
    5382 +2000-10-24    <tytso@snap.thunk.org>
    5383 +
    5384 +       * llseek.c: Add #ifdef's for IA64 (it's a 64-bit platform, so we
    5385 +               don't need to use llseek).
    5386 +
    5387 +2000-10-24    <tytso@valinux.com>
    5388 +
    5389 +       * Makefile.in, ext2fs.h, jfs_dat.h, mkjournal.c: Add functions for
    5390 +               creating an ext3 journal on a filesystem.
    5391 +
    5392 +2000-08-21    <tytso@valinux.com>
    5393 +
    5394 +       * ext2_err.et.in (EXT2_JOURNAL_NOT_BLOCK): Add new error code.
    5395 +
    5396 +2000-08-22    <tytso@valinux.com>
    5397 +
    5398 +       * unix_io.c: Make massive changes to support a multiple block
    5399 +               writethrough cacheing.
    5400 +
    5401 +       * ext2_io.h: Added flags field to the io_channel structure.
    5402 +
    5403 +2000-08-19    <tytso@valinux.com>
    5404 +
    5405 +       * finddev.c, ext2fs.h, Makefile.in: Add new file, finddev.c, which
    5406 +               provides the function ext2fs_find_block_device().  This
    5407 +               function returns the pathname to a block device, given its
    5408 +               device number.
    5409 +
    5410 +2000-07-13    <tytso@valinux.com>
    5411 +
    5412 +       * Release of E2fsprogs 1.19
    5413 +
    5414 +2000-07-07  Theodore Ts'o  <tytso@valinux.com>
    5415 +
    5416 +       * ext2fs.h (EXT2_LIB_FEATURE_INCOMPAT_SUPP): Add
    5417 +               EXT3_FEATURE_INCOMPAT_RECOVER (aka needs_recovery) to the
    5418 +               list of filesystem flags supported by the library.
    5419 +
    5420 +2000-07-04  Theodore Ts'o  <tytso@valinux.com>
    5421 +
    5422 +       * ext2fs.h: Update to include latest journalling additions to the
    5423 +               superblock.
    5424 +
    5425 +       * dll/jump.funcs: Add new jumptable entries for
    5426 +               ext2fs_write_bb_FILE, ext2fs_read_bb_FILE2, and
    5427 +               ext2fs_badblocks_equal.
    5428 +
    5429 +       * tst_badblocks.c: Update test program to test
    5430 +               ext2fs_read_bb_FILE2 and ext2fs_write_FILE.
    5431 +
    5432 +       * write_bb_file.c (ext2fs_write_bb_FILE): New function which
    5433 +               writes out bad blocks list to a file.
    5434 +
    5435 +       * read_bb_file.c (ext2fs_read_bb_FILE2): Add new function which
    5436 +               changes the callback function to take two additional
    5437 +               arguments; a private blind pointer supplied by the caller,
    5438 +               and pointer to a char * containing a pointer to the
    5439 +               invalid string.
    5440 +
    5441 +       * badblocks.c (ext2fs_badblocks_equal): Add new function which
    5442 +               returns true if two badblocks list are equal.
    5443 +
    5444 +       * Makefile.in: Remove explicit link of -lc in the shared library.
    5445 +               (It shouldn't be necessary, and is harmful in some cases).
    5446 +
    5447 +2000-06-10  Theodore Ts'o  <tytso@valinux.com>
    5448 +
    5449 +       * getsize.c (main): Add debugging code under #ifdef DEBUG
    5450 +
    5451 +2000-05-27  Theodore Ts'o  <tytso@valinux.com>
    5452 +
    5453 +       * mkdir.c (ext2fs_mkdir): Read the parent directory's inode
    5454 +               earlier, so that if there's an error reading it, we can
    5455 +               more cleanly back out of the operation.
    5456 +
    5457 +2000-05-25    <tytso@snap.thunk.org>
    5458 +
    5459 +       * getsize.c (ext2fs_get_device_size): Use open64() instead of
    5460 +               open() if it exists.  Under linux, manually define the
    5461 +               ioctl for BLKGETSIZE if it isn't already defined and it's
    5462 +               safe to do so.
    5463 +
    5464 +       * unix_io.c (unix_open): Use open64() instead of open() if it
    5465 +               exists.
    5466 +
    5467 +       * llseek.c: Simplify header includes of unistd.h.  If lseek64 is
    5468 +               available (and prototypes are defined) use it in
    5469 +               preference to llseek.
    5470 +
    5471 +       * Makefile: Add hack dependency rule so that parallel makes work
    5472 +               correctly.
    5473 +
    5474 +2000-05-18  Theodore Ts'o  <tytso@valinux.com>
    5475 +
    5476 +       * ext2fs.h: Add appropriate ifdef's to support C++ compilation.
    5477 +
    5478 +2000-04-03  Theodore Ts'o  <tytso@valinux.com>
    5479 +
    5480 +       * block.c: Readibility tweak in conditionals involving
    5481 +               ctx->fs->flags.
    5482 +
    5483 +       * ext2fs.h: Use AUTOCONF SIZEOF_* macros if available to determine
    5484 +               how to define __s64 and __u64.  Turn off "compression is
    5485 +               experimental" warning if the cpp macro
    5486 +               I_KNOW_THAT_COMPRESSION_IS_EXPERIMENTAL is defined.
    5487 +
    5488 +2000-02-11    <tytso@snap.thunk.org>
    5489 +
    5490 +       * ext2fs.h: Define EXT2FS_COMPRESSED_BLKADDR and HOLE_BLKADDR.
    5491 +               Conditionally include Compression as a supported type if
    5492 +               ENABLE_COMPRESSION (via --enable-compression) is turned on.
    5493 +
    5494 +       * swapfs.c (ext2fs_swap_super): Swap the compression usage bitmap.
    5495 +
    5496 +2000-02-08    <tytso@snap.thunk.org>
    5497 +
    5498 +       * bitops.h (ext2fs_mark_generic_bitmap, ext2fs_unmark_generic_bitmap,
    5499 +               ext2fs_mark_block_bitmap, ext2fs_unmark_block_bitmap,
    5500 +               ext2fs_mark_inode_bitmap, ext2fs_unmark_inode_bitmap):
    5501 +               Change to return the previous state of the bit that is
    5502 +               being marked or unmarked.  For speed optimization.
    5503 +       
    5504 +2000-02-02  Theodore Ts'o  <tytso@valinux.com>
    5505 +
    5506 +       * getsize.c, ismounted.c: Remove unneeded include of linux/fs.h
    5507 +
    5508 +       * swapfs.c: Remove #ifdef HAVE_EXT2_INODE_VERSION since it's not
    5509 +               needed any more; we know it will always be i_generation.
    5510 +               Add support for swapping the high bits of the uid and gid.
    5511 +
    5512 +1999-11-19    <tytso@valinux.com>
    5513 +
    5514 +       * mkdir.c (ext2fs_mkdir): Only update the parent's inode link
    5515 +               counts if the link was successful.  Patch suggested by
    5516 +               jeremy@goop.org.
    5517 +
    5518 +       * Makefile.in (distclean): Remove TAGS and Makefile.in.old from
    5519 +               the source directory.
    5520 +
    5521 +1999-11-10    <tytso@valinux.com>
    5522 +
    5523 +       * Release of E2fsprogs 1.18
    5524 +
    5525 +1999-11-08    <tytso@valinux.com>
    5526 +
    5527 +       * Makefile.in (tst_badblocks): Add freefs.o to the object list,
    5528 +               since ext2fs_badblocks_list_free was moved to freefs.c.
    5529 +
    5530 +       * tst_badblocks.c: Use the newer badblocks API names.  Add
    5531 +               duplicate blocks to the test inputs to test dealing with
    5532 +               adding blocks which are already in the badblocks list.
    5533 +
    5534 +       * badblocks.c (ext2fs_badblocks_list_add): If appending to the end
    5535 +               of the list, use a shortcut O(1) operations instead of an
    5536 +               O(n) operation.  (Idea suggested by David Beattie.)
    5537 +
    5538 +       * freefs.c (ext2fs_free): Use ext2fs_badblocks_list_free() instead
    5539 +               of badblocks_list_free(), to save a procedure call.
    5540 +
    5541 +1999-10-26    <tytso@valinux.com>
    5542 +
    5543 +       * Release of E2fsprogs 1.17
    5544 +
    5545 +1999-10-26    <tytso@valinux.com>
    5546 +
    5547 +       * ext2fs.h: Add kludge to deal with the fact that egcs cpp doesn't
    5548 +               seem to handle ~0UL the same way as they used to.
    5549 +
    5550 +1999-10-25    <tytso@valinux.com>
    5551 +
    5552 +       * nt_io.c (_OpenNtName): Open the device using
    5553 +               FILE_SYNCHRONOUS_IO_NONALERT instead of
    5554 +               FILE_SYNCHRONOUS_IO_ALERT
    5555 +               (nt_open): At the end of the device open routine, unlock
    5556 +               the drive but do not dismount it.
    5557 +
    5558 +       * initialize.c (CREATOR_OS): Use __GNU__ instead of __gnu__ to
    5559 +               detect the Hurd OS.
    5560 +
    5561 +1999-10-22    <tytso@valinux.com>
    5562 +
    5563 +       * Release of E2fsprogs 1.16
    5564 +
    5565 +1999-10-22    <tytso@valinux.com>
    5566 +
    5567 +       * mkdir.c (ext2fs_mkdir): Pass EXT2_FT_DIR flag to ext2fs_link().
    5568 +
    5569 +       * link.c (ext2fs_link): This call now uses the low three bits of
    5570 +               the flags parameter to pass the directory filetype
    5571 +               information; it will set the directory entry FILETYPE
    5572 +               information if the filesystem supports it.
    5573 +
    5574 +       * newdir.c (ext2fs_new_dir_block): If the FILETYPE superblock
    5575 +               option is set, then create the '.' and '..' entries with
    5576 +               the filetype set to EXT2_FT_DIR.
    5577 +
    5578 +1999-09-24    <tytso@valinux.com>
    5579 +
    5580 +       * nt_io.c: New file which supports I/O under Windows NT.
    5581 +
    5582 +1999-09-07    <tytso@valinux.com>
    5583 +
    5584 +       * ext2fs.h: Add new fields for journalling and define new
    5585 +               feature bits used by newer filesystems: IMAGIC_INODES,
    5586 +               HAS_JOURNAL, RECOVER.
    5587 +
    5588 +       * expanddir.c (ext2fs_expand_dir, expand_dir_proc): Change where
    5589 +               we update the inode block count and size files so that the
    5590 +               block count field is updated correctly when we create an
    5591 +               indirect block.
    5592 +
    5593 +1999-07-18  Theodore Ts'o  <tytso@valinux.com>
    5594 +
    5595 +       * Release of E2fsprogs 1.15
    5596 +
    5597 +1999-06-23    <tytso@valinux.com>
    5598 +
    5599 +       * swapfs.c (ext2fs_swap_inode): Add compatibility for Linux 2.3
    5600 +               kernels that use i_generation instead of i_version.  Patch
    5601 +               supplied by Jon Bright <sircus@sircus.demon.co.uk>.
    5602 +
    5603 +1999-06-21    <tytso@valinux.com>
    5604 +
    5605 +       * dir_iterate.c (ext2fs_process_dir_block): Check for corrupted
    5606 +               directory entry before calling the callback function.
    5607 +               This should prevent some core dumps of insufficiently
    5608 +               paranoid callback functions.
    5609 +
    5610 +1999-05-29    <tytso@rsts-11.mit.edu>
    5611 +
    5612 +       * ext2fs.h: Add feature definition for AFS IMAGIC inodes.
    5613 +
    5614 +       * fileio.c (ext2fs_file_open): Remove obsolete comment stating
    5615 +               that we don't handle writing yet (we do).  Fixed bug where
    5616 +               we weren't allocating a big enough buffer for ext2_bmap.
    5617 +
    5618 +1999-05-03    <tytso@rsts-11.mit.edu>
    5619 +
    5620 +       * openfs.c (ext2fs_open): Check to make sure that the number of
    5621 +               blocks per group is not zero --- if so, it must be a bad
    5622 +               superblock!
    5623 +
    5624 +1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5625 +
    5626 +       * Release of E2fsprogs 1.14
    5627 +
    5628 +1999-01-07  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5629 +
    5630 +       * inode.c (ext2fs_read_inode, ext2fs_write_inode): Check to see if
    5631 +               the inode number is zero; if it's zero, return
    5632 +               EXT2_ET_BAD_INODE_NUM.
    5633 +
    5634 +1998-12-30  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5635 +
    5636 +       * initialize.c (ext2fs_initialize): Use EXT2_FIRST_INODE instead
    5637 +               of EXT2_FIRST_INO to ensure compatibility with Linux 1.2
    5638 +               header files.
    5639 +
    5640 +Mon Jan  4 02:32:09 1999  Theodore Y. Ts'o  <tytso@mit.edu>
    5641 +
    5642 +       * llseek.c (ext2fs_llseek): Change ext2fs_llseek() in the
    5643 +               non-Linux case to use EINVAL by default, unless it isn't
    5644 +               defined, in which case we use EXT2_ET_INVALID_ARGUMENT
    5645 +               instead.
    5646 +
    5647 +1998-12-15  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5648 +
    5649 +       * Release of E2fsprogs 1.13
    5650 +
    5651 +1998-12-03  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5652 +
    5653 +       * Makefile.in: Updated dependencies.
    5654 +
    5655 +1998-09-22  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5656 +
    5657 +       * initialize.c (ext2fs_initialize): Make sure that we allocate
    5658 +               enough inodes so that we can make a valid filesystem.
    5659 +
    5660 +1998-09-02  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5661 +
    5662 +       * rw_bitmaps.c: Fixed signed/unsigned warnings.
    5663 +
    5664 +       * fileio.c (ext2fs_file_set_size): Remove unneeded extern from the
    5665 +               function declaration.
    5666 +
    5667 +       * dblist.c (make_dblist): Add safety check in case the dblist
    5668 +               pointer passed in is null (in which case, assign it to
    5669 +               fs->dblist).  Fixed some signed/unsigned warnings.
    5670 +
    5671 +       * bmap.c: Make addr_per_block be of type blk_t to avoid
    5672 +               signed/unsigned warnings.
    5673 +
    5674 +       * namei.c (ext2fs_follow_link): Remove uneeded extern from the
    5675 +               function declaration.
    5676 +
    5677 +       * get_pathname.c (get_pathname_proc): Use return value from
    5678 +               ext2fs_get_mem, instead of checking if &gp->name is
    5679 +               NULL.
    5680 +
    5681 +       * dir_iterate.c (ext2fs_process_dir_block):
    5682 +       * dblist_dir.c (ext2fs_dblist_dir_iterate): Remove uneeded extern
    5683 +               from the function declaration.
    5684 +
    5685 +       * block.c (ext2fs_block_iterate2): If the read_inode call fails,
    5686 +               return the error directly instead of jumping to the
    5687 +               cleanup routine, since we don't need to do any cleanup.
    5688 +
    5689 +       * alloc_table.c (ext2fs_allocate_group_table): Make this
    5690 +               function take a dgrp_t for its group argument.
    5691 +
    5692 +       * ext2fs.h: Make dgrp_t an __u32 type, and make
    5693 +               fs->desc_group_count be of type dgrp_t.
    5694 +
    5695 +1998-07-27  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5696 +
    5697 +       * badblocks.c (ext2fs_badblocks_list_add): Use a bigger increment
    5698 +               than 10 blocks when we need to expand the size of the
    5699 +               badblocks list.
    5700 +
    5701 +1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5702 +
    5703 +       * Release of E2fsprogs 1.12
    5704 +
    5705 +1998-06-30  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5706 +
    5707 +       * closefs.c (ext2fs_flush): Update the s_block_group_nr field as
    5708 +               appropriate for all of the block group copies, so that
    5709 +               it's clear where the beginning of the filesystem is on the
    5710 +               disk.  (For when the partition table gets scrod.)
    5711 +
    5712 +       * ext2fs.h: Change the name of the feature from
    5713 +               EXT2_FEATURE_INCOMPAT_DIRNAME_SIZE to
    5714 +               EXT2_FEATURE_INCOMPAT_FILESIZE (to match with the kernel).
    5715 +
    5716 +1998-06-18  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5717 +
    5718 +       * inode.c (get_next_blockgroup): Fix bug where if
    5719 +               get_next_blockgroup() is called early because of a missing
    5720 +               inode table in a block group, the current_inode counter
    5721 +               wasn't incremented correctly.
    5722 +
    5723 +1998-06-16  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5724 +
    5725 +       * read_bb.c (ext2fs_read_bb_inode): Make function more robust
    5726 +               against a completely trashed bad block inode.
    5727 +
    5728 +1998-06-10  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5729 +
    5730 +       * alloc_tables.c (ext2fs_allocate_group_table): Fix bug so that if
    5731 +               the stride length hits a bad value, we retry the block
    5732 +               allocation starting at the beginning of the block group.
    5733 +
    5734 +       * ext2fs.h, bb_inode.c, block.c, bmove.c, dir_iterate.c,
    5735 +               expanddir.c, ext2fsP.h, read_bb.c: Change blkcnt_t to be
    5736 +               e2_blkcnt_t to avoid collision with LFS API.
    5737 +
    5738 +1998-05-01  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5739 +
    5740 +       * initialize.c (ext2fs_initialize): Initialize s_inodes_count in a
    5741 +               way that avoids overflows on disk sizes greater than 4GB.
    5742 +
    5743 +1998-04-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5744 +
    5745 +       * ext2fs.h: Define EXT2_QSORT_TYPE appropriately for the
    5746 +               return type for comparison functions for qsort.
    5747 +
    5748 +       * dblist.c (dir_block_cmp): Use EXT2_QSORT_TYPE in function
    5749 +               declaration.
    5750 +
    5751 +1998-04-26  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5752 +
    5753 +       * ext2fs.h, bitops.h: Add support for the Watcom C compiler to do
    5754 +               inline functions.
    5755 +
    5756 +       * ext2fs.h, dosio.c: Use asm/types.h instead of linux/types.h to
    5757 +               evade a potential problem with glibc's header files trying
    5758 +               to spike out linux/types.h.
    5759 +
    5760 +       * ext2fs.h (ext2fs_resize_mem): Change the function prototype to
    5761 +               include the old size of the memory, which is needed for
    5762 +               some braindamaged memory allocation systems that don't
    5763 +               support realloc().
    5764 +
    5765 +       * badblocks.c (ext2fs_badblocks_list_add):
    5766 +         bb_inode.c (clear_bad_block_proc):
    5767 +         dblist.c (ext2fs_add_dir_block):
    5768 +         icount.c (insert_icount_el):
    5769 +         irel_ma.c (ima_put):
    5770 +         rs_bitmap.c (ext2fs_resize_generic_bitmap): Update functions to
    5771 +                 pass the old size of the memory to be resized to
    5772 +                 ext2fs_resize_mem().
    5773 +
    5774 +1998-03-30  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5775 +
    5776 +       * Makefile.in: Change to use new installation directory variables
    5777 +               convention.  Fix uninstall rules to take $(DESTDIR) into
    5778 +               account.
    5779 +
    5780 +1998-03-29  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5781 +
    5782 +       * ext2fs.h: If __STRICT_ANSI__ is defined and we're on a platform
    5783 +               with 32 bit longs, then we need to manually define __s64
    5784 +               and __u64, since the current kernel header files don't
    5785 +               define these if __STRICT_ANSI__ is defined.  This is a
    5786 +               problem if we are compiling with full GCC warnings, since
    5787 +               we do need 64 bit support.
    5788 +       
    5789 +       * Makefile.in (OBJS): Remove bmove.o from files to be built,
    5790 +               since we're not using ext2fs_move_blocks() and there
    5791 +               is some question as to its usefulness in its current
    5792 +               form.
    5793 +
    5794 +       * bmap.c (block_bmap): Remove unused function.
    5795 +
    5796 +       * bmove.c (process_block): Fix -Wall warning.
    5797 +
    5798 +1998-03-23  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5799 +
    5800 +       * block.c (ext2fs_block_iterate3): Make the ref_offset field
    5801 +               contain the offset into the inode.i_blocks array when
    5802 +               ref_block is zero.  Since we haven't done a formal
    5803 +               release of e2fsprogs since block_iterate2 was first
    5804 +               introduced, I removed block_iterate2, and renamed
    5805 +               block_iterate3 to be block_iterate2.
    5806 +
    5807 +       * bb_inode.c, bmove.c, dblist_dir.c, dir_iterate.c,
    5808 +               expanddir.c, ext2fs.h, ext2fsP.h, read_bb.c: Change
    5809 +               use of block_iterate and block_iterate2 to
    5810 +               block_iterate2 with the new prototype for the
    5811 +               interator function.  (using blkcnt_t forr blockcount)
    5812 +
    5813 +1998-03-21  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5814 +
    5815 +       * ext2fs.h: Add new superblock fields (s_algorithm_usage_bitmap,
    5816 +               s_prealloc_blocks, s_prealloc_dir_blocks).  Added
    5817 +               conditional defines of new features COMPAT_DIR_PREALLOC,
    5818 +               RO_COMPAT_LARGE_FILE RO_COMPAT_BTREE_DIR,
    5819 +               INCOMPAT_COMPRESSION, INCOMPAT_DIRNAME_SIZE.  Changed
    5820 +               the library to declare that we support COMPAT_DIR_PREALLOC,
    5821 +               INCOMPAT_DIRNAME_SIZE, RO_COMPAT_LARGE_FILE.
    5822 +
    5823 +       * fileio.c: Rename function ext2fs_file_llseek to be
    5824 +               ext2fs_file_lseek, which is more accurate.
    5825 +
    5826 +       * block.c: Add new function ext2fs_block_iterate3 which calls
    5827 +               the iterator function with the blockcount argument of
    5828 +               type blkcnt_t.  This version of the function is
    5829 +               allowed to handle large files; the other fucntions are
    5830 +               not.
    5831 +
    5832 +       * ext2fs.h: Add new type blkcnt_t
    5833 +
    5834 +       * ext2_err.et.in: Add error code EXT2_ET_FILE_TOO_BIG
    5835 +
    5836 +       * block.c (ext2fs_block_iterate2): Fix bug where the block count
    5837 +               field wasn't getting correctly incremented for sparse
    5838 +               files when the indirect or doubly-indirect block
    5839 +               specified in the inode was zero.
    5840 +
    5841 +Sun Mar  8 22:42:47 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5842 +
    5843 +       * unlink.c (unlink_proc):
    5844 +       * lookup.c (lookup_proc):
    5845 +       * link.c (link_proc):
    5846 +       * get_pathname.c (get_pathname_proc):
    5847 +       * dir_iterate.c (ext2fs_process_dir_block): Mask off high 8 bits
    5848 +               from dirent->name_len, so it can be used for other
    5849 +               purposes.
    5850 +
    5851 +       * ext2fs.h: Add definition of EXT2_FEATURE_INCOMPAT_DIRNAME_SIZE,
    5852 +               and indicate that we have support for this incompatible
    5853 +               option.
    5854 +
    5855 +Mon Feb 23 08:46:33 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5856 +
    5857 +       * ext2_err.et.in: Added new error code, EXT2_ET_CANCEL_REQUESTED.
    5858 +
    5859 +Fri Feb 20 23:58:01 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5860 +
    5861 +       * dblist.c (ext2fs_get_num_dirs): Improve the estimation of the
    5862 +               number of directories when the block group information is
    5863 +               unreliable.
    5864 +
    5865 +1998-02-20  Theodore Y. Ts'o  <tytso@edt.mit.edu>
    5866 +
    5867 +       * inode.c (ext2fs_get_next_inode): Always do the check to see if the
    5868 +               inode table is missing so that we catch the case where the
    5869 +               first block group is missing.
    5870 +
    5871 +       * getsize.c, ismounted.c, unix_io.c: #include errno.h since it's
    5872 +               needed.
    5873 +
    5874 +Mon Feb 16 16:16:00 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5875 +
    5876 +       * ext2_io.h, ext2fs.h: Protect against being included multiple times.
    5877 +
    5878 +       * bmove.c: #include ext2fsP.h instead of "ext2fs/ext2fs.h"
    5879 +
    5880 +       * test_io.c (test_flush): Add a debugging printf when the flush
    5881 +               method is called.
    5882 +
    5883 +       * rw_bitmaps.c (ext2fs_read_bitmaps): If the bitmaps are already
    5884 +               read in, return right away.
    5885 +
    5886 +Sun Feb  1 08:20:24 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5887 +
    5888 +       * bitops.h: Don't try to do i386 inline asm functions if the
    5889 +               compiler isn't GCC.
    5890 +
    5891 +       * ext2fs.h: If EXT2_FLAT_INCLUDES is defined, #include e2_types.h,
    5892 +               instead of linux/types.h, and e2_bitops.h instead of
    5893 +               ext2fs/bitops.h.
    5894 +
    5895 +       * icount.c, version.c: Don't #include <et/com_err.h>, as it isn't
    5896 +               necessary.
    5897 +
    5898 +Sat Jan 17 13:13:31 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5899 +
    5900 +       * inode.c (ext2fs_open_inode_scan): Initialize the group variables
    5901 +               so that we don't need to call get_next_blockgroup() the
    5902 +               first time around.  Saves a bit of time, and prevents us
    5903 +               from needing to assign -1 to current_group (which is an
    5904 +               unsigned value).
    5905 +
    5906 +       * icount.c (insert_icount_el): Cast the estimated number of inodes
    5907 +               from a float to an ino_t.
    5908 +
    5909 +       * alloc.c, alloc_tables.c, badlbocks.c, bb_compat.c, bb_inode.c,
    5910 +               bitmaps.c, bitops.c, block.c, bmap.c, bmove.c, brel_ma.c,
    5911 +               check_desc.c, closefs.c, cmp_bitmaps.c, dblist.c,
    5912 +               dblist_dir.c, dir_iterate.c, dirblock.c, dupfs.c,
    5913 +               expanddir.c, ext2fs.h, fileio.c, freefs.c,
    5914 +               get_pathname.c, getsize.c, icount.c, initialize.c,
    5915 +               inline.c, inode.c, irel_ma.c, ismounted.c, link.c,
    5916 +               lookup.c, mkdir.c, namei.c, native.c, newdir.c,
    5917 +               openfs.c, read_bb.c, read_bb_file.c, rs_bitmap.c,
    5918 +               rw_bitmaps.c, swapfs.c, test_io.c, tst_badblocks.c,
    5919 +               tst_getsize.c, tst_iscan.c, unix_io.c, unlink.c,
    5920 +               valid_blk.c, version.c: If EXT2_FLAT_INCLUDES is
    5921 +               defined, then assume all of the
    5922 +               ext2-specific header files are in a flat directory.
    5923 +
    5924 +       * block.c, bmove.c, dirblock.c, fileio.c: Explicitly cast
    5925 +               all assignments from void * to be compatible with C++.
    5926 +
    5927 +Tue Jan  6 11:28:15 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5928 +
    5929 +       * closefs.c (ext2fs_flush): Add a call to io_channel_flush() to
    5930 +               make sure the contents of the disk are flushed to disk.
    5931 +
    5932 +Mon Dec 29 14:39:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5933 +
    5934 +       * dblist.c (ext2fs_add_dir_block): Change new to be new_entry to
    5935 +               avoid C++ namespace clash.
    5936 +
    5937 +       * bitmaps.c (ext2fs_copy_bitmap): Change new to be new_map to
    5938 +               avoid C++ namespace clash.
    5939 +
    5940 +       * ext2fs.h, bb_inode.c, block.c, bmove.c, brel.h, brel_ma.c,
    5941 +               irel.h, irel_ma.c, dblist.c, dblist_dir.c, dir_iterate.c,
    5942 +               ext2fsP.h, expanddir.c, get_pathname.c, inode.c, link.c,
    5943 +               unlink.c: Change private to be priv_data (to avoid C++
    5944 +               namespace clash)
    5945 +
    5946 +Fri Nov 28 09:26:31 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5947 +
    5948 +       * dblist.c (ext2fs_get_num_dirs): Make ext2fs_get_num_dirs more
    5949 +               paranoid about validating the directory counts from the
    5950 +               block group information.
    5951 +
    5952 +       * all files: Don't include stdlib.h anymore; include it in
    5953 +               ext2_fs.h, since that file requires stdlib.h
    5954 +
    5955 +Thu Nov 20 16:07:38 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5956 +
    5957 +       * expanddir.c (ext2fs_expand_dir): Check to make sure the block
    5958 +               bitmap is loaded, and return an error if it is not.
    5959 +               (expand_dir_proc): Only use ext2fs_write_dir_block when
    5960 +               writing a directory block, not when writing out a fresh
    5961 +               indirect block.
    5962 +
    5963 +Tue Nov 11 22:46:45 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5964 +
    5965 +       * Makefile.in, tst_getsize.c: Added new file which is used to test
    5966 +               the ext2fs_get_device_size function.
    5967 +
    5968 +       * ext2_err.et.in (EXT2_ET_UNIMPLEMENTED): Added new error code.
    5969 +
    5970 +Sun Nov  2 20:36:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5971 +
    5972 +       * ext2fs.h: Make ext2fs_get_mem take an unsigned argument.
    5973 +
    5974 +       * fileio.c (ext2fs_file_get_size, ext2fs_file_set_size,
    5975 +               ext2fs_file_get_fs): New functions added.
    5976 +
    5977 +
    5978 +Fri Oct 31 12:16:52 1997    <tytso@EDT.MIT.EDU>
    5979 +
    5980 +       * bitops.c (ext2fs_warn_bitmap, ext2fs_warn_bitmap2): Don't call
    5981 +               com_err if OMIT_COM_ERR is defined.
    5982 +
    5983 +Thu Oct 30 11:33:57 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5984 +
    5985 +       * Rename new error codes to _ET_ in them for consistency.
    5986 +
    5987 +Sat Oct 25 00:06:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    5988 +
    5989 +       * [all files, basically]: Added definition of ext2fs_get_mem,
    5990 +               ext2fs_free_mem, and ext2fs_resize_mem in ext2fs.h, and
    5991 +               changed all library routines to use these wrapper functions.
    5992 +
    5993 +       * dblist.c, mkdir.c: use EXT2_DIR_EXISTS and EXT2_DB_NOT_FOUND
    5994 +               instead of the system error messages.
    5995 +       
    5996 +       * ext2_err.et.in: Added new error messages EXT2_DIR_EXISTS and
    5997 +               EXT2_DB_NOT_FOUND
    5998 +
    5999 +       * ext2fs.h: Added function declarations and constants for bmap.c
    6000 +               and fileio.c.
    6001 +
    6002 +       * ext2_err.et.in: Added new error messages EXT2_FILE_RO and
    6003 +               EXT2_ET_MAGIC_EXT2_FILE
    6004 +
    6005 +       * Makefile.in: Added files bmap.c and fileio.c, and temporarily
    6006 +               commented out brel_ma.c and irel_ma.c
    6007 +
    6008 +       * bmap.c: New file which maps a file's logical block number to its
    6009 +               physical block number.
    6010 +
    6011 +       * fileio.c: New file which implements simple file reading and
    6012 +               writing primitives.
    6013 +
    6014 +       * alloc.c (ext2fs_alloc_block): New function which allocates a
    6015 +               block, zeros it, and updates the filesystem accounting
    6016 +               records appropriately.
    6017 +
    6018 +Wed Oct 22 16:47:27 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6019 +
    6020 +       * ext2_err.et.in: Added new error codes: EXT2_NO_MEMORY,
    6021 +               EXT2_INVALID_ARGUMENT, EXT2_BLOCK_ALLOC_FAIL,
    6022 +               EXT2_INODE_ALLOC_FAIL, EXT2_NOT_DIRECTORY
    6023 +
    6024 +       * Change various library files to use these functions instead of
    6025 +               EINVAL, ENOENT, etc.
    6026 +
    6027 +Mon Oct 20 19:32:40 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6028 +
    6029 +       * llseek.c: Check HAVE_LLSEEK_PROTOTYPE to see whether or not we
    6030 +               need to declare llseek().
    6031 +
    6032 +Sun Oct 19 18:56:22 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6033 +
    6034 +       * Rename io.h to be ext2_io.h (avoid namespace collisions)
    6035 +
    6036 +       * Add #ifdef's for HAVE_SYS_STAT_H and HAVE_SYS_TYPES_H
    6037 +
    6038 +Fri Oct  3 13:35:59 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6039 +
    6040 +       * llseek.c (ext2fs_llseek): Fix type error for ext2fs_llseek()
    6041 +
    6042 +       * icount.c (ext2fs_icount_validate):
    6043 +       * bmove.c (process_block): Fix lint error in type for fprintf().
    6044 +
    6045 +Mon Sep 15 11:45:09 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6046 +
    6047 +       * inode.c (ext2fs_check_directory): Add support for the callback
    6048 +               to return the error code EXT2_ET_CALLBACK_NOTHANDLED.
    6049 +
    6050 +Thu Sep  4 12:28:22 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6051 +
    6052 +       * bitmaps.c (ext2fs_set_bitmap_padding): New function which sets the
    6053 +               padding of the bitmap to be all one's.
    6054 +
    6055 +Wed Sep  3 14:27:30 1997  Theodore Y. Ts'o  <tytso@edt.mit.edu>
    6056 +
    6057 +       * llseek.c: Added missing semicolon to glibc fixup declaration of
    6058 +       llseek().
    6059 +
    6060 +       * bmove.c: Add #include of errno.h
    6061 +
    6062 +Sat Aug 23 22:47:46 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6063 +
    6064 +       * Makefile.in (ELF_SO_VERSION): Bump version to be 2.4 since we've
    6065 +               added a new field to the io_channel (app_data).
    6066 +
    6067 +       * io.h: Add a new element to the io_channel structure, app_data.
    6068 +
    6069 +       * initialize.c, openfs.c: Set io->app_data to point at the
    6070 +               filesystem handle.
    6071 +
    6072 +Thu Aug 14 08:14:17 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6073 +
    6074 +       * io.h: Change the prototype of ext2fs_llseek() to use int's
    6075 +               instead of unsigned int's.
    6076 +
    6077 +       * llseek.c: Change to allow PIC and !HAVE_LLSEEK.  Add a prototype
    6078 +               to make life easer for GNU Libc 2.
    6079 +
    6080 +       * rw_bitmaps.c: On the PowerPC, the big-endian variant of the ext2
    6081 +               filesystem has its bitmaps stored as 32-bit words with bit
    6082 +               0 as the LSB of each word.  Thus a bitmap with only bit 0
    6083 +               set would be, as a string of bytes, 00 00 00 01 00 ...  To
    6084 +               cope with this, we byte-reverse each word of a bitmap if
    6085 +               we have a big-endian filesystem, that is, if we are *not*
    6086 +               byte-swapping other word-sized numbers.
    6087 +
    6088 +Mon Aug 11 03:30:48 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6089 +
    6090 +       * dosio.c: New file to do DOS/BIOS disk accesses.
    6091 +
    6092 +       * namei.c (open_namei): Make pathlen be of type size_t.
    6093 +
    6094 +       * llseek.c: Always #include stdlib.h since it's need to define
    6095 +               size_t. 
    6096 +
    6097 +       * io.h: Use errcode_t for magic numbers.
    6098 +
    6099 +       * icount.c (get_icount_el): Use size_t where appropriate
    6100 +       
    6101 +       * dupfs.c (ext2fs_dup_handle):
    6102 +       * dblist.c (dir_block_cmp): Use size_t where appropriate.
    6103 +
    6104 +       * read_bb.c (ext2fs_read_bb_inode):
    6105 +       * cmp_bitmaps.c (ext2fs_compare_inode_bitmap): Use blk_t, ino_t
    6106 +               and size_t where appropriate.
    6107 +
    6108 +       * closefs.c (ext2fs_flush): Use dgrp_t instead of int where
    6109 +               appropriate.
    6110 +
    6111 +       * openfs.c (ext2fs_open):
    6112 +       * check_desc.c (ext2fs_check_desc): Use blk_t instead of int where
    6113 +               appropriate.
    6114 +
    6115 +       * rw_bitmaps.c (read_bitmaps):
    6116 +       * irel_ma.c:
    6117 +       * inode.c (ext2fs_write_inode):
    6118 +       * initialize.c (ext2fs_initialize):
    6119 +       * brel_ma.c: Fix to make be 16-bit safe.
    6120 +
    6121 +       * link.c (ext2fs_link):
    6122 +       * unlink.c (ext2fs_unlink):
    6123 +       * lookup.c (lookup_proc):
    6124 +       * ismounted.c (ext2fs_check_if_mounted):
    6125 +       * block.c (xlate_func): Add #pragma argsused for Turbo C.
    6126 +
    6127 +Sun Aug 10 10:05:22 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6128 +
    6129 +       * block.c (ext2fs_block_iterate2): Use retval which is a errcode_t
    6130 +               type.
    6131 +
    6132 +       * bitmaps.c (make_bitmap): Use size_t instead of int where
    6133 +               appropriate.
    6134 +
    6135 +       * bb_inode.c (set_bad_block_proc): Add #pragma argsused for Turbo C.
    6136 +
    6137 +       * alloc.c (ext2fs_new_inode): Use ino_t instead of int for the
    6138 +               group number.
    6139 +
    6140 +       * get_pathname.c: Use ino_t instead of int where appropriate.
    6141 +
    6142 +       * ext2fs.h: Make the magic structure element be errcode_t instead
    6143 +               of int.
    6144 +
    6145 +       * alloc.c alloc_tables.c badblocks.c bb_compat.c bb_inode.c
    6146 +               bitmaps.c block.c bmove.c brel_ma.c check_desc.c closefs.c
    6147 +               cmp_bitmaps.c dblist.c dblist_dir.c dir_iterate.c
    6148 +               dirblock.c dupfs.c expanddir.c freefs.c get_pathname.c
    6149 +               icount.c initialize.c inline.c inode.c irel_ma.c link.c
    6150 +               llseek.c lookup.c mkdir.c namei.c newdir.c read_bb.c
    6151 +               read_bb_file.c rs_bitmap.c rw_bitmaps.c swapfs.c
    6152 +               test_io.c tst_badblocks.c tst_iscan.c unix_io.c unlink.c
    6153 +               valid_blk.c version.c: Add an #ifdef for HAVE_UNISTD_H
    6154 +
    6155 +Tue Jun 17 01:33:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6156 +
    6157 +       * unix_io.c (unix_read_blk): If ext2fs_llseek() fails, but errno
    6158 +               is zero, then return EXT2_IO_LLSEEK_FAILED.
    6159 +
    6160 +       * ext2_err.et.in: Add a new error code, EXT2_IO_LLSEEK_FAILED.
    6161 +
    6162 +       * Release of E2fsprogs 1.11
    6163 +
    6164 +Mon Jun 16 23:53:06 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6165 +
    6166 +       * dblist.c (ext2fs_dblist_count): Added new function which returns
    6167 +               the number of directory blocks in dblist.
    6168 +
    6169 +Sat Jun 14 01:39:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6170 +
    6171 +       * unix_io.c (unix_flush): Make the io_channel flush function do a
    6172 +               fsync to flush the kernel buffers to disk.
    6173 +
    6174 +Wed Jun 11 18:25:31 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6175 +
    6176 +       * inode.c (ext2fs_inode_scan_goto_blockgroup): Fix bug; the
    6177 +               current inode number wasn't being set by the
    6178 +               goto_blockgroup function.
    6179 +
    6180 +Mon Jun  9 10:45:48 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6181 +
    6182 +       * bmove.c (ext2fs_move_blocks): New function which takes a bitmap
    6183 +               of blocks which need to be moved, and moves those blocks
    6184 +               to another location in the filesystem.
    6185 +
    6186 +       * rs_bitmap.c (ext2fs_resize_generic_bitmap): When expanding a
    6187 +               bitmap, make sure all of the new parts of the bitmap are
    6188 +               zero.
    6189 +
    6190 +Sun Jun  8 16:24:39 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6191 +
    6192 +       * bitmaps.c (ext2fs_copy_bitmap): Fix bug; the destination bitmap
    6193 +               wasn't being returned to the caller.
    6194 +
    6195 +       * alloc_tables.c (ext2fs_allocate_group_table): Add new function
    6196 +               ext2fs_allocate_group_table() which sets the group tables
    6197 +               for a particular block group.  The relevant code was
    6198 +               factored out of ext2fs_allocate_tables().
    6199 +
    6200 +       * dblist.c (make_dblist): Adjust the initial size of the directory
    6201 +               block list to be a bit more realistic (ten plus twice the
    6202 +               number of directories in the filesystem).
    6203 +
    6204 +Thu May  8 22:19:09 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6205 +
    6206 +       * badblocks.c (ext2fs_badblocks_list_test): Fix bug where
    6207 +               ext2fs_badblocks_list_test would test the list (and exceed
    6208 +               array boundaries) if there were no bad blocks on the bad
    6209 +               blocks list.  (Showed up when user tried: mke2fs -c -b 4096).
    6210 +
    6211 +Thu Apr 24 12:16:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>
    6212 +
    6213 +       * Release of E2fsprogs version 1.10
    6214 +
    6215 +Thu Apr 24 10:13:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>
    6216 +
    6217 +       * alloc_tables.c (ext2fs_allocate_tables): Correctly place the
    6218 +               inode and block bitmaps based on the RAID 0 stride
    6219 +               parameter (which is passed by mke2fs).
    6220 +
    6221 +       * ext2fs.h: Add "stride" parameter to ext2_filsys, to be used by
    6222 +               mke2fs to communicate the stride length to
    6223 +               ext2fs_allocate_tables()
    6224 +
    6225 +Wed Apr 23 21:50:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>
    6226 +
    6227 +       * initialize.c (ext2fs_initialize): Fix to compile under Linux 1.2
    6228 +               systems.  (We can't assume that the new filesystem types
    6229 +               are supported.)
    6230 +
    6231 +Wed Apr 23 18:40:53 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6232 +
    6233 +       * alloc_tables.c (ext2fs_allocate_tables): Make sure that we
    6234 +               allocate the inode and block bitmaps inside block group at
    6235 +               all times.
    6236 +
    6237 +Mon Apr 21 00:06:28 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6238 +
    6239 +       * alloc.c (ext2fs_new_block): Fix bug where if goal==0 and the
    6240 +               filesystem has no free blocks, ext2fs_new_block would loop
    6241 +               forever.
    6242 +
    6243 +       * dupfs.c (ext2fs_dup_handle): Duplicate an ext2 filesystem handle
    6244 +
    6245 +       * freefs.c (ext2fs_free_inode_cache): Decrement refcount and only
    6246 +               free if refcount goes to zero.
    6247 +
    6248 +       * inode.c (create_icache): Initialize refcount to 1.
    6249 +
    6250 +       * ext2fsP.h: Added refcount to ext2_inode_cache
    6251 +
    6252 +       * dblist.c (ext2fs_copy_dblist): New function to copy a directory
    6253 +               block list.
    6254 +
    6255 +       * badblocks.c (ext2fs_badblocks_copy): New function to copy a
    6256 +               badblocks structure.
    6257 +
    6258 +Sun Apr 20 23:19:51 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6259 +
    6260 +       * bitmaps.c (ext2fs_copy_bitmap): New function to copy a bitmap.
    6261 +
    6262 +       * unix_io.c, test_io.c (unix_open, test_open): Initialize the
    6263 +               refcount to 1.
    6264 +               (unix_close, test_close): Decrement the refcount and only
    6265 +               close the io_channel if the refcount goes to 0.
    6266 +
    6267 +       * io.h: Add refcount to the io_channel structure.  Add new macro
    6268 +               interface io_channel_bumpcount() to bump the refcount.
    6269 +
    6270 +Thu Apr 17 20:25:03 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6271 +
    6272 +       * inode.c (ext2fs_read_inode, ext2fs_write_inode): Use the inode
    6273 +               cache in the filesystem handle, instead of the inode cache
    6274 +               in a static variable.
    6275 +
    6276 +       * freefs.c: Added static function to free the inode cache (called by
    6277 +               ext2fs_free).
    6278 +
    6279 +       * ext2fsP.h: Added definition of the ext2_inode_cache structures.
    6280 +
    6281 +       * ext2fs.h: Added pointer to the inode_cache structure.
    6282 +
    6283 +       * block.c (block_iterate_ind, block_iterate_dind,
    6284 +               block_iterate_tind): If there are holes in the indirect,
    6285 +               doubly indirect, or triply indirect blocks, increment the
    6286 +               block count field automatically.
    6287 +
    6288 +Thu Apr 17 12:23:38 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6289 +
    6290 +       * Release of E2fsprogs version 1.09
    6291 +
    6292 +Mon Apr 14 20:38:56 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6293 +
    6294 +       * version.c (ext2fs_parse_version_string): Check the passed in
    6295 +               version string (instead of the hard-coded one).
    6296 +
    6297 +       * alloc_tables.c (ext2fs_allocate_tables): If the last block is
    6298 +               greater filesystem size, clamp it to prevent allocating a
    6299 +               block or inode bitmap beyond the filesystem.
    6300 +
    6301 +       * initialize.c (ext2fs_initialize): Fix bug where the metatdata
    6302 +               overhead calculation was accidentally removed.
    6303 +
    6304 +Fri Apr 11 18:56:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6305 +
    6306 +       * Release of E2fsprogs version 1.08
    6307 +
    6308 +Thu Apr 10 13:15:15 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6309 +
    6310 +       * dblist.c (ext2fs_set_dir_block): New function which sets the
    6311 +               block of a dblist entry, given the directory inode and
    6312 +               blockcnt.
    6313 +
    6314 +Sat Apr  5 12:42:42 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6315 +
    6316 +       * alloc_tables.c (ext2fs_allocate_tables): Allocate the bitmap and
    6317 +               inode bitmaps at staggered locations across the block
    6318 +               groups, to avoid concentrating the bitmaps on a small
    6319 +               number of disks when using striped RAID arrays.
    6320 +
    6321 +       * initialize.c (ext2fs_initialize): By default, choose the maximum
    6322 +               possible number of blocks per group (based on the size of
    6323 +               the bitmaps in the blocksize).
    6324 +
    6325 +Fri Apr  4 11:28:16 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6326 +
    6327 +       * initialize.c (ext2fs_initialize): Add support for
    6328 +               EXT2_COMPAT_SPARSE_SUPER feature.
    6329 +
    6330 +       * closefs.c (ext2fs_bg_has_super): New function to determine
    6331 +               whether or a particular block group should have a
    6332 +               superblock and block group descriptor.  Used for the
    6333 +               EXT2_COMPAT_SPARSE_SUPER feature is turned on.
    6334 +               (ext2fs_flush):  Check ext2fs_bg_has_super to see whether
    6335 +               or not the superblock should be written out for the block
    6336 +               group.
    6337 +
    6338 +       * ext2fs.h (EXT2_COMPAT_SPARSE_SUPER): Define compatibility flag
    6339 +               for sparse duplicate superblocks.
    6340 +
    6341 +       * version.c (ext2fs_get_library_version): New function which
    6342 +               returns the library version.
    6343 +
    6344 +       * version.c (ext2fs_parse_version_string): New function which
    6345 +               parses a version string and returns a version number,
    6346 +               so application programs can compare version numbers as
    6347 +               integers.
    6348 +
    6349 +Wed Mar 26 00:43:52 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6350 +
    6351 +       * icount.c (ext2fs_create_icount): Change function so that it also
    6352 +               takes a new argument which contains a "hint" icount
    6353 +               structure.  This "hint" icount allows the create function
    6354 +               to set up the sorted list in advance.  This reduces
    6355 +               significantly the amount of data moving needed to insert
    6356 +               these inodes into the list later.
    6357 +       
    6358 +       * icount.c (ext2fs_icount_validate): New function which validates
    6359 +               that the icount structure's rep invariant.
    6360 +
    6361 +       * icount.c (get_icount_el): Completely revamped implementation
    6362 +               to subsume put_icount_el().  Put_icount_el() used to
    6363 +               use an O(N) implementation to insert in the middle
    6364 +               of the icount list.  It now uses a O(ln N) to search
    6365 +               for where the icount should be inserted, and then uses
    6366 +               a memcpy to move the list down (instead of a for loop).
    6367 +       
    6368 +       * icount.c (ext2fs_icount_fetch, ext2fs_icount_store,
    6369 +               ext2fs_icount_increment, ext2fs_icount_decrement): Check
    6370 +               to see if the inode is within bounds; if it isn't, return
    6371 +               EINVAL.
    6372 +
    6373 +       * bitops.h (ext2fs_test_generic_bitmap): Fix error message given
    6374 +               when a bad inode number is passed to test_generic_bitmap
    6375 +               to be EXT2FS_TEST_ERROR instead of the wrong
    6376 +               EXT2FS_UNMARK_ERROR.
    6377 +
    6378 +Wed Mar 12 13:32:05 1997  Theodore Y. Ts'o  <tytso@mit.edu>
    6379 +
    6380 +       * Release of E2fsprogs version 1.07
    6381 +
    6382 +Sun Mar  2 16:46:18 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6383 +
    6384 +       * Makefile.in (ELF_VERSION): Change version to be 2.2
    6385 +
    6386 +Tue Feb 11 14:54:02 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6387 +
    6388 +       * alloc.c (ext2fs_get_free_blocks): Change routine to use
    6389 +               ext2fs_fast_test_block_bitmap_range().
    6390 +
    6391 +       * bitops.h (ext2fs_fast_test_block_bitmap_range,
    6392 +               ext2fs_test_block_bitmap_range: New inline functions which
    6393 +               test to see whether a contiguous range of blocks is
    6394 +               available.
    6395 +
    6396 +Thu Feb  6 10:00:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6397 +
    6398 +       * badblocks.c (ext2fs_badblocks_list_create): Rename sybmols to use
    6399 +               use ext2fs_badblocks_* instead of badblocks_*
    6400 +
    6401 +       * bb_compat.c: New file which translates between old badblocks_*()
    6402 +               names to ext2fs_badblocks_*()
    6403 +
    6404 +       * unlink.c (ext2fs_unlink): New file, moved ext2fs_unlink() from
    6405 +               link.c (since e2fsck doesn't use ext2fs_unlink()).
    6406 +
    6407 +       * rs_bitmap.c (ext2fs_resize_generic_bitmap): New file, contains
    6408 +               bitmap resizing routine moved from bitmaps.c, since e2fsck
    6409 +               doesn't need to use this function.
    6410 +
    6411 +       * lookup.c (ext2fs_lookup): Moved ext2fs_lookup to its own file,
    6412 +               since e2fsck only needs ext2fs_lookup.
    6413 +
    6414 +Mon Feb  3 10:11:40 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6415 +
    6416 +       * inode.c (ext2fs_open_inode_scan): Set fs->badblocks if it is not
    6417 +               already set; this is needed so that programs like dump
    6418 +               which use the inode scan functions will deal with
    6419 +               filesystems that have bad blocks in the inode table.
    6420 +
    6421 +Sun Feb  2 00:17:36 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6422 +
    6423 +       * ext2fs.h (struct_badblocks_list, struct_badblocks_iterate):
    6424 +               Moved to ext2fsP.h, since it doesn't need to be part of
    6425 +               the public interface.
    6426 +
    6427 +       * dir_iterate.c: Move ext2_dir_iterate out of namei.c.
    6428 +
    6429 +Sat Feb  1 10:14:55 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6430 +
    6431 +       * dblist.c (ext2fs_get_num_dirs): New file, which implements a
    6432 +               directory block list abstraction.  (Code moved from
    6433 +               e2fsck).
    6434 +
    6435 +       * ext2fs.h, inode.c: Moved definition of ext2_struct_inode_scan to
    6436 +               to inode.c (since no one else should be peeking inside it!)
    6437 +
    6438 +       * valid_blk.c (ext2_inode_has_valid_blocks): New function.
    6439 +
    6440 +       * openfs.c (ext2fs_open): Check the feature set in the ext2
    6441 +               superblock, and refuse to open filesystems if they contain
    6442 +               incompatible features.  (Can be overriden with the
    6443 +               EXT2_FLAG_FORCE
    6444 +
    6445 +Sun Jan 12 11:31:46 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6446 +
    6447 +       * block.c (ext2fs_block_iterate2): Added new function
    6448 +               ext2fs_block_iterate2 which changes the function
    6449 +               signature of the callback function to include the
    6450 +               referencing block and offset.
    6451 +
    6452 +       * inode.c (ext2fs_inode_scan_goto_blockgroup): Added new function
    6453 +               ext2fs_inode_scan_goto_blockgroup which allows an
    6454 +               application to jump to a particular block group while
    6455 +               doing an inode scan.
    6456 +
    6457 +Wed Jan  1 23:50:12 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6458 +
    6459 +       * dirblock.c: Include string.h, since we use memcpy().
    6460 +
    6461 +Tue Dec  3 12:27:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6462 +
    6463 +       * getsize.c (ext2fs_get_device_size): The ioctl BLKGETSIZE returns
    6464 +               a long not an int; this doesn't matter on i386 machines,
    6465 +               but it does on Alpha's.
    6466 +       
    6467 +Fri Nov 29 20:57:37 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6468 +
    6469 +       * inode.c (ext2fs_write_inode, ext2fs_read_inode): If the inode
    6470 +               table pointer is NULL, then return an error indicating
    6471 +               that the inode table is missing.
    6472 +               (get_next_blockgroup, get_next_blocks,
    6473 +               ext2fs_get_next_inode): Don't treat a missing inode table
    6474 +               as permanent error.  Return MISSING_INODE_TABLE, but as an
    6475 +               advisory error code, much like BAD_BLOCK_IN_INODE_TABLE.
    6476 +
    6477 +       * rw_bitmaps.c (ext2fs_write_block_bitmap,
    6478 +               ext2fs_write_inode_bitmap): If the inode or block bitmap
    6479 +               block is zero, then don't write out the inode or block
    6480 +               bitmap.  The idea here is to avoid stomping on the
    6481 +               superblock.
    6482 +               (read_bitmaps): If the inode or block bitmap block is
    6483 +               zero, then fill in that portion of the inode or block
    6484 +               bitmap with all zeros.
    6485 +
    6486 +       * inode.c (ext2fs_get_next_inode): Fix bug in handling of bad
    6487 +               blocks in inode table when the inode table size is
    6488 +               non-standard (and can therefore span blocks).
    6489 +
    6490 +Tue Oct 29 20:13:14 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6491 +
    6492 +       * alloc.c (ext2fs_new_block): Fix fencepost error in
    6493 +               ext2fs_new_block; make sure we don't try to allocate the
    6494 +               first block beyond the end of the filesystem.
    6495 +
    6496 +Mon Oct 14 11:00:48 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6497 +
    6498 +       * inode.c (check_for_inode_bad_blocks): New function called by
    6499 +               get_next_blocks() to avoid reading in bad blocks marked in
    6500 +               fs->badblocks.  Inodes located in bad blocks are returned
    6501 +               by ext2fs_get_next_inode() returns the error code
    6502 +               EXT2_ET_BAD_BLOCK_IN_INODE_TABLE.
    6503 +       
    6504 +       * alloc_tables.c (ext2fs_allocate_tables): New function which
    6505 +               performs the part of mke2fs's job of allocating the
    6506 +               filesystem tables.
    6507 +
    6508 +       * test_io.c (test_close): IO manager which is used for testing
    6509 +               purposes.
    6510 +
    6511 +Sun Oct 13 04:31:57 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6512 +
    6513 +       * inode.c (ext2fs_get_next_inode): Separate out the function of
    6514 +               setting up for a new block group to get_next_blockgroup().
    6515 +               Separate out the function of reading in blocks of the
    6516 +               inode table to get_next_blocks().
    6517 +
    6518 +       * ext2fs.h: Add the badblocks list to the ext2_filsys entry
    6519 +
    6520 +       * badblocks.c (badblocks_list_add, badblocks_list_test): Add
    6521 +               blocks to the badblock list in sorted order.  This allows
    6522 +               badblocks_list_test to be coded using a binary search for
    6523 +               speed.
    6524 +
    6525 +Tue Oct  8 02:02:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6526 +
    6527 +       * Release of E2fsprogs version 1.06
    6528 +
    6529 +Mon Oct  7 00:44:17 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6530 +
    6531 +       * ext2fs.h, block.c, closefs.c, dirblock.c, inode.c, native.c,
    6532 +               open.c: Change EXT2_SWAP to EXT2_FLAG_SWAP for
    6533 +               consistency's sake.
    6534 +       
    6535 +       * closefs.c (ext2fs_flush): If the flag EXT2_MASTER_SB_ONLY is
    6536 +               set, then only write out the master superblock.
    6537 +
    6538 +Sun Oct  6 21:45:26 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6539 +
    6540 +       * block.c (ext2fs_block_iterate): Fixed bug which caused
    6541 +               block_iterate to fail to handle HURD created filesystems;
    6542 +               it tested the inode translator field before the inode was
    6543 +               loaded.
    6544 +
    6545 +Tue Sep 17 14:08:24 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6546 +
    6547 +       * initialize.c (ext2fs_initialize): Make sure the description for
    6548 +               the inode bitmap is set correctly.
    6549 +
    6550 +       * bitmaps.c (ext2fs_allocate_generic_bitmap): Fix minor type typo.
    6551 +
    6552 +Thu Sep 12 15:23:07 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6553 +
    6554 +       * Release of E2fsprogs version 1.05
    6555 +
    6556 +Sat Sep  7 07:36:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6557 +
    6558 +       * initialize.c: Override the kernel's idea of default
    6559 +               checkinterval from 0 (never) to 180 days.
    6560 +
    6561 +Wed Aug 28 03:20:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6562 +
    6563 +       * namei.c (ext2fs_namei_follow): New function which follows
    6564 +               symbolic link (if any) at the target.
    6565 +
    6566 +Tue Aug 27 01:48:43 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6567 +
    6568 +       * inode.c (ext2fs_read_inode, ext2fs_write_inode): Add support
    6569 +               for shortcut function fs->read_inode() and fs->write_inode().
    6570 +               Added inode_cache to reduce CPU time spent in doing
    6571 +               byte swapping.
    6572 +
    6573 +       * swapfs.c (ext2fs_swap_super): Swap the new fields in a V2
    6574 +               superblock.
    6575 +
    6576 +       * namei.c (ext2fs_follow_link): New function.
    6577 +               (ext2fs_namei): Extended to have support for chasing
    6578 +               symbolic links.  ext2fs_namei() still returns an inode
    6579 +               which is a symbolic link.  Symbolic links are only chased
    6580 +               while resolving the containing directory.  To chase
    6581 +               symbolic links of the final result, use
    6582 +               ext2fs_follow_link().
    6583 +
    6584 +Mon Aug 26 23:46:07 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6585 +
    6586 +       * ext2_err.et.in: Added new error code EXT2_ET_SYMLINK_LOOP.
    6587 +
    6588 +       * bitops.h (ext2fs_set_bit, ext2fs_celar_bit): Use asm inlines
    6589 +               provided by Pete A. Zaitcev (zaitcev@lab.sun.mcst.ru).
    6590 +
    6591 +Thu Aug 22 00:40:18 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6592 +
    6593 +       * initialize.c (ext2fs_initialize): On systems where the byte
    6594 +               order is not i386 compatible, set the swap_byte flag.
    6595 +
    6596 +       * inode.c (inocpy_with_swap): Check to see if inode contains a
    6597 +               fast symlink before swapping the inode block fields.  This
    6598 +               required adding a new argument to inocpy_with_swap to
    6599 +               determine whether the mode field is in host order or not.
    6600 +
    6601 +Wed Aug 21 00:45:42 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6602 +
    6603 +       * bitops.h (ext2fs_set_bit, ext2fs_clear_bit, ext2fs_test_bit): On
    6604 +               the sparc, if EXT2_STD_BITOPS set, use the standard
    6605 +               i386-compatible bitmask operations, instead on the
    6606 +               non-standard native bitmask operators.
    6607 +
    6608 +Fri Aug  9 11:11:35 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6609 +
    6610 +       * block.c (ext2fs_block_iterate): Cause block iterator to return
    6611 +               the HURD translator block (along with everything else).
    6612 +               If the flag BLOCK_FLAG_DATA_ONLY is passed to the block
    6613 +               iterator, then don't return any meta data blocks
    6614 +               (including the HURD translator).
    6615 +
    6616 +Wed Jul 17 17:13:34 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6617 +
    6618 +       * gen_uuid.c: New file, which generates DCE-compatible UUIDs.
    6619 +
    6620 +       * uuid.c: New file, containing UUID utility functions.
    6621 +
    6622 +Tue Jul 16 10:19:16 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6623 +
    6624 +       * ext2fs.h: Add a definition of the "real" ext2 superblock.
    6625 +
    6626 +Fri May 24 14:54:55 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6627 +
    6628 +       * ext2fs.h: Fix erroneous ino_t type used in block_bitmap type.
    6629 +
    6630 +Sun May 19 15:39:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6631 +
    6632 +       * openfs.c (ext2fs_open): If the blocksize in the superblock is
    6633 +               zero, return the error EXT2_ET_CORRUPT_SUPERBLOCK, since
    6634 +               that's a basic value that must be correct for the rest of
    6635 +               the library to work.
    6636 +
    6637 +       * ext2_err.et.in (EXT2_ET_CORRUPT_SUPERBLOCK): Added new error
    6638 +               code.
    6639 +
    6640 +Thu May 16 11:12:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
    6641 +
    6642 +       * Release of E2fsprogs version 1.04
    6643 +
    6644 +Wed Mar 27 00:33:40 1996    <tytso@rsts-11.mit.edu>
    6645 +
    6646 +       * Release of E2fsprogs version 1.03
    6647 +
    6648 +Tue Mar 26 12:06:32 1996    <tytso@rsts-11.mit.edu>
    6649 +
    6650 +       * bitops.h (ext2fs_set_bit, ext2fs_clear_bit, ext2fs_test_bit):
    6651 +               Change the m68k bit numbering for bitmasks to match with
    6652 +               the bit numbering used by all other ext2 implementations.
    6653 +
    6654 +Thu Mar  7 03:37:00 1996    <tytso@rsts-11.mit.edu>
    6655 +
    6656 +       * inode.c (ext2fs_get_next_inode, ext2fs_close_inode_scan,
    6657 +       ext2fs_open_inode_scan): Support dynamically-sized inodes.
    6658 +
    6659 +Wed Mar  6 12:26:29 1996    <tytso@rsts-11.mit.edu>
    6660 +
    6661 +       * inode.c (ext2fs_read_inode, ext2fs_write_inode): Support
    6662 +               dynamically-sized inodes.
    6663 +
    6664 +       * openfs.c (ext2fs_open): Allow dynamic revision filesystem to be
    6665 +               loaded.
    6666 +
    6667 +Tue Mar  5 03:49:37 1996    <tytso@rsts-11.mit.edu>
    6668 +
    6669 +       * initialize.c (ext2fs_initialize): Catch an error condition where
    6670 +               the passed in size is *really* too small.
    6671 +
    6672 +       * alloc.c (ext2fs_new_inode):
    6673 +       * ext2fs.h (EXT2_FIRST_INODE): Add support for dynamic revision to
    6674 +               get first inode.
    6675 +
    6676 +Wed Feb 21 15:56:17 1996    <tytso@rsts-11.mit.edu>
    6677 +
    6678 +       * getsize.c (ext2fs_get_device_size): Open the device read-only
    6679 +               when trying to determine its size.
    6680 +
    6681 +Wed Jan 31 11:06:08 1996    <tytso@rsts-11.mit.edu>
    6682 +
    6683 +       * Release of E2fsprogs version 1.02
    6684 +
    6685 +Sat Dec  9 09:57:50 1995    <tytso@rsts-11.mit.edu>
    6686 +
    6687 +       * rw_bitops.c (ext2fs_write_block_bitmap):
    6688 +       * bitops.c (ext2fs_test_bit, ext2fs_clear_bit, ext2fs_set_bit):
    6689 +       * bitops.h (ext2fs_test_bit, ext2fs_clear_bit, ext2fs_set_bit):
    6690 +               Rename {test,set,clear}_bit to ext2fs_{test,set,clear}_bit,
    6691 +               to avoid conflicts with with kernel include files.  Also
    6692 +               rename ADDR and CONST_ADDR to EXT2FS_ADDR and
    6693 +               EXT2FS_CONST_ADDR.
    6694 +
    6695 +Thu Oct 26 12:09:16 1995    <tytso@rsts-11.mit.edu>
    6696 +
    6697 +       * ext2_err.et: Updated message in EXT2_ET_BASE to say version 0.5c
    6698 +
    6699 +       * swapfs.c (ext2fs_swap_super): Put an #ifdef check around
    6700 +               s_def_resuid and s_def_resgid for backwards compatibility.
    6701 +
    6702 +Fri Oct 20 23:33:31 1995    <tytso@rsts-11.mit.edu>
    6703 +
    6704 +       * bitops.h: Added #ifdef's for Sparc.
    6705 +
    6706 +Wed Sep  6 22:14:46 1995    <tytso@rsts-11.mit.edu>
    6707 +
    6708 +       * getsize.c: #include <sys/ioctl.h> under Linux to pick up ioctl()
    6709 +               declaration
    6710 +
    6711 +       * closefs.c: #include <string.h> to pick up memset() declaration
    6712 +
    6713 +Mon Sep  4 21:45:29 1995  Remy Card  <card@bbj>
    6714 +
    6715 +       * Makefile.in: Added support for BSD shared libraries.
    6716 +
    6717 +       * initialize.c (ext2fs_initialize): Correctly set the s_creator_os
    6718 +               flag.
    6719 +
    6720 +Mon Sep  4 09:55:30 1995    <tytso@rsts-11.mit.edu>
    6721 +
    6722 +       * unix_io.c (unix_open): Add a double check; if the passed in name
    6723 +               is NULL, return EXT2_ET_BAD_DEVICE_NAME.
    6724 +
    6725 +       * ext2_err.et (EXT2_ET_BAD_DEVICE_NAME): Added new error code
    6726 +
    6727 +Wed Aug 16 15:44:10 1995    <tytso@rsts-11.mit.edu>
    6728 +
    6729 +       * inode.c (ext2fs_check_directory): Use LINUX_S_ISDIR instead of
    6730 +               S_ISDIR.
    6731 +
    6732 +Tue Aug 15 13:08:36 1995    <tytso@rsts-11.mit.edu>
    6733 +
    6734 +       * getsize.c (ext2fs_get_device_size): Add support for reading the
    6735 +               partition size from a BSD disk label.
    6736 +
    6737 +Thu Aug 10 09:33:26 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
    6738 +
    6739 +       * getsize.c (ext2fs_get_device_size): New function that determins
    6740 +               the size of a device.  Used by mke2fs and e2fsck.
    6741 +
    6742 +Sat Aug 12 03:09:54 1995  Remy Card  <card@bbj>
    6743 +
    6744 +       * Makefile.in (install): Install static libraries in $(ulibdir)
    6745 +               (/usr/lib on Linux) instead of $(libdir) (/lib on Linux).
    6746 +
    6747 +Wed Aug  9 17:04:23 1995  Theodore Y. Ts'o  <tytso@dcl>
    6748 +
    6749 +       * bitmaps.c (ext2fs_free_inode_bitmap, ext2fs_free_block_bitmap):
    6750 +               Move these functions to freefs.c.
    6751 +
    6752 +       * closefs.c (ext2fs_flush): If swapping blocks, clear the group
    6753 +               descriptors shadow memory to keep purify quiet.  (This
    6754 +               also has the nice benefit that the unused portion of the
    6755 +               shadow descriptors are zeroed out.)
    6756 +
    6757 +       * dirblock.c (ext2fs_write_dir_block): We need to use
    6758 +               dirent->rec_len *before* it's byteswapped to find the
    6759 +               location of the next directory structure!
    6760 +
    6761 +       * alloc.c (ext2fs_new_inode): Fix bug which could potentially
    6762 +               cause ext2fs_new_inode to loop infinitely if we're trying
    6763 +               to allocate an inode in group #0 and there are no free
    6764 +               inodes at all in the system.
    6765 +
    6766 +       * closefs.c: #include <errno.h> if it exists.
    6767 +
    6768 +Sun Aug  6 13:27:50 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
    6769 +
    6770 +       * ext2fs.h (BLOCK_FLAG_HOLE): Added new definition for
    6771 +               BLOCK_FLAG_APPEND.  Added documentation for the block
    6772 +               interator flags.
    6773 +
    6774 +Sat Aug  5 11:44:05 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
    6775 +
    6776 +       * Makefile.in (DLL_INSTALL_DIR, ELF_INSTALL_DIR): Set the
    6777 +               installation directories correctly.
    6778 +
    6779 +Tue Jul 18 09:27:38 1995    <tytso@rsx-11.mit.edu>
    6780 +
    6781 +       * namei.c (process_dir_block):
    6782 +       * mkdir.c (ext2fs_mkdir):
    6783 +       * expanddir.c (expand_dir_proc): Use ext2fs_{read,write}_dir_block
    6784 +               to read/write the directory block.
    6785 +
    6786 +       * dirblock.c (ext2fs_read_dir_block), ext2fs_write_dir_block): New
    6787 +               file containing functions for reading and writing
    6788 +               directory blocks (byte swapping if necesssary)
    6789 +
    6790 +       * block.c (block_iterate_ind, block_iterate_dind,
    6791 +               block_iterate_tind): Byte swap the block addresses if
    6792 +               EXT2_SWAP_BYTES is set (and swap them back before writing
    6793 +               them out.)
    6794 +
    6795 +       * inode.c (inocpy_with_swap): New function.
    6796 +       (ext2fs_get_next_inode, ext2fs_read_inode, ext2fs_write_inode):
    6797 +               Call inocpy_with_swap if EXT2_SWAP_BYTES if set.
    6798 +
    6799 +       * closefs.c (ext2fs_flush): If EXT2_SWAP_BYTES is set, then swap
    6800 +               the superblock and group descriptors before writing it out.
    6801 +
    6802 +       * openfs.c (ext2fs_open): If the magic number is byte-swapped,
    6803 +               then set the EXT2_SWAP_BYTES and byte-swap the superblock
    6804 +               and group descriptors.
    6805 +
    6806 +       * swapfs.c (ext2fs_swap_super, ext2fs_swap_group_desc): New functions
    6807 +               to desp ext2 filesystem structures.
    6808 +
    6809 +       * bitops.c (set_bit, clear_bit, test_bit): Use modifications
    6810 +               supplied by Pete A. Zaitcev so that the C language
    6811 +               versions of these functions are more portable.  They will
    6812 +               now work on both little and big endian systems, and the
    6813 +               assumption that 32-bit integers are used is gone.
    6814 +
    6815 +       * bitops.h (ext2_swab16, ext2_swab32): Added new functions for
    6816 +               doing byte swapping.
    6817 +
    6818 +       * ext2fs.h (EXT2_SWAP_BYTES): Add new flag which indicates that
    6819 +               byte swapping should take place.
    6820 +
    6821 +Sun Jul 16 06:21:43 1995    <tytso@rsx-11.mit.edu>
    6822 +
    6823 +       * Makefile.in, cmp_bitmaps.c (ext2fs_compare_block_bitmap_end,
    6824 +               ext2fs_compare_inode_bitmap_end): Added new file
    6825 +               containing routines to compare bitmaps.
    6826 +
    6827 +       * ext2_err.et (EXT2_ET_NEQ_BLOCK_BITMAP, EXT2_ET_NEQ_INODE_BITMAP):
    6828 +               Added new error codes.
    6829 +
    6830 +Sat Jul 15 04:23:37 1995    <tytso@rsx-11.mit.edu>
    6831 +
    6832 +       * inode.c (ext2fs_get_next_inode): Don't check scan->inode_buffer;
    6833 +               if the magic number is correct, it will be allocated.
    6834 +
    6835 +Fri Jul 14 19:02:59 1995    <tytso@rsx-11.mit.edu>
    6836 +
    6837 +       * block.c (block_iterate_ind, block_iterate_dind,
    6838 +               block_iterate_tind): Don't recompute block_nr each loop;
    6839 +               just increment it!  Factor check of BLOCK_FLAG_APPEND out
    6840 +               of the loop.  Factor mask of BLOCK_CHANGED into changed
    6841 +               variable out of the loop.  (block_iterate_ind, in
    6842 +               particular, gets called a lot, so every little
    6843 +               optimization helps.)
    6844 +
    6845 +Thu Jul 13 08:02:45 1995    <tytso@rsx-11.mit.edu>
    6846 +
    6847 +       * block.c (block_iterate_ind, block_iterate_dind,
    6848 +               block_iterate_tind): Precompute limit of loop to speed up
    6849 +               block_iterate_ind and company.
    6850 +
    6851 +       * bitops.h (ext2fs_fast_mark_block_bitmap,
    6852 +               ext2fs_fast_unmark_block_bitmap, ext2fs_fast_test_block_bitmap,
    6853 +               ext2fs_fast_mark_inode_bitmap, ext2fs_fast_unmark_inode_bitmap,
    6854 +               ext2fs_fast_test_inode_bitmap): Add fast version of these
    6855 +               functions, which don't do range checking.
    6856 +
    6857 +       * bitops.h (ext2fs_get_block_bitmap_start,
    6858 +               ext2fs_get_inode_bitmap_start, ext2fs_get_block_bitmap_end,
    6859 +               ext2fs_get_inode_bitmap_end): Add new accessor functions
    6860 +               which return the start and end points of the bitmaps.
    6861 +
    6862 +Tue Jul 11 18:59:41 1995    <tytso@rsx-11.mit.edu>
    6863 +
    6864 +       * llseek.c (ext2_llseek): If the offset is small enough, use lseek
    6865 +               instead of llseek.  The errno if the offset is too large
    6866 +               and lseek is not supported should be EINVAL, not -EINVAL.
    6867 +
    6868 +Thu Jun 15 23:43:02 1995  Remy Card  <card@bbj>
    6869 +
    6870 +       * Makefile.in: Added support for ELF shared libraries.
    6871 +               Fixed typos in the compilation rules.
    6872 +               (distclean): Added Makefile.
    6873 +
    6874 +       * llseek.c (llseek): New function, if llseek() does not exist in the
    6875 +       C library.
    6876 +       (ext2_llseek): Changed to call llseek().
    6877 +
    6878 +Mon Jun 12 08:29:07 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
    6879 +
    6880 +       * ext2fs.h: Use __u32 to define blk_t, instead of unsigned long.
    6881 +
    6882 +Sun Jun 11 15:02:54 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
    6883 +
    6884 +       * mkdir.c (ext2fs_mkdir): Use LINUX_S_IFDIR instead of S_IFDIR.
    6885 +
    6886 +       * ext2fs.h (LINUX_S_IFDIR): Define a linux specific versions of
    6887 +               the S_*, which are normally defined in <sys/stat.h>.  This
    6888 +               allows us to compile e2fsprogs on a non-Linux system,
    6889 +               which may have a different value for S_IFDIR.
    6890 +
    6891 +Sat Jun 10 23:47:05 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>
    6892 +
    6893 +       * bitops.c (clear_bit, set_bit): Remove calls to cli() and sti();
    6894 +               this is a user-mode application!
    6895 +
    6896 +Thu Jun  8 13:13:22 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>
    6897 +
    6898 +       * llseek.c: Put the include of <linux/unistd.h> inside the #ifdef
    6899 +       __linux__ so that non-linux systems won't see it.
    6900 +
    6901 +       * alloc.c: Include <errno.h> if possible.
    6902 +       * badblocks.c: Ditto.
    6903 +       * bb_inode.c: Ditto.
    6904 +       * bitmaps.c: Ditto.
    6905 +       * block.c: Ditto.
    6906 +       * expanddir.c: Ditto.
    6907 +       * get_pathname.c: Ditto.
    6908 +       * initialize.c: Ditto.
    6909 +       * inode.c: Ditto.
    6910 +       * llseek.c: Ditto.
    6911 +       * mkdir.c: Ditto.
    6912 +       * namei.c: Ditto.
    6913 +       * newdir.c: Ditto.
    6914 +       * openfs.c: Ditto.
    6915 +       * rw_bitmaps.c: Ditto.
    6916 +       * unix_io.c: Ditto.
    6917 +
    6918 +       * Makefile.in: Rewritten to conform to GNU coding standards and
    6919 +       support separate compilation directories.
    6920 +
    6921 +Thu May 11 04:13:12 1995    <tytso@rsx-11.mit.edu>
    6922 +
    6923 +       * initialize.c (ext2fs_initialize): Don't allow more than one
    6924 +               bitmaps's worth of inodes in a group.
    6925 +
    6926 +Sat Mar 11 14:07:11 1995  Theodore Y. Ts'o  <tytso@localhost>
    6927 +
    6928 +       * llseek.c (ext2_llseek): Added error checking to the llseek()
    6929 +               compat code to protect against overflow.  This only
    6930 +               applies to 1.0 and early 1.1 kernels, which don't support
    6931 +               the llseek() system call.
    6932 +
    6933 +Thu Nov 24 16:29:00 1994  Theodore Y. Ts'o  (tytso@rt-11)
    6934 +
    6935 +       * unix_io.c (unix_open): Initialize the read_error and write_error
    6936 +               io_channel pointers to be null.
    6937 +
    6938 +       * bb_inode.c (clear_bad_block_proc): If an illegal block number is
    6939 +               found, clear it but don't try to update the filesystem
    6940 +               accounting information, since that's hopeless anyway.
    6941 +
    6942 +       * block.c (bloblock_iterate_ind, bloblock_iterate_dind,
    6943 +       bloblock_iterate_tind): Check to see if the indirect blocks are
    6944 +               valid before trying to read them.
    6945 +
    6946 +       * ext2_err.et (EXT2_ET_BAD_IND_BLOCK, EX2_ET_BAD_DIND_BLOCK,
    6947 +       EXT2_ET_BAD_TIND_BLOCK): Add new error codes.
    6948 +
    6949 +       * bitops.h (ext2fs_mark_block_bitmap, ext2fs_unmark_block_bitmap,
    6950 +       ext2fs_test_block_bitmap, ext2fs_mark_inode_bitmap,
    6951 +       ext2fs_unmark_inode_bitmap, ext2fs_test_inode_bitmap):  If an
    6952 +               illegal block or inode number is passed in, return instead
    6953 +               of trying to test, set, or clear the bit.
    6954 +
    6955 +Mon Nov  7 21:32:33 1994  Remy Card  <card@bbj>
    6956 +
    6957 +       * Makefile: Added a dummy install target in case shared libraries
    6958 +               are not built.
    6959 +
    6960 +Mon Oct 24 14:11:44 1994    (tytso@rsx-11)
    6961 +
    6962 +       * bitmaps.c (ext2fs_allocate_block_bitmap): Fix calculation of how
    6963 +               the real last block of the bitmap should be calculated.
    6964 +
    6965 +Wed Sep  7 10:05:36 1994    (tytso@rsx-11)
    6966 +
    6967 +       * bitmaps.c (ext2fs_fudge_inode_bitmap_end,
    6968 +               ext2fs_fudge_block_bitmap_end, ext2fs_clear_inode_bitmap,
    6969 +               ext2fs_clear_block_bitmap, ext2fs_free_inode_bitmap,
    6970 +               ext2fs_free_block_bitmap): Add magic number checking for
    6971 +               the inode and block bitmaps.
    6972 +
    6973 +       * bitmaps.c (ext2fs_allocate_block_bitmap): Fix to set the correct
    6974 +               magic number for a block bitmap instead of an inode bitmap.
    6975 +
    6976 +       * inode.c (ext2fs_close_inode_scan, ext2fs_get_next_inode):  Add
    6977 +               magic number checking for the inode_scan structure.
    6978 +
    6979 +       * badblocks.c (badblocks_list_free, badblocks_list_add,
    6980 +               badblocks_list_test, badblocks_list_iterate_begin,
    6981 +               badblocks_list_iterate, badblocks_list_iterate_end): Add
    6982 +               magic number checking for the badblocks_list and
    6983 +               badblocks_iterate structures.
    6984 +
    6985 +       * ext2_err.et (EXT2_ET_MAGIC_UNIX_IO_CHANNEL):
    6986 +       * unix_io.c (unix_open, unix_close, unix_set_blksize, unix_read_blk,
    6987 +               unix_write_blk, unix_flush): Add magic number checking
    6988 +               both for io_channel structure and unix_private_data
    6989 +               structure.
    6990 +
    6991 +       * openfs.c (ext2fs_open): Add check for io_manager structure's
    6992 +               magic number.
    6993 +
    6994 +       * rw_bitmaps.c (ext2fs_write_inode_bitmap, ext2fs_write_block_bitmap,
    6995 +               ext2fs_read_inode_bitmap, ext2fs_read_block_bitmap,
    6996 +               ext2fs_read_bitmaps, ext2fs_write_bitmaps):
    6997 +       * read_bb.c (ext2fs_read_bb_inode):
    6998 +       * read_bb_file.c (ext2fs_read_bb_FILE):
    6999 +       * newdir.c (ext2fs_new_dir_block):
    7000 +       * namei.c (ext2fs_dir_iterate, ext2fs_lookup, ext2fs_namei):
    7001 +       * link.c (ext2fs_link, ext2fs_unlink):
    7002 +       * inode.c (ext2fs_open_inode_scan, ext2fs_read_inode,
    7003 +               ext2fs_write_inode, ext2fs_get_blocks,
    7004 +               ext2fs_check_directory):
    7005 +       * get_pathname.c (ext2fs_get_pathname):
    7006 +       * expanddir.c (ext2fs_expand_dir):
    7007 +       * block.c (ext2fs_block_iterate):
    7008 +       * bitmaps.c (ext2fs_allocate_inode_bitmap,
    7009 +               ext2fs_allocate_block_bitmap):
    7010 +       * bb_inode.c (ext2fs_update_bb_inode):
    7011 +       * alloc.c (ext2fs_new_inode,ext2fs_new_block,ext2fs_get_free_blocks):
    7012 +       * check_desc.c (ext2fs_check_desc):
    7013 +       * closefs.c (ext2fs_close, ext2fs_flush):
    7014 +       * freefs.c (ext2fs_free): Add check for ext2_filsys magic number.
    7015 +
    7016 +       * Makefile:
    7017 +       * ext2fs.h:
    7018 +       * openfs.c:
    7019 +       * check_desc.c (ext2fs_check_desc): Move ext2fs_check_desc from
    7020 +       openfs.c into its own file.
    7021 +
    7022 +       * ext2fs.h (EXT2_CHECK_MAGIC): Added macro for checking for
    7023 +       structure magic numbers.
    7024 +
    7025 +       * closefs.c (ext2fs_flush): Folded in Remy Card's changes to clear
    7026 +       the EXT2_VALID_FS flag in the backup superblock blocks, so that if
    7027 +       someone uses the -b option to specify the use of the backup
    7028 +       superblock --- this usually means that the main superblock is
    7029 +       toast.  :-)
    7030 +
    7031 +       * ext2fs.h:
    7032 +       * ext2_err.et (EXT2_ET_REV_TOO_HIGH):
    7033 +       * openfs.c (ext2fs_open): Folded in Remy Card's changes to add a
    7034 +       revision level to the superblock.
    7035 +
    7036 +Sun Aug 21 00:50:08 1994  Theodore Y. Ts'o  (tytso@rt-11)
    7037 +
    7038 +       * ext2fs.h:
    7039 +       * bitmaps.c:
    7040 +       * bitops.c
    7041 +       * bitops.h:
    7042 +       * openfs.c:
    7043 +       * initialize.c: Completely revamped the inode and block bitmap
    7044 +       structures, so that they can be better chance of being extensible
    7045 +       in a shared library.  They are now their own type, instead of
    7046 +       being a char *.  Also, the function signatures of
    7047 +       ext2fs_test_block_bitmap, ext2fs_mark_block_bitmap,
    7048 +       ext2fs_unmark_block_bitmap, ext2fs_test_inode_bitmap,
    7049 +       ext2fs_mark_inode_bitmap, and ext2fs_unmark_inode_bitmap were
    7050 +       changed to eliminate the ext2_filsys argument, since it is no
    7051 +       longer necessary.
    7052 +
    7053 +Wed Aug 17 21:46:44 1994  Remy Card  (card@bbj)
    7054 +
    7055 +       * unix_io.c (unix_read_blk and unix_write_blk): use the llseek
    7056 +       system call if available.
    7057 +
    7058 +       * llseek.c: new file.  This is the stub calling the llseek system
    7059 +       call which allows supports for 2GB+ file systems.
    7060 +
    7061 +       * initialize.c (ext2fs_initialize): Ext2fs_initialize now stores
    7062 +       the creator operating system.
    7063 +
    7064 +Wed Aug 17 10:03:24 1994  Theodore Y. Ts'o  (tytso@rt-11)
    7065 +
    7066 +       * initialize.c (ext2fs_initialize): Ext2fs_initialize now sets up
    7067 +       the group descriptor statistics in addition to everything else.
    7068 +       This relieves mke2fs of the responsibility of doing it.
    7069 +
    7070 +       * bitops.c, bitops.h: Add assembly inline functions for the 68000.
    7071 +       Added a new #define, _EXT2_HAVE_ASM_BITOPS_ to control whether or
    7072 +       not the generic C function equivalents should be included or not.
    7073 +
    7074 +       * openfs.c (ext2fs_open): If a superblock is specified, then use
    7075 +       the backup group descriptors that go along with this superblock,
    7076 +       instead of using the primary group descriptors.  This allows
    7077 +       e2fsck to recover filesystems where the primary group descriptors
    7078 +       have been trashed.
    7079 +
    7080 +
    7081 diff -Naur silo-1.4.13.orig/libext2fs/check_desc.c silo-1.4.13/libext2fs/check_desc.c
    7082 --- silo-1.4.13.orig/libext2fs/check_desc.c     1969-12-31 19:00:00.000000000 -0500
    7083 +++ silo-1.4.13/libext2fs/check_desc.c  2007-04-03 17:02:53.000000000 -0400
     8121diff -Naur silo-1.4.14.orig/libext2fs/check_desc.c silo-1.4.14/libext2fs/check_desc.c
     8122--- silo-1.4.14.orig/libext2fs/check_desc.c     1969-12-31 16:00:00.000000000 -0800
     8123+++ silo-1.4.14/libext2fs/check_desc.c  2009-01-07 15:07:56.000000000 -0800
    70848124@@ -0,0 +1,68 @@
    70858125+/*
     
    71518191+       return 0;
    71528192+}
    7153 diff -Naur silo-1.4.13.orig/libext2fs/closefs.c silo-1.4.13/libext2fs/closefs.c
    7154 --- silo-1.4.13.orig/libext2fs/closefs.c        1969-12-31 19:00:00.000000000 -0500
    7155 +++ silo-1.4.13/libext2fs/closefs.c     2007-04-03 17:02:53.000000000 -0400
     8193diff -Naur silo-1.4.14.orig/libext2fs/closefs.c silo-1.4.14/libext2fs/closefs.c
     8194--- silo-1.4.14.orig/libext2fs/closefs.c        1969-12-31 16:00:00.000000000 -0800
     8195+++ silo-1.4.14/libext2fs/closefs.c     2009-01-07 15:07:56.000000000 -0800
    71568196@@ -0,0 +1,381 @@
    71578197+/*
     
    75368576+}
    75378577+
    7538 diff -Naur silo-1.4.13.orig/libext2fs/cmp_bitmaps.c silo-1.4.13/libext2fs/cmp_bitmaps.c
    7539 --- silo-1.4.13.orig/libext2fs/cmp_bitmaps.c    1969-12-31 19:00:00.000000000 -0500
    7540 +++ silo-1.4.13/libext2fs/cmp_bitmaps.c 2007-04-03 17:02:53.000000000 -0400
     8578diff -Naur silo-1.4.14.orig/libext2fs/cmp_bitmaps.c silo-1.4.14/libext2fs/cmp_bitmaps.c
     8579--- silo-1.4.14.orig/libext2fs/cmp_bitmaps.c    1969-12-31 16:00:00.000000000 -0800
     8580+++ silo-1.4.14/libext2fs/cmp_bitmaps.c 2009-01-07 15:07:56.000000000 -0800
    75418581@@ -0,0 +1,72 @@
    75428582+/*
     
    76128652+}
    76138653+
    7614 diff -Naur silo-1.4.13.orig/libext2fs/dblist.c silo-1.4.13/libext2fs/dblist.c
    7615 --- silo-1.4.13.orig/libext2fs/dblist.c 1969-12-31 19:00:00.000000000 -0500
    7616 +++ silo-1.4.13/libext2fs/dblist.c      2007-04-03 17:02:53.000000000 -0400
     8654diff -Naur silo-1.4.14.orig/libext2fs/dblist.c silo-1.4.14/libext2fs/dblist.c
     8655--- silo-1.4.14.orig/libext2fs/dblist.c 1969-12-31 16:00:00.000000000 -0800
     8656+++ silo-1.4.14/libext2fs/dblist.c      2009-01-07 15:07:56.000000000 -0800
    76178657@@ -0,0 +1,260 @@
    76188658+/*
     
    78768916+       return (int) dblist->count;
    78778917+}
    7878 diff -Naur silo-1.4.13.orig/libext2fs/dblist_dir.c silo-1.4.13/libext2fs/dblist_dir.c
    7879 --- silo-1.4.13.orig/libext2fs/dblist_dir.c     1969-12-31 19:00:00.000000000 -0500
    7880 +++ silo-1.4.13/libext2fs/dblist_dir.c  2007-04-03 17:02:53.000000000 -0400
     8918diff -Naur silo-1.4.14.orig/libext2fs/dblist_dir.c silo-1.4.14/libext2fs/dblist_dir.c
     8919--- silo-1.4.14.orig/libext2fs/dblist_dir.c     1969-12-31 16:00:00.000000000 -0800
     8920+++ silo-1.4.14/libext2fs/dblist_dir.c  2009-01-07 15:07:56.000000000 -0800
    78818921@@ -0,0 +1,75 @@
    78828922+/*
     
    79558995+                                       db_info->blockcnt, 0, 0, priv_data);
    79568996+}
    7957 diff -Naur silo-1.4.13.orig/libext2fs/dirblock.c silo-1.4.13/libext2fs/dirblock.c
    7958 --- silo-1.4.13.orig/libext2fs/dirblock.c       1969-12-31 19:00:00.000000000 -0500
    7959 +++ silo-1.4.13/libext2fs/dirblock.c    2007-04-03 17:02:53.000000000 -0400
     8997diff -Naur silo-1.4.14.orig/libext2fs/dir_iterate.c silo-1.4.14/libext2fs/dir_iterate.c
     8998--- silo-1.4.14.orig/libext2fs/dir_iterate.c    1969-12-31 16:00:00.000000000 -0800
     8999+++ silo-1.4.14/libext2fs/dir_iterate.c 2009-01-07 15:07:56.000000000 -0800
     9000@@ -0,0 +1,219 @@
     9001+/*
     9002+ * dir_iterate.c --- ext2fs directory iteration operations
     9003+ *
     9004+ * Copyright (C) 1993, 1994, 1994, 1995, 1996, 1997 Theodore Ts'o.
     9005+ *
     9006+ * %Begin-Header%
     9007+ * This file may be redistributed under the terms of the GNU Public
     9008+ * License.
     9009+ * %End-Header%
     9010+ */
     9011+
     9012+#include <stdio.h>
     9013+#include <string.h>
     9014+#if HAVE_UNISTD_H
     9015+#include <unistd.h>
     9016+#endif
     9017+#if HAVE_ERRNO_H
     9018+#include <errno.h>
     9019+#endif
     9020+
     9021+#include "ext2_fs.h"
     9022+#include "ext2fsP.h"
     9023+
     9024+/*
     9025+ * This function checks to see whether or not a potential deleted
     9026+ * directory entry looks valid.  What we do is check the deleted entry
     9027+ * and each successive entry to make sure that they all look valid and
     9028+ * that the last deleted entry ends at the beginning of the next
     9029+ * undeleted entry.  Returns 1 if the deleted entry looks valid, zero
     9030+ * if not valid.
     9031+ */
     9032+static int ext2fs_validate_entry(char *buf, int offset, int final_offset)
     9033+{
     9034+       struct ext2_dir_entry *dirent;
     9035+       
     9036+       while (offset < final_offset) {
     9037+               dirent = (struct ext2_dir_entry *)(buf + offset);
     9038+               offset += dirent->rec_len;
     9039+               if ((dirent->rec_len < 8) ||
     9040+                   ((dirent->rec_len % 4) != 0) ||
     9041+                   (((dirent->name_len & 0xFF)+8) > dirent->rec_len))
     9042+                       return 0;
     9043+       }
     9044+       return (offset == final_offset);
     9045+}
     9046+
     9047+errcode_t ext2fs_dir_iterate2(ext2_filsys fs,
     9048+                             ext2_ino_t dir,
     9049+                             int flags,
     9050+                             char *block_buf,
     9051+                             int (*func)(ext2_ino_t    dir,
     9052+                                         int           entry,
     9053+                                         struct ext2_dir_entry *dirent,
     9054+                                         int   offset,
     9055+                                         int   blocksize,
     9056+                                         char  *buf,
     9057+                                         void  *priv_data),
     9058+                             void *priv_data)
     9059+{
     9060+       struct          dir_context     ctx;
     9061+       errcode_t       retval;
     9062+       
     9063+       EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
     9064+
     9065+       retval = ext2fs_check_directory(fs, dir);
     9066+       if (retval)
     9067+               return retval;
     9068+       
     9069+       ctx.dir = dir;
     9070+       ctx.flags = flags;
     9071+       if (block_buf)
     9072+               ctx.buf = block_buf;
     9073+       else {
     9074+               retval = ext2fs_get_mem(fs->blocksize, &ctx.buf);
     9075+               if (retval)
     9076+                       return retval;
     9077+       }
     9078+       ctx.func = func;
     9079+       ctx.priv_data = priv_data;
     9080+       ctx.errcode = 0;
     9081+       retval = ext2fs_block_iterate2(fs, dir, 0, 0,
     9082+                                      ext2fs_process_dir_block, &ctx);
     9083+       if (!block_buf)
     9084+               ext2fs_free_mem(&ctx.buf);
     9085+       if (retval)
     9086+               return retval;
     9087+       return ctx.errcode;
     9088+}
     9089+
     9090+struct xlate {
     9091+       int (*func)(struct ext2_dir_entry *dirent,
     9092+                   int         offset,
     9093+                   int         blocksize,
     9094+                   char        *buf,
     9095+                   void        *priv_data);
     9096+       void *real_private;
     9097+};
     9098+
     9099+static int xlate_func(ext2_ino_t dir EXT2FS_ATTR((unused)),
     9100+                     int entry EXT2FS_ATTR((unused)),
     9101+                     struct ext2_dir_entry *dirent, int offset,
     9102+                     int blocksize, char *buf, void *priv_data)
     9103+{
     9104+       struct xlate *xl = (struct xlate *) priv_data;
     9105+
     9106+       return (*xl->func)(dirent, offset, blocksize, buf, xl->real_private);
     9107+}
     9108+
     9109+extern errcode_t ext2fs_dir_iterate(ext2_filsys fs,
     9110+                             ext2_ino_t dir,
     9111+                             int flags,
     9112+                             char *block_buf,
     9113+                             int (*func)(struct ext2_dir_entry *dirent,
     9114+                                         int   offset,
     9115+                                         int   blocksize,
     9116+                                         char  *buf,
     9117+                                         void  *priv_data),
     9118+                             void *priv_data)
     9119+{
     9120+       struct xlate xl;
     9121+       
     9122+       xl.real_private = priv_data;
     9123+       xl.func = func;
     9124+
     9125+       return ext2fs_dir_iterate2(fs, dir, flags, block_buf,
     9126+                                  xlate_func, &xl);
     9127+}
     9128+
     9129+
     9130+/*
     9131+ * Helper function which is private to this module.  Used by
     9132+ * ext2fs_dir_iterate() and ext2fs_dblist_dir_iterate()
     9133+ */
     9134+int ext2fs_process_dir_block(ext2_filsys fs,
     9135+                            blk_t      *blocknr,
     9136+                            e2_blkcnt_t blockcnt,
     9137+                            blk_t      ref_block EXT2FS_ATTR((unused)),
     9138+                            int        ref_offset EXT2FS_ATTR((unused)),
     9139+                            void       *priv_data)
     9140+{
     9141+       struct dir_context *ctx = (struct dir_context *) priv_data;
     9142+       unsigned int    offset = 0;
     9143+       unsigned int    next_real_entry = 0;
     9144+       int             ret = 0;
     9145+       int             changed = 0;
     9146+       int             do_abort = 0;
     9147+       int             entry, size;
     9148+       struct ext2_dir_entry *dirent;
     9149+
     9150+       if (blockcnt < 0)
     9151+               return 0;
     9152+
     9153+       entry = blockcnt ? DIRENT_OTHER_FILE : DIRENT_DOT_FILE;
     9154+       
     9155+       ctx->errcode = ext2fs_read_dir_block(fs, *blocknr, ctx->buf);
     9156+       if (ctx->errcode)
     9157+               return BLOCK_ABORT;
     9158+
     9159+       while (offset < fs->blocksize) {
     9160+               dirent = (struct ext2_dir_entry *) (ctx->buf + offset);
     9161+               if (((offset + dirent->rec_len) > fs->blocksize) ||
     9162+                   (dirent->rec_len < 8) ||
     9163+                   ((dirent->rec_len % 4) != 0) ||
     9164+                   (((dirent->name_len & 0xFF)+8) > dirent->rec_len)) {
     9165+                       ctx->errcode = EXT2_ET_DIR_CORRUPTED;
     9166+                       return BLOCK_ABORT;
     9167+               }
     9168+               if (!dirent->inode &&
     9169+                   !(ctx->flags & DIRENT_FLAG_INCLUDE_EMPTY))
     9170+                       goto next;
     9171+
     9172+               ret = (ctx->func)(ctx->dir,
     9173+                                 (next_real_entry > offset) ?
     9174+                                 DIRENT_DELETED_FILE : entry,
     9175+                                 dirent, offset,
     9176+                                 fs->blocksize, ctx->buf,
     9177+                                 ctx->priv_data);
     9178+               if (entry < DIRENT_OTHER_FILE)
     9179+                       entry++;
     9180+                       
     9181+               if (ret & DIRENT_CHANGED)
     9182+                       changed++;
     9183+               if (ret & DIRENT_ABORT) {
     9184+                       do_abort++;
     9185+                       break;
     9186+               }
     9187+next:         
     9188+               if (next_real_entry == offset)
     9189+                       next_real_entry += dirent->rec_len;
     9190+
     9191+               if (ctx->flags & DIRENT_FLAG_INCLUDE_REMOVED) {
     9192+                       size = ((dirent->name_len & 0xFF) + 11) & ~3;
     9193+
     9194+                       if (dirent->rec_len != size)  {
     9195+                               unsigned int final_offset;
     9196+
     9197+                               final_offset = offset + dirent->rec_len;
     9198+                               offset += size;
     9199+                               while (offset < final_offset &&
     9200+                                      !ext2fs_validate_entry(ctx->buf,
     9201+                                                             offset,
     9202+                                                             final_offset))
     9203+                                       offset += 4;
     9204+                               continue;
     9205+                       }
     9206+               }
     9207+               offset += dirent->rec_len;
     9208+       }
     9209+
     9210+       if (changed) {
     9211+               ctx->errcode = ext2fs_write_dir_block(fs, *blocknr, ctx->buf);
     9212+               if (ctx->errcode)
     9213+                       return BLOCK_ABORT;
     9214+       }
     9215+       if (do_abort)
     9216+               return BLOCK_ABORT;
     9217+       return 0;
     9218+}
     9219+
     9220diff -Naur silo-1.4.14.orig/libext2fs/dirblock.c silo-1.4.14/libext2fs/dirblock.c
     9221--- silo-1.4.14.orig/libext2fs/dirblock.c       1969-12-31 16:00:00.000000000 -0800
     9222+++ silo-1.4.14/libext2fs/dirblock.c    2009-01-07 15:07:56.000000000 -0800
    79609223@@ -0,0 +1,130 @@
    79619224+/*
     
    80899352+}
    80909353+
    8091 diff -Naur silo-1.4.13.orig/libext2fs/dirhash.c silo-1.4.13/libext2fs/dirhash.c
    8092 --- silo-1.4.13.orig/libext2fs/dirhash.c        1969-12-31 19:00:00.000000000 -0500
    8093 +++ silo-1.4.13/libext2fs/dirhash.c     2007-04-03 17:02:53.000000000 -0400
     9354diff -Naur silo-1.4.14.orig/libext2fs/dirhash.c silo-1.4.14/libext2fs/dirhash.c
     9355--- silo-1.4.14.orig/libext2fs/dirhash.c        1969-12-31 16:00:00.000000000 -0800
     9356+++ silo-1.4.14/libext2fs/dirhash.c     2009-01-07 15:07:56.000000000 -0800
    80949357@@ -0,0 +1,233 @@
    80959358+/*
     
    83269589+       return 0;
    83279590+}
    8328 diff -Naur silo-1.4.13.orig/libext2fs/dir_iterate.c silo-1.4.13/libext2fs/dir_iterate.c
    8329 --- silo-1.4.13.orig/libext2fs/dir_iterate.c    1969-12-31 19:00:00.000000000 -0500
    8330 +++ silo-1.4.13/libext2fs/dir_iterate.c 2007-04-03 17:02:53.000000000 -0400
    8331 @@ -0,0 +1,219 @@
    8332 +/*
    8333 + * dir_iterate.c --- ext2fs directory iteration operations
    8334 + *
    8335 + * Copyright (C) 1993, 1994, 1994, 1995, 1996, 1997 Theodore Ts'o.
    8336 + *
    8337 + * %Begin-Header%
    8338 + * This file may be redistributed under the terms of the GNU Public
    8339 + * License.
    8340 + * %End-Header%
    8341 + */
    8342 +
    8343 +#include <stdio.h>
    8344 +#include <string.h>
    8345 +#if HAVE_UNISTD_H
    8346 +#include <unistd.h>
    8347 +#endif
    8348 +#if HAVE_ERRNO_H
    8349 +#include <errno.h>
    8350 +#endif
    8351 +
    8352 +#include "ext2_fs.h"
    8353 +#include "ext2fsP.h"
    8354 +
    8355 +/*
    8356 + * This function checks to see whether or not a potential deleted
    8357 + * directory entry looks valid.  What we do is check the deleted entry
    8358 + * and each successive entry to make sure that they all look valid and
    8359 + * that the last deleted entry ends at the beginning of the next
    8360 + * undeleted entry.  Returns 1 if the deleted entry looks valid, zero
    8361 + * if not valid.
    8362 + */
    8363 +static int ext2fs_validate_entry(char *buf, int offset, int final_offset)
    8364 +{
    8365 +       struct ext2_dir_entry *dirent;
    8366 +       
    8367 +       while (offset < final_offset) {
    8368 +               dirent = (struct ext2_dir_entry *)(buf + offset);
    8369 +               offset += dirent->rec_len;
    8370 +               if ((dirent->rec_len < 8) ||
    8371 +                   ((dirent->rec_len % 4) != 0) ||
    8372 +                   (((dirent->name_len & 0xFF)+8) > dirent->rec_len))
    8373 +                       return 0;
    8374 +       }
    8375 +       return (offset == final_offset);
    8376 +}
    8377 +
    8378 +errcode_t ext2fs_dir_iterate2(ext2_filsys fs,
    8379 +                             ext2_ino_t dir,
    8380 +                             int flags,
    8381 +                             char *block_buf,
    8382 +                             int (*func)(ext2_ino_t    dir,
    8383 +                                         int           entry,
    8384 +                                         struct ext2_dir_entry *dirent,
    8385 +                                         int   offset,
    8386 +                                         int   blocksize,
    8387 +                                         char  *buf,
    8388 +                                         void  *priv_data),
    8389 +                             void *priv_data)
    8390 +{
    8391 +       struct          dir_context     ctx;
    8392 +       errcode_t       retval;
    8393 +       
    8394 +       EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
    8395 +
    8396 +       retval = ext2fs_check_directory(fs, dir);
    8397 +       if (retval)
    8398 +               return retval;
    8399 +       
    8400 +       ctx.dir = dir;
    8401 +       ctx.flags = flags;
    8402 +       if (block_buf)
    8403 +               ctx.buf = block_buf;
    8404 +       else {
    8405 +               retval = ext2fs_get_mem(fs->blocksize, &ctx.buf);
    8406 +               if (retval)
    8407 +                       return retval;
    8408 +       }
    8409 +       ctx.func = func;
    8410 +       ctx.priv_data = priv_data;
    8411 +       ctx.errcode = 0;
    8412 +       retval = ext2fs_block_iterate2(fs, dir, 0, 0,
    8413 +                                      ext2fs_process_dir_block, &ctx);
    8414 +       if (!block_buf)
    8415 +               ext2fs_free_mem(&ctx.buf);
    8416 +       if (retval)
    8417 +               return retval;
    8418 +       return ctx.errcode;
    8419 +}
    8420 +
    8421 +struct xlate {
    8422 +       int (*func)(struct ext2_dir_entry *dirent,
    8423 +                   int         offset,
    8424 +                   int         blocksize,
    8425 +                   char        *buf,
    8426 +                   void        *priv_data);
    8427 +       void *real_private;
    8428 +};
    8429 +
    8430 +static int xlate_func(ext2_ino_t dir EXT2FS_ATTR((unused)),
    8431 +                     int entry EXT2FS_ATTR((unused)),
    8432 +                     struct ext2_dir_entry *dirent, int offset,
    8433 +                     int blocksize, char *buf, void *priv_data)
    8434 +{
    8435 +       struct xlate *xl = (struct xlate *) priv_data;
    8436 +
    8437 +       return (*xl->func)(dirent, offset, blocksize, buf, xl->real_private);
    8438 +}
    8439 +
    8440 +extern errcode_t ext2fs_dir_iterate(ext2_filsys fs,
    8441 +                             ext2_ino_t dir,
    8442 +                             int flags,
    8443 +                             char *block_buf,
    8444 +                             int (*func)(struct ext2_dir_entry *dirent,
    8445 +                                         int   offset,
    8446 +                                         int   blocksize,
    8447 +                                         char  *buf,
    8448 +                                         void  *priv_data),
    8449 +                             void *priv_data)
    8450 +{
    8451 +       struct xlate xl;
    8452 +       
    8453 +       xl.real_private = priv_data;
    8454 +       xl.func = func;
    8455 +
    8456 +       return ext2fs_dir_iterate2(fs, dir, flags, block_buf,
    8457 +                                  xlate_func, &xl);
    8458 +}
    8459 +
    8460 +
    8461 +/*
    8462 + * Helper function which is private to this module.  Used by
    8463 + * ext2fs_dir_iterate() and ext2fs_dblist_dir_iterate()
    8464 + */
    8465 +int ext2fs_process_dir_block(ext2_filsys fs,
    8466 +                            blk_t      *blocknr,
    8467 +                            e2_blkcnt_t blockcnt,
    8468 +                            blk_t      ref_block EXT2FS_ATTR((unused)),
    8469 +                            int        ref_offset EXT2FS_ATTR((unused)),
    8470 +                            void       *priv_data)
    8471 +{
    8472 +       struct dir_context *ctx = (struct dir_context *) priv_data;
    8473 +       unsigned int    offset = 0;
    8474 +       unsigned int    next_real_entry = 0;
    8475 +       int             ret = 0;
    8476 +       int             changed = 0;
    8477 +       int             do_abort = 0;
    8478 +       int             entry, size;
    8479 +       struct ext2_dir_entry *dirent;
    8480 +
    8481 +       if (blockcnt < 0)
    8482 +               return 0;
    8483 +
    8484 +       entry = blockcnt ? DIRENT_OTHER_FILE : DIRENT_DOT_FILE;
    8485 +       
    8486 +       ctx->errcode = ext2fs_read_dir_block(fs, *blocknr, ctx->buf);
    8487 +       if (ctx->errcode)
    8488 +               return BLOCK_ABORT;
    8489 +
    8490 +       while (offset < fs->blocksize) {
    8491 +               dirent = (struct ext2_dir_entry *) (ctx->buf + offset);
    8492 +               if (((offset + dirent->rec_len) > fs->blocksize) ||
    8493 +                   (dirent->rec_len < 8) ||
    8494 +                   ((dirent->rec_len % 4) != 0) ||
    8495 +                   (((dirent->name_len & 0xFF)+8) > dirent->rec_len)) {
    8496 +                       ctx->errcode = EXT2_ET_DIR_CORRUPTED;
    8497 +                       return BLOCK_ABORT;
    8498 +               }
    8499 +               if (!dirent->inode &&
    8500 +                   !(ctx->flags & DIRENT_FLAG_INCLUDE_EMPTY))
    8501 +                       goto next;
    8502 +
    8503 +               ret = (ctx->func)(ctx->dir,
    8504 +                                 (next_real_entry > offset) ?
    8505 +                                 DIRENT_DELETED_FILE : entry,
    8506 +                                 dirent, offset,
    8507 +                                 fs->blocksize, ctx->buf,
    8508 +                                 ctx->priv_data);
    8509 +               if (entry < DIRENT_OTHER_FILE)
    8510 +                       entry++;
    8511 +                       
    8512 +               if (ret & DIRENT_CHANGED)
    8513 +                       changed++;
    8514 +               if (ret & DIRENT_ABORT) {
    8515 +                       do_abort++;
    8516 +                       break;
    8517 +               }
    8518 +next:         
    8519 +               if (next_real_entry == offset)
    8520 +                       next_real_entry += dirent->rec_len;
    8521 +
    8522 +               if (ctx->flags & DIRENT_FLAG_INCLUDE_REMOVED) {
    8523 +                       size = ((dirent->name_len & 0xFF) + 11) & ~3;
    8524 +
    8525 +                       if (dirent->rec_len != size)  {
    8526 +                               unsigned int final_offset;
    8527 +
    8528 +                               final_offset = offset + dirent->rec_len;
    8529 +                               offset += size;
    8530 +                               while (offset < final_offset &&
    8531 +                                      !ext2fs_validate_entry(ctx->buf,
    8532 +                                                             offset,
    8533 +                                                             final_offset))
    8534 +                                       offset += 4;
    8535 +                               continue;
    8536 +                       }
    8537 +               }
    8538 +               offset += dirent->rec_len;
    8539 +       }
    8540 +
    8541 +       if (changed) {
    8542 +               ctx->errcode = ext2fs_write_dir_block(fs, *blocknr, ctx->buf);
    8543 +               if (ctx->errcode)
    8544 +                       return BLOCK_ABORT;
    8545 +       }
    8546 +       if (do_abort)
    8547 +               return BLOCK_ABORT;
    8548 +       return 0;
    8549 +}
    8550 +
    8551 diff -Naur silo-1.4.13.orig/libext2fs/dosio.c silo-1.4.13/libext2fs/dosio.c
    8552 --- silo-1.4.13.orig/libext2fs/dosio.c  1969-12-31 19:00:00.000000000 -0500
    8553 +++ silo-1.4.13/libext2fs/dosio.c       2007-04-03 17:02:53.000000000 -0400
     9591diff -Naur silo-1.4.14.orig/libext2fs/dosio.c silo-1.4.14/libext2fs/dosio.c
     9592--- silo-1.4.14.orig/libext2fs/dosio.c  1969-12-31 16:00:00.000000000 -0800
     9593+++ silo-1.4.14/libext2fs/dosio.c       2009-01-07 15:07:56.000000000 -0800
    85549594@@ -0,0 +1,456 @@
    85559595+/*
     
    900910049+  return 0;
    901010050+}
    9011 diff -Naur silo-1.4.13.orig/libext2fs/dosio.h silo-1.4.13/libext2fs/dosio.h
    9012 --- silo-1.4.13.orig/libext2fs/dosio.h  1969-12-31 19:00:00.000000000 -0500
    9013 +++ silo-1.4.13/libext2fs/dosio.h       2007-04-03 17:02:53.000000000 -0400
     10051diff -Naur silo-1.4.14.orig/libext2fs/dosio.h silo-1.4.14/libext2fs/dosio.h
     10052--- silo-1.4.14.orig/libext2fs/dosio.h  1969-12-31 16:00:00.000000000 -0800
     10053+++ silo-1.4.14/libext2fs/dosio.h       2009-01-07 15:07:56.000000000 -0800
    901410054@@ -0,0 +1,153 @@
    901510055+/*
     
    916610206+
    916710207+#endif /* __diskio_h */
    9168 diff -Naur silo-1.4.13.orig/libext2fs/dupfs.c silo-1.4.13/libext2fs/dupfs.c
    9169 --- silo-1.4.13.orig/libext2fs/dupfs.c  1969-12-31 19:00:00.000000000 -0500
    9170 +++ silo-1.4.13/libext2fs/dupfs.c       2007-04-03 17:02:53.000000000 -0400
     10208diff -Naur silo-1.4.14.orig/libext2fs/dupfs.c silo-1.4.14/libext2fs/dupfs.c
     10209--- silo-1.4.14.orig/libext2fs/dupfs.c  1969-12-31 16:00:00.000000000 -0800
     10210+++ silo-1.4.14/libext2fs/dupfs.c       2009-01-07 15:07:56.000000000 -0800
    917110211@@ -0,0 +1,96 @@
    917210212+/*
     
    926610306+}
    926710307+
    9268 diff -Naur silo-1.4.13.orig/libext2fs/e2image.h silo-1.4.13/libext2fs/e2image.h
    9269 --- silo-1.4.13.orig/libext2fs/e2image.h        1969-12-31 19:00:00.000000000 -0500
    9270 +++ silo-1.4.13/libext2fs/e2image.h     2007-04-03 17:02:53.000000000 -0400
     10308diff -Naur silo-1.4.14.orig/libext2fs/e2image.h silo-1.4.14/libext2fs/e2image.h
     10309--- silo-1.4.14.orig/libext2fs/e2image.h        1969-12-31 16:00:00.000000000 -0800
     10310+++ silo-1.4.14/libext2fs/e2image.h     2009-01-07 15:07:56.000000000 -0800
    927110311@@ -0,0 +1,51 @@
    927210312+/*
     
    932110361+       
    932210362+       
    9323 diff -Naur silo-1.4.13.orig/libext2fs/expanddir.c silo-1.4.13/libext2fs/expanddir.c
    9324 --- silo-1.4.13.orig/libext2fs/expanddir.c      1969-12-31 19:00:00.000000000 -0500
    9325 +++ silo-1.4.13/libext2fs/expanddir.c   2007-04-03 17:02:53.000000000 -0400
     10363diff -Naur silo-1.4.14.orig/libext2fs/expanddir.c silo-1.4.14/libext2fs/expanddir.c
     10364--- silo-1.4.14.orig/libext2fs/expanddir.c      1969-12-31 16:00:00.000000000 -0800
     10365+++ silo-1.4.14/libext2fs/expanddir.c   2009-01-07 15:07:56.000000000 -0800
    932610366@@ -0,0 +1,126 @@
    932710367+/*
     
    945110491+       return 0;
    945210492+}
    9453 diff -Naur silo-1.4.13.orig/libext2fs/ext2_err.c silo-1.4.13/libext2fs/ext2_err.c
    9454 --- silo-1.4.13.orig/libext2fs/ext2_err.c       1969-12-31 19:00:00.000000000 -0500
    9455 +++ silo-1.4.13/libext2fs/ext2_err.c    2007-04-03 17:02:53.000000000 -0400
     10493diff -Naur silo-1.4.14.orig/libext2fs/ext2_err.c silo-1.4.14/libext2fs/ext2_err.c
     10494--- silo-1.4.14.orig/libext2fs/ext2_err.c       1969-12-31 16:00:00.000000000 -0800
     10495+++ silo-1.4.14/libext2fs/ext2_err.c    2009-01-07 15:07:56.000000000 -0800
    945610496@@ -0,0 +1,148 @@
    945710497+/*
     
    960310643+    *end = et;
    960410644+}
    9605 diff -Naur silo-1.4.13.orig/libext2fs/ext2_ext_attr.h silo-1.4.13/libext2fs/ext2_ext_attr.h
    9606 --- silo-1.4.13.orig/libext2fs/ext2_ext_attr.h  1969-12-31 19:00:00.000000000 -0500
    9607 +++ silo-1.4.13/libext2fs/ext2_ext_attr.h       2007-04-03 17:02:53.000000000 -0400
     10645diff -Naur silo-1.4.14.orig/libext2fs/ext2_ext_attr.h silo-1.4.14/libext2fs/ext2_ext_attr.h
     10646--- silo-1.4.14.orig/libext2fs/ext2_ext_attr.h  1969-12-31 16:00:00.000000000 -0800
     10647+++ silo-1.4.14/libext2fs/ext2_ext_attr.h       2009-01-07 15:07:56.000000000 -0800
    960810648@@ -0,0 +1,69 @@
    960910649+/*
     
    967610716+#endif  /* __KERNEL__ */
    967710717+
    9678 diff -Naur silo-1.4.13.orig/libext2fs/ext2_fs.h silo-1.4.13/libext2fs/ext2_fs.h
    9679 --- silo-1.4.13.orig/libext2fs/ext2_fs.h        1969-12-31 19:00:00.000000000 -0500
    9680 +++ silo-1.4.13/libext2fs/ext2_fs.h     2007-04-03 17:02:53.000000000 -0400
     10718diff -Naur silo-1.4.14.orig/libext2fs/ext2_fs.h silo-1.4.14/libext2fs/ext2_fs.h
     10719--- silo-1.4.14.orig/libext2fs/ext2_fs.h        1969-12-31 16:00:00.000000000 -0800
     10720+++ silo-1.4.14/libext2fs/ext2_fs.h     2009-01-07 15:07:56.000000000 -0800
    968110721@@ -0,0 +1,644 @@
    968210722+/*
     
    1032411364+
    1032511365+#endif /* _LINUX_EXT2_FS_H */
    10326 diff -Naur silo-1.4.13.orig/libext2fs/ext2fs.h silo-1.4.13/libext2fs/ext2fs.h
    10327 --- silo-1.4.13.orig/libext2fs/ext2fs.h 1969-12-31 19:00:00.000000000 -0500
    10328 +++ silo-1.4.13/libext2fs/ext2fs.h      2007-04-03 17:02:53.000000000 -0400
     11366diff -Naur silo-1.4.14.orig/libext2fs/ext2_io.h silo-1.4.14/libext2fs/ext2_io.h
     11367--- silo-1.4.14.orig/libext2fs/ext2_io.h        1969-12-31 16:00:00.000000000 -0800
     11368+++ silo-1.4.14/libext2fs/ext2_io.h     2009-01-07 15:07:56.000000000 -0800
     11369@@ -0,0 +1,108 @@
     11370+/*
     11371+ * io.h --- the I/O manager abstraction
     11372+ *
     11373+ * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
     11374+ *
     11375+ * %Begin-Header%
     11376+ * This file may be redistributed under the terms of the GNU Public
     11377+ * License.
     11378+ * %End-Header%
     11379+ */
     11380+
     11381+#ifndef _EXT2FS_EXT2_IO_H
     11382+#define _EXT2FS_EXT2_IO_H
     11383+
     11384+/*
     11385+ * ext2_loff_t is defined here since unix_io.c needs it.
     11386+ */
     11387+#if defined(__GNUC__) || defined(HAS_LONG_LONG)
     11388+typedef long long      ext2_loff_t;
     11389+#else
     11390+typedef long           ext2_loff_t;
     11391+#endif
     11392+
     11393+/* llseek.c */
     11394+ext2_loff_t ext2fs_llseek (int, ext2_loff_t, int);
     11395+
     11396+typedef struct struct_io_manager *io_manager;
     11397+typedef struct struct_io_channel *io_channel;
     11398+
     11399+#define CHANNEL_FLAGS_WRITETHROUGH     0x01
     11400+
     11401+struct struct_io_channel {
     11402+       errcode_t       magic;
     11403+       io_manager      manager;
     11404+       char            *name;
     11405+       int             block_size;
     11406+       errcode_t       (*read_error)(io_channel channel,
     11407+                                     unsigned long block,
     11408+                                     int count,
     11409+                                     void *data,
     11410+                                     size_t size,
     11411+                                     int actual_bytes_read,
     11412+                                     errcode_t error);
     11413+       errcode_t       (*write_error)(io_channel channel,
     11414+                                      unsigned long block,
     11415+                                      int count,
     11416+                                      const void *data,
     11417+                                      size_t size,
     11418+                                      int actual_bytes_written,
     11419+                                      errcode_t error);
     11420+       int             refcount;
     11421+       int             flags;
     11422+       int             reserved[14];
     11423+       void            *private_data;
     11424+       void            *app_data;
     11425+};
     11426+
     11427+struct struct_io_manager {
     11428+       errcode_t magic;
     11429+       const char *name;
     11430+       errcode_t (*open)(const char *name, int flags, io_channel *channel);
     11431+       errcode_t (*close)(io_channel channel);
     11432+       errcode_t (*set_blksize)(io_channel channel, int blksize);
     11433+       errcode_t (*read_blk)(io_channel channel, unsigned long block,
     11434+                             int count, void *data);
     11435+       errcode_t (*write_blk)(io_channel channel, unsigned long block,
     11436+                              int count, const void *data);
     11437+       errcode_t (*flush)(io_channel channel);
     11438+       errcode_t (*write_byte)(io_channel channel, unsigned long offset,
     11439+                               int count, const void *data);
     11440+       errcode_t (*set_option)(io_channel channel, const char *option,
     11441+                               const char *arg);
     11442+       int             reserved[14];
     11443+};
     11444+
     11445+#define IO_FLAG_RW     1
     11446+
     11447+/*
     11448+ * Convenience functions....
     11449+ */
     11450+#define io_channel_close(c)            ((c)->manager->close((c)))
     11451+#define io_channel_set_blksize(c,s)    ((c)->manager->set_blksize((c),s))
     11452+#define io_channel_read_blk(c,b,n,d)   ((c)->manager->read_blk((c),b,n,d))
     11453+#define io_channel_write_blk(c,b,n,d)  ((c)->manager->write_blk((c),b,n,d))
     11454+#define io_channel_flush(c)            ((c)->manager->flush((c)))
     11455+#define io_channel_bumpcount(c)                ((c)->refcount++)
     11456+       
     11457+/* io_manager.c */
     11458+extern errcode_t io_channel_set_options(io_channel channel,
     11459+                                       const char *options);
     11460+extern errcode_t io_channel_write_byte(io_channel channel,
     11461+                                      unsigned long offset,
     11462+                                      int count, const void *data);
     11463+
     11464+/* unix_io.c */
     11465+extern io_manager unix_io_manager;
     11466+
     11467+/* test_io.c */
     11468+extern io_manager test_io_manager, test_io_backing_manager;
     11469+extern void (*test_io_cb_read_blk)
     11470+       (unsigned long block, int count, errcode_t err);
     11471+extern void (*test_io_cb_write_blk)
     11472+       (unsigned long block, int count, errcode_t err);
     11473+extern void (*test_io_cb_set_blksize)
     11474+       (int blksize, errcode_t err);
     11475+
     11476+#endif /* _EXT2FS_EXT2_IO_H */
     11477+       
     11478diff -Naur silo-1.4.14.orig/libext2fs/ext2fs.h silo-1.4.14/libext2fs/ext2fs.h
     11479--- silo-1.4.14.orig/libext2fs/ext2fs.h 1969-12-31 16:00:00.000000000 -0800
     11480+++ silo-1.4.14/libext2fs/ext2fs.h      2009-01-07 15:07:56.000000000 -0800
    1032911481@@ -0,0 +1,1140 @@
    1033011482+/*
     
    1146812620+
    1146912621+#endif /* _EXT2FS_EXT2FS_H */
    11470 diff -Naur silo-1.4.13.orig/libext2fs/ext2fsP.h silo-1.4.13/libext2fs/ext2fsP.h
    11471 --- silo-1.4.13.orig/libext2fs/ext2fsP.h        1969-12-31 19:00:00.000000000 -0500
    11472 +++ silo-1.4.13/libext2fs/ext2fsP.h     2007-04-03 17:02:53.000000000 -0400
     12622diff -Naur silo-1.4.14.orig/libext2fs/ext2fsP.h silo-1.4.14/libext2fs/ext2fsP.h
     12623--- silo-1.4.14.orig/libext2fs/ext2fsP.h        1969-12-31 16:00:00.000000000 -0800
     12624+++ silo-1.4.14/libext2fs/ext2fsP.h     2009-01-07 15:07:56.000000000 -0800
    1147312625@@ -0,0 +1,88 @@
    1147412626+/*
     
    1156012712+
    1156112713+
    11562 diff -Naur silo-1.4.13.orig/libext2fs/ext2_io.h silo-1.4.13/libext2fs/ext2_io.h
    11563 --- silo-1.4.13.orig/libext2fs/ext2_io.h        1969-12-31 19:00:00.000000000 -0500
    11564 +++ silo-1.4.13/libext2fs/ext2_io.h     2007-04-03 17:02:53.000000000 -0400
    11565 @@ -0,0 +1,108 @@
    11566 +/*
    11567 + * io.h --- the I/O manager abstraction
    11568 + *
    11569 + * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
    11570 + *
    11571 + * %Begin-Header%
    11572 + * This file may be redistributed under the terms of the GNU Public
    11573 + * License.
    11574 + * %End-Header%
    11575 + */
    11576 +
    11577 +#ifndef _EXT2FS_EXT2_IO_H
    11578 +#define _EXT2FS_EXT2_IO_H
    11579 +
    11580 +/*
    11581 + * ext2_loff_t is defined here since unix_io.c needs it.
    11582 + */
    11583 +#if defined(__GNUC__) || defined(HAS_LONG_LONG)
    11584 +typedef long long      ext2_loff_t;
    11585 +#else
    11586 +typedef long           ext2_loff_t;
    11587 +#endif
    11588 +
    11589 +/* llseek.c */
    11590 +ext2_loff_t ext2fs_llseek (int, ext2_loff_t, int);
    11591 +
    11592 +typedef struct struct_io_manager *io_manager;
    11593 +typedef struct struct_io_channel *io_channel;
    11594 +
    11595 +#define CHANNEL_FLAGS_WRITETHROUGH     0x01
    11596 +
    11597 +struct struct_io_channel {
    11598 +       errcode_t       magic;
    11599 +       io_manager      manager;
    11600 +       char            *name;
    11601 +       int             block_size;
    11602 +       errcode_t       (*read_error)(io_channel channel,
    11603 +                                     unsigned long block,
    11604 +                                     int count,
    11605 +                                     void *data,
    11606 +                                     size_t size,
    11607 +                                     int actual_bytes_read,
    11608 +                                     errcode_t error);
    11609 +       errcode_t       (*write_error)(io_channel channel,
    11610 +                                      unsigned long block,
    11611 +                                      int count,
    11612 +                                      const void *data,
    11613 +                                      size_t size,
    11614 +                                      int actual_bytes_written,
    11615 +                                      errcode_t error);
    11616 +       int             refcount;
    11617 +       int             flags;
    11618 +       int             reserved[14];
    11619 +       void            *private_data;
    11620 +       void            *app_data;
    11621 +};
    11622 +
    11623 +struct struct_io_manager {
    11624 +       errcode_t magic;
    11625 +       const char *name;
    11626 +       errcode_t (*open)(const char *name, int flags, io_channel *channel);
    11627 +       errcode_t (*close)(io_channel channel);
    11628 +       errcode_t (*set_blksize)(io_channel channel, int blksize);
    11629 +       errcode_t (*read_blk)(io_channel channel, unsigned long block,
    11630 +                             int count, void *data);
    11631 +       errcode_t (*write_blk)(io_channel channel, unsigned long block,
    11632 +                              int count, const void *data);
    11633 +       errcode_t (*flush)(io_channel channel);
    11634 +       errcode_t (*write_byte)(io_channel channel, unsigned long offset,
    11635 +                               int count, const void *data);
    11636 +       errcode_t (*set_option)(io_channel channel, const char *option,
    11637 +                               const char *arg);
    11638 +       int             reserved[14];
    11639 +};
    11640 +
    11641 +#define IO_FLAG_RW     1
    11642 +
    11643 +/*
    11644 + * Convenience functions....
    11645 + */
    11646 +#define io_channel_close(c)            ((c)->manager->close((c)))
    11647 +#define io_channel_set_blksize(c,s)    ((c)->manager->set_blksize((c),s))
    11648 +#define io_channel_read_blk(c,b,n,d)   ((c)->manager->read_blk((c),b,n,d))
    11649 +#define io_channel_write_blk(c,b,n,d)  ((c)->manager->write_blk((c),b,n,d))
    11650 +#define io_channel_flush(c)            ((c)->manager->flush((c)))
    11651 +#define io_channel_bumpcount(c)                ((c)->refcount++)
    11652 +       
    11653 +/* io_manager.c */
    11654 +extern errcode_t io_channel_set_options(io_channel channel,
    11655 +                                       const char *options);
    11656 +extern errcode_t io_channel_write_byte(io_channel channel,
    11657 +                                      unsigned long offset,
    11658 +                                      int count, const void *data);
    11659 +
    11660 +/* unix_io.c */
    11661 +extern io_manager unix_io_manager;
    11662 +
    11663 +/* test_io.c */
    11664 +extern io_manager test_io_manager, test_io_backing_manager;
    11665 +extern void (*test_io_cb_read_blk)
    11666 +       (unsigned long block, int count, errcode_t err);
    11667 +extern void (*test_io_cb_write_blk)
    11668 +       (unsigned long block, int count, errcode_t err);
    11669 +extern void (*test_io_cb_set_blksize)
    11670 +       (int blksize, errcode_t err);
    11671 +
    11672 +#endif /* _EXT2FS_EXT2_IO_H */
    11673 +       
    11674 diff -Naur silo-1.4.13.orig/libext2fs/ext_attr.c silo-1.4.13/libext2fs/ext_attr.c
    11675 --- silo-1.4.13.orig/libext2fs/ext_attr.c       1969-12-31 19:00:00.000000000 -0500
    11676 +++ silo-1.4.13/libext2fs/ext_attr.c    2007-04-03 17:02:53.000000000 -0400
     12714diff -Naur silo-1.4.14.orig/libext2fs/ext_attr.c silo-1.4.14/libext2fs/ext_attr.c
     12715--- silo-1.4.14.orig/libext2fs/ext_attr.c       1969-12-31 16:00:00.000000000 -0800
     12716+++ silo-1.4.14/libext2fs/ext_attr.c    2009-01-07 15:07:56.000000000 -0800
    1167712717@@ -0,0 +1,105 @@
    1167812718+/*
     
    1178112821+       return retval;
    1178212822+}
    11783 diff -Naur silo-1.4.13.orig/libext2fs/fileio.c silo-1.4.13/libext2fs/fileio.c
    11784 --- silo-1.4.13.orig/libext2fs/fileio.c 1969-12-31 19:00:00.000000000 -0500
    11785 +++ silo-1.4.13/libext2fs/fileio.c      2007-04-03 17:02:53.000000000 -0400
     12823diff -Naur silo-1.4.14.orig/libext2fs/fileio.c silo-1.4.14/libext2fs/fileio.c
     12824--- silo-1.4.14.orig/libext2fs/fileio.c 1969-12-31 16:00:00.000000000 -0800
     12825+++ silo-1.4.14/libext2fs/fileio.c      2009-01-07 15:07:56.000000000 -0800
    1178612826@@ -0,0 +1,378 @@
    1178712827+/*
     
    1216313203+       return 0;
    1216413204+}
    12165 diff -Naur silo-1.4.13.orig/libext2fs/finddev.c silo-1.4.13/libext2fs/finddev.c
    12166 --- silo-1.4.13.orig/libext2fs/finddev.c        1969-12-31 19:00:00.000000000 -0500
    12167 +++ silo-1.4.13/libext2fs/finddev.c     2007-04-03 17:02:53.000000000 -0400
     13205diff -Naur silo-1.4.14.orig/libext2fs/finddev.c silo-1.4.14/libext2fs/finddev.c
     13206--- silo-1.4.14.orig/libext2fs/finddev.c        1969-12-31 16:00:00.000000000 -0800
     13207+++ silo-1.4.14/libext2fs/finddev.c     2009-01-07 15:07:56.000000000 -0800
    1216813208@@ -0,0 +1,208 @@
    1216913209+/*
     
    1237513415+       
    1237613416+#endif
    12377 diff -Naur silo-1.4.13.orig/libext2fs/flushb.c silo-1.4.13/libext2fs/flushb.c
    12378 --- silo-1.4.13.orig/libext2fs/flushb.c 1969-12-31 19:00:00.000000000 -0500
    12379 +++ silo-1.4.13/libext2fs/flushb.c      2007-04-03 17:02:53.000000000 -0400
     13417diff -Naur silo-1.4.14.orig/libext2fs/flushb.c silo-1.4.14/libext2fs/flushb.c
     13418--- silo-1.4.14.orig/libext2fs/flushb.c 1969-12-31 16:00:00.000000000 -0800
     13419+++ silo-1.4.14/libext2fs/flushb.c      2009-01-07 15:07:56.000000000 -0800
    1238013420@@ -0,0 +1,82 @@
    1238113421+/*
     
    1246113501+       return 0;
    1246213502+}
    12463 diff -Naur silo-1.4.13.orig/libext2fs/freefs.c silo-1.4.13/libext2fs/freefs.c
    12464 --- silo-1.4.13.orig/libext2fs/freefs.c 1969-12-31 19:00:00.000000000 -0500
    12465 +++ silo-1.4.13/libext2fs/freefs.c      2007-04-03 17:02:53.000000000 -0400
     13503diff -Naur silo-1.4.14.orig/libext2fs/freefs.c silo-1.4.14/libext2fs/freefs.c
     13504--- silo-1.4.14.orig/libext2fs/freefs.c 1969-12-31 16:00:00.000000000 -0800
     13505+++ silo-1.4.14/libext2fs/freefs.c      2009-01-07 15:07:56.000000000 -0800
    1246613506@@ -0,0 +1,147 @@
    1246713507+/*
     
    1261213652+}
    1261313653+
    12614 diff -Naur silo-1.4.13.orig/libext2fs/gen_bitmap.c silo-1.4.13/libext2fs/gen_bitmap.c
    12615 --- silo-1.4.13.orig/libext2fs/gen_bitmap.c     1969-12-31 19:00:00.000000000 -0500
    12616 +++ silo-1.4.13/libext2fs/gen_bitmap.c  2007-04-03 17:02:53.000000000 -0400
     13654diff -Naur silo-1.4.14.orig/libext2fs/gen_bitmap.c silo-1.4.14/libext2fs/gen_bitmap.c
     13655--- silo-1.4.14.orig/libext2fs/gen_bitmap.c     1969-12-31 16:00:00.000000000 -0800
     13656+++ silo-1.4.14/libext2fs/gen_bitmap.c  2009-01-07 15:07:56.000000000 -0800
    1261713657@@ -0,0 +1,48 @@
    1261813658+/*
     
    1266413704+       return ext2fs_clear_bit(bitno - bitmap->start, bitmap->bitmap);
    1266513705+}
    12666 diff -Naur silo-1.4.13.orig/libext2fs/get_pathname.c silo-1.4.13/libext2fs/get_pathname.c
    12667 --- silo-1.4.13.orig/libext2fs/get_pathname.c   1969-12-31 19:00:00.000000000 -0500
    12668 +++ silo-1.4.13/libext2fs/get_pathname.c        2007-04-03 17:02:53.000000000 -0400
     13706diff -Naur silo-1.4.14.orig/libext2fs/get_pathname.c silo-1.4.14/libext2fs/get_pathname.c
     13707--- silo-1.4.14.orig/libext2fs/get_pathname.c   1969-12-31 16:00:00.000000000 -0800
     13708+++ silo-1.4.14/libext2fs/get_pathname.c        2009-01-07 15:07:56.000000000 -0800
    1266913709@@ -0,0 +1,157 @@
    1267013710+/*
     
    1282513865+       
    1282613866+}
    12827 diff -Naur silo-1.4.13.orig/libext2fs/getsectsize.c silo-1.4.13/libext2fs/getsectsize.c
    12828 --- silo-1.4.13.orig/libext2fs/getsectsize.c    1969-12-31 19:00:00.000000000 -0500
    12829 +++ silo-1.4.13/libext2fs/getsectsize.c 2007-04-03 17:02:53.000000000 -0400
     13867diff -Naur silo-1.4.14.orig/libext2fs/getsectsize.c silo-1.4.14/libext2fs/getsectsize.c
     13868--- silo-1.4.14.orig/libext2fs/getsectsize.c    1969-12-31 16:00:00.000000000 -0800
     13869+++ silo-1.4.14/libext2fs/getsectsize.c 2009-01-07 15:07:56.000000000 -0800
    1283013870@@ -0,0 +1,60 @@
    1283113871+/*
     
    1288913929+       return 0;
    1289013930+}
    12891 diff -Naur silo-1.4.13.orig/libext2fs/getsize.c silo-1.4.13/libext2fs/getsize.c
    12892 --- silo-1.4.13.orig/libext2fs/getsize.c        1969-12-31 19:00:00.000000000 -0500
    12893 +++ silo-1.4.13/libext2fs/getsize.c     2007-04-03 17:02:53.000000000 -0400
     13931diff -Naur silo-1.4.14.orig/libext2fs/getsize.c silo-1.4.14/libext2fs/getsize.c
     13932--- silo-1.4.14.orig/libext2fs/getsize.c        1969-12-31 16:00:00.000000000 -0800
     13933+++ silo-1.4.14/libext2fs/getsize.c     2009-01-07 15:07:56.000000000 -0800
    1289413934@@ -0,0 +1,293 @@
    1289513935+/*
     
    1318614226+}
    1318714227+#endif
    13188 diff -Naur silo-1.4.13.orig/libext2fs/icount.c silo-1.4.13/libext2fs/icount.c
    13189 --- silo-1.4.13.orig/libext2fs/icount.c 1969-12-31 19:00:00.000000000 -0500
    13190 +++ silo-1.4.13/libext2fs/icount.c      2007-04-03 17:02:53.000000000 -0400
     14228diff -Naur silo-1.4.14.orig/libext2fs/icount.c silo-1.4.14/libext2fs/icount.c
     14229--- silo-1.4.14.orig/libext2fs/icount.c 1969-12-31 16:00:00.000000000 -0800
     14230+++ silo-1.4.14/libext2fs/icount.c      2009-01-07 15:07:56.000000000 -0800
    1319114231@@ -0,0 +1,483 @@
    1319214232+/*
     
    1367314713+       return icount->size;
    1367414714+}
    13675 diff -Naur silo-1.4.13.orig/libext2fs/imager.c silo-1.4.13/libext2fs/imager.c
    13676 --- silo-1.4.13.orig/libext2fs/imager.c 1969-12-31 19:00:00.000000000 -0500
    13677 +++ silo-1.4.13/libext2fs/imager.c      2007-04-03 17:02:53.000000000 -0400
     14715diff -Naur silo-1.4.14.orig/libext2fs/imager.c silo-1.4.14/libext2fs/imager.c
     14716--- silo-1.4.14.orig/libext2fs/imager.c 1969-12-31 16:00:00.000000000 -0800
     14717+++ silo-1.4.14/libext2fs/imager.c      2009-01-07 15:07:56.000000000 -0800
    1367814718@@ -0,0 +1,387 @@
    1367914719+/*
     
    1406415104+       return (retval);
    1406515105+}
    14066 diff -Naur silo-1.4.13.orig/libext2fs/ind_block.c silo-1.4.13/libext2fs/ind_block.c
    14067 --- silo-1.4.13.orig/libext2fs/ind_block.c      1969-12-31 19:00:00.000000000 -0500
    14068 +++ silo-1.4.13/libext2fs/ind_block.c   2007-04-03 17:02:53.000000000 -0400
     15106diff -Naur silo-1.4.14.orig/libext2fs/ind_block.c silo-1.4.14/libext2fs/ind_block.c
     15107--- silo-1.4.14.orig/libext2fs/ind_block.c      1969-12-31 16:00:00.000000000 -0800
     15108+++ silo-1.4.14/libext2fs/ind_block.c   2009-01-07 15:07:56.000000000 -0800
    1406915109@@ -0,0 +1,66 @@
    1407015110+/*
     
    1413415174+
    1413515175+
    14136 diff -Naur silo-1.4.13.orig/libext2fs/initialize.c silo-1.4.13/libext2fs/initialize.c
    14137 --- silo-1.4.13.orig/libext2fs/initialize.c     1969-12-31 19:00:00.000000000 -0500
    14138 +++ silo-1.4.13/libext2fs/initialize.c  2007-04-03 17:02:53.000000000 -0400
     15176diff -Naur silo-1.4.14.orig/libext2fs/initialize.c silo-1.4.14/libext2fs/initialize.c
     15177--- silo-1.4.14.orig/libext2fs/initialize.c     1969-12-31 16:00:00.000000000 -0800
     15178+++ silo-1.4.14/libext2fs/initialize.c  2009-01-07 15:07:56.000000000 -0800
    1413915179@@ -0,0 +1,387 @@
    1414015180+/*
     
    1452515565+       return retval;
    1452615566+}
    14527 diff -Naur silo-1.4.13.orig/libext2fs/inline.c silo-1.4.13/libext2fs/inline.c
    14528 --- silo-1.4.13.orig/libext2fs/inline.c 1969-12-31 19:00:00.000000000 -0500
    14529 +++ silo-1.4.13/libext2fs/inline.c      2007-04-03 17:02:53.000000000 -0400
     15567diff -Naur silo-1.4.14.orig/libext2fs/inline.c silo-1.4.14/libext2fs/inline.c
     15568--- silo-1.4.14.orig/libext2fs/inline.c 1969-12-31 16:00:00.000000000 -0800
     15569+++ silo-1.4.14/libext2fs/inline.c      2009-01-07 15:07:56.000000000 -0800
    1453015570@@ -0,0 +1,32 @@
    1453115571+/*
     
    1456115601+#include "ext2fs.h"
    1456215602+
    14563 diff -Naur silo-1.4.13.orig/libext2fs/inode.c silo-1.4.13/libext2fs/inode.c
    14564 --- silo-1.4.13.orig/libext2fs/inode.c  1969-12-31 19:00:00.000000000 -0500
    14565 +++ silo-1.4.13/libext2fs/inode.c       2007-04-03 17:02:53.000000000 -0400
     15603diff -Naur silo-1.4.14.orig/libext2fs/inode.c silo-1.4.14/libext2fs/inode.c
     15604--- silo-1.4.14.orig/libext2fs/inode.c  1969-12-31 16:00:00.000000000 -0800
     15605+++ silo-1.4.14/libext2fs/inode.c       2009-01-07 15:07:56.000000000 -0800
    1456615606@@ -0,0 +1,794 @@
    1456715607+/*
     
    1535916399+}
    1536016400+
    15361 diff -Naur silo-1.4.13.orig/libext2fs/inode_io.c silo-1.4.13/libext2fs/inode_io.c
    15362 --- silo-1.4.13.orig/libext2fs/inode_io.c       1969-12-31 19:00:00.000000000 -0500
    15363 +++ silo-1.4.13/libext2fs/inode_io.c    2007-04-03 17:02:53.000000000 -0400
     16401diff -Naur silo-1.4.14.orig/libext2fs/inode_io.c silo-1.4.14/libext2fs/inode_io.c
     16402--- silo-1.4.14.orig/libext2fs/inode_io.c       1969-12-31 16:00:00.000000000 -0800
     16403+++ silo-1.4.14/libext2fs/inode_io.c    2009-01-07 15:07:56.000000000 -0800
    1536416404@@ -0,0 +1,270 @@
    1536516405+/*
     
    1563316673+}
    1563416674+
    15635 diff -Naur silo-1.4.13.orig/libext2fs/io_manager.c silo-1.4.13/libext2fs/io_manager.c
    15636 --- silo-1.4.13.orig/libext2fs/io_manager.c     1969-12-31 19:00:00.000000000 -0500
    15637 +++ silo-1.4.13/libext2fs/io_manager.c  2007-04-03 17:02:53.000000000 -0400
     16675diff -Naur silo-1.4.14.orig/libext2fs/io_manager.c silo-1.4.14/libext2fs/io_manager.c
     16676--- silo-1.4.14.orig/libext2fs/io_manager.c     1969-12-31 16:00:00.000000000 -0800
     16677+++ silo-1.4.14/libext2fs/io_manager.c  2009-01-07 15:07:56.000000000 -0800
    1563816678@@ -0,0 +1,69 @@
    1563916679+/*
     
    1570616746+       return EXT2_ET_UNIMPLEMENTED;
    1570716747+}
    15708 diff -Naur silo-1.4.13.orig/libext2fs/irel.h silo-1.4.13/libext2fs/irel.h
    15709 --- silo-1.4.13.orig/libext2fs/irel.h   1969-12-31 19:00:00.000000000 -0500
    15710 +++ silo-1.4.13/libext2fs/irel.h        2007-04-03 17:02:53.000000000 -0400
     16748diff -Naur silo-1.4.14.orig/libext2fs/irel.h silo-1.4.14/libext2fs/irel.h
     16749--- silo-1.4.14.orig/libext2fs/irel.h   1969-12-31 16:00:00.000000000 -0800
     16750+++ silo-1.4.14/libext2fs/irel.h        2009-01-07 15:07:56.000000000 -0800
    1571116751@@ -0,0 +1,114 @@
    1571216752+/*
     
    1582416864+#define ext2fs_irel_delete(irel, old) ((irel)->delete((irel), old))
    1582516865+#define ext2fs_irel_free(irel) ((irel)->free((irel)))
    15826 diff -Naur silo-1.4.13.orig/libext2fs/irel_ma.c silo-1.4.13/libext2fs/irel_ma.c
    15827 --- silo-1.4.13.orig/libext2fs/irel_ma.c        1969-12-31 19:00:00.000000000 -0500
    15828 +++ silo-1.4.13/libext2fs/irel_ma.c     2007-04-03 17:02:53.000000000 -0400
     16866diff -Naur silo-1.4.14.orig/libext2fs/irel_ma.c silo-1.4.14/libext2fs/irel_ma.c
     16867--- silo-1.4.14.orig/libext2fs/irel_ma.c        1969-12-31 16:00:00.000000000 -0800
     16868+++ silo-1.4.14/libext2fs/irel_ma.c     2009-01-07 15:07:56.000000000 -0800
    1582916869@@ -0,0 +1,372 @@
    1583016870+/*
     
    1620017240+       return 0;
    1620117241+}
    16202 diff -Naur silo-1.4.13.orig/libext2fs/ismounted.c silo-1.4.13/libext2fs/ismounted.c
    16203 --- silo-1.4.13.orig/libext2fs/ismounted.c      1969-12-31 19:00:00.000000000 -0500
    16204 +++ silo-1.4.13/libext2fs/ismounted.c   2007-04-03 17:02:53.000000000 -0400
     17242diff -Naur silo-1.4.14.orig/libext2fs/ismounted.c silo-1.4.14/libext2fs/ismounted.c
     17243--- silo-1.4.14.orig/libext2fs/ismounted.c      1969-12-31 16:00:00.000000000 -0800
     17244+++ silo-1.4.14/libext2fs/ismounted.c   2009-01-07 15:07:56.000000000 -0800
    1620517245@@ -0,0 +1,377 @@
    1620617246+/*
     
    1658117621+}
    1658217622+#endif /* DEBUG */
    16583 diff -Naur silo-1.4.13.orig/libext2fs/jfs_compat.h silo-1.4.13/libext2fs/jfs_compat.h
    16584 --- silo-1.4.13.orig/libext2fs/jfs_compat.h     1969-12-31 19:00:00.000000000 -0500
    16585 +++ silo-1.4.13/libext2fs/jfs_compat.h  2007-04-03 17:02:53.000000000 -0400
     17623diff -Naur silo-1.4.14.orig/libext2fs/jfs_compat.h silo-1.4.14/libext2fs/jfs_compat.h
     17624--- silo-1.4.14.orig/libext2fs/jfs_compat.h     1969-12-31 16:00:00.000000000 -0800
     17625+++ silo-1.4.14/libext2fs/jfs_compat.h  2009-01-07 15:07:56.000000000 -0800
    1658617626@@ -0,0 +1,67 @@
    1658717627+
     
    1665217692+
    1665317693+#endif /* _JFS_COMPAT_H */
    16654 diff -Naur silo-1.4.13.orig/libext2fs/jfs_dat.h silo-1.4.13/libext2fs/jfs_dat.h
    16655 --- silo-1.4.13.orig/libext2fs/jfs_dat.h        1969-12-31 19:00:00.000000000 -0500
    16656 +++ silo-1.4.13/libext2fs/jfs_dat.h     2007-04-03 17:02:53.000000000 -0400
     17694diff -Naur silo-1.4.14.orig/libext2fs/jfs_dat.h silo-1.4.14/libext2fs/jfs_dat.h
     17695--- silo-1.4.14.orig/libext2fs/jfs_dat.h        1969-12-31 16:00:00.000000000 -0800
     17696+++ silo-1.4.14/libext2fs/jfs_dat.h     2009-01-07 15:07:56.000000000 -0800
    1665717697@@ -0,0 +1,64 @@
    1665817698+/*
     
    1672017760+} journal_superblock_t;
    1672117761+
    16722 diff -Naur silo-1.4.13.orig/libext2fs/jfs_user.h silo-1.4.13/libext2fs/jfs_user.h
    16723 --- silo-1.4.13.orig/libext2fs/jfs_user.h       1969-12-31 19:00:00.000000000 -0500
    16724 +++ silo-1.4.13/libext2fs/jfs_user.h    2007-04-03 17:02:53.000000000 -0400
     17762diff -Naur silo-1.4.14.orig/libext2fs/jfs_user.h silo-1.4.14/libext2fs/jfs_user.h
     17763--- silo-1.4.14.orig/libext2fs/jfs_user.h       1969-12-31 16:00:00.000000000 -0800
     17764+++ silo-1.4.14/libext2fs/jfs_user.h    2009-01-07 15:07:56.000000000 -0800
    1672517765@@ -0,0 +1,8 @@
    1672617766+#ifndef _JFS_USER_H
     
    1673217772+
    1673317773+#endif /* _JFS_USER_H */
    16734 diff -Naur silo-1.4.13.orig/libext2fs/kernel-jbd.h silo-1.4.13/libext2fs/kernel-jbd.h
    16735 --- silo-1.4.13.orig/libext2fs/kernel-jbd.h     1969-12-31 19:00:00.000000000 -0500
    16736 +++ silo-1.4.13/libext2fs/kernel-jbd.h  2007-04-03 17:02:53.000000000 -0400
     17774diff -Naur silo-1.4.14.orig/libext2fs/kernel-jbd.h silo-1.4.14/libext2fs/kernel-jbd.h
     17775--- silo-1.4.14.orig/libext2fs/kernel-jbd.h     1969-12-31 16:00:00.000000000 -0800
     17776+++ silo-1.4.14/libext2fs/kernel-jbd.h  2009-01-07 15:07:57.000000000 -0800
    1673717777@@ -0,0 +1,910 @@
    1673817778+/*
     
    1764618686+#endif /* defined(__KERNEL__) && !defined(CONFIG_JBD) */
    1764718687+#endif /* _LINUX_JBD_H */
    17648 diff -Naur silo-1.4.13.orig/libext2fs/kernel-list.h silo-1.4.13/libext2fs/kernel-list.h
    17649 --- silo-1.4.13.orig/libext2fs/kernel-list.h    1969-12-31 19:00:00.000000000 -0500
    17650 +++ silo-1.4.13/libext2fs/kernel-list.h 2007-04-03 17:02:53.000000000 -0400
     18688diff -Naur silo-1.4.14.orig/libext2fs/kernel-list.h silo-1.4.14/libext2fs/kernel-list.h
     18689--- silo-1.4.14.orig/libext2fs/kernel-list.h    1969-12-31 16:00:00.000000000 -0800
     18690+++ silo-1.4.14/libext2fs/kernel-list.h 2009-01-07 15:07:57.000000000 -0800
    1765118691@@ -0,0 +1,112 @@
    1765218692+#ifndef _LINUX_LIST_H
     
    1776218802+
    1776318803+#endif
    17764 diff -Naur silo-1.4.13.orig/libext2fs/link.c silo-1.4.13/libext2fs/link.c
    17765 --- silo-1.4.13.orig/libext2fs/link.c   1969-12-31 19:00:00.000000000 -0500
    17766 +++ silo-1.4.13/libext2fs/link.c        2007-04-03 17:02:53.000000000 -0400
     18804diff -Naur silo-1.4.14.orig/libext2fs/link.c silo-1.4.14/libext2fs/link.c
     18805--- silo-1.4.14.orig/libext2fs/link.c   1969-12-31 16:00:00.000000000 -0800
     18806+++ silo-1.4.14/libext2fs/link.c        2009-01-07 15:07:57.000000000 -0800
    1776718807@@ -0,0 +1,134 @@
    1776818808+/*
     
    1790018940+       return 0;
    1790118941+}
    17902 diff -Naur silo-1.4.13.orig/libext2fs/llseek.c silo-1.4.13/libext2fs/llseek.c
    17903 --- silo-1.4.13.orig/libext2fs/llseek.c 1969-12-31 19:00:00.000000000 -0500
    17904 +++ silo-1.4.13/libext2fs/llseek.c      2007-04-03 17:02:53.000000000 -0400
     18942diff -Naur silo-1.4.14.orig/libext2fs/llseek.c silo-1.4.14/libext2fs/llseek.c
     18943--- silo-1.4.14.orig/libext2fs/llseek.c 1969-12-31 16:00:00.000000000 -0800
     18944+++ silo-1.4.14/libext2fs/llseek.c      2009-01-07 15:07:57.000000000 -0800
    1790518945@@ -0,0 +1,138 @@
    1790618946+/*
     
    1804219082+
    1804319083+
    18044 diff -Naur silo-1.4.13.orig/libext2fs/lookup.c silo-1.4.13/libext2fs/lookup.c
    18045 --- silo-1.4.13.orig/libext2fs/lookup.c 1969-12-31 19:00:00.000000000 -0500
    18046 +++ silo-1.4.13/libext2fs/lookup.c      2007-04-03 17:02:53.000000000 -0400
     19084diff -Naur silo-1.4.14.orig/libext2fs/lookup.c silo-1.4.14/libext2fs/lookup.c
     19085--- silo-1.4.14.orig/libext2fs/lookup.c 1969-12-31 16:00:00.000000000 -0800
     19086+++ silo-1.4.14/libext2fs/lookup.c      2009-01-07 15:07:57.000000000 -0800
    1804719087@@ -0,0 +1,69 @@
    1804819088+/*
     
    1811519155+
    1811619156+
    18117 diff -Naur silo-1.4.13.orig/libext2fs/Makefile silo-1.4.13/libext2fs/Makefile
    18118 --- silo-1.4.13.orig/libext2fs/Makefile 1969-12-31 19:00:00.000000000 -0500
    18119 +++ silo-1.4.13/libext2fs/Makefile      2007-04-03 17:02:53.000000000 -0400
    18120 @@ -0,0 +1,21 @@
    18121 +
    18122 +include ../Rules.make
    18123 +
    18124 +DEFS = -DLOCALEDIR=\"$(localedir)\" -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DENABLE_HTREE=1 -DENABLE_SWAPFS=1 -DPACKAGE=\"e2fsprogs\" -DVERSION=\"0.14.1\" -DHAVE_LONG_LONG=1 -DHAVE_LONG_DOUBLE=1 -DHAVE_WCHAR_T=1 -DHAVE_WINT_T=1 -DHAVE_INTTYPES_H_WITH_UINTMAX=1 -DHAVE_STDINT_H_WITH_UINTMAX=1 -DHAVE_INTMAX_T=1 -DHAVE_POSIX_PRINTF=1 -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DHAVE_STDLIB_H=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DINTDIV0_RAISES_SIGFPE=1 -DHAVE_UNSIGNED_LONG_LONG=1 -DHAVE_UINTMAX_T=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STDINT_H=1 -DHAVE_ARGZ_H=1 -DHAVE_LIMITS_H=1 -DHAVE_LOCALE_H=1 -DHAVE_NL_TYPES_H=1 -DHAVE_MALLOC_H=1 -DHAVE_STDDEF_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_ASPRINTF=1 -DHAVE_FWPRINTF=1 -DHAVE_GETCWD=1 -DHAVE_GETEGID=1 -DHAVE_GETEUID=1 -DHAVE_GETGID=1 -DHAVE_GETUID=1 -DHAVE_MEMPCPY=1 -DHAVE_MUNMAP=1 -DHAVE_PUTENV=1 -DHAVE_SETENV=1 -DHAVE_SETLOCALE=1 -DHAVE_SNPRINTF=1 -DHAVE_STPCPY=1 -DHAVE_STRCASECMP=1 -DHAVE_STRDUP=1 -DHAVE_STRTOUL=1 -DHAVE_TSEARCH=1 -DHAVE_WCSLEN=1 -DHAVE___ARGZ_COUNT=1 -DHAVE___ARGZ_STRINGIFY=1 -DHAVE___ARGZ_NEXT=1 -DHAVE___FSETLOCKING=1 -DHAVE_DECL__SNPRINTF=0 -DHAVE_DECL__SNWPRINTF=0 -DHAVE_DECL_FEOF_UNLOCKED=1 -DHAVE_DECL_FGETS_UNLOCKED=0 -DHAVE_DECL_GETC_UNLOCKED=1 -DHAVE_ICONV=1 -DICONV_CONST= -DHAVE_LANGINFO_CODESET=1 -DHAVE_LC_MESSAGES=1 -DENABLE_NLS=1 -DHAVE_GETTEXT=1 -DHAVE_DCGETTEXT=1 -DHAVE_STDLIB_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STDARG_H=1 -DHAVE_STDINT_H=1 -DHAVE_ERRNO_H=1 -DHAVE_MALLOC_H=1 -DHAVE_MNTENT_H=1 -DHAVE_PATHS_H=1 -DHAVE_DIRENT_H=1 -DHAVE_GETOPT_H=1 -DHAVE_SETJMP_H=1 -DHAVE_SIGNAL_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_LINUX_FD_H=1 -DHAVE_LINUX_MAJOR_H=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_PRCTL_H=1 -DHAVE_SYS_QUEUE_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_SYS_SYSMACROS_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_NETINET_IN_H=1 -DHAVE_SYS_MOUNT_H=1 -DHAVE_NET_IF_H=1 -DHAVE_VPRINTF=1 -DHAVE_RECLEN_DIRENT=1 -DHAVE_TYPE_SSIZE_T=1 -DHAVE_LSEEK64_PROTOTYPE=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=4 -DSIZEOF_LONG_LONG=8 -DHAVE_INTTYPES_H=1 -DHAVE_INTPTR_T=1 -DHAVE_GETRUSAGE=1 -DHAVE_LLSEEK=1 -DHAVE_LSEEK64=1 -DHAVE_OPEN64=1 -DHAVE_STRTOULL=1 -DHAVE_STRCASECMP=1 -DHAVE_SRANDOM=1 -DHAVE_FCHOWN=1 -DHAVE_MALLINFO=1 -DHAVE_FDATASYNC=1 -DHAVE_STRNLEN=1 -DHAVE_STRPTIME=1 -DHAVE_SYSCONF=1 -DHAVE_PATHCONF=1 -DHAVE_POSIX_MEMALIGN=1 -DHAVE_MEMALIGN=1 -DHAVE_VALLOC=1 -DHAVE___SECURE_GETENV=1 -DHAVE_PRCTL=1 -DHAVE_DLOPEN=1 -DHAVE_EXT2_IOCTLS=1
    18125 +
    18126 +DEBUGFS_LIB_OBJS = inode_io.o namei.o write_bb_file.o
    18127 +RESIZE_LIB_OBJS = rs_bitmap.o dupfs.o test_io.o
    18128 +E2IMAGE_LIB_OBJS = imager.o
    18129 +OBJS= $(DEBUGFS_LIB_OBJS) $(RESIZE_LIB_OBJS) $(E2IMAGE_LIB_OBJS) ext2_err.o alloc.o alloc_sb.o alloc_stats.o alloc_tables.o badblocks.o bb_inode.o bitmaps.o bitops.o block.o bmap.o check_desc.o closefs.o dblist.o dblist_dir.o dirblock.o dirhash.o dir_iterate.o expanddir.o ext_attr.o finddev.o flushb.o freefs.o gen_bitmap.o get_pathname.o getsize.o getsectsize.o icount.o ind_block.o initialize.o inline.o inode.o io_manager.o ismounted.o link.o llseek.o lookup.o mkdir.o mkjournal.o native.o newdir.o openfs.o read_bb.o read_bb_file.o res_gdt.o rw_bitmaps.o swapfs.o unix_io.o unlink.o valid_blk.o version.o
    18130 +
    18131 +all: libext2fs.a
    18132 +
    18133 +libext2fs.a: $(OBJS)
    18134 +       $(RM) libext2fs.a
    18135 +       $(AR) rc libext2fs.a $(OBJS)
    18136 +
    18137 +clean:
    18138 +       $(RM) -f libext2fs.a $(OBJS)
    18139 +
    18140 +.c.o:
    18141 +       $(CC-SILO) $(CFLAGS) $(DEFS) -c $< -o $@
    18142 diff -Naur silo-1.4.13.orig/libext2fs/mkdir.c silo-1.4.13/libext2fs/mkdir.c
    18143 --- silo-1.4.13.orig/libext2fs/mkdir.c  1969-12-31 19:00:00.000000000 -0500
    18144 +++ silo-1.4.13/libext2fs/mkdir.c       2007-04-03 17:02:53.000000000 -0400
     19157diff -Naur silo-1.4.14.orig/libext2fs/mkdir.c silo-1.4.14/libext2fs/mkdir.c
     19158--- silo-1.4.14.orig/libext2fs/mkdir.c  1969-12-31 16:00:00.000000000 -0800
     19159+++ silo-1.4.14/libext2fs/mkdir.c       2009-01-07 15:07:57.000000000 -0800
    1814519160@@ -0,0 +1,142 @@
    1814619161+/*
     
    1828619301+
    1828719302+
    18288 diff -Naur silo-1.4.13.orig/libext2fs/mkjournal.c silo-1.4.13/libext2fs/mkjournal.c
    18289 --- silo-1.4.13.orig/libext2fs/mkjournal.c      1969-12-31 19:00:00.000000000 -0500
    18290 +++ silo-1.4.13/libext2fs/mkjournal.c   2007-04-03 17:02:53.000000000 -0400
     19303diff -Naur silo-1.4.14.orig/libext2fs/mkjournal.c silo-1.4.14/libext2fs/mkjournal.c
     19304--- silo-1.4.14.orig/libext2fs/mkjournal.c      1969-12-31 16:00:00.000000000 -0800
     19305+++ silo-1.4.14/libext2fs/mkjournal.c   2009-01-07 15:07:57.000000000 -0800
    1829119306@@ -0,0 +1,425 @@
    1829219307+/*
     
    1871519730+}
    1871619731+#endif
    18717 diff -Naur silo-1.4.13.orig/libext2fs/namei.c silo-1.4.13/libext2fs/namei.c
    18718 --- silo-1.4.13.orig/libext2fs/namei.c  1969-12-31 19:00:00.000000000 -0500
    18719 +++ silo-1.4.13/libext2fs/namei.c       2007-04-03 17:02:53.000000000 -0400
     19732diff -Naur silo-1.4.14.orig/libext2fs/namei.c silo-1.4.14/libext2fs/namei.c
     19733--- silo-1.4.14.orig/libext2fs/namei.c  1969-12-31 16:00:00.000000000 -0800
     19734+++ silo-1.4.14/libext2fs/namei.c       2009-01-07 15:07:57.000000000 -0800
    1872019735@@ -0,0 +1,205 @@
    1872119736+/*
     
    1892419939+}
    1892519940+
    18926 diff -Naur silo-1.4.13.orig/libext2fs/native.c silo-1.4.13/libext2fs/native.c
    18927 --- silo-1.4.13.orig/libext2fs/native.c 1969-12-31 19:00:00.000000000 -0500
    18928 +++ silo-1.4.13/libext2fs/native.c      2007-04-03 17:02:53.000000000 -0400
     19941diff -Naur silo-1.4.14.orig/libext2fs/native.c silo-1.4.14/libext2fs/native.c
     19942--- silo-1.4.14.orig/libext2fs/native.c 1969-12-31 16:00:00.000000000 -0800
     19943+++ silo-1.4.14/libext2fs/native.c      2009-01-07 15:07:57.000000000 -0800
    1892919944@@ -0,0 +1,27 @@
    1893019945+/*
     
    1895519970+       
    1895619971+       
    18957 diff -Naur silo-1.4.13.orig/libext2fs/newdir.c silo-1.4.13/libext2fs/newdir.c
    18958 --- silo-1.4.13.orig/libext2fs/newdir.c 1969-12-31 19:00:00.000000000 -0500
    18959 +++ silo-1.4.13/libext2fs/newdir.c      2007-04-03 17:02:53.000000000 -0400
     19972diff -Naur silo-1.4.14.orig/libext2fs/newdir.c silo-1.4.14/libext2fs/newdir.c
     19973--- silo-1.4.14.orig/libext2fs/newdir.c 1969-12-31 16:00:00.000000000 -0800
     19974+++ silo-1.4.14/libext2fs/newdir.c      2009-01-07 15:07:57.000000000 -0800
    1896019975@@ -0,0 +1,72 @@
    1896119976+/*
     
    1903120046+       return 0;
    1903220047+}
    19033 diff -Naur silo-1.4.13.orig/libext2fs/nt_io.c silo-1.4.13/libext2fs/nt_io.c
    19034 --- silo-1.4.13.orig/libext2fs/nt_io.c  1969-12-31 19:00:00.000000000 -0500
    19035 +++ silo-1.4.13/libext2fs/nt_io.c       2007-04-03 17:02:53.000000000 -0400
     20048diff -Naur silo-1.4.14.orig/libext2fs/nt_io.c silo-1.4.14/libext2fs/nt_io.c
     20049--- silo-1.4.14.orig/libext2fs/nt_io.c  1969-12-31 16:00:00.000000000 -0800
     20050+++ silo-1.4.14/libext2fs/nt_io.c       2009-01-07 15:07:57.000000000 -0800
    1903620051@@ -0,0 +1,1513 @@
    1903720052+/*
     
    2054821563+
    2054921564+
    20550 diff -Naur silo-1.4.13.orig/libext2fs/openfs.c silo-1.4.13/libext2fs/openfs.c
    20551 --- silo-1.4.13.orig/libext2fs/openfs.c 1969-12-31 19:00:00.000000000 -0500
    20552 +++ silo-1.4.13/libext2fs/openfs.c      2007-04-03 17:02:53.000000000 -0400
     21565diff -Naur silo-1.4.14.orig/libext2fs/openfs.c silo-1.4.14/libext2fs/openfs.c
     21566--- silo-1.4.14.orig/libext2fs/openfs.c 1969-12-31 16:00:00.000000000 -0800
     21567+++ silo-1.4.14/libext2fs/openfs.c      2009-01-07 15:07:57.000000000 -0800
    2055321568@@ -0,0 +1,326 @@
    2055421569+/*
     
    2087821893+       return 0;
    2087921894+}
    20880 diff -Naur silo-1.4.13.orig/libext2fs/read_bb.c silo-1.4.13/libext2fs/read_bb.c
    20881 --- silo-1.4.13.orig/libext2fs/read_bb.c        1969-12-31 19:00:00.000000000 -0500
    20882 +++ silo-1.4.13/libext2fs/read_bb.c     2007-04-03 17:02:53.000000000 -0400
     21895diff -Naur silo-1.4.14.orig/libext2fs/read_bb.c silo-1.4.14/libext2fs/read_bb.c
     21896--- silo-1.4.14.orig/libext2fs/read_bb.c        1969-12-31 16:00:00.000000000 -0800
     21897+++ silo-1.4.14/libext2fs/read_bb.c     2009-01-07 15:07:57.000000000 -0800
    2088321898@@ -0,0 +1,97 @@
    2088421899+/*
     
    2097921994+
    2098021995+
    20981 diff -Naur silo-1.4.13.orig/libext2fs/read_bb_file.c silo-1.4.13/libext2fs/read_bb_file.c
    20982 --- silo-1.4.13.orig/libext2fs/read_bb_file.c   1969-12-31 19:00:00.000000000 -0500
    20983 +++ silo-1.4.13/libext2fs/read_bb_file.c        2007-04-03 17:02:53.000000000 -0400
     21996diff -Naur silo-1.4.14.orig/libext2fs/read_bb_file.c silo-1.4.14/libext2fs/read_bb_file.c
     21997--- silo-1.4.14.orig/libext2fs/read_bb_file.c   1969-12-31 16:00:00.000000000 -0800
     21998+++ silo-1.4.14/libext2fs/read_bb_file.c        2009-01-07 15:07:57.000000000 -0800
    2098421999@@ -0,0 +1,97 @@
    2098522000+/*
     
    2108022095+
    2108122096+
    21082 diff -Naur silo-1.4.13.orig/libext2fs/res_gdt.c silo-1.4.13/libext2fs/res_gdt.c
    21083 --- silo-1.4.13.orig/libext2fs/res_gdt.c        1969-12-31 19:00:00.000000000 -0500
    21084 +++ silo-1.4.13/libext2fs/res_gdt.c     2007-04-03 17:02:53.000000000 -0400
     22097diff -Naur silo-1.4.14.orig/libext2fs/res_gdt.c silo-1.4.14/libext2fs/res_gdt.c
     22098--- silo-1.4.14.orig/libext2fs/res_gdt.c        1969-12-31 16:00:00.000000000 -0800
     22099+++ silo-1.4.14/libext2fs/res_gdt.c     2009-01-07 15:07:57.000000000 -0800
    2108522100@@ -0,0 +1,220 @@
    2108622101+/*
     
    2130422319+}
    2130522320+
    21306 diff -Naur silo-1.4.13.orig/libext2fs/rs_bitmap.c silo-1.4.13/libext2fs/rs_bitmap.c
    21307 --- silo-1.4.13.orig/libext2fs/rs_bitmap.c      1969-12-31 19:00:00.000000000 -0500
    21308 +++ silo-1.4.13/libext2fs/rs_bitmap.c   2007-04-03 17:02:53.000000000 -0400
     22321diff -Naur silo-1.4.14.orig/libext2fs/rs_bitmap.c silo-1.4.14/libext2fs/rs_bitmap.c
     22322--- silo-1.4.14.orig/libext2fs/rs_bitmap.c      1969-12-31 16:00:00.000000000 -0800
     22323+++ silo-1.4.14/libext2fs/rs_bitmap.c   2009-01-07 15:07:57.000000000 -0800
    2130922324@@ -0,0 +1,106 @@
    2131022325+/*
     
    2141422429+}
    2141522430+
    21416 diff -Naur silo-1.4.13.orig/libext2fs/rw_bitmaps.c silo-1.4.13/libext2fs/rw_bitmaps.c
    21417 --- silo-1.4.13.orig/libext2fs/rw_bitmaps.c     1969-12-31 19:00:00.000000000 -0500
    21418 +++ silo-1.4.13/libext2fs/rw_bitmaps.c  2007-04-03 17:02:53.000000000 -0400
     22431diff -Naur silo-1.4.14.orig/libext2fs/rw_bitmaps.c silo-1.4.14/libext2fs/rw_bitmaps.c
     22432--- silo-1.4.14.orig/libext2fs/rw_bitmaps.c     1969-12-31 16:00:00.000000000 -0800
     22433+++ silo-1.4.14/libext2fs/rw_bitmaps.c  2009-01-07 15:07:57.000000000 -0800
    2141922434@@ -0,0 +1,300 @@
    2142022435+/*
     
    2171822733+}     
    2171922734+
    21720 diff -Naur silo-1.4.13.orig/libext2fs/sparse.c silo-1.4.13/libext2fs/sparse.c
    21721 --- silo-1.4.13.orig/libext2fs/sparse.c 1969-12-31 19:00:00.000000000 -0500
    21722 +++ silo-1.4.13/libext2fs/sparse.c      2007-04-03 17:02:53.000000000 -0400
     22735diff -Naur silo-1.4.14.orig/libext2fs/sparse.c silo-1.4.14/libext2fs/sparse.c
     22736--- silo-1.4.14.orig/libext2fs/sparse.c 1969-12-31 16:00:00.000000000 -0800
     22737+++ silo-1.4.14/libext2fs/sparse.c      2009-01-07 15:07:57.000000000 -0800
    2172322738@@ -0,0 +1,78 @@
    2172422739+/*
     
    2180022815+       return ret;
    2180122816+}
    21802 diff -Naur silo-1.4.13.orig/libext2fs/swapfs.c silo-1.4.13/libext2fs/swapfs.c
    21803 --- silo-1.4.13.orig/libext2fs/swapfs.c 1969-12-31 19:00:00.000000000 -0500
    21804 +++ silo-1.4.13/libext2fs/swapfs.c      2007-04-03 17:02:53.000000000 -0400
     22817diff -Naur silo-1.4.14.orig/libext2fs/swapfs.c silo-1.4.14/libext2fs/swapfs.c
     22818--- silo-1.4.14.orig/libext2fs/swapfs.c 1969-12-31 16:00:00.000000000 -0800
     22819+++ silo-1.4.14/libext2fs/swapfs.c      2009-01-07 15:07:57.000000000 -0800
    2180522820@@ -0,0 +1,237 @@
    2180622821+/*
     
    2204123056+
    2204223057+#endif
    22043 diff -Naur silo-1.4.13.orig/libext2fs/test_io.c silo-1.4.13/libext2fs/test_io.c
    22044 --- silo-1.4.13.orig/libext2fs/test_io.c        1969-12-31 19:00:00.000000000 -0500
    22045 +++ silo-1.4.13/libext2fs/test_io.c     2007-04-03 17:02:53.000000000 -0400
     23058diff -Naur silo-1.4.14.orig/libext2fs/test_io.c silo-1.4.14/libext2fs/test_io.c
     23059--- silo-1.4.14.orig/libext2fs/test_io.c        1969-12-31 16:00:00.000000000 -0800
     23060+++ silo-1.4.14/libext2fs/test_io.c     2009-01-07 15:07:57.000000000 -0800
    2204623061@@ -0,0 +1,411 @@
    2204723062+/*
     
    2245623471+       return retval;
    2245723472+}
    22458 diff -Naur silo-1.4.13.orig/libext2fs/tst_badblocks.c silo-1.4.13/libext2fs/tst_badblocks.c
    22459 --- silo-1.4.13.orig/libext2fs/tst_badblocks.c  1969-12-31 19:00:00.000000000 -0500
    22460 +++ silo-1.4.13/libext2fs/tst_badblocks.c       2007-04-03 17:02:53.000000000 -0400
     23473diff -Naur silo-1.4.14.orig/libext2fs/tst_badblocks.c silo-1.4.14/libext2fs/tst_badblocks.c
     23474--- silo-1.4.14.orig/libext2fs/tst_badblocks.c  1969-12-31 16:00:00.000000000 -0800
     23475+++ silo-1.4.14/libext2fs/tst_badblocks.c       2009-01-07 15:07:57.000000000 -0800
    2246123476@@ -0,0 +1,293 @@
    2246223477+/*
     
    2275323768+
    2275423769+}
    22755 diff -Naur silo-1.4.13.orig/libext2fs/tst_bitops.c silo-1.4.13/libext2fs/tst_bitops.c
    22756 --- silo-1.4.13.orig/libext2fs/tst_bitops.c     1969-12-31 19:00:00.000000000 -0500
    22757 +++ silo-1.4.13/libext2fs/tst_bitops.c  2007-04-03 17:02:53.000000000 -0400
     23770diff -Naur silo-1.4.14.orig/libext2fs/tst_bitops.c silo-1.4.14/libext2fs/tst_bitops.c
     23771--- silo-1.4.14.orig/libext2fs/tst_bitops.c     1969-12-31 16:00:00.000000000 -0800
     23772+++ silo-1.4.14/libext2fs/tst_bitops.c  2009-01-07 15:07:57.000000000 -0800
    2275823773@@ -0,0 +1,44 @@
    2275923774+/*
     
    2280123816+       }
    2280223817+}
    22803 diff -Naur silo-1.4.13.orig/libext2fs/tst_byteswap.c silo-1.4.13/libext2fs/tst_byteswap.c
    22804 --- silo-1.4.13.orig/libext2fs/tst_byteswap.c   1969-12-31 19:00:00.000000000 -0500
    22805 +++ silo-1.4.13/libext2fs/tst_byteswap.c        2007-04-03 17:02:53.000000000 -0400
     23818diff -Naur silo-1.4.14.orig/libext2fs/tst_byteswap.c silo-1.4.14/libext2fs/tst_byteswap.c
     23819--- silo-1.4.14.orig/libext2fs/tst_byteswap.c   1969-12-31 16:00:00.000000000 -0800
     23820+++ silo-1.4.14/libext2fs/tst_byteswap.c        2009-01-07 15:07:57.000000000 -0800
    2280623821@@ -0,0 +1,92 @@
    2280723822+/*
     
    2289723912+       return errors;
    2289823913+}
    22899 diff -Naur silo-1.4.13.orig/libext2fs/tst_getsectsize.c silo-1.4.13/libext2fs/tst_getsectsize.c
    22900 --- silo-1.4.13.orig/libext2fs/tst_getsectsize.c        1969-12-31 19:00:00.000000000 -0500
    22901 +++ silo-1.4.13/libext2fs/tst_getsectsize.c     2007-04-03 17:02:53.000000000 -0400
     23914diff -Naur silo-1.4.14.orig/libext2fs/tst_getsectsize.c silo-1.4.14/libext2fs/tst_getsectsize.c
     23915--- silo-1.4.14.orig/libext2fs/tst_getsectsize.c        1969-12-31 16:00:00.000000000 -0800
     23916+++ silo-1.4.14/libext2fs/tst_getsectsize.c     2009-01-07 15:07:57.000000000 -0800
    2290223917@@ -0,0 +1,47 @@
    2290323918+/*
     
    2294823963+       exit(0);
    2294923964+}
    22950 diff -Naur silo-1.4.13.orig/libext2fs/tst_getsize.c silo-1.4.13/libext2fs/tst_getsize.c
    22951 --- silo-1.4.13.orig/libext2fs/tst_getsize.c    1969-12-31 19:00:00.000000000 -0500
    22952 +++ silo-1.4.13/libext2fs/tst_getsize.c 2007-04-03 17:02:53.000000000 -0400
     23965diff -Naur silo-1.4.14.orig/libext2fs/tst_getsize.c silo-1.4.14/libext2fs/tst_getsize.c
     23966--- silo-1.4.14.orig/libext2fs/tst_getsize.c    1969-12-31 16:00:00.000000000 -0800
     23967+++ silo-1.4.14/libext2fs/tst_getsize.c 2009-01-07 15:07:57.000000000 -0800
    2295323968@@ -0,0 +1,44 @@
    2295423969+/*
     
    2299624011+       return 0;
    2299724012+}
    22998 diff -Naur silo-1.4.13.orig/libext2fs/tst_iscan.c silo-1.4.13/libext2fs/tst_iscan.c
    22999 --- silo-1.4.13.orig/libext2fs/tst_iscan.c      1969-12-31 19:00:00.000000000 -0500
    23000 +++ silo-1.4.13/libext2fs/tst_iscan.c   2007-04-03 17:02:53.000000000 -0400
     24013diff -Naur silo-1.4.14.orig/libext2fs/tst_iscan.c silo-1.4.14/libext2fs/tst_iscan.c
     24014--- silo-1.4.14.orig/libext2fs/tst_iscan.c      1969-12-31 16:00:00.000000000 -0800
     24015+++ silo-1.4.14/libext2fs/tst_iscan.c   2009-01-07 15:07:57.000000000 -0800
    2300124016@@ -0,0 +1,218 @@
    2300224017+/*
     
    2321824233+}
    2321924234+
    23220 diff -Naur silo-1.4.13.orig/libext2fs/unix_io.c silo-1.4.13/libext2fs/unix_io.c
    23221 --- silo-1.4.13.orig/libext2fs/unix_io.c        1969-12-31 19:00:00.000000000 -0500
    23222 +++ silo-1.4.13/libext2fs/unix_io.c     2007-04-03 17:02:53.000000000 -0400
     24235diff -Naur silo-1.4.14.orig/libext2fs/unix_io.c silo-1.4.14/libext2fs/unix_io.c
     24236--- silo-1.4.14.orig/libext2fs/unix_io.c        1969-12-31 16:00:00.000000000 -0800
     24237+++ silo-1.4.14/libext2fs/unix_io.c     2009-01-07 15:07:57.000000000 -0800
    2322324238@@ -0,0 +1,710 @@
    2322424239+/*
     
    2393224947+       return EXT2_ET_INVALID_ARGUMENT;
    2393324948+}
    23934 diff -Naur silo-1.4.13.orig/libext2fs/unlink.c silo-1.4.13/libext2fs/unlink.c
    23935 --- silo-1.4.13.orig/libext2fs/unlink.c 1969-12-31 19:00:00.000000000 -0500
    23936 +++ silo-1.4.13/libext2fs/unlink.c      2007-04-03 17:02:53.000000000 -0400
     24949diff -Naur silo-1.4.14.orig/libext2fs/unlink.c silo-1.4.14/libext2fs/unlink.c
     24950--- silo-1.4.14.orig/libext2fs/unlink.c 1969-12-31 16:00:00.000000000 -0800
     24951+++ silo-1.4.14/libext2fs/unlink.c      2009-01-07 15:07:57.000000000 -0800
    2393724952@@ -0,0 +1,99 @@
    2393824953+/*
     
    2403525050+}
    2403625051+
    24037 diff -Naur silo-1.4.13.orig/libext2fs/valid_blk.c silo-1.4.13/libext2fs/valid_blk.c
    24038 --- silo-1.4.13.orig/libext2fs/valid_blk.c      1969-12-31 19:00:00.000000000 -0500
    24039 +++ silo-1.4.13/libext2fs/valid_blk.c   2007-04-03 17:02:53.000000000 -0400
     25052diff -Naur silo-1.4.14.orig/libext2fs/valid_blk.c silo-1.4.14/libext2fs/valid_blk.c
     25053--- silo-1.4.14.orig/libext2fs/valid_blk.c      1969-12-31 16:00:00.000000000 -0800
     25054+++ silo-1.4.14/libext2fs/valid_blk.c   2009-01-07 15:07:57.000000000 -0800
    2404025055@@ -0,0 +1,56 @@
    2404125056+/*
     
    2409525110+       return 1;
    2409625111+}
    24097 diff -Naur silo-1.4.13.orig/libext2fs/version.c silo-1.4.13/libext2fs/version.c
    24098 --- silo-1.4.13.orig/libext2fs/version.c        1969-12-31 19:00:00.000000000 -0500
    24099 +++ silo-1.4.13/libext2fs/version.c     2007-04-03 17:02:53.000000000 -0400
     25112diff -Naur silo-1.4.14.orig/libext2fs/version.c silo-1.4.14/libext2fs/version.c
     25113--- silo-1.4.14.orig/libext2fs/version.c        1969-12-31 16:00:00.000000000 -0800
     25114+++ silo-1.4.14/libext2fs/version.c     2009-01-07 15:07:57.000000000 -0800
    2410025115@@ -0,0 +1,52 @@
    2410125116+/*
     
    2415125166+       return ext2fs_parse_version_string(lib_version);
    2415225167+}
    24153 diff -Naur silo-1.4.13.orig/libext2fs/version.h silo-1.4.13/libext2fs/version.h
    24154 --- silo-1.4.13.orig/libext2fs/version.h        1969-12-31 19:00:00.000000000 -0500
    24155 +++ silo-1.4.13/libext2fs/version.h     2007-04-03 17:02:53.000000000 -0400
     25168diff -Naur silo-1.4.14.orig/libext2fs/version.h silo-1.4.14/libext2fs/version.h
     25169--- silo-1.4.14.orig/libext2fs/version.h        1969-12-31 16:00:00.000000000 -0800
     25170+++ silo-1.4.14/libext2fs/version.h     2009-01-07 15:07:57.000000000 -0800
    2415625171@@ -0,0 +1,11 @@
    2415725172+/*
     
    2416625181+#define E2FSPROGS_VERSION "1.38"
    2416725182+#define E2FSPROGS_DATE "30-Jun-2005"
    24168 diff -Naur silo-1.4.13.orig/libext2fs/write_bb_file.c silo-1.4.13/libext2fs/write_bb_file.c
    24169 --- silo-1.4.13.orig/libext2fs/write_bb_file.c  1969-12-31 19:00:00.000000000 -0500
    24170 +++ silo-1.4.13/libext2fs/write_bb_file.c       2007-04-03 17:02:53.000000000 -0400
     25183diff -Naur silo-1.4.14.orig/libext2fs/write_bb_file.c silo-1.4.14/libext2fs/write_bb_file.c
     25184--- silo-1.4.14.orig/libext2fs/write_bb_file.c  1969-12-31 16:00:00.000000000 -0800
     25185+++ silo-1.4.14/libext2fs/write_bb_file.c       2009-01-07 15:07:57.000000000 -0800
    2417125186@@ -0,0 +1,34 @@
    2417225187+/*
     
    2420425219+       return 0;
    2420525220+}
    24206 diff -Naur silo-1.4.13.orig/Makefile silo-1.4.13/Makefile
    24207 --- silo-1.4.13.orig/Makefile   2006-06-01 13:24:53.000000000 -0400
    24208 +++ silo-1.4.13/Makefile        2007-04-03 17:02:53.000000000 -0400
    24209 @@ -3,7 +3,7 @@
    24210  
    24211  # These only get built on Linux
    24212  ifeq ($(OPSYS),Linux)
    24213 -  SUBDIRS  = common first second first-isofs tilo
    24214 +  SUBDIRS  = common first libext2fs second first-isofs tilo
    24215    MANPAGES = maketilo.1 tilo.1
    24216  endif
    24217  
    24218 diff -Naur silo-1.4.13.orig/Rules.make silo-1.4.13/Rules.make
    24219 --- silo-1.4.13.orig/Rules.make 2006-06-21 03:51:03.000000000 -0400
    24220 +++ silo-1.4.13/Rules.make      2007-04-03 17:02:53.000000000 -0400
    24221 @@ -1,12 +1,14 @@
    24222  VERSION=1.4.13
    24223  IMGVERSION=0.99
    24224  RM=rm -f
    24225 -# We want to force 32-bit builds
    24226 -CC=gcc -m32
    24227 -LD=ld -m elf32_sparc
    24228 -AS=as
    24229 -STRIP=strip
    24230 -NM=nm
    24231 +CC=$(CROSS_COMPILE)gcc
    24232 +CC-SILO=$(CC) -m32 -Wa,-32 -I../include/emul_32
    24233 +BUILD_CC=gcc
    24234 +LD=$(CROSS_COMPILE)ld -m elf32_sparc
    24235 +AS=$(CROSS_COMPILE)as
    24236 +STRIP=$(CROSS_COMPILE)strip
    24237 +NM=$(CROSS_COMPILE)nm
    24238 +
    24239  ELFTOAOUT=elftoaout
    24240  BIN2H=../common/bin2h
    24241  
    24242 diff -Naur silo-1.4.13.orig/second/fs/ufs.c silo-1.4.13/second/fs/ufs.c
    24243 --- silo-1.4.13.orig/second/fs/ufs.c    2006-06-01 13:24:53.000000000 -0400
    24244 +++ silo-1.4.13/second/fs/ufs.c 2007-04-03 17:02:53.000000000 -0400
    24245 @@ -40,28 +40,18 @@
    24246  
    24247  ino_t inode = 0;
    24248  
    24249 -#ifdef UFS_CIGAM
    24250 -/* Apparently new header */
    24251 -
    24252  #define ufsi_size(x) ((unsigned int)((x)->ui_size))
    24253  #define ufsi_db(x) ((unsigned int *)((x)->ui_u2.ui_addr.ui_db))
    24254  #define ufsi_ib(x) ((unsigned int *)((x)->ui_u2.ui_addr.ui_ib))
    24255  #define ufsd_namlen(x) ((unsigned char)((x)->d_u.d_44.d_namlen))
    24256  
    24257 -#ifdef UFS_MINFREE
    24258 -/* Apparently even newer header */
    24259 -#define ufs_superblock ufs_super_block
    24260 +struct ufs_superblock_full {
    24261 +       struct ufs_super_block_first first;
    24262 +       struct ufs_super_block_second second;
    24263 +       struct ufs_super_block_third third;
    24264 +};
    24265 +#define ufs_superblock ufs_super_block_first
    24266  #define ufs_direct ufs_dir_entry
    24267 -#endif
    24268 -
    24269 -#else
    24270 -
    24271 -#define ufsi_size(x) (((x)->ui_size.val[1]))
    24272 -#define ufsi_db(x) ((unsigned int *)((x)->ui_db))
    24273 -#define ufsi_ib(x) ((unsigned int *)((x)->ui_ib))
    24274 -#define ufsd_namlen(x) ((unsigned char)((x)->d_namlen))
    24275 -
    24276 -#endif
    24277  
    24278  #ifndef S_ISLNK
    24279  #include <sys/stat.h>
    24280 @@ -92,25 +82,22 @@
    24281          return p;
    24282  }
    24283  
    24284 -static struct ufs_superblock *ufs_read_super(ufs_filsys fs)
    24285 +static struct ufs_superblock_full *ufs_read_super(ufs_filsys fs)
    24286  {
    24287 -    struct ufs_superblock *usb;
    24288 +    struct ufs_superblock_full *usb;
    24289  
    24290 -    usb = (struct ufs_superblock *) malloc (2048);
    24291 +    usb = (struct ufs_superblock_full *) malloc (2048);
    24292      if (!usb) return 0;
    24293      if (io_channel_read_blk (fs->io, UFS_SBLOCK/1024, -2048, (char *)usb))
    24294          return 0;
    24295 -    if (usb->fs_magic != UFS_MAGIC) {
    24296 -       /* XXX - replace hard-coded constant with a byte-swap macro */
    24297 -       if (usb->fs_magic == 0x54190100) {
    24298 -       }
    24299 +    if (usb->third.fs_magic != UFS_MAGIC) {
    24300         return 0;
    24301      }
    24302 -    if (usb->fs_bsize != UFS_BSIZE)
    24303 +    if (usb->first.fs_bsize != UFS_BSIZE)
    24304          return 0;
    24305 -    if (usb->fs_fsize != UFS_FSIZE)
    24306 +    if (usb->first.fs_fsize != UFS_FSIZE)
    24307          return 0;
    24308 -    io_channel_set_blksize (fs->io, usb->fs_fsize);
    24309 +    io_channel_set_blksize (fs->io, usb->first.fs_fsize);
    24310      return usb;
    24311  }
    24312  
    24313 diff -Naur silo-1.4.13.orig/second/ls.c silo-1.4.13/second/ls.c
    24314 --- silo-1.4.13.orig/second/ls.c        2006-06-01 13:24:53.000000000 -0400
    24315 +++ silo-1.4.13/second/ls.c     2007-04-03 17:02:53.000000000 -0400
    24316 @@ -19,10 +19,10 @@
    24317     USA.  */
    24318  
    24319  #include <silo.h>
    24320 +#include <linux/types.h>
    24321  #include <stringops.h>
    24322  
    24323  typedef int FILE;
    24324 -#include <linux/types.h>
    24325  #include <ext2fs/ext2_fs.h>
    24326  #include <ext2fs/ext2fs.h>
    24327  
    24328 diff -Naur silo-1.4.13.orig/second/Makefile silo-1.4.13/second/Makefile
    24329 --- silo-1.4.13.orig/second/Makefile    2006-06-01 13:24:53.000000000 -0400
    24330 +++ silo-1.4.13/second/Makefile 2007-04-05 19:48:45.000000000 -0400
     25221diff -Naur silo-1.4.14.orig/second/Makefile silo-1.4.14/second/Makefile
     25222--- silo-1.4.14.orig/second/Makefile    2008-06-12 09:39:12.000000000 -0700
     25223+++ silo-1.4.14/second/Makefile 2009-01-07 15:07:57.000000000 -0800
    2433125224@@ -27,10 +27,10 @@
    2433225225 LDFLAGS_LARGE=-N -Ttext $(LARGE_RELOC)
     
    2441925312 second.b: second util
    2442025313        $(ELFTOAOUT) -o second.aout second
    24421 diff -Naur silo-1.4.13.orig/silo/silo.c silo-1.4.13/silo/silo.c
    24422 --- silo-1.4.13.orig/silo/silo.c        2006-06-01 13:24:53.000000000 -0400
    24423 +++ silo-1.4.13/silo/silo.c     2007-04-03 17:02:53.000000000 -0400
     25314diff -Naur silo-1.4.14.orig/second/ls.c silo-1.4.14/second/ls.c
     25315--- silo-1.4.14.orig/second/ls.c        2008-06-12 09:39:12.000000000 -0700
     25316+++ silo-1.4.14/second/ls.c     2009-01-07 15:07:57.000000000 -0800
     25317@@ -19,10 +19,10 @@
     25318    USA.  */
     25319 
     25320 #include <silo.h>
     25321+#include <linux/types.h>
     25322 #include <stringops.h>
     25323 
     25324 typedef int FILE;
     25325-#include <linux/types.h>
     25326 #include <ext2fs/ext2_fs.h>
     25327 #include <ext2fs/ext2fs.h>
     25328 
     25329diff -Naur silo-1.4.14.orig/silo/silo.c silo-1.4.14/silo/silo.c
     25330--- silo-1.4.14.orig/silo/silo.c        2008-06-12 09:39:12.000000000 -0700
     25331+++ silo-1.4.14/silo/silo.c     2009-01-07 15:07:57.000000000 -0800
    2442425332@@ -128,8 +128,8 @@
    2442525333     unsigned short nsect;      /* Sectors per track */
     
    2443325341     unsigned short magic;      /* Magic number */
    2443425342     unsigned short csum;       /* Label xor'd checksum */
    24435 diff -Naur silo-1.4.13.orig/silo/silocheck.c silo-1.4.13/silo/silocheck.c
    24436 --- silo-1.4.13.orig/silo/silocheck.c   2006-06-01 13:24:53.000000000 -0400
    24437 +++ silo-1.4.13/silo/silocheck.c        2007-04-03 17:02:53.000000000 -0400
    24438 @@ -100,8 +100,8 @@
     25343diff -Naur silo-1.4.14.orig/silo/silocheck.c silo-1.4.14/silo/silocheck.c
     25344--- silo-1.4.14.orig/silo/silocheck.c   2008-06-12 09:39:12.000000000 -0700
     25345+++ silo-1.4.14/silo/silocheck.c        2009-01-07 15:07:57.000000000 -0800
     25346@@ -101,8 +101,8 @@
    2443925347     unsigned short nsect;      /* Sectors per track */
    2444025348     unsigned char spare3[4];   /* Even more magic... */
     
    2444725355     unsigned short magic;      /* Magic number */
    2444825356     unsigned short csum;       /* Label xor'd checksum */
    24449 diff -Naur silo-1.4.13.orig/tilo/Makefile silo-1.4.13/tilo/Makefile
    24450 --- silo-1.4.13.orig/tilo/Makefile      2006-06-01 13:24:53.000000000 -0400
    24451 +++ silo-1.4.13/tilo/Makefile   2007-04-03 17:02:53.000000000 -0400
     25357diff -Naur silo-1.4.14.orig/tilo/Makefile silo-1.4.14/tilo/Makefile
     25358--- silo-1.4.14.orig/tilo/Makefile      2008-06-12 09:39:12.000000000 -0700
     25359+++ silo-1.4.14/tilo/Makefile   2009-01-07 15:07:57.000000000 -0800
    2445225360@@ -14,10 +14,10 @@
    2445325361 all: maketilo
Note: See TracChangeset for help on using the changeset viewer.