Mail Archives: djgpp/2019/06/29/23:11:22
This is a port of GNU Bash 4.1.17 to MSDOS/DJGPP.
Bash is the GNU Project's Bourne Again SHell, a complete implementation
of the POSIX.2 shell spec, but also with interactive command line editing,
job control on architectures that support it, csh-like features such as
history substitution and brace expansion, and a slew of other features.
DJGPP specific changes.
=======================
- This port is based on the last port of bash to DJGPP (aka bsh205b*.zip).
- The most remarkable change for this port is that it uses its own pipe
emulation instead of using the pipe function provided by libc. This
is necessary to get the port working on plain DOS. The pipe function
provided by libc exploits features that are only available for the file
system of the different Windows versions and thus fails if used on plain
DOS. This has the consequence that no one of the existing bash ports do
work on plain DOS as soon as pipes are involved. They work flawlessly
on Win98SE, Win2K and WinXP.
- This port may not work neither on FreeDOS 1.2 nor on FreeDOS 1.3RC1.
The issue concerns the handling of the file pointer by the kernel when
reading and writing to a file, thus having very serious implications
when STDOUT and/or STDIN is redirected to files by shell scripts. The
same applies to pipe line handling through temporary files. Of course
this does not only affect this port but all other ones that depend on
these features. The rule of thumb seem to be that if the file system
used by the disk does not match the file system for which the kernel
has been compiled then scripts run by bash may fail. E.g.: letting
bash do some STDOUT and/or STDIN redirections on a partition using
FAT16 with a FAT32 kernel will make bash fail. In general the output
file created by the shell script can still be read but contains only
unreadable nonsens. Continuous repetitions of calling bash with the
same script may corrupt the file system (aka partition) in such a way
that it cannot even be restored using tools like norton utilities.
This behavior is very surprising to me because I have never observed
such a behavior on any miscrosoft OS I have used. These are MS-DOS 3.2,
MS-DOS 6.22, Win98SE, Win2K and WinXP.
Because DJGPP is quite old and has been designed in the days of MS-DOS,
it may be possible that it has exploited microsoft specific features
that have not been correctly reproduced by the FreeDOS developer and
thus leads to this behavior. It is very difficulty to say if we are
observing a DJGPP specific bug that triggers a FreeDOS specific bug
that does not exist in MS-DOS. Anyway, I have stopped in investigating
this issue. If the file system support compiled into the kernel
matches the file system used on the partition, every thing seems to
work. If not you are in trouble.
Neitherless I have decided to make small changes to the pipe line
emulation code and thus to make this update. Although this will not
solve the situation on FreeDOS. I see no reason in keep the old port
thus I have replaced it with this new one.
- The port checks at run time if LFN support is available or not and
selects the file names of temporary files that are created accordingly.
- There may exist much more DOS specific bugs in this port that have
still not been discovered and that will be fixed as they appeare.
- The testsuite is POSIX centric and has not been ported. Especially
assumptions about paths that are POSIX specific make it really difficult
to adjust the testsuite to DOS. Currently the port can only be tested
by using it.
- The port has been configured and compiled on WinXP SP3, Win98SE,
MS-DOS 7.10 using DOSLFN 0.41c and MS-DOS 6.22 using DOSLFN 0.41c.
There is no guarantee that this may be possible with any other DOS-
like OS. Due to the use of long file names it will not be possible
to configure and compile without LFN support. The port has been
compiled using gcc346 and bnu232b.
- The coprocess support and the coproc reserved word have been disabled.
This feature requires special pipe support and this may be implemented
in the future.
- To be able to build this port you may need to have LFN support.
- If NLS support is wanted, then the sources must be reconfigured passing
the nls option to config.bat.
As usual, all djgpp specific files (diffs, README files, etc.) are stored
in the "djgpp" directory. The sources have been configured to be build
in the "_build" directory. If for some reason it does not work for you,
delete it contents and configure from scratch again.
Please read the docs to become familiar with this product.
Here is an extract of the NEWS file showing the user visible changes
from the last port (GNU Bash 2.05b) to this one:
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
The port consists of the usual three packages that have been produced
using djdev205 and can be downloaded from ftp.delorie.com and mirrors
as (time stamp 2019-06-01):
Bash 4.1.17 binary, info and man format documentation:
ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/bsh4117br2.zip
Bash 4.1.17 dvi, html, pdf and ps format documentation:
ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/bsh4117dr2.zip
Bash 4.1.17 source:
ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/bsh4117sr2.zip
Send Bash specific bug reports to <bug-bash AT gnu DOT org>.
Send suggestions and bug reports concerning the DJGPP port
to comp.os.msdos.djgpp or <djgpp AT delorie DOT com>.
Enjoy.
Guerrero, Juan Manuel <juan DOT guerrero AT igd DOT fhg DOT de>
- Raw text -