OpenVMS VMS73_ACRTL-V0300 Alpha V7.3 Compaq C RTL ECO Summary
TITLE: OpenVMS VMS73_ACRTL-V0300 Alpha V7.3 Compaq C RTL ECO Summary
NOTE: An OpenVMS saveset or PCSI installation file is stored
on the Internet in a self-expanding compressed file.
For OpenVMS savesets, the name of the compressed saveset
file will be kit_name.a-dcx_vaxexe for OpenVMS VAX or
kit_name.a-dcx_axpexe for OpenVMS Alpha. Once the OpenVMS
saveset is copied to your system, expand the compressed
saveset by typing RUN kitname.dcx_vaxexe or kitname.dcx_alpexe.
For PCSI files, once the PCSI file is copied to your system,
rename the PCSI file to kitname.pcsi-dcx_axpexe or
kitname.pcsi-dcx_vaxexe, then it can be expanded by typing
RUN kitname.pcsi-dcx_axpexe or kitname.pcsi-dcx_vaxexe. The
resultant file will be the PCSI installation file which can be
used to install the ECO.
New Kit Date: 13-DEC-2002
Modification Date: Not Applicable
Modification Type: NEW KIT
Copyright (c) Compaq Computer Corporation 2002. All rights reserved.
OP/SYS: OpenVMS Alpha
COMPONENT: DECC$SHR (Compaq C RTL)
SOURCE: Compaq Computer Corporation
ECO Kit Name: VMS73_ACRTL-V0300
ECO Kits Superseded by This ECO Kit: VMS73_ACRTL-V0200
ECO Kit Approximate Size: 16688 Blocks
Kit Applies To: OpenVMS Alpha V7.3
System/Cluster Reboot Necessary: Yes
Rolling Re-boot Supported: Yes
Installation Rating: INSTALL_3
3 - To be installed by customers experiencing the problems
The following remedial kit(s), or later, must be installed BEFORE
installation of this, or any required kit:
In order to receive all the corrections listed in this
kit, the following remedial kits should also be installed:
ECO KIT SUMMARY:
An ECO kit exists for Compaq C on OpenVMS Alpha V7.3. This kit
addresses the following problems:
PROBLEMS ADDRESSED IN KIT VMS73_ACRTL-V0300
Note: The first several entries list new features in this ECO kit.
For more information, see the New Features section of the release
o C header files are shipped with this ECO kit. These files
will be installed only if needed by your system.
o You can now set the default (working) directory for child
processes created by vfork/exec*, using the new RTL function
o 64-bit pointer support is added for sendmsg(), recvmsg(),
getaddrinfo(), and freeaddrinfo().
o A new feature logical DECC$ALLOW_REMOVE_OPEN_FILES is added to
control the behavior of remove() on open files.
o The following new C RTL functions are provided with this kit:
For more information, see the "New Features" section of the
release notes for this ECO kit.
o New socket routine poll() is provided with this kit.
o In some circumstances, the OpenVMS linker flagged the
GETADDRINFO_COMPAT43 symbol as undefined. This is fixed.
o The following socket routines did not have 64-bit pointer
support. Now they do:
o A previous fix to fwrite(), which involved padding short-sized
records with zeros to align them with bigger records in a
fixed-length-record file, allowed new records to have a
carriage return after every single byte, thereby creating a
large number of spurious records in the file.
Because this is a change in behavior, a feature logical has
been added to control the new behavior. This new feature
logical, DECC$WRITE_SHORT_RECORDS, supports the previous fix
to fwrite() (to accommodate short-sized records), while
retaining the legacy way of writing records to a fixed-length
file as the default behavior:
When DECC$WRITE_SHORT_RECORDS is set to "ENABLE",
short-sized records are padded with zeros to align records
on record boundaries.
When DECC$WRITE_SHORT_RECORDS is set to "DISABLE" or when
it is deassigned, the legacy behavior of writing records is
implemented. This is the recommended and default behavior.
o Recent versions of the C RTL, along with header files supplied
with Version 6.5 of the C compiler, incorrectly made a
local-time version of the ftw() function the default when
compiling with the _VMS_V6_SOURCE macro defined.
This behavior was incompatible with previous C RTL versions,
and has been restored to default to the UTC-based ftw()
function under the same circumstances. Now, to get the
local-time ftw(), you must compile with
/DEFINE=__LOCAL_TIME_FTW, in addition to the macros
_VMS_V6_SOURCE and _DECC_V4_SOURCE.
o For spawned processes that are C programs, defining the
DECC$EXEC_FILEATTR_INHERITANCE feature logical name to a value
of 1 or ENABLE no longer causes the spawned child process to
inherit file positioning for all file access modes;
specifically, append mode does not inherit file positioning.
For a child process to inherit file positioning for all file
access modes including append, DECC$EXEC_FILEATTR_INHERITANCE
must be set to a value of 2:
$ DEFINE DECC$EXEC_FILEATTR_INHERITANCE 2
For a child process to inherit file positioning for all file
access modes except append, set DECC$EXEC_FILEATTR_INHERITANCE
to a value of 1:
$ DEFINE DECC$EXEC_FILEATTR_INHERITANCE 1
This change was made in OpenVMS Version 7.3-1. This ECO
propagates the fix to OpenVMS Versions 7.3 and 7.22.
o Incomplete support for 64-bit iconv() was mistakenly put into
recent (Spring 2002) ECO kits and OpenVMS V7.3-1.
This gave the illusion of 64-bit iconv() support under some
circumstances (linking with STARLET.OLB). This was never
supported, and still is not supported.
Because 64-bit iconv() is neither functional nor supported,
this ECO removes DECC$_ICONV64.
Users compiling with /POINTER=LONG should now expect a
compiler error message such as the following:
%CC-W-PTRMISMATCH, In this statement, the referenced type of the
pointer value "(char ...)0" is "long pointer to char", which is
not compatible with "short pointer to char".
PROBLEMS ADDRESSED IN KIT VMS73_ACRTL-V0200:
o In previous releases of C RTL, all file positions were
calculated using 32-bit arithmetic. This restricted certain
file operations to file sizes less than 2GB.
This restriction has now been removed. File operations using
C RTL I/O may now be performed on file sizes up to 2
By default, applications may only use offsets expressed in 32
bits. The function fgetpos() now returns the correct file
offset when the file position is beyond 2GB.
Developers can also program their application to express file
sizes and positions in 64-bits.
The new 64-bit interfaces can be selected at compile time by
defining the _LARGEFILE feature macro:
$ CC /DEFINE=_LARGEFILE
When specified, a 64-bit integer is used to express the
integral type off_t.
Support has been added for compiling applications to use file
sizes and offsets that are 2 gigabytes or larger. This is
accomplished by allowing file offsets of 64-bit integers. Two
new functions have been added:
These are identical to fseek and ftell , but they accept or
return values of type off_t , which allows for a 64-bit
variant of off_t to be used.
Modifications to accommodate a 64-bit file offset have been
made to the following existing C RTL functions:
Note that ECO kits released in August 2000 and later for both
VAX and Alpha had a problem with stream file larger than 2GB.
Attempts to position at the beginning of file using rewind(),
lseek() or fseek() may fail and leave the file position at
end-of-file. In V7.3, this can cause an ACCVIO. This is also
o Support for the Chinese GB18030 character set was added to the
C Run-Time for the VMSI18N Internationalization kit which also
This is one of two kits required for GB18030 support, the
other is ALPVMSI18N01_073 on OpenVMS Alpha V7.3.
This C Run-Time kit must be installed before the VMSI18N kit.
o The function strftime() V conversion specifier, did not return
the correct number of weeks in the year for some boundary
dates at the end of December or the beginning of January.
o Function strftime() reported either week 52 or 53 for last
week of December. It should report "1" for December dates
which are in the same week as January 1st of the next
year, when the week that contains Jan 1 has four or more
days in the next year.
o Function strftime() always reported week 53 when early
January dates were not in week 1, even if the last week in
December was actually week 52. They should be reported as
o Threaded C applications can hang, when doing operations which
result in file I/O.
The frequency of the hang varies with the timing of statements
in the user's program. Changing the program can eliminate the
hang, especially adding extra I/O function calls.
o Function ecvt() (convert to string) had performance problems
due to its use of thread-specific data. The function called
LIB$AST_IN_PROG() protects the thread-specific data against
corruption by an interrupting AST. LIB$AST_IN_PROG()
introduces a high overhead resulting in poor performance.
Function ecvt() was not intended to be AST-safe. The handling
of thread-specific data was revised in C RTL for OpenVMS
V7.1-1. This introduced the test for LIB$AST_IN_PROG() and
the resulting overhead.
The default is now thread-safe but not AST-safe. This greatly
The AST-safe mode can be restored by enabling the feature
$ DEFINE DECC$THREAD_DATA_AST_SAFE ENABLE
o A C application can become noticeably slower after adding
calls to C Run-Time function times() to get performance data.
The times() function used an asynchronous system call $GETJPI
which includes significant overhead.
Function times() has been changed to take advantage of changes
in OpenVMS which now make the call synchronous which
significantly reduces overhead.
o Function alarm() did not correctly recognize an unexpired
timer and did not always return the correct time remaining.
Function alarm() supports a single timer. When another
request to alarm() is issued, any pending request should be
canceled, a new alarm scheduled and the time remaining on the
original timer returned.
Function alarm() was changed to:
o Use static variable for storing scheduled alarm.
o If the unexpired time is less than zero then report zero.
o If the unexpired time is greater than zero then return a
minimum of 1.
o When called from a higher access mode, function fopen() can
fail with a Bad Address error.
o Child processes did not inherit file open context "ctx=eol"
when specified in the parent process.
The child process inherits the file open contexts of the
parent. It does this by interpreting the context and
generating an open request with the reconstituted optional
arguments. The algorithm for building the open request was
not updated accordingly, and so this option was ignored.
This has been fixed.
o C programs cannot create files with special characters such as
'#' in UNIX mode.
The CRTL requires a new feature logical DECC$EFS_CHARSET to be
defined with the value ENABLE to use EFS extended characters.
Many existing applications make assumptions about file names
based on the presence of certain characters. This is
necessary because non-standard and undocumented C RTL
extensions do not work when EFS extended character set support
The existing feature logical DECC$FILENAME_UNIX_ONLY specifies
filename interpretation. Two new feature logical have been
created to enable some of these features independent of
whether OpenVMS names are accepted.
* DECC$FILENAME_UNIX_ONLY - Always interpret names as UNIX
Never interpret a name as a OpenVMS format name. This is
the primary behavior when DECC$FILENAME_UNIX_ONLY is set
* DECC$FILENAME_UNIX_NO_VERSION - Ignore OpenVMS generation
numbers and never treat the last element of a UNIX name as
a generation number.
This behavior can now be selected independently by
enabling feature logical DECC$FILENAME_UNIX_NO_VERSION.
* When not otherwise specified, always report file names in
This behavior can now be selected independently by
enabling feature logical DECC$FILENAME_UNIX_REPORT.
The implementation supports conversion from OpenVMS to UNIX
needed for readdir(), ftw(), getname(), fgetname(), and
o Function fstat() is not reporting permissions for files of
type S_IFCHR and reports that owner is owner of current
Function fstat() leaves the XABITM block for
XAB$_UCHAR_DIRECTORY linked to the FAB if $DISPLAY fails.
This also affects stat().
o Function setvbuf() restricted maximun buffer size for stream
files to 32767 instead of 65535.
When setvbuf() is used on a file not opened by RMS, such as a
socket, the application may ACCVIO.
o Applications testing the return status of pclose() in OpenVMS
mode cannot detect warnings.
To check the OpenVMS status, compile with the _VMS_WAIT macro
defined. This will enable OpenVMS Warning, Failure and
This is similar to function waitpid(), where _VMS_WAIT is
o C programs calling sockets were slow because of how the CRTL
was resolving entries for socket functions in TCP/IP shared
o Extraneous thousands separator displayed for negative values
when using locale support with printf().
For example, "-,999,999.00" instead of "-999,999.00".
o Functions remove() and unlink() cannot delete files that are
open. This is expected to work, and has been fixed.
o The C RTL was unconditionally converting the values for PATH
and HOME to lowercase.
C RTL preserves case in command line arguments when
DECC$ARGV_PARSE_STYLE is enabled and "SET
PROC/PARSE_STYLE=EXTENDED" is in effect.
It is appropriate that when command line arguments have case
preserved that the environment variables HOME and PATH be
o This was fixed.
o Function access() is not testing whether the device is
software write-locked when a user requests write access.
If device is write-locked, errno is set to EROFS and failure
is now returned.
o - tempnam() is required by the standard to offer at least
10,000 unique names. CRTL currently allows 156.
- access() is called to determine if a file to be created
exists. For tempnam() the name is always in
OpenVMS-style. When OpenVMS style names are disabled,
access() will always fail indicating that there is no
- tmpnam() reports the new name in a static buffer, instead
of a thread-specific buffer.
- When tempnam() is called repeatedly, no attempt is made to
remember the last generated name. If a file is created
for each call, the program will get slower as it tests for
the existence for each created file.
o If the top level directory on a device contains file names
which collate before 000000.DIR, ftw() and readdir do not
detect that 000000.DIR is a special directory and will
recursively search it.
000000.DIR is now recognized as the top level directory and
o Trying to rename() file xx.yy to zz gets filename zz.yy.
Trying to rename() file xx.yy to .zz gets filename xx.zz.
This problem has been fixed, but requires a C RTL feature
logical set. The user will get zz or .zz, as they specified.
For compatibility with existing programs the new behavior must
be enabled using a feature logical name:
$ DEFINE DECC$RENAME_NO_INHERIT ENABLE
If DECC$RENAME_NO_INHERIT is ENABLED, the rename function
tries to emulate UNIX.
- There is some validation of old and new names to determine
if they are directories and ensure that a directory name
will be valid after the rename.
- The effective new name does not inherit any elements from
the old name.
- rename is performed using RMS function SYS$RENAME.
This mode is designed for UNIX style names. Validation is
less complete for OpenVMS style names.
If feature DECC$RENAME_NO_INHERIT is DISABLED, the rename
function follows OpenVMS renaming policy. Apart from
converting UNIX names to OpenVMS format, in this mode the
underlying LIBRTL function LIB$RENAME_FILE performs most of
o A call to function "access(path, W_OK)" will fail if the
file/directory does not have delete access enabled.
Write access to a directory is commonly tested to see if a
file can be created in the directory. Directories on OpenVMS
are not typically created with delete access. Change access()
to allow access with write access.
o Function getenv() call could corrupt the stack and cause an
ACCVIO in a multi-threading application. This has been fixed.
o Function getch() will ACCVIO for termination sequences longer
than 8 bytes. This has been fixed.
Because the images in this kit will not take effect until the
system is rebooted, you must reboot the system after installing
If you have other nodes in your OpenVMS cluster, 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.
Install this kit with the POLYCENTER Software Installation Utility
by logging into the SYSTEM account, and typing the following at the
$ PRODUCT INSTALL VMS73_ACRTL/SOURCE=
The kit location may be a tape drive, CD, or a disk directory that
contains the kit. If /SOURCE is not specified, the utility
searches in the location defined by the logical name PCSI$SOURCE.
If PCSI$SOURCE is not defined, and the /SOURCE qualifier is not
specified, the POLYCENTER Software Installation utility searches
the current default directory.
Special Installation Instructions:
o %INSTALL-E-NODELSHRADR Error Message
During installation you may see the following message:
%INSTALL-E-NODELSHRADR, unable to delete image with shareable
-INSTALL-I-PLSREBOOT, please reboot to install a new version of
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 systems. The new
image will not take effect until the system is rebooted.
o Scripting of Answers to Installation Questions
During installation, this kit will ask and require user
response to several questions. If you wish to automate the
installation of this kit and avoid having to provide responses
to these questions, you must create a DCL command procedure
that includes the following definitions and commands:
- $ DEFINE/SYS NO_ASK$BACKUP TRUE
- $ DEFINE/SYS NO_ASK$REBOOT TRUE
- Add the following qualifiers to the PRODUCT INSTALL
command and add that command to the DCL procedure.
- De-assign the logicals assigned
For example, a sample command file to install the
VMS73_ACRTL-V0300 kit would be:
$ DEFINE/SYS NO_ASK$BACKUP TRUE
$ DEFINE/SYS NO_ASK$REBOOT TRUE
$ PROD INSTALL VMS73_ACRTL/PROD=DEC/BASE=AXPVMS/VER=V3.0
$ DEASSIGN/SYS NO_ASK$BACKUP
$ DEASSIGN/SYS NO_ASK$REBOOT
All trademarks are the property of their respective owners.
Files on this server are as follows: