New features with AN-2018-06-25:

This is the first localization step for the schily source consolidation. Many
programs now (hopefully) call gettext() for all strings that need localization.

-	The next step will include dgettext() calls for the libraries and the
	missing programs

-	The following step will include the extracted strings

-	The last step will include German translations and install support
	for the resulting binary message object files.

----------> Please test and report compilation problems! <---------

***** NOTE: As mentioned since 2004, frontends to the tools should *****
*****		call all programs in the "C" locale		   *****
*****		by e.g. calling: LC_ALL=C cdrecord ....		   *****
*****		unless these frontends support localized strings   *****
*****		used by the cdrtools with NLS support.		   *****

		*** WARNING        ***
		*** Need new smake ***

	*** Due to the fact that schily-tools 2014-04-03 introduced to use new macro
	*** expansions and a related bug fix in smake, you need a new smake
	*** to compile this source. If your smake is too old and aborts, ensure this
	*** by calling:

	cd ./psmake
	./MAKE-all
	cd ..
	psmake/smake
	psmake/smake install

	*** Due to the fact that schily-tools 2014-01-26 introduced
	*** optimizations for the Schily version of SunPro Make, you
	*** need at least the dmake version from 2018/01/11 with support
	*** for the "export" directive to compile with this makefile system.


	WARNING: the new version of the isoinfo program makes use of the 
		*at() series of functions that have been introduced by Sun
		in August 2001 and added to POSIX.1-2008. For older platforms,
		libschily now includes emulations for these functions but
		these emulations have not yet been tested thoroughly.
		Please report problems!

	The new smake version mentioned above is smake-1.2.4

-	include/schily/dirent.h: #include <sys/time.h> and <sys/times.h> which
	is needed for clock_t when defining a fallback siginfo_t for
	portability to e.g. DJGPP.

-	include/schily/schily.h: added a new set of comerr() and errmsg()
	functions that include a gettext() call and #defines to hide the
	special names.

-	include/schily/schily.h: added a new error() (gterror())
	that include a gettext() call and #defines to hide the
	special name.

-	libschily: added a new set of gtcomerr() and fgtcomerr()
	functions that include a gettext() call.

	NOTE: On Linux, gettext() is a macro to

		dcgettext(NULL, string, LC_MESSAGES)

	and this costs an extra program space of 23 bytes per call.
	On a larger program like "star" with approx. 1000 translatable strings, 
	this would increase the size of the program by 20 kB, so we decided 
	to create new printing functions that are reusable and only need to
	call gettext() once.

	BTW: While we implemented this enhancement, we discovered that the GNU
	linker is defective and does not correctly handle linker map files:
	Even with a statement:

		local:
			*

	the GNU linker does not make unlisted functions and identifiers static
	to the shared library.

	The main problem with this way however is that GNU xgettext is
	unusable since it does not allow to specify function names where the
	translatable string is not the first argument (e.g. our new function
	fgtprintf() where the first argumnt is a FILE *).

	GNU xgettext with the -a option is nasty and aborts with the
	string: "\161\301", complaining that it needs a character encoding
	specification. So we may first need to write a better xgettext
	based on the original xgettext source from Sun Microsystems.

-	libschily: added a new  gterror() function that includes
	a gettext() call.

-	libschily: added a new set of gtprintf() and fgtprintf()
	functions that include a gettext() call.

-	libschily: fgetstr() did not stop when the target buffer was full.

-	libfind: The code compiles again on platforms without dirfd(), like
	e.g. DOS. On such a platform, there is currently however no way to
	use libfind without WALK_CHDIR.

-	libfind: Added a better ENAMETOOLONG discovery for the function
	dopendir() that is able to open a directory with a very long name.

-	star::pathname.c: New function strlcpy_pspace() helps to implement
	path names of arbitrary length more efficient.

-	star::pathname.c: make the realloc() implementation more correct
	with respect to all return possible codes specified by POSIX.

-	star::unicode.c: iconv() results are now terminated with a '\0' byte

-	star::unicode.c: _from_utf8() now honors "fromlen". This is needed
	for the new POSIX.1-2001 extended header handling.

-	star::subst.c: The code has been rewritten to use strlcpy() instead of
	strncpy().

-	star::subst.c: The code no longer uses the result path storage for
	getting the result from Y/N questions.

-	star::subst.c: -s'/from/to/g' did only substitute once, while
	-s'/from/to&/g' did work as expected.

-	star::subst.c: There is no longer any limitation on the length of the 
	path as long as there is sufficient memory for malloc().

-	star::subst.c: The path name read function has been rewritten to use
	getdelim().

-	star::buffer.c Added a new error message in checkerrs() for a buffer
	overflow in path name substitution.

-	star::dirtime.c: new function flushdirtimes() allows to flush the dir
	stack as a callback from the comexit() procedure.

