Next: , Previous: Changes in 2.03, Up: What Changed   [Contents][Index]

2.4 Changes in 2.04

Here is a list of changes from DJGPP V2.03 to V2.04.

Ability to report the exact CPU type in uname.

The functions _creat, _creatnew and _open now set extended size flag in DOS calls to be able to create files with size up to 2^32-1, supported on FAT32 volumes.

The function llseek added with type offset_t to support file seeks up to 2^32-2.

The function statfs have been made to report correct values > 2^31 on FAT32 partitions.

The function _invent_inode has been changed to start numbering invented inodes from USHRT_MAX+1 to 2^28+1.

Functions _is_cdrom_drive, _is_ram_drive and _media_type has been taken out of mntent.c and made externally callable.

New functions _get_fat_size, _get_fs_type and _is_fat32 added.

When used together with GCC 2.96 or later, va_list facilities in stdarg.h and varargs.h are implemented using new builtins from GCC 2.96.

fsdb checks for executables and loads them even if the extension .exe isn’t given in the command line.

div, ldiv and lldiv return properly signed remainders for negative arguments.

The function remove works around a DOS bug, whereby DOS returns a “File not found” error for write-protected floppy disks.

The series produced by rand have a longer period.

The execution speed of drand48 and erand48 has been improved.

__dpmi_simulate_real_mode_procedure_retf_stack no longer corrupts the caller’s stack.

getlogin now examines the environment variable USERNAME to determine the user’s name, in addition to USER and LOGNAME.

New function stpncpy has been added, thanks to Richard E. Stone.

Calling the setitimer function with both it_interval.tv_sec and it_interval.tv_usec members of struct itimerval set to zero no longer causes the timer to behave as if it_interval.tv_usec were set to the system clock granularity (55msec by default).

UNIX-style symbolic links are fully emulated by library. As a part of this, new functions __internal_readlink, __solve_symlinks, __solve_dir_symlinks, lchown, lstat and readlink; new macros S_ISLNK and S_IFLNK have been added to library.

open now follows symlinks when opening file. Also, it honors two new mode flags: O_NOLINK and O_NOFOLLOW.

As a part of symlink emulation, symlink no longer emulates symlinks to executables by creating stubs. It creates symlinks to all files instead.

A subtle bug was corrected in function process_coff used by syms_init from libdbg.a to read and sort the symbols from a COFF image. As a result, the symify utility should no longer crash in rare cases, especially when invoked on large programs.

The linker script lib/djgpp.djl corrected to not unnecessarily pollute the name space with the symbols etext, edata and end. The profiling code was also changed to not pollute the name space with etext.

The dtou program accepts new command-line options for verbose operation, backup file creation, and control of file timestamp preservation. Its source can now be compiled on a Unix or GNU/Linux system.

The protection against multiple redefinitions of various types like size_t has been rewriten to make DJGPP header files compatible with GCC provided ones.

The djtar program can now unpack .tar.bz2 archives compressed with the bzip2 program.

The functions system and spawn* can invoke Windows programs and advanced shells, such as 4DOS and NDOS, with command lines longer than 126 characters. For Windows programs, the command line can be up to 1015 characters long; 4DOS and NDOS can be passed up to 247 characters. This is done by defining the CMDLINE environment variable whose value is the command line. The DJGPP startup code also supports CMDLINE method of passing long command lines, so DJGPP programs can now be invoked with long command lines from the COMMAND.COM’s prompt, and also from other Windows programs which support CMDLINE. The functions system and spawn* have also been enhanced to free DPMI selectors leaked by many DPMI hosts. This fixes the problem with large makefiles failing before completion under Windows.

The functions rename and _rename can now be used to change the letter case of a file name, like in this snippet:

 rename ("makefile", "Makefile");

(This only works when the LFN support is available, of course.)

The function __dosexec_find_on_path no longer looks for files with the .sh, .ksh, .pl, and .sed extensions before the files without those extensions. This is so e.g. foo is found before if both of them are present in the same directory. The previous code was known to cause Bash to run the wrong script in some cases.

This change affects all library functions which search for executables along the PATH: system, popen, pclose, and the functions from the spawn* family.

The DOS standard extensions .com, .exe, .bat, and .btm are still included in the search before looking for the file name itself, for compatibility with stock DOS/Windows shells.

The functions valloc and memalign have been added to the library to support allocating memory at power-of-2 addresses.

The djsplit and djmerge utilities now preserve the original file’s time stamp and mode bits. The ‘-t’ switch to those programs restores the old behavior, where each file was created with the current time stamp and default attribute bits.

The low-level function _put_path was changed to avoid referencing an env directory in the current working directory when library functions are passed the /dev/env file name. This avoids creating spurious env directories in any directory where the standard GNU mkinstalldirs script is run.

Functions rename and _rename work on Windows 2000 when the file under the new name already exists. This solves the problems with linking DJGPP programs and with running the stubify utility on that OS.

The function lfilelength added with return type long long to support file sizes of up to 2^63-1.

Texinfo documentation (WIP) for djasm has been added.

The dates inserted into the object file by djasm now follow ISO format.

djasm now sets the offset of new executable field in the header of executables to zero (meaning not used).

Allow one to allocate space in djasm using .union (instead of .struct) when using a union. As there is no checking, .struct and .union are interchangeable. This feature taken from a version of djasm maintained by Bill Currie.

The fcntl function has been significantly enhanced. In particular:

flock has been implemented using the new fcntl locking functions to implement file-level locking and unlocking. lockf (31-bit support) and llockf (FAT32 support, 32-bit only) have been added as compatible interfaces to the new fcntl locking functions.

New function dostrerr has been coded to provide string values for the error codes returned from function dosexterr. Documentation and a test program have been provided. This function is an analogue of the strerror function for errno values, and is intended to be used when coding functions or programs that call DOS and want to print messages when errors occur.

New functions _dos_lk64 and _dos_unlk64 have been added to provide a FAT32-compatible interface to the DOS locking code. Compatible functions lock64 and unlock64 are direct interfaces to these two new _dos_* functions.

Support for enumeration type added to djasm. This feature taken from a version of djasm maintained by Bill Currie.

Header files, which are part of the new ANSI/ISO C99 Standard, are now available. These include stdint.h.

When used in C++ programs, the standard C header files now make their contents visible in namespace std as well as in the global namespace.

setjmp is now a macro as well as a function. This is required by the C++ standard, and also recommended by the C standard.

_get_dos_version now recognises OEM number 0xfd as FreeDOS.

Functions which convert numeric strings to the corresponding integer values no longer return non-zero values for strings which begin with 8-bit characters.

open now honors O_TEMPORARY. A file opened with O_TEMPORARY will be deleted when all file descriptors that refer to it are closed.

The functions _rename (and rename which calls it) and mkdir no longer fail on Windows ME when long file names support is disabled. This solves the problem with failures to link programs if the LFN variable is set to ‘n’ because stubify.exe failed to rename the produced executable and reported EINVAL.

When write and _write detect that a file pointer is past EOF, that space will now be filled with zeroes to increase POSIX compliance and plug a security hole on disks containing sensitive information.

If a tar archive contains DOS batch files that have been stored with UNIX-style LF-only EOLs, djtar will now convert them automatically to DOS-style EOLs. This is because COMMAND.COM refuses to run batch files that contain UNIX-style EOLs.

The function pipe is now implemented in the library.

.com programs are now invoked by the spawn* family of functions directly, thus making their exit status available to the parent DJGPP program. Previously, when long file names were supported, .com programs were invoked through COMMAND.COM, which would lose the exit status.

File handles connected to the console device are no longer reported by the select function as not ready for input when termios functions are used to read those handles in cooked mode.

New functions snprintf and vsnprintf added.

The double-precision shift instructions shld and shrd are removed from djasm because they violate the established convention of using the b, w, or d mnemonic suffix to specify the memory operand size. (The result is that they use up two mnemonics that should have been reserved for the basic shift/rotate instructions.)

Completed the support in djasm for the byte/word/double shift/rotate instructions. This feature taken from a version of djasm maintained by Bill Currie.

The functions fopen and freopen improved to handle the append mode properly. The functions fputc, fprintf, fwrite and write always seek to end of file if the file has been opened in append mode. Type of __file_handle_modes extended to be able to hold the O_APPEND flag.

Due to the improved append mode implementation, the functions fopen, fflush, _flsbuf, fopen, and freopen no longer use the _IOAPPEND flag. And since the flag is no longer used, the _IOAPPEND flag has been deleted from libc/file.h.

