OpenVMS VAXCRTL05_071 VAX V7.1 DEC C RTL ECO Summary
NOTE: An OpenVMS saveset or PCSI installation file is stored
on the Internet in a self-expanding compressed file.
The name of the compressed file will be kit_name-dcx_vaxexe
for OpenVMS VAX or kit_name-dcx_axpexe for OpenVMS Alpha.
Once the file is copied to your system, it can be expanded
by typing RUN compressed_file. The resultant file will
be the OpenVMS saveset or PCSI installation file which
can be used to install the ECO.
Copyright (c) Digital Equipment Corporation 1997, 1998. All rights reserved.
PRODUCT: DIGITAL OpenVMS VAX
COMPONENT: DEC C RTL - DECC$SHR.EXE
CRTLMSGDEF.OBJ (Updates STARLET.OLB)
CRTL.OBJ (Updates STARLET.OLB)
ACRT$ECO_DROP.COM (If desired, this command file
may be used to remove the ECO
and restore the original
files and libraries.)
SOURCE: Digital Equipment Corporation
ECO INFORMATION:
ECO Kit Name: VAXCRTL05_071
ECO Kits Superseded by This ECO Kit: VAXACRT04_071
VAXACRT03_071
VAXACRT02_071
VAXACRT01_071
ECO Kit Approximate Size: 3978 Blocks
Kit Applies To: OpenVMS VAX V7.1
System/Cluster Reboot Necessary: Yes
Rolling Reboot Supported: Yes
Installation Rating: 3 - To be installed on all systems running
the listed versions of OpenVMS which
are experiencing the problems described.
Kit Dependencies:
The following remedial kit(s) must be installed BEFORE
installation of this kit:
VAXY2K01_071
In order to receive all the corrections listed in this
kit, the following remedial kits should also be installed:
None
ECO KIT SUMMARY:
An ECO kit exists for DEC C Run-Time Library on OpenVMS VAX V7.1.
This kit addresses the following problems:
Problems addressed in VAXCRTL05_071:
o The cache of values introduced in the getenv function
caused regressions to occur in numerous applications.
The default has been changed from using the cache to only
using the cache when a specific logical is set. This new
logical, DECC$ENABLE_GETENV_CACHE, should be set prior to
invoking an application whose performance depends on using
the getenv cache. The logical DECC$DISABLE_GETENV_CACHE
is no longer used.
o Attempts to open a network mailbox fail.
o A correction was made to the rewind function which now
works correctly for a file opened using the append access mode.
o The fread function no longer access violates when passed
stdin. This error only occurred when the stdin file
descriptor was a socket descriptor inherited from a parent
C process.
o The dup2 function would access violate when called with
the second file descriptor larger than 256.
o An ISV porting software to OpenVMS sought assistance in
handling parameters being passed to the image when invoked
as a foreign command. A new function has been added which
gives an application control over how arguments to the image
are obtained. The new function is specified as:
int decc$$set_get_foreign(const char* image_name,
const char* image_location,
const char* routine_name)
If this function is called prior to the C main program, the
DEC C RTL will call this routine instead of LIB$GET_FOREIGN to
obtain the parameters.
o Performance improvements previously applied to only the
sprintf function being called with a "%s" format specifier
have now been made in all functions which use thread specific
data. Applications which use DECthreads and the DEC C RTL
may see significant performance improvements when calling
functions which use thread specific data, such as those listed
in section 1.7.1 of the reference manual.
o Data inconsistencies occurred when the sprintf function
was called by both an AST routine and the main program.
o It was reported that the functions strtol, strtoul, wcstol,
wcstoul, and the OpenVMS Alpha specific functions strtoq and
strtouq do not consume the trailing digits after an overflow
condition. This behavior is required by the ANSI standard.
To have this correction not break existing applications, the
correct behavior of consuming these characters must be enabled
by defining the logical name DECC$STRTOL_ERANGE prior to the
first call to any of these functions.
Problems addressed in VAXACRT04_071:
o The mmap function no longer fails if a file is opened with
read access and the calling program has specified both the
PROT_WRITE and MAP_PRIVATE flags. The correct behavior of
using the MAP_PRIVATE flag is to disregard the access mode of
the opened file.
o The opendir function no longer fails if a file having the same
name, but no extension, exists in the same directory as the
directory being opened. Prior to this change, having an
extensionless file in the same directory as the directory
being opened would fail, even if the full name and extension
was used in the opendir call.
o Changes made in OpenVMS V7.0 have affected the processing of
files having "FORTRAN Carriage Control" record attributes.
The following changes were introduced in OpenVMS V7.0 and are
repaired in this ECO kit:
+ The DEC C RTL now prepends (instead of appends) linefeed
characters to records with the single-space carriage
control. This was the behavior prior to OpenVMS V7.0.
Prefixing this type of record with linefeeds is what RMS
requires and allows overprinting to work better than when
the linefeed was appended.
The only known problem with the new version is that the
carriage-control character is not generated after the last
file record. This problem will be fixed in the next release
of CRTL."
o A regression was introduced in the VAXACRT03_071 ECO kit such
that calls to the stat function which use the "DNA=STRING"
parameter access violate. Calls to fopen may also access
violate when the fopen function calls stat to determine if the
file exists.
Problems addressed in VAXACRT03_071:
o Users have requested that kill support the POSIX semantics of
"if the process id is negative but not -1, the signal will be
sent to all processes whose group ID is equal to the absolute
value of the process id, and for which the process has
permission to send a signal." This has been added with the
restrictions that the process is executing on the same node
and does not have a SYSTEM UIC. The errno value is set to
ESRCH if no processes are found which match the condition
specified.
o The performance of DEC C sprintf was three times slower than
VAX C. An analysis of the printf engine resulted in changes
which brings DEC C within 10% of VAX C.
o The functions fopen and freopen were mapping invalid access
modes to read mode. Invalid modes now cause errno to be set
to EINVAL and the open call to fail.
o The times function was changed in OpenVMS V7.0 to return the
number of clock ticks since boot time. Performing year 2000
testing by setting the system time forward causes this return
value to overflow. The times function has been changed to
return the number of clock ticks since login time, which is
less likely to overflow.
o The lseek function may position incorrectly with repeated
calls to seek in a file containing fixed length records of
odd length. This problem does not occur with even length
or variable length records.
o Mailbox devices are record-oriented devices, except when
created by the pipe function where they are opened as stream
devices. Applications which use mailboxes can now force the
library to treat all mailboxes as stream devices by creating
an environment variable named DECC$MAILBOX_CTX_STM.
o The runtime library has been corrected to treat UNIX directory
specifications identically in each of the routines which
accept a directory specification as a parameter. These
runtime library functions are access, opendir, mkdir, and
rmdir. Prior to this change, one could call opendir with
"/dev/dir", but was forced to append ".dir" to this when
calling the access function.
o This ECO kit includes major performance improvements when
using time-related functions along with Universal Coordinated
Time.
A cache of values has been added to the getenv function to
avoid the library making repeated calls to translate a logical
name, or to obtain a symbol value for environment variables
which are not set. If your application makes direct calls to
set logical names, this caching can be disabled by defining
DECC$DISABLE_GETENV_CACHE prior to calling any runtime library
functions.
o The ANSI standard states that streams opened in update mode
may read and write to the stream. It further states that
reads must be followed by file positioning prior to writing
to the stream. The problem corrected was that positioning
functions would fail when the file was a terminal. Applications
may now position such streams back to the beginning using either
rewind or seek.
o It was reported that opendir overflowed the stack when running
in a threaded application. While correcting this problem, the
opendir successful return value was changed from one to zero
to align with with the X/Open Specifications.
o A problem introduced in OpenVMS V7.1 causes the first record
of a file to be overwritten when the file is opened in append
mode. The correct behavior is that all write operations are
done at the end of the file.
o Porting code to OpenVMS is hampered by the difference between
command procedures and executable images and the mechanisms
necessary to invoke them. When passed the string "TEST",
the exec functions now search for "TEST.", "TEST.EXE", and
"TEST.COM". If found, it is executed as either an image or
a command procedure, depending on information in the file
header.
o Several new universals have been added to the DECC$SHR image
shipped with this ECO kit. The presence of these universals
may affect application developers who compile using this
image. If a developer begins to get errors of the form
%LINK-W-MULDEF, symbol DECC$XXX multiply defined
in module DECC$SHR file SYS$COMMON:[SYSLIB]DECC$SHR.EXE;1
while linking the application, the compile command should be
modified to include "/PREFIX=EXCEPT=XXX". This instructs the
compiler to exclude this function when doing name prefixing,
which is equivalent to the behavior prior to this ECO kit.
o The printf function was enhanced to print "(null)" when passed
a null pointer to be used with the "%S" format specifier.
Prior to this, the DEC C RTL would issue an access violation
error.
o Several functions were found to not accept the angle bracket
form of directory specifications. These functions include
decc$translate_vms and stat, which now accept either square
brackets or angle brackets in the directory portion of file
specifications.
o The exec functions use a mailbox to coordinate open file
information between the parent and child processes. A user
reported their system hung after 1000 successful invocations
of the same child process. This hang was caused by the parent
process failing to release an exclusive mode lock being used
to coordinate access to the mailbox. The hang would occur
when a mailbox was assigned to the parent process for a second
time.
o A user reports calling ioctl sets errno to ENOSYS (Function
not implemented). Beginning with OpenVMS V7.0, the library
looks for support in the underlying TCPIP stack and sets this
error if the support is not found. The function has been
enhanced to execute UCX$EXAMPLES:UCX$IOCTL_ROUTINES under
these conditions.
o The decc$to_vms function has been enhanced to recognize names
found on other systems, converting "/dev/null" to "NLA0:",
"/tmp" to "SYS$SCRATCH:", and "/bin" to "SYS$SYSTEM:".
o The getpwnam function now uppercases the username parameter if
it is not found in its original form. Prior to this change,
the function would fail.
Problems addressed in VAXACRT02_071:
o Those functions, such as printf, which have thread specific
data incorrectly use the threads interface to release that
memory when a thread is being destroyed. The result is that
all thread specific memory is lost.
o The read, fread, write, and fwrite DEC C RTL functions now
return unsuccessful status with errno set to EINVAL if one of
the arguments of size_t type or total number of bytes to be
transmitted is not in the range 0 to INT_MAX. The total number
of bytes is the product of the size_of_item and number_items
arguments for fread and fwrite functions. The value of INT_MAX
is defined in the header file.
o The interval timer function, setitimer, fails to reset itself
when used in a multithreaded application. The result is a
single firing of the timer as opposed to repeated firing of the
timer at fixed intervals.
o A change made in OpenVMS V7.1 and remedial kits to other
versions cause calls to the mktemp function using templates of
the form "dumpXXXXXX.txt" to no longer substitute the pattern
with the process id. While a change is necessary to prohibit
substituting the directory portion in a template such as
"[XX]dumpXXXXXX", the change that was made was overly harsh,
forcing all substitution to the end of the pattern.
o The strstr function accesses memory beyond the ends of the
strings passed. In cases where the next page is not
accessible, the result is an access violation. The problem was
reported against the ADA compiler, which uses the strstr
function in this way.
o Although files in general are correctly inherited after a
fork/exec function call, files which are opened in any sort of
sharing mode are not.
o The ECO kits ALPACRT01_071 and VAXACRT01_071 made changes to
the return value of the puts and fputs routines. While these
changes were in line with the documentation, which states that
they return non-negative numbers on success, specific
applications were coded to expect zero as success. Since this
zero return value was documented with the VAXC product, we have
restored the original behavior.
o When accessing files in stream mode, closing the file may
result in an extra byte being written to the file. While this
byte is not seen using the type command, it may be seen when
using the dump utility.
Problems addressed in VAXACRT01_071:
o The stat function now uses a thread specific buffer to store
data. Prior to this correction, stat called from two
separate threads would interfere with one another.
o An ISV reports that extra characters are seen on occasion
when using a subprocess that sends data back to the parent
process using a mailbox.
o A case was found where the fseek function fails. It
correctly returns a -1 value, but fails to set errno
properly.
o One of the arguments to the decc$to_vms function is
"allow_wild" which is documented to accept the values
zero and one. If wildcards are used in the file
specification, they are either rejected or expanded into
the resultant file specifications. Passing a value of
-1 for the allow_wild parameter now returns the file
specifications with the wildcards intact, but after
having prepared to the point of doing a sys$search.
o Unlike Digital UNIX, the fsync(socket_id) call results in
an access violation instead of returning an EINVAL status.
o Opening and closing sockets does not properly release mutexes.
This problem which was introduced in OpenVMS V7.0 eventually
causes the mutex resources to be exhausted.
o Applications which call opendir and readdir recursively to traverse
subdirectories may end up in an infinite loop when reading the
directory that includes returning [000000]000000.DIR. The readdir
function no longer returns an entry which is equivalent to the
directory being read.
o OpenVMS V7.1 changed the behavior of the readdir function so
that it no longer retains the ".dir" extension when returning
a directory using the UNIX file syntax. Applications which
rely on this extension can now define a DECC$READDIR_KEEPDOTDIR
logical to restore this behavior.
o Beginning with OpenVMS V7.1, the DEC C Runtime Library does
not read the first record while opening the file if such
preloading will cause RMS to lock the record. Several users
have reported that images which used to work fine now fail.
The record preloading code has been modified to take these
user programs into account.
INSTALLATION NOTES:
The images in this kit will not take effect until the system is
rebooted. If there are other nodes in the VMScluster, they must
also be rebooted in order to make use of the new image(s).
If it is not possible or convenient to reboot the entire cluster at
this time, a rolling re-boot may be performed.
NOTE: During installation the following message may be seen:
%INSTALL-E-NODELSHRADR, unable to delete image with shareable
address data
-INSTALL-I-PLSREBOOT, please reboot to install a new version
of this image
This is not a cause for concern. It simply means that
DECC$SHR.EXE was installed as a resident image, which is the
standard configuration for OpenVMS VAX V7.1 systems. The new
This patch can be found at any of these sites:
Colorado Site
Georgia Site
Files on this server are as follows:
vaxcrtl05_071.README
vaxcrtl05_071.CHKSUM
vaxcrtl05_071.CVRLET_TXT
vaxcrtl05_071.a-dcx_vaxexe
|