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 and 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 The code has been reported to the star team by Kristýna Streitová 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 - 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 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 Eißfeldt 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 Eißfeldt 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 Eißfeldt for reporting - cpp: avoid a core dump from an integer division by zero from: #if a/b or #if a%b Thanks to Heiko Eißfeldt 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.