When the first character in the valid options string is a colon ‘:’, getopt will now return a colon when a missing option argument is detected and will not print error messages even when opterr is non-zero.

The function readdir now includes the file’s type in the d_type member of struct dirent it returns. This member is used by some GNU packages, such as Fileutils, to make directory traversal more efficient. WARNING: This makes some object files built with DJGPP v2.03 incompatible with programs compiled with the v2.04 library!

Two new functions, monstartup and moncontrol, allow to control when profiling starts and ends, and what range of addresses is recorded in the profiling data.

There are new malloc debug facilities. While not as powerful and versatile as existing external packages, such as YAMD, these facilities do allow to detect a wide variety of heap corruption problems, and to report important heap usage statistics. The new functions are mallinfo, malloc_debug, malloc_verify, and mallocmap; these names are compatible with many Unix and GNU/Linux systems. In addition, special hooks, such as __libc_malloc_hook and __libc_free_hook, are provided for building custom malloc debugging packages.

Nested DJGPP programs which are run by other DJGPP programs on Windows should no longer crash (and take the DOS box with them) due to the fact that Windows leaks selectors. These crashes were caused by a failure to allocate a selector for conventional memory, and subsequent use of the invalid selector by the startup code itself. This problem was typical for Make, Bash, and any other program which can launch lots of child programs without ever exiting to DOS. To avoid this, the startup code was fixed to print an error message and exit to DOS with an exit status that indicates a failure, when a selector for DOS memory could not be allocated by the DPMI host.

confstr has been added to the library to support returning system-dependent configuration in strings.

Colors for symlinks were added to the LS_COLORS environment variable in djgpp.env.

Double-precision shift instructions reinstated in djasm, using a simplified form of the implementation suggested by Bill Currie. The new mnemonics are dshl and dshr, and no memory operand-size suffix is required. Obsolete usage of shld and shrd for double-precision shifts is flagged.

Two new functions, l64a and a64l (both part of the POSIX draft standard), allow you to convert a 32-bit integer value to and from a base-64 encoding, respectively. Note that the encoding used is the one mandated by the POSIX spec, and not the one used by either uuencode or the MIME base64 encoding.

The environment functions setenv and putenv are now both part of the POSIX draft standard and were updated to match the specs set forth by that standard. Both now set errno in case of failure, and putenv’s argument is now a char* instead of a const char*. A new function, unsetenv, which is also part of that standard, was added.

struct group has a new field, gr_passwd. This helps out porters, as many Unixy apps expect it to exist. Since DOS is basically an insecure environment, this field always contains the empty string. Similarly, struct passwd has two new fields, pw_gecos and pw_passwd. pw_gecos gets the same value as pw_name (i.e. the value returned by getlogin()). Like gr_passwd, pw_passwd gets the empty string as value.

The function uname supports the new Pentium 4 CPU’s by returning "i786" in the machine member of struct utsname it returns.

A name conflict between gettext declared in conio.h and gettext provided by GNU Gettext has been resolved.

malloc now declines ridiculously large allocation requests which exceed 2GB - 64KB. This is because anything larger is not supported by sbrk and by most DPMI hosts. Previously, malloc would sometimes allocate a very small buffer due to wrap-around of large unsigned numbers, and the calling program would then crash when it tried to use that buffer.

v2loadimage now supports long command lines, instead of being restricted by the DOS 126-character limit.

A new function, __djgpp_spawn, has been added to allow control over whether a search for executable extensions is performed.

The function glob and its helper functions have been changed to prevent an internal buffer from being overrun when the pattern to be expanded has more than 2000 characters.

There’s now a work-around for the bug in NTVDM, the DOS emulator, which ships with Windows 2000: nested DJGPP programs no longer cause NTVDM to crash. This allows to use GCC, Make, RHIDE, Bash, and other programs which routinely invoke child programs.

The function utime now works on Windows 2000 and Windows XP. Previously, it would fail with errno set to EIO; this affected programs like touch, dtou, and recode, which set time stamps of files. In addition, utime now allows to set the time stamp of directories, but only on Windows 2000 or XP (other versions of Windows do not allow to change time stamps of directories).

A fix has been applied to the memory allocation routines in sbrk to prevent use of memory which would require address wrap when the host DPMI provider does not allow 4Gb address limits. This feature may also be enabled in other environments which do not require it to get better memory protection. _CRT0_DISABLE_SBRK_ADDRESS_WRAP flag was added to _crt0_startup_flags in file crt0.h