-	star::dirtime.c: the code is now able to handle file names with
	unlimited length even though the low level calls to utimes() and chmod()
	still may result in an ENAMETOOLONG.

-	star::pathname.h: This file now is also able to work in case stdio.h has
	not been included before.

-	star: added several functions as callback for comexit() to give better
	messages when star is terminated by severe problems.

-	star: the man page now prints the star magic 'tar\0' in bold chars.

-	star: The archive type tests have been adopted to the slightly different
	output format in case of errors. We now print buffer statistics in
	such a case.

-	star: The first stage of code rework for unlimited path len has been
	implemented for the "extract" case (list, extract, diff, append). The
	code may still cause an ENAMETOOLONG error.

	The next planned stages:

	-	Make "star -c -find . ..." able to archive path names of
		arbitrary length.

	-	Add methods to avoid ENAMETOOLONG in extract or diff mode.

	-	Make "star -c . ..." able to archive path names of
		arbitrary length.

	-	Make Make "star -c . ..." as fast as "star -c -find . ..."

-	star: SELinux support has been added. The related code is based on code
	that was most likely written by

		Daniel Walsh <dwalsh@redhat.com>

	The code has been reported to the star team by

		Kristna Streitov <kstreitova@suse.com>

	Note that the new code correctly clears inherited SELinux attributes
	for files that haveno such attributes in the archive. So it is
	important to upgrade.

-	star: the SELinux support was revised with feedback from
	Pavel Raiskup <praiskup@redhat.com>

-	star: star -version on Linux now prints:

	star: star 1.5.4 (x86_64-unknown-linux-gnu)

	Options: acl-POSIX.1e-draft find fflags remote Linux-xattr SELinux

	and make it visible whether there is SELinux support compiled in.

-	star: a typo in acl_unix.c has been fixed. This typo could in
	rare situations cause a buffer overflow as the wrong strlen() was
	checked.

	Thanks to Pavel Raiskup <praiskup@redhat.com> for reporting

-	star: converted the code in preparation for a localization.
	star now calls the new gt*() functions wit builtin gettext()
	call for the format string.

	This has been done for most cases by a #define GT_COMERR
	and #define GT_ERROR

	In some special cases, there are calls to gtprintf() and fgtprintf().

-	cpp: Avoid an overflow while parsing the #line directive.

	Thanks to Heiko Eifeldt for reporting

-	cpp: Avoid a signed integer overflow while computing the identifier
	hash. This is flagged as "undefined" by some newer compilers even
	though POSIX since 10 years requires twos complement machines and
	thus grants a defined behavior with this kind of overflow.1

	Thanks to Heiko Eifeldt for reporting

-	cpp: If a character with the value 0xFE appears at the right side
	of a #define statement, this character is now quoted in order to avoid
	that this character is interpreted as a replacement for a formal
	macro parameter.

	Thanks to Heiko Eifeldt for reporting

-	cpp: avoid a core dump from an integer division by zero from:

		#if a/b
	or
		#if a%b

	Thanks to Heiko Eifeldt for reporting

-	patch: inp.c now is using !S_ISREG(filemode) instead of
	(filemode & S_IFMT) & ~S_IFREG)

-	SCCS: bdiff now includes an #undef INS_BASE for the K&R compiler
	to make it quiet.

-	Bourne Shell: In exallocjob() call setb(save_fd) before calling
	allocjob() since setb(save_fd) makes the string semi-pernament
	anyway. So it is better to use that semi-pernament string.

-	Bourne Shell: better hints for POSIX extentions have been added
	to the man page.



-	Bourne Shell Missing features for POSIX compliance:

	- Support for $'...' quoting (this is not needed for the current
					version of POSIX but for the next POSIX
					version that will be named SUSv8).
					The development of SUSv8 will start in
					late 2016.

	We are now expecting the Bourne Shell to be fully POSIX compliant.

-	Bourne Shell further TODO list:

	-	Finish loadable builtin support.

	-	POSIX does not allow us to implement ". -h", so we will
		add a "source" builtin to be able to implement "source -h"

-	The following builtins (that are available in bsh) are still missing in
	the Bourne Shell:

	err			echo with output going to stderr
	glob			echo with '\0' instead of ' ' between args
	env			a builtin version of /usr/bin/env

	The following bsh intrinsics are still missing in the Bourne Shell:

	-			the restricted bsh has restriction features that
				are missing in the Bourne shell.

	-	source -h	read file into history but do not execute

	and probably more features not yet identified to be bsh unique.



Author:

Joerg Schilling
D-13353 Berlin
Germany

Email: 	joerg@schily.net, js@cs.tu-berlin.de
	joerg.schilling@fokus.fraunhofer.de

Please mail bugs and suggestions to me.
