Mail Archives: djgpp-announce/1997/10/21/08:42:13
This is to announce that the DJGPP port of GNU tar 1.12 has been
uploaded to SimTel.NET and should be available from your nearest
mirror:
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/tar112b.zip
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/tar112s.zip
Tar is a program to create and maintain archives of files, and extract
files from these archives. It can be used for backing up your disks,
and for moving directory hierarchies to other machines.
This DJGPP port is based on the preliminary port by Daisuke Aoyama,
but it includes many significant improvements. In particular,
compressed .tar.gz files are now fully supported. I attach below a
part of DJGPP-specific README file that describes the main bugfixes
and enhancements, and also the missing features.
Please read the installation instructions before you begin using the
package.
-------------------------------------------------------------------
A port of GNU Tar 1.12 to MS-DOS/MS-Windows using DJGPP tools
=============================================================
Features
--------
This port of GNU Tar includes significant improvements as compared
to the official FSF distribution of version 1.12. The official code
was failing in a lot of ways on MS-DOS (my favorite is that commands
like "tar cf d:/foo.tar" would fail because `tar' treated file names
with a colon as archives on remote machines and was trying to connect
to a machine called `d'). I believe that all the features in the
original Unix code work in this DOS port; the single most important
exception is the lack of support for remote archives (see the
"Missing" section below).
Here's the list of bug fixes and enhancements in this port:
1. Compressed archives are now fully supported (yeah!). All the
options which support compressed archives in the Unix version,
work on MS-DOS. Compressed archives are produced by piping the
output of `tar' to or from `gzip', so it is a bit slow, since
DOS simulates pipes via disk files. If you have a fast,
memory-abundant machine, point your TMPDIR to a large RAM drive,
which will greatly speed up compressed archive operations.
2. Backup files are fully supported, including numbered backups,
even on plain MS-DOS and other non-LFN platforms. You should
always unpack .tar.gz files of Unix origin with numbered backups
turned on, since file name collisions in the restricted 8+3 DOS
namespace might otherwise overwrite files (unlike `djtar', `tar'
will not prompt you to supply an alternate name).
3. Automatic renaming of file names which are illegal on DOS. When
extracting files, `tar' will automatically attempt to rename
file names such as `Makefile.in.in', `.emacs', `foo:bar;baz,'
and others. Note that even Windows 9X disallows some characters
from appearing in a file name; this port correctly identifies
the set of characters which need to be replaced, depending on
whether long file names are or aren't available on the
filesystem where the file is being extracted. The algorithm for
generating converted names is almost identical to what `djtar'
does, except that `tar' doesn't prompt you for another name when
it fails to extract a file. Under verbose operation, `tar'
prints a message about renamed files.
4. Similarly, any file in the archive whose name is reserved on
MS-DOS by a character device driver (e.g., `prn.txt', `aux.c',
`nul.foo' etc.), is automatically renamed. This prevents
wedging `tar' and/or your system when unpacking Unix archives
with such files. Tar renames such files by prepending a `_' to
their basename.
5. Extraction of hard and symbolic links is simulated by copying
files. The --diff (-d) mode compares the contents of two files
in this case.
6. Full support of DOS absolute file names with drive letters (the
original code won't even work on tar file names like
`d:/foo/bar.tar'). Numerous snafus with root directories on
other drives and other such subtleties were resolved. Tar now
supports backslashes in file names (but they are converted into
forward slashes before accessing the archives).
7. Using -O option when `tar's stdout is redirected to a file would
corrupt binary files. This is corrected in this port.
8. When given the -C option, `tar' now correctly restores the
original directory before it exits.
9. The -N and --newer-mtime options now work. (They were disabled
in the DOS version for reasons that are beyond me.) All the
time comparisons, including for -N, --newer-mtime and --diff,
now compare time stamps with a 2-second granularity, so you
won't see false "Mod times differ" messages due to DOS truncating
of file times to the nearest even second.
10. When --verify (-W) option is given, `tar' will flush the disk
cache, if one is installed. This prevents some overly smart
caches from supplying disk data from memory, instead of
accessing the media, thus defeating the very goal of verifying.
11. The manual has been revised, most of the missing cross-
references fixed, and DOS-specific information added. The
manual is under construction by the GNU project, and, IMHO,
still looks like a car crash (e.g., many subjects are described
twice, evidently from two different versions of the manual).
But I really couldn't afford rewriting the manual. What's there
should be good enough, I think; if it's not, submit bug reports
to the GNU package maintainer.
12. The --recursive-unlink option now really works. (This was
actually a genuine bug in the official release which is NOT
specific to DOS.)
13. You can use --group and --owner options to give files away to
any user and any group. Thus you can create archives on DOS
with files that would be writable by specific users on Unix.
(The official code had a bug whereby numeric GIDs and UIDs would
not work, even on Unix; this is corrected in this port.)
14. The feature of the Unix code whereby `tar' will not dump the
archive it is creating into itself, works in this port. (Due to
the peculiarities of inode number simulation in the DJGPP
library, this will NOT work on Windows 9X, Windows 3.11 with
32-bit File Access, and on networked drives.)
15. This port supports the optimization in cases that `tar's output
is meant for the NUL device. This makes `tar' much faster in
these cases.
16. `Tar' will no more switch the console to binary mode. It only
switches stdin and stdout to binary mode when they are
redirected to a file, and then only when `tar' reads or writes
the archive to one of these streams. (Switching the console to
binary mode has unpleasant side-effects. For example, it
disables SIGINT generation when you press Ctrl-C, so you cannot
interrupt a runaway `tar'.) The original code also had a bug
with invoking a subsidiary shell when switching volumes in a
multi-volume tar file; this is now corrected.
17. All the scripts in the test suite work, except the `ignfail.sh'
test. The latter will never work because it deals with file
permission bits which are impossible on MS-DOS (e.g.,
non-readable directories or files non-writeable by the owner).
Missing
-------
The following (short) list explains what functions are missing from
this port:
1. Direct device access.
It would be nice to be able to say "tar cvf /dev/fd0 c:/" and
have an archive created on a floppy drive A: such that it could
be taken to a Unix box and untarred without mounting it as a DOS
filesystem. At least for floppies with the most popular formats
(1.2M and 1.44M) this shouldn't be too hard; one just have to
use the DJGPP Filesystem Extensions feature to hook the
low-level I/O functions and read/write the diskette on the BIOS
level. Any takers?
2. Remote archive support.
The code in rtapelib.c which opens a pipe to `/etc/rsh', should
be tweaked to work on DOS.
3. Internal compression/decompression.
Linking `tar' with parts of `gzip' code should make compressed
archive operations MUCH faster. `djtar' already does that, but
it cannot create archives.
- Raw text -