A list of memory block sizes __djgpp_memory_handle_size was added for use in core dumps of the address space.

Change the round up size for memory block allocations in sbrk to increase with the number of handles allocated. This helps keep the number of handles to the 256 allocated and reduce problems exhausting DPMI handle resources.

The functions dup and dup2 now copy to the new handle any Filesystem Extensions which hooked the original handle. Thus, the duplicate handle now behaves exactly like the original one, in that it is also hooked by the extension.

The function fstat now work arounds incompatibilities in DOS IOCTL interface on Windows 2000 and Windows XP, and as a result returns correct read/write permissions in st_mode and correct device code in st_dev members of struct stat. This was known to fail functions like link and programs like GNU cp which tested files for being on the same filesystem by calling fstat.

The long file name support in Windows 2000 and XP have bugs which cause handles returned with long name opens to give incorrect information in many library routines. Routines which open files now open using short name calls under Windows NT, 2K and XP if long file names are enabled.

The set break DPMI call under Windows 2000 and XP do not return the break point handle, which prevented debuggers using break points from working properly. The handle is now guessed for this platforms which allows the debuggers to work with hardware break points.

If the short name equivalent of the current path is greater than 64 characters, Windows 2000 and XP do not return the correct long path name - they return the root directory instead without any failure code. Since this can be disastrous in deep directories doing an rm -rf, we check for this bug and fix the path. Long directories can also cause _fixpath to fail on Windows 9x if LFN=n and this is now handled by returning a relative path instead of root. Many uses of _fixpath assume absolute directories so this change may break code in rare cases (such as saving the value and changing directories).

Windows 2000/XP do not return the volume labels correctly using findfirst calls so we force short name usage to fix the problem. Drives higher than Z are suppressed.

freopen was modified to always use the same handle even if it is not the first one available.

This global variable declared in dos.h is a faster way to get the result of _get_dos_version(1).

New option ‘-e’ has been added to djtar to skip specified files and directories when extracting. Also djtar can accept multiple ‘-o’ and ‘-e’ options in a single command line. Finally, the file name change file format allows skipping files and directories.

The function fgetpos will now fail, if it is unable to determine the current offset for a stream. Previously the failure would have been silently ignored.

New function _is_DOS83 added to the library to support filename case lowering. This replaces the functionality used from _lfn_gen_short_fname which is hopelessly buggy on Windows 2000 and XP. New function used in srchpath.c, readdir.c, glob.c, fixpath.c, lstat.c and getcwd.c.

The functions stat, lstat and fstat now fill the st_blksize member of struct stat with the correct block size for the device where the file is located.

The types blksize_t and blkcnt_t were added. blksize_t is now used for the st_blksize member of struct stat.

The build system for the C libraries was modified, so that profiling versions can be built. Profiling options in gcc.opt are ignored for certain files in the C libraries’ sources. The build system for emu387.dxe, the math co-processor emulation library, was also modified, so that it can be built against a profiled version of libc.

Corrected problem with negative gmt offsets with z format in strftime.

The startup code was updated, to prevent memory corruption when the DJGPP environment variable is not set.

The functions fstatvfs and statvfs have been added. statvfs does much the same as statfs, but it is POSIX -compliant.

Optional support for the devices /dev/zero and /dev/full was added. This is enabled using the __install_dev_zero and __install_dev_full functions.

The mkdoc program is used to build the C library documentation. mkdoc now produces portability information in a clearer manner, to avoid ambiguity. mkdoc also now allows multiple versions of standards to be specified in the portability information, e.g. ANSI C89 and C99.

The debug support routines in libdbg.a now support exceptions 18 and 19 (in case the application being debugged hooks them), and no longer overwrite memory when exceptions higher than 19 are used by the debuggee.

The function fchown was added.

A bug was fixed in the File System Extensions mechanism that could be exposed in environments where it is possible to have large numbers of file descriptors (> 256) and low memory.

The errno value is now set correctly when a file open fails due to wildcard (illegal) characters in the name. If a wildcarded name failed to match the error message was EFAULT and misleading.

A bug was fixed in the function pow in libm.a. Previously pow(x,y) returned 0 when x was very close to -1.0 and y was very large.

