OpenVMS ALPACRT09_071 Alpha V7.1-7.1-1H2 DEC C Run-Time Library ECO Summary
TITLE: OpenVMS ALPACRT09_071 Alpha V7.1-7.1-1H2 DEC C Run-Time Library ECO Summary
Modification Date: 19-OCT-1999
Modification Type: Documentation Update. Please see note in
Kit Dependencies section.
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) Compaq Computer Corporation 1998, 1999. All rights reserved.
OP/SYS: OpenVMS Alpha
COMPONENT: DEC C Run-Time Library
DECC$SHR.EXE
CRTL.OBJ (Updates STARLET.OLB)
CRTLMSGDEF.OBJ (Updates STARLET.OLB)
ACRT$ECO_DROP.COM (Allows kit to be removed)
SOURCE: Compaq Computer Corporation
ECO INFORMATION:
ECO Kit Name: ALPACRT09_071
ECO Kits Superseded by This ECO Kit: ALPACRT08_071
ALPACRT07_071
ALPACRT06_071
ALPACRT05_071
ALPACRT04_071
ALPACRT03_071
ALPACRT02_071
ALPACRT01_071
ECO Kit Approximate Size: 17136 Blocks
Kit Applies To: OpenVMS Alpha V7.1, V7.1-1H1, 7.1-1H2
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:
ALPBASE02_071
NOTE: If the ALPBASE02_071 ECO kit is installed after the
installation of this kit, ALPACRT09_071, the DEC C
Run Time Library will be regressed. If this occurs,
this ALPACRT09_071 kit will have to be installed
again.
To ensure that the most recent OpenVMS DEC C RTL ECO
kit is installed on the system, use $ANALYZE/IMAGE to
check the image id for DECC$SHR.EXE. For DECC$SHR.EXE
in ALPACRT09_071, the image id is X07.1-4.
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 the DEC C Run-Time Library on OpenVMS Alpha V7.1
through V7.1-1H2.
Problems addressed in ALPACRT09_071:
o The getenv() function has been corrected to check for a
Command Line Interpreter (CLI) symbol only when called in user
access mode. While DEC C RTL is a user-mode run time library,
a decision was made to correct getenv() in order to make the
library more robust. The reason for this change is because
calling the CLI from within exec or kernel mode may result in
an access violation.
With this fix, when called from inner access mode, the
getenv() function will search only the C environment list
and OpenVMS logical names.
This fix does not mean, however, that the user-mode only
restriction was lifted. It is still unsupported to call the
DEC C RTL functions, including getenv(), in any access mode
other than in user-mode.
o The strptime() function has been modified to comply with
X/Open CAE Specification System Interfaces and Headers
Issue 5 (commonly known as XPG5). In XPG5, how the
strptime() function processes the "%y" directive was changed
for a two-digit year within the century, if no century is specified.
According to XPG5, for the "%y" directive, when a century is
not otherwise specified, values in the range 69-99 refer to
years in the twentieth century (1969 to 1999 inclusive), while
values in the range 00-68 refer to years in the twenty-first
century (2000 to 2068 inclusive). Essentially, for the "%y"
directive, strptime() became a "pivoting" function with 69
being a pivoting year.
Before this change, the strptime() function was always
interpreting a two-digit year with no century as a year
within the twentieth century.
With the current ECO kit, XPG5-compliant strptime() becomes a
default strptime() function in the DEC C RTL. However, for
compatibility reasons, the previous "non-pivoting" XPG4-compliant
strptime() function was retained.
The "pivoting" is controlled by the DECC$XPG4_STRPTIME logical
name. Defining this logical name prior to invoking the
application (any equivalence string) will cause the DEC C RTL
to use the "non-pivoting" flavor of strptime(). Also,
"non-pivoting" strptime() can be called directly as the
decc$strptime_xpg4() function.
While there is an easy way to disable "pivoting" by just
defining a logical name, you should be aware that if the
application ceases to work correctly due to the change in
the strptime() function, it almost certainly means that
there is a Y2K problem in the application. Y2K-safe
applications should not be affected by the change in strptime().
o The stat() function has been corrected to process file
specifications such as "foo:[000000]", where foo is defined
as a concealed device like the following:
$ define/trans=(conc) foo device:[bar.]
Prior to this fix, the stat() function would fail for such a
file specification with errno set to ENOENT (No such file or
directory).
o Both flavors of the system() function were corrected to ensure
that the function always returns the correct status.
The POSIX-compliant system() function has been corrected to
always return a status corresponding to the signal, which
terminated the child process if the child process was
terminated due to receiving a signal.
Prior to this fix, there was a small timing window when the
function could return the status corresponding to the child
process completion code, even in the case when the child
process was terminated by a signal.
The Non-POSIX system() function has been corrected to always
return the OpenVMS completion code of the child process.
Prior to this fix, there was a small timing window when the
function could return the status from LIB$SPAWN(), instead of
the completion code of the child process.
o The opendir() and readdir() functions have been corrected to
process directories on a remote node specified using the
following DECnet file specification:
nodename"username password"::device:[directory]
Prior to this fix, opendir() could fail with errno set to
ENOTDIR (Not a directory). In the case when opendir() could
successfully open the directory, the readdir() function could
return incorrect file names.
o The times() and clock() functions have been modified to be
both thread-safe and AST-reentrant.
Prior to this change, these functions belonged to the class of
functions which are thread safe, but not AST-reentrant (see
section 1.7.2 Multithread Restrictions in the DEC C RTL
Reference Manual).
The change in the reentrancy status of the times() and clock()
functions will be reflected in the next release of the Manual.
o The stat() function no longer fails due to the failure of the
mktime() function.
It was reported that the stat() function fails for a file
created on April 4th, 1999 at 2:04 a.m. EST, which is the
"missing hour" in the transition from standard to daylight
saving time in the Eastern time zone.
The problem was due to the failure of the mktime() function to
process the "missing hour" (stat() calls mktime() to fill
st_?time members of the stat structure with the UTC time).
While the mktime() function was not fixed, the stat() function
was corrected to handle the failure of mktime() and set
st_?time fields correctly, even if mktime() fails.
Note, that, strictly speaking, "missing hour" is an invalid
input for mktime(): there is no such time as "April 4th 1999
2:04 a.m.", for example, in the Eastern time zone. Given the
possibility of calling mktime() with an invalid time, the
stat() function probably should not have used mktime() in the
first place or at least should have been prepared for an mktime()
failure.
o The select() function has been corrected to return a failure
status if either an invalid file descriptor or file descriptor
not associated with a socket is found in one of the specified
file descriptor sets. In the case of an invalid file
descriptor, the select() function sets errno to EBADF. In
case of a file descriptor not associated with a socket, the
function sets errno to ENOTSOCK.
Failure with errno set to EBADF is the standard requirement
for the select() function. Failure with errno set to ENOTSOCK
occurs because the select() function can currently operate
only on sockets.
Prior to this fix, the function was setting errno as described
above, but otherwise was ignoring invalid file descriptors and
file descriptors not associated with sockets.
The old behavior can be requested by defining the logical name
DECC$SELECT_IGNORES_INVALID_FD prior to invoking the application
(any equivalence string).
o The bug in the printf() "engine" introduced in the ALPACRT07_071
kit has been fixed. The bug was that when the minimal field width
or precision specified in the format directive was greater than 1024,
the "engine" could write beyond the end of allocated internal
conversion buffer. It could happen only in X_FLOAT floating point
mode (/L_DOUBLE_SIZE=128, which is the default on Alpha). The bug
affected all functions from the printf() family of functions.
o The problem commonly known as the "Y2038 bug" has been fixed.
The C run-time library time functions, which access the
current time using the OpenVMS time functions, have been
corrected to handle times after 19-Jan-2038 3:14:07. Data
type time_t is defined on OpenVMS as an unsigned 32-bit
integer. However, some of the functions which retrieve
current time from the system and convert it to time_t format
were using signed arithmetic.
This fix affects the functions:
o decc$fix_time()
o time()
o ftime()
o gettimeofday()
o getclock()
With this fix, DEC C RTL time functions will handle times
successfully until 07-Feb-2106 06:28:15.
o The file access functions have been corrected to process file
names on UNIX systems over DECnet. The file name for a file
on a UNIX system accessed over DECnet was being converted to
uppercase, even when the name was enclosed in double quotes.
This problem was introduced on OpenVMS V7.2 and also affects
OpenVMS V7.1-2 and OpenVMS V7.2-1. File names of the form
node::"dir/name" are now processed correctly.
Problems addressed in ALPACRT08_071:
o The previous kit, ALPACRT07_071, documented a requirement that
the ALPY2K01_071 remedial kit must be installed first (before
ALPACRT07_071). However, the Y2K kit is not needed, so it is
NOT included as a requirement for this new ALPACRT08_071 kit.
Problems addressed in ALPACRT07_071:
o For DEC C Run-Time Library (RTL) functions, a call with a too
long filename argument could result in an access violation.
o After installing the ALPY2K01_071 kit, for an existing file,
the open() function failed with errno EEXIST, when called with
the O_EXEC flag, but without the O_CREAT flag.
Prior to the ALPACRT02_071 ECO kit, the behavior was as if the
open function was replacing the O_EXCL flag with the O_CREAT
flag, if the former was specified alone so that the function
was successfully opening an existing file when called with a
single O_EXCL flag. The current kit restores this behavior.
o One could possibly specify none, one or both options for
MAP_SHARED/MAP_PRIVATE and MAP_FIXED/MAP_VARIABLE. However,
the documentation (in both cases) states that you must specify
only one of each of these options and also just one of
MAP_FILE/MAP_ANONYMOUS (defaults to MAP_FILE if not specified
at all as it is represented by a single bit in the flags
parameter).
o Furthermore, a call to the munmap() function to unmap a
PRIVATE section modifies errno, even though success is
returned by the function.
o The functions from the exec family of functions no longer
forced activation on-disk images. The regression was
introduced in the ALPACRT03_071 kit and occurred regardless of
how the image file was specified in the call to the exec
function. The problem prevented activation of installed
images, because the explicit file version in the file spec
prevented image activator from known-file lookups.
o As the result of this problem, the child process was always
running an on-disk version of the image. If the image that
was supposed to be executed by the child process was installed
with privileges, the child process would not get expected
privileges and would fail while attempting to perform an
operation which required privileges provided by the installed
image.
o The Chown function changed the owner of a file to [-1,-1],
when passed with owner and group arguments of -1.
o The DCL Pn (P1, P2, etc.) parameters passed to a DCL child
were uppercased.
o A performance problem with the %d, %o, %x, %u and %c printf
format specifiers occurred. Consequently, after installing
several ECO kits, a regular job was taking about twice the
normal time to complete.
o After installing the ALPACRT06_071 ECO kit, a performance
problem in UTC-based time functions was introduced. An
application detected roughly an order of magnitude increase in
elapsed time due to the decc$__utc_mktime CRTL function. This
slowdown was attributed to the change done in thread local
storage macros when these macros were made AST-safe.
o Exec functions failed with the errno set to ENOEXEC (exec
format error) when requested to activate a shareable image.
The regression was introduced in ALPACRT03_071 and the problem
happened on OpenVMS V7.1 or higher, when using the DEC C RTL
backport object library.
o The mmap function was enhanced to accept an optional integer
argument specifying additional flags to be passed to the
SYS$CRMPSC system service for a MAP_SHARED request.
Applications making use of an additional argument must be
compiled with DEC C Version 6.0 or higher. The new signature
of the mmap function is as follows:
void mmap (void *addr, size_t len, int prot, int flags,
int filedes, off_t off); (X/OPEN, POSIX)
void mmap (void *addr, size_t len, int prot, int flags,
int filedes, off_t off ...); (DEC C EXTENSION)
Using the optional argument, the caller can create, for
example, a system global section (SEC$M_SYSGBL bit) or
permanent global section (SEC$M_PERM bit). Here, to create a
system permanent global section, the caller can specify
(SEC$M_SYSGBL | SEC$M_PERM) in the optional argument.
The mmap function does not check or set any privileges. The
caller's responsibility is to set appropriate privileges, such
as the SYSGBL privilege for SEC$M_SYSGBL and PRMGBL for
SEC$M_PERM, before calling mmap with the optional argument.
o The DECC$FIX_TIME function could return a meaningless value
and the caller had no way to check whether the function
succeeded or not.
The DEC C RTL Manual shipped with the DEC C V6.0 compiler
indicates that the DECC$FIX_TIME function may fail as follows:
Return Values
x A longword containing the number of
seconds since 00:00 January 1, 1970.
(unsigned int)(-1) Indicates an error. Be aware, that a
return value of (unsigned int)(-1) can
also represent a valid date of
Sun Feb 7 06:28:15 2106.
o A POW function call resulted in an %SYSTEM-F-HPARITH exception
when called in a D_FLOAT floating point mode with the result
maximum value representable in D_FLOAT format.
Problems addressed in ALPACRT06_071:
o After upgrading a system from OpenVMS V6.2 to OpenVMS V7.1,
there is an incompatible change in the record generation
mechanism for a file with a Fortran carriage control, when
used with "ctx=nocvt" and "mrs=132" and the data does not
contain record terminators (line-feed characters).
On OpenVMS V6.2, for such a file, the record is generated on
each call to the C RTL output function regardless of whether
the data contains record terminators or not. On OpenVMS V7.1,
the C RTL accumulates the data until the maximum record size
is reached and, then, writes everything as a single record.
While the new behavior is in line with the description of processing
RMS files in record mode in the DEC C Run-Time Library Reference
Manual, for compatibility consideration a way to request the old
behavior was provided. The behavior can be enabled by defining the
logical name DECC$V62_RECORD_GENERATION (any equivalence string).
o A new function facilitating validation of a wide character was
implemented. The function has the following interface:
int decc$validate_wchar(wchar_t wc);
The decc$validate_wchar function returns 1 (one) if the
specified wide character is a valid wide character in the
current program's locale and zero otherwise.
o lseek and fseek functions have been fixed to position a
fixed-length record file to the last written byte when
SEEK_END is specified. Prior to this, the functions were
positioning such a file at the end of the last fixed-length
record regardless of whether the last record contained a full
amount of data or not. So that this correction does not break
existing applications, the new behavior must be enabled by
defining the logical name DECC$FIXED_LENGTH_SEEK_TO_EOF (any
equivalence string).
o Two new fcntl requests defined by X/Open and POSIX were
implemented:
#include
#include
#include
int fcntl(int fildes, F_SETFD, FD_CLOEXEC);
int fcntl(int fildes, F_GETFD);
fcntl(fildes, F_SETFD, FD_CLOEXEC) sets the FD_CLOEXEC flag
for specified file descriptor. If the FD_CLOEXEC flag is set,
the file descriptor is not passed to a child process spawned
by one of the exec functions. In other words, FD_CLOEXEC flag
prevents normal inheritance of the open file descriptor by the
child process.
fcntl(fildes, F_GETFD) returns flags associated with specified
file descriptor. If FD_CLOEXEC flag is set, fcntl will
return FD_CLOEXEC.
o A customer reports that ioctl fails with "can't assign
requested address" status when called with FIONREAD request
code for a socket device. The cause of the failure is that
FIONREAD macro is defined differently in header and
header and underlying UCX routine expects the
value from header. The ioctl function was
fixed to call UCX routine with the value of FIONREAD presented
in header.
o The child process spawned by one of the functions from the exec
family does not inherit the file offset and file append mode
from the parent as required by X/Open specifications and the
POSIX standard. To have this correction not break existing
applications, the correct behavior of inheritance of the file
offset and append mode by the child process must be enabled by
defining the logical name DECC$EXEC_FILEATTR_INHERITANCE
(any equivalence string) prior to the first call to any function
from the exec family.
Problems addressed in ALPACRT05_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 The CRTL uses the system default (DEFMBXMXMSG SYSGEN parameter)
for the mailbox maximum message size (maxmsg) while creating
a mailbox associated with the pipe. Before this change, the
maxmsg was set to 512, the value documented in the description of
the pipe function in the DEC C Run-Time Library Reference Manual
for OpenVMS Systems. Since the read function transfers not more
than maxmsg bytes from a pipe, this change broke applications
relying on the 512 bytes limit. The errant code was introduced
in the ECO named ALPACRT04_071.
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 ALPACRT04_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.
o A request was made that the sysconf function be enhanced to
return information about the processors in a system.
Specifically the _SC_NPROC_CONF (200) and _SC_NPROC_ONLN (201)
options are now supported. Modifications to the UNISTD.H
header file to define these constants will be made available
in a future release of the DEC C compiler. It is recommended
that application developers add the code
#ifndef _SC_NPROC_CONF
# define _SC_NPROC_CONF 200
# define _SC_NPROC_ONLN 201
#endif
until these definitions are available.
o A problem related to the size of an intermediate pipe buffer
may lead to a write operation receiving a %SYSTEM-F-MBTOOSML.
The size of the buffer has been corrected.
o The access function would incorrectly examine the SYSTEM
protection codes and use those codes in determining if access
would be allowed.
The access function required that all requested access modes
be available in a single group of OpenVMS protection codes.
The access modes may now be spread across protection code
groups such as world, group, owner, and system.
o A user reported that the sprintf function, when called using a
simple "%s" format specifier performed worse in a threaded
application than the equivalent call to strcpy. We have
changed the processing of "%s" to perform in line with the
strcpy function for this format specifier.
o Beginning in the ALPACRT03_071 and ALPY2K01_071 ECO kits,
calling the getenv function for the "TERM" variable began
returning the string "name-80" instead of correctly returning
the terminal type such as "VT320-80".
o Beginning in the ALPACRT03_071 remedial kit, the ioctl
function defaults to using the software available as the
UCX$IOCTL_ROUTINES example code. An error in the original
code is that if an error were to occur, a system service
status code (such as SS$_ACCVIO) would be returned as an errno
value. This has been corrected to return either the
corresponding errno value or EVMSERR with vaxc$errno being
assigned this system service status code.
Problems addressed in ALPACRT03_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 An enhancement was made in the DEC C V5.6 compiler to optimize
certain format strings passed to the printf family of library
functions. This ECO kit adds the runtime support to the
shareable image. Prior to this, the symbols were resolved via
objects added to STARLET by the compiler. Full details of this
support can be found in the DEC C V5.6 release notes.
o The performance of DEC C sprintf was much 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.
o 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 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 searches 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 ALPACRT02_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
accessable, 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.
o A customer reports that the functions atof, strtod, and wcstod
incorrectly return HUGE_VAL values when compiling with the
IEEE_FLOAT and an ieee_mode qualifier of DENORM_RESULTS. The
results returned have been modified to take the compilation
mode of the calling program into account. The return value can
now be compared against HUGE_VAL.
o The following code segment demonstrates a problem in the printf
family of functions running on OpenVMS for Alpha.
double n;
for (n = 9.0e16; n < 11.0e17; n += 1.0e+17)
printf ("%20.0f\n", n);
The result is that the final zero is missing in the display of
all but the first and last line.
Problems Addressed in ALPACRT01_071:
o Calling stat from two separate threads will cause them to
interfere with one another. The stat function has been
modified to use a thread-specific buffer to store data.
o Extra characters are seen on occasion when using a
subprocess which sends data back to the parent process
using a mailbox.
o A case has been found where the fseek function fails,
correctly returns -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 A user reports and demonstrates that opening and closing
sockets does not properly release mutexes which eventually
causes the resource to be exhausted. This problem was
introduced in OpenVMS V7.0.
o Applications which call opendir and readdir recursively
to traverse subdirectories may end up in an infinite loop
when reading the directory which includes returning the
[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 the
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 reports
have been made which stated that images which used to work
fine now fail. The preloading code record has been modified
to take these 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.
During installation you may see the following message:
%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 Alpha V7.1 systems.
Remove this kit and restore the original files and libraries by
logging into the SYSTEM account and typing the following DCL
prompt:
@SYS$UPDATE:ACRT$ECO_DROP
NOTE:
ACRT$ECO_DROP.COM INSTALLs the earlier version of DECC$SHR.EXE.
However, the earlier version will not take effect until the system
is rebooted. A reboot MUST be done as part of the removal process.
Otherwise, the system may be left in an inconsistant state.
To remove the kit from an OpenVMS cluster node, the ACRT$ECO_DROP.COM
file must be run and a reboot MUST be performed on any system disk
upon which the kit was installed.
This patch can be found at any of these sites:
Colorado Site
Georgia Site
Files on this server are as follows:
alpacrt09_071.README
alpacrt09_071.CHKSUM
alpacrt09_071.CVRLET_TXT
alpacrt09_071.a-dcx_axpexe
alpacrt09_071.CVRLET_TXT
|