Switch branches/tags
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
171 lines (123 sloc) 7.03 KB
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.
New potential porting problems introduced since version
Since, 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
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;
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.
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
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 differ: char 2048, line 44
--- t2.arch 2003-12-19 22:02:53.000001000 +0100
+++ 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 note: The porting hints below were all written before 1996
as far as I can tell -- they are probably not relevant to recent
Note for SCO porters from Karel Kubat,
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 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
to the CFLAGS line.
Note for HPUX porters using gcc (maybe some (older?) gcc versions
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.