
This afio version is based on a Linux port of afio 2.3.  Since the
original port, significant functionality has been added and some bugs
were removed.  While primarily intended for use under Linux, this code
should be portable to other UNIX versions.  As far as I know, there
has been no afio development beyond 2.3 outside the Linux community,
except for non-Linux patches that people mail back to me.

--------------------------------------------------------------------------

The code in this archive compiles under Linux.

You may have to tweak the makefile to compile it on other platforms.

If you make a `clean' port of this code, meaning that you add ifdefs
to the source files and `uncomment this for %s' lines to the makefile,
you may want to send diffs to me (see README file for maintainer
e-mail address) so that I can merge them with the next afio version.
If you encounter any POSIX compatibility problems, please report them.

--------------------------------------------------------------------------

UNSIGNED LONG LONG USE

New potential porting problems introduced since version 2.4.7.9beta1.

Since 2.4.7.9beta1, afio supports >2GB files, and this support depends
on the compiler having `unsigned long long' support, and also on
having `unsigned long long' format support in the printf and scanf
functions.  Any non-ancient version of gcc and glibc will have this
support.

In theory, it is not a huge job to add some ifdefs for platforms
without compiler support for long long, ifdefs which drop the 2GB
support but otherwise leave a functional afio that can be compiled
with old compilers.  However I (=the current maintainer) am not doing
this yet until I get real problem reports or patches -- I suspect that
in practice nobody is using such old compilers anymore.

See comments in the afio 2.4.7 afio.h file for the story behind the
typedef  unsigned long long ulonglong;

--------------------------------------------------------------------------

SOME POTENTIAL PORTING PROBLEMS

1) Availability of fnmatch(), see the makefile.

2) Changing the makefile to work with your make and C compiler.

3) Making floppy verify work on your unix flavor.

The code in afio.c should be highly portable.  However I can not
guarantee it to keep working if changes are made to the defines in the
makefile.  The code in the other .c files was written on a Linux
machine for gcc, and assumes a posixy environment.  I have not tried
it on other machines but on most modern unixes it should compile. I
would like to hear about (un)successful ports to other machines.

Some of the afio code is a horrible mess, making incremental changes
very difficult.  A complete rewrite of the floppy disk interfacing
code is probably needed if extensions are to be added.  At the moment
afio is (afaik) the only fault tolerant compressing archiver program
available, but it probably has some bugs lurking in it. Because of
this afio is not an optimal solution. I hope that afio will be
replaced by a compressing version of gnu cpio or by cpio combined with
with a fault tolerant compression backend (probably based on a gzip
library) in the future.

------------------------------------------------------------------

REGTESSION TEST SCRIPT PORTING

The regtession test scripts mentioned in the INSTALL file may fail to
work on non-GNU platforms that have very old versions of tools like
bash, awk, find, and diff.

-----------------

Some notes about regression testing on (some versions of) FreeBSD

- FreeBSD has a `bash' exectutable that does not implement full GNU
  bash.  The test scripts have been written to avoid any
  incompatibilities.

-----------------

Some notes about regression testing on (some versions of) sun

- if the default awk command is very old, it cannot parse the awk
  scripts.   Change it to `nawk' or `gawk' -- see the comments in
  the regtest/regtest script.

- if the default find command does not support the -print0 option,
  one test will fail.  You can try to subsiture GNU find if it
  is installed

- if some tests fail, then `diff -u' is used to print the differences.
  The default diff on some sun platforms does not recognise the -u
  option, You can try to subsiture GNU diff if it is installed.

- On at least some version of sun, the default tar command incorrectly
  restores directory permissions.  This will show up as failure of one
  regression test, but here actually tar is at fault.  Example output
  where this happens:

      * compare unpacked tar archive with newly unpacked test archive
     drwxr-xr-x   7 kholtman zh          2048 Dec  1  2002 t2/afiot
     drwxrwxrwx   7 kholtman zh          2048 Dec  1  2002 t4/afiot
     cmpstat t4/afiot t2/afiot: mode difference
     drwxr-xr-x   2 kholtman zh          2048 Dec  2  2002 t2/afiot/ztest
     drwxrwxrwx   2 kholtman zh          2048 Dec  2  2002 t4/afiot/ztest
     cmpstat t4/afiot/ztest t2/afiot/ztest: mode difference
     drwxr-xr-x   3 kholtman zh          2048 Dec  1  2002 t2/afiot/special
     drwxrwxrwx   3 kholtman zh          2048 Dec  1  2002 t4/afiot/special

- The sun kernel (on at least some versions of sun) handles
  permission bits on symlinks different from the Linux way.  This
  results in a failure of at least one regression test.  Example
  output where this happens:

       * compare table-of-contents file made by new afio with archived toc
      t2.arch t2.new differ: char 2048, line 44
      --- t2.arch	2003-12-19 22:02:53.000001000 +0100
      +++ t2.new	2003-12-19 22:02:53.000001000 +0100
      @@ -44,9 +44,6 @@
      -lrwxrwxrwx 1 x x DATE afiot/link with spaces S-> name with spaces
      -lrwxrwxrwx 1 x x DATE afiot/link1 S-> y2k
      -lrwxrwxrwx 1 x x DATE afiot/linkx S-> /etc/sysconfig/ipchains
      +lrwxr-xr-x 1 x x DATE afiot/link with spaces S-> name with spaces
      +lrwxr-xr-x 1 x x DATE afiot/link1 S-> y2k
      +lrwxr-xr-x 1 x x DATE afiot/linkx S-> /etc/sysconfig/ipchains
      FAILURE in: compare table-of-contents file made by new afio
      with archived toc

------------------------------------------------------------------

HISTORICAL PORTING NOTES

Historical note: The porting hints below were all written before 1996
as far as I can tell -- they are probably not relevant to recent
systems.

Note for SCO porters from Karel Kubat, karel@icce.rug.nl:

  Please read the makefile about the changes needed for fnmatch().

  You may want to change the -DDEFFMTCMD value in the makefile.

  If you encounter any other options which may need changing, please mail me
  at karel@icce.rug.nl. I'm not the maintainer of afio for SCO platforms, but
  I'd like to know if you come across anything spectacular.


Note for IRIX porters using the SGI native C compiler (cc):

  Modify the Makefile to use CC=cc, comment out the CFLAGS1 line,
  and add
   -Dirix_cc_compatibility
  to the CFLAGS line.

Note for HPUX porters using gcc (maybe some (older?) gcc versions
only):

  These steps seem to be needed to get afio to compile, but I
  cannot guarantee that they are sufficient to make it work on HPUX:
   - Comment out '8     = -DHAVEFCNTL' in the Makefile
   - Remove the '-g' from the CFLAGS1 line in the Makefile.


