New features with AN-2018-07-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/stdint.h: the TYPE_MINVAL() macro is now using a specialized macro TYPE_MSBVAL() that avoids a so called "signed integer overflow" on two's complement machines in case it detects a two's complement machine. This helps to avoid compiler warnings with some newer compilers. The portability has not been degraded since for non-two's complement machines, the old methid is used. - libschily: None of the *at() emulation functions did not work in case of an ENAMETOOLONG error on a platform that does not implement /proc (e.g. HP-UX-10.20). The code has now been changed to make sure that the fallback to the fchdir() method is used in such a case. - libschily: New functions openat64() and fstatat64(). They were missing and now have been implemented. This affects the large file ability for: - bsh - Bourne Shell - libshedit - libfind - star on platforms that do not include support for openat() and fstatat() in libc already. Recent platforma are not affected by this enhancement. - Bourne Shell: HP-UX-10.20 is in conflict with POSIX and returns ENAMETOOLONG with getcwd(). We now verify the current PWD value whether it refers to "." and contains no symlinks. In this case we pretend that getcwd() worked and the current $PWD value is correct. The reliability of the value is the same as with a working getcwd() in such a case. - SunPro Make: Make/include/mksh/defs.h included but older platforms do not have it. Use instead. Thanks to Robert Clausecker for reporting. - SunPro Make: Old FreeBSD neither has O_SYNC, nor O_DSYNC, so we use O_FSYNC here. - star: new functions lchdir() & lgetcwd() have been added for dealing with very long path names with the -C option. - star: the option list= is now implemented using getdelim() and thus supports to read arbitrary path name length from files or stdin. - star: volhdrs are now without a PATH_MAX limit. - star: added a new function _lgetinfo() that always does an lstat() independent of -L and -h. This is needed in order to check whether a filesystem object exists and needs to be deleted before extraction. - star: line reading functions that deal with the inode database in "star-symtable" in the incremental restore code now support arbitrary line length. - star: the "remove" code now supports to remove file system trees of arbitrary depth and path length. - star: incremental restores, in case they are not run as root, could under some rare cases (nearly full target filesystem) when inode numbers are reused faster than usual, result in "permission denied" errors while extracting files. This happened when such a reused inode has no write permission for the owner. A similar case with changing file type has been fixed in February 2005 as the only bug that ever appeared in star's incremental backup/restore system fater incrementals have been introduced in September 2004. Since February 2005, we remove files with a different type before we create new ones. As we previously assumed that incremental restores are always run as root, this permission problem did never cause any harm in the past. This is since root is allowed to create files in readonly directories and since root can write into readonly files. We now first run a chmod() +w on directories and files with no write permissions before we extract the content. This modification now allows star to be used for private backups and restores without the need to become root for the task. - star_sym: Added a new function osmode() because restore.c now needs this function because of the above change and we do not like to add star_unix.c to star_sym. - star: Previously, star needed the option -force-restore in order to restore partial dumps. A new option -partial now allows partial restores without at the same time permitting dump level mismatches or reference date mismatches. - star: star -Hgnutar now also creates long path names. GNU tar-1.30 started to create ong path names under some conditions, even though it is unable to extract archives with long path names. Our archives thus are not more challenging to GNU tar than archives created by GNU tar itself ;-) - star: mention the GNU tar long path name problem in the man page. - star: mktemp() destroys it's argument even when it fails because of ENAMETOOLONG. We need to save and restore the original name argument to make our long path workaround working. - star: "star -x -install ..." now works with very long path names as we have a mktemp() workaround for long path names. - star: Long names using the pre-POSIX long pathname header method now works since the related extraction routine in longname.c now manages dynamic path store as well. - star: extraction with symlink emulation (that creates copies) now also supports long path names. - star: incremental restores now support long path names. - star: "star -c" (without "-find") is now able to handle long path names. This is the final change to make star a fully long path name supporting program. - star: star_unix.c: a new function getinfoat() has been added. It uses fstatat() if this function supported by the current platform and not emulated in libschily. - star: "star -c" now uses fstatat() via getinfoat() if possible. This causes a 30% performance win in case of "star -c -onull" and makes "star -c" now nearly as fast as "star -c -find". - star: pathname.c: New function clear_pspace() - star: star -xattr now aborts with an error message that -xattr is reserved for NFSv4 xattrs and that Linux needs -xattr-linux - star long path name state report: - All known places that previously used static path name store or system calls directly have been converted to use dynamic path storage and long path name aware functions. This has been extended to any place (even those locations that never reach ENAMETOOLONG) in order to be able to verify the correctness of the change via "nm". - Most long path name features work even on older platforms if at least fchdir() is supported, so this does not need a very recent platform. - Hard links between long path names only work on platforms that natively support the linkat() system call. - The code is not yet optimized for good performance and is currently approx. 30% slower when long paths (> PATH_MAX) are actually used. - star TODO: - implement support for NFSv4 xattr - implement support for NFSv4 system attributes - implement support for Trusted Solaris - Bourne Shell: strexpr.c no longer contains a #define fprintf(...) since varadic macros do not exist in C89 but require C99. - Bourne Shell: The dotfiles.tar.bz2 archive now contains abetter code in $HOME/.shrc that no longer results in error messages from the FreeBSD "ash" that seems to use our file name even though it is not based on the Bourne Shell. - 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.