A bug was fixed in the function pow in libc.a. Previously pow may have failed for negative numbers with a large magnitude.

A bug was fixed in the function findfirst. Previously unexpected behaviour may have resulted, if the attribute argument had a value outside the range describable by the FA_* constants.

The function realpath was added. realpath does much the same as _fixpath, but is POSIX compliant and resolves symlinks.

The function isblank was added.

The int_n_cs_precedes, int_n_sep_by_space, int_n_sign_posn, int_p_cs_precedes, int_p_sep_by_space and int_p_sign_posn members were added to struct lconv, to comply with the C99 standard.

The function _Exit was added.

The function atoll was added.

The function strtold was added.

The behaviour of the %X type conversion for the scanf-family of functions has changed. Previously %X denoted a long version of the %x type conversion. Now %X is equivalent to the %x type conversion, as required by C99.

The hh, j, t and z conversion qualifiers are now supported by _doprnt, _doscan, the printf family of functions and the scanf family of functions.

The delay function now works on Windows 2000 and XP. However, the accuracy in the delay is limited, by the timing method it has to use on Windows 2000 and XP.

The functions imaxabs, imaxdiv, strtoimax and strtoumax were added. The PRI and SCN families of macros were added.

The low-level function _put_path was changed to retain the /dev prefix if a /dev directory exists on the disk. This allows DJGPP images to work with directories by this name. You should avoid using the /dev prefix on DOS device names if possible since the behavior will change if the directory exists (and file operations which use the name will be slower). You should avoid using a /dev directory to avoid conflicts.

Fix caching when environment variable TZ is not set. Prevents many calls to getenv which are not needed.

The function strtof was added.

The functions strlcat and strlcpy were added.

The mnemonic wbinvd has been added to djasm.

The constants HUGE_VALF and HUGE_VALL were added.

ssize_t was changed from an int to a signed long int. ssize_t is now really a signed version of size_t.

The error code EILSEQ was added — errno may be assigned it. perror and strerror were updated to display/return an error message for EILSEQ.

It’s possible to set stub parameters by passing -stubparams=… to stubify.

Info documentation was added for go32-v2, stubify, stubedit, exe2coff, coff2exe, dxegen, symify, edebug32, and fsdb.

The internal declaration of these two variables was moved to crt0.S. This change makes the new crt0.o incompatible with previous DJGPP releases if you accidentally link crt0 with the wrong libc. __djgpp_ds_alias used to be declared in the .text section and locked by default. It is now in .data and not locked. If you are referencing this value in a hardware interrupt handler, you should lock the memory area or copy it to your handler’s locked memory.

Added _rdtsc as a direct call to the hardware instruction. It will inline to a single instruction when compiled with optimization.

chmod and chown can now be hooked by File System Extensions.

The function isatty now checks whether the file descriptor passed to it is a valid. If not, it will set errno to EBADF.

The function perror no longer prints a colon and blank if called with a null pointer or a pointer to a null string.

The function fchmod was added.

The functions _tolower and _toupper were added.

The functions readv and writev were added.

The function pwrite was added.

The macro NAN was added.

The function fchdir was added. This required modifications to the POSIX functions open, read, write, lseek, ftruncate, fstat, select, fsync and fdopen and the ANSI functions fopen, freopen, fclose, ftell, fseek and rewind, to make them aware of file descriptors for directories.

Simple temporary fix - TODO: more complete fix: fstat will now use the file name used to open the file, when inventing inodes. This is done so that the same inode is generated irrespective of the actual file path used to open the file. This also fixes the problem where multiple calls to fstat on the same file descriptor would give different inodes.

stat and fstat should now return the same inode for a file in most cases.

New enhanced dynamic module support has been added with a Posix compliant interface. You can now create complex DXEs which depend on each other and call code from the main image. Converting libraries to standalone DXEs which can be linked via library is as simple as a single command.

uclock now uses rdtsc under Windows NT, 2000 and XP (if it is available) to work around the bug with the interval timer not being syncronized with the timer tick.

The macro __tb_size was added, to represent the size of the transfer buffer. This complements the macro __tb, which gives the linear address of the transfer buffer.

djtar now copes with single-span spanned archives.

The functions strtod, strtof, strtold and _strtold now understand “Inf”, “Infinity”, “NaN”, “NaN()”, “NaN(hex-number)” and any variations of case in the input string.

The _truename_sfn function was added. Please use _truename_sfn when comparing truenames, to avoid problems when comparing the truenames of existing and non-existing files.

Fix a bug in moving directories into themselves. Previously rename failed to detect that a subdirectory was being moved into itself, when the current directory was a short filename.

The C99 macro fpclassify and the supporting functions __fpclassifyf, __fpclassifyd and __fpclassifyld were added.

The C99 functions nan, nanf and nanl were added.

The _doprnt and _doscan functions, the printf family of functions, the scanf family of functions and the strto* family of functions now honour the decimal point from the current locale.

strftime now uses the date format (for %x) and time format (for %X) from the current locale. This means that %T and %X are no longer equivalent.

A stack overflow handler was added.

math_errhandling was added.

A bug was fixed in the scanf family of functions. If a variable assignment was suppressed and the stream terminated prematurely, these functions could incorrectly return the number of matches instead of EOF.

Now assert prints also the name of the function where an assertion fails, if that function is compiled with C99 features enabled.

The C99 file stdbool.h was added.

The POSIX functions asctime_r, ctime_r, gmtime_r, hcreate, hdestroy, hsearch, lfind, lsearch, localtime_r, strtok_r and strerror_r were added.

Hash function _hash2v used by hsearch was added.

The function setlocale now supports the following categories in environment variables: LC_CTYPE, LC_COLLATE, LC_NUMERIC, LC_MONETARY, LC_TIME, as well as LC_ALL and also LANG, which provide defaults for all categories not explicitly given. POSIX LC_MESSAGES are not supported. Due to limitations of the country.sys driver only the current user locale "" or its name in the POSIX form "LL_TTECU.CP". See locale code format in Libc, for an explanation of the syntax. Modifies the character classes used by functions defined in headers ctype.h and regex.h, returns appropriate values from strcoll and localeconv functions, changes the decimal character used by functions for converting numeric strings from input and to output, and function strftime uses the appropriate NLS formats for "%x" and "%X" conversions.

djasm recognises the fourth control register, cr4.

The C99 macro signbit and the supporting functions __signbitf, __signbitd and __signbitld were added.

New BSD/GNU compatibility functions asnprintf, asprintf, vasnprintf and vasprintf were added.

The functions strtod, strtof, strtold and _strtold now understand hex floating point strings like [+|-]0xH.HHHp[+|-]DDD and any variations of case in the input string.

The ' conversion flag is now supported by _doprnt and the printf family of functions.

To increase compatibility with GNU glibc’s printf, printf will return for the following special numbers Quiet NaN, Signalling NaN, Pseudo-Denormal, Pseudo-NaN, Pseudo-Infinity, Pseudo-Zero and denormalized numbers nan or NAN instead of Unnormal.

The a, A and F conversion specifiers are now supported by _doprnt and the printf family of functions.

The %n$ and *m$ numeric conversion specifiers are now supported by _doprnt and the printf family of functions.

The modifiers %E and %O of the conversion specifiers are ignored because djgpp only supports C/POSIX locale.

The conversion specifiers %F, %G, %g, %P, %s, and %V have been added. Also the # flag has been added.

realpath and _fixpath will no longer report to their calling function ENOSYS if the used operating system (usualy plain DOS) does not provide a LFN API. The existance of a LFN API has no influence on the canonicalization of the path.

Lower case drive specifier characters will now be recognized as valid drive specifier too. Relative paths that start from the root directory will be correctly canonicalized because the backslash following the drive specifier is now removed.

The trailing search pattern /*.* has been removed from the path string stored in the member name of the DIR structure created by opendir and used by readdir, rewinddir and __set_need_fake_dot_dotdot. Now it only contains the canonicalized path to the directory without a terminating slash. Those functions that require the trailing search pattern /*.* will append it.

The function prototypes of mktemp and mkstemp are now also in <sdtlib.h>. This is to achieve Single Unix Specification compliance. To keep backward compatibility, the prototypes are also kept in <sdtio.h> but their usage is deprecated.

The _O_TEMPORARY flag is an alias for the O_TEMPORARY flag supported by open. It is supported to increase compatibility with other C compilers.

If the pointer that shall point to the buffer that shall contain the resolved path is a NULL pointer, then realpath will call malloc to allocate a buffer of PATH_MAX bytes to store the resolved path name and return this pointer to the caller.

djtar now ignores empty lines in filename change files instead of skipping the extraction of the file named in the line before the empty line.

Functions flushdc, dosexec, fixpath, opendir, getcwd, mkdir, rmdir, chdir, filelen, lfilelen, fstat, fchmod, _open, _chmod, _creat_n, _creat, remove, findfirs, findnext, truename, lfnshort, _use_lfn and _rename now check that the used LFN driver supplies the required 0x71 function from the Windows 95 long filename functions API by inspecting the content of the AX register after return from the API function call. Depending on the function type, the function will ignore, fail or fall back on the corresponding SFN API function if the LFN API function is not provided by the LFN driver used.

The C99 functions truncf trunc and truncl were added to comply with the C99 standard.

The dxe3gen program inspects the Augmentation String of the CIE record contained in the .eh_frame section to decide if both __register_frame_info and __deregister_frame_info symbols that exist in the object file shall be auto-resolved or not. They will be resolved by the dxe3gen program if the used programing language does not support exception handling like C. They will not be resolved if the used programing language supports exception handling like C++ and the exception handling has been enabled with an option like -fexceptions. In this case the application has to be linked with libgcc.a to resolve both symbols.

The s_flags of the COFF section header now honors the new STYP_NRELOC_OVFL bit that signals that the section contains extended relocations and that the s_nreloc counter has overflown. The bit set in case of overflow by STYP_NRELOC_OVFL is 0x01000000.

The djtar program can now unpack tar archives that contain pax headers conforming to POSIX 1003.1-2001. The pax headers are always skipped and their contents are discarded. The new option ‘-!s’ will allow to extract the pax headers as regular files instead of being skipped. The new option ‘-v’ will print the names of the headers, the number of data blocks following each header and the position of the header in the tar archive.

The a, A and F conversion specifiers are now supported by _doscan and the scanf family of functions.

The m modifier character is now supported by _doscan and the scanf family of functions. This is a GNU glibc extension and it is specified in the upcoming revision of the POSIX.1 standard.

The %n$ numeric conversion specifiers are now supported by _doscan and the scanf family of functions.

The type rlim_t has been added. rlim_t is now used for the rlim_cur and rlim_max members of struct rlimit.

The C99 macros isfinite, isinf, isnan, isnormal, isgreater, isgreaterequal, isless, islessequal, islessgreater and isunordered were added to comply with the C99 standard.

Opening a file stream in the wrong mode referring to the following input/output operation (e.g.: opening stream in read only mode and then writing to it), will trigger a stream error condition that will set an error indicator. This error indicator can be tested using ferror.

The C99 functions lrintf, lrint, lrintl, llrintf, llrint and llrintl were added to comply with the C99 standard. These functions are available in two versions. One fast assembler version in libc.a and one accurate in libm.a.

The C99 functions roundf, round and roundl were added to comply with the C99 standard.

The C99 functions lroundf, lround, lroundl, llroundf, llround and llroundl were added to comply with the C99 standard. These functions are available in two versions.

The C99 function rintl has been added to comply with the C99 standard.

The functions strndup and strnlen were added to comply with the POSIX 1003.1-2008 standard.

Although they are obsolete, the BSD/GNU compatibility functions isinfl, isnanl, and finitel were added.

A bug was fixed in memalign and valloc. memalign used to expects its two arguments in the reverse order compared with linux and other POSIX compliant systems. This has been changed so that the argument order now is the same that on POSIX compliant systems. valloc, that calls memalign, has been adjusted accordingly. The memalign declaration has been moved from stdlib.h to malloc.h to comply with the C99 standard.

The behavior of mktemp and mkstemp now depends on if LFN support is available or not. If LFN support is available the generated file names will comply with the POSIX standard. This means all characters of the template before the trailing six upper case Xs will not be truncated to create a valid short file name. If LFN support is not available mktemp will behave as before. This means only two characters before the trailing Xs will be possible.

The functions dprintf and vdprintf were added to comply with the POSIX 1003.1-2008 standard.

The function mkdtemp was added to comply with the POSIX 1003.1-2008 standard.

New option ‘-a’ has been added to djtar to skip automatically all files and directories that cannot be created when extracting. Thus neither existing files will be overwritten nor the user will be prompted for changing the file name.

Next: , Previous: Changes in 2.03, Up: What Changed   [Contents][Index]