ALPACRT10_061 Alpha V6.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. All rights reserved.
PRODUCT: OpenVMS Alpha
COMPONENTS: DEC C RTL - DECC$SHR.EXE
STARLET.OLB (updated with CRTL.OBJ and CRTLMSGDEF.OBJ)
SOURCE: Digital Equipment Corporation
ECO INFORMATION:
ECO Kit Name: ALPACRT10_061
ECO Kits Superseded by This ECO Kit: ALPACRT09_061
ALPACRT08_061
ALPACRT07_061
ALPACRT06_061 (Never Released)
ALPACRT05_061
AXPACRT04_061 (AXPACRT)
AXPACRT03_061
AXPACRT02_061
AXPACRT01_061 (CSCPAT_2066)
ECO Kit Approximate Size: 8275 Blocks
Saveset A - 8226 Blocks
Kit Applies To: OpenVMS Alpha V6.1, V6.1-1H1, V6.1-1H2
System/Cluster Reboot Necessary: Yes
Installation Rating: 3 - To be installed on all systems running
the listed versions of OpenVMS which
are experiencing the problems described.
NOTE: In order to receive the full fixes listed in this kit,
the following remedial kits also need to be installed:
None
ECO KIT SUMMARY:
An ECO kit exists for the DEC C RTL on OpenVMS Alpha V6.1 through
V6.1-1H2. This kit addresses the following problems:
PROBLEMS ADDRESSED IN ALPACRT10_061 KIT:
o The mkdir function used to perform exact placement control on
the relative volume set even if the application called mkdir
with no extra parameters. This problem has been corrected, so
that if the application calls this function with extra
parameters then exact placement will take place otherwise a
NULL parameter will be used.
o Certain devices can only write an even number of bytes.
Failure to initialize the DEC C RTL internal I/O buffer caused
an indeterminate value to be written as the "pad byte" when an
odd number of bytes was written to a file on this type of
device.
o Beginning with DEC C V5.6, the compiler looks for the presence
of a new symbol in the DECC$SHR image to determine the default
value of __CRTL_VER. If this symbol is not found, the default
is set to __VMS_VER, which defaults to the version of OpenVMS
on which the compilation is taking place. With the addition of
this symbol to DECC$SHR, the user will now be able to define a
logical pointing to DECC$SHR and safely compile on any version
of OpenVMS without defining __CRTL_VER or __VMS_VER.
o Mailbox devices are considered record oriented devices by the
DEC C Runtime Library except those created by calling the pipe
function. The impact of this is an extra linefeed character
being added when the mailbox is read. A change has been made
to treat mailboxes as stream oriented devices if an environment
variable with the name DECC$MAILBOX_CTX_STM is present at the
time the mailbox is opened.
o The ANSI standard states that file positioning must be done
between a read operation and a write operation for files which
are opened for update. A change has been made which allows
serial devices, such as terminals, to implement positioning
functions such as rewind(). Prior to this change attempts to
position such devices would result in an error.
PROBLEMS ADDRESSED IN ALPACRT09_061 KIT:
o An ISV reports that extra characters are seen on occasion
when using a subprocess which sends data back to the parent
process using a mailbox.
o A case was found where the fseek function failed, correctly
returned a -1 value, but failed to set errno properly.
PROBLEMS ADDRESSED IN ALPACRT08_061 KIT:
o The exec functions which are passed argument and environment
vectors no longer produce incorrect values for arguments and
environment variables which are between 127 and 256 bytes long.
o Extra characters may be written to stdout under the
conditions that the application is reading from stdin and it is
not a terminal. The extra characters appear random in the
output, but in fact are written each time a new record is read
from stdin.
o An application which closes either stdin, stdout, or stderr,
and then reopens it using the dup function may not have the
file actually closed if i/o is not done using the file
descriptor. A workaround is to force i/o on the file by using
a function call such as sync or flush.
PROBLEMS ADDRESSED IN ALPACRT07_061 KIT:
o The qsort function no longer access violates when sorting a
large number of records. This was demonstrated by sorting
1966079 records whose values were 1 through 1966079. The qsort
function can now sort the maximum number of records.
o The DEC C Runtime Library had previously added the ability for
users to define the logical name DECC$DEFAULT_LRL to change the
default longest record length value on stream files. A problem
existed such that defining this logical name to zero resulted
in files which had fixed length records instead of stream_lf
records.
PROBLEMS ADDRESSED IN ALPACRT06_061 KIT:
o The lseek function may position incorrectly when given the
SEEK_END option. Typically this occurs when the internal
buffer is full and the last operation done to the file is flush
or sync.
o Since changing the default LRL value for stream files from 0 to
32767, we've been informed that this change has a dramatic
affect on sort times and workfile size. We now look for a
logical DECC$DEFAULT_LRL for this value, using 32767 if not
defined.
PROBLEMS ADDRESSED IN ALPACRT05_061 KIT:
o The DEC C RTL routine chdir fails when passed a logical search
list.
o In the DSNlink and DIA C database, there is an article on how
to implement non-blocking pipes under OpenVMS. The article
title is:
Example-C Implementing Non-Blocking Pipes Using VAX C RTL
This example fails under OpenVMS Alpha V6.2. It worked under
OpenVMS Alpha V6.1.
o In the DSNlink and DIA C database, there is an article on how
to implement non-blocking pipes under OpenVMS. The article
title is:
Example-C Implementing Non-Blocking Pipes Using VAX C RTL
This example fails under OpenVMS Alpha V6.2. It worked under
OpenVMS Alpha V6.1.
o The function ungetc stopped working in OpenVMS V6.2 for both
variable and fixed length records.
o Using VAXC, the curses code fragment:
wmove(win, 1, 2); wprintw(win, "First line" );
wmove(win, 2, 2); wprintw(win, "Second line");
produces the output:
C First line
Second Line
Using the compatible VMS Curses package provided by DECC on both
VAX and Alpha, the results are:
First lineSecond Line
o Issuing a call to getenv("TERM") would fail when used from a
VT500 class terminal.
o If you were to run a program containing the following fragment
on OpenVMS Alpha V6.1, you would notice one file was created
(test.file). A second run would append to the file. If you
run it on OpenVMS Alpha V6.2, it created a new file every time.
It did not append.
fp = fopen("TEST", "a", "dna=SYS$DISK:[].file");
o On slow systems, the return value from sleep (which is defined
to be how much of the time we did not sleep) could be a
negative number if we slept too long.
o Two locks may be obtained during I/O operations. In the fclose
function, lock A was obtained before lock B. In all other CRTL
functions lock B was obtained before lock A. Under adverse
conditions, deadlock results.
o When using fflush/fsynch with DEC C the "stdout" buffer is NOT
flushed at the time you call these RTLs. Eventually the
buffers do get flushed, but with VAX C the buffer is flushed
using the same RTLs.
o Positioning to the end of file using the fseek function with
the SEEK_SET option would no longer succeed if the user did not
open the file with write.
o Bizarre I/O behavior when the I/O operation involved
positioning to the last block in the file.
o A regression was introduced in OpenVMS Alpha V6.2 whereby the
scanw and wscanw routines always access violate.
o When reading zero length records from a Fortran carriage
control record file. The result is that the carriage control
from the previous read is used and may result in an access
violation dereferencing the data in the buffer.
o The read function fails to load characters that have been used
in calls to the ungetc function.
o The read function was not loading characters from the unget
buffer before reading from the disk.
PROBLEMS ADDRESSED IN AXPACRT04_061 KIT:
o A regression was introduced in the ECO kit AXPACRT03_061 which
causes certain parent/child pipe communication to hang.
o The functions fprintf & printf truncate the output when more
than one element is specified in the I/O list and the number of
characters written for a particular element exceeds 2048
characters. For example:
char buffer(2048);
printf("++++%s", buffer);
In this particular case the output will be "++++" plus the
first 2044 characters from "buffer". Remove the "++++" and all
2048 characters from "buffer" are output. If the "buffer" is
larger than 2048 characters, then the same is true except that
characters 1-2044 will be output, characters 2045-2048 will be
truncated and then characters 2049 -> end-of-buffer will be
output.
o The functions strpbrk, strspn, and strcspn do not properly deal
with 8 bit characters which leads to unpredictable results.
o The ANSI standard states in section 4.10.3.4 that calling the
function realloc with a size parameter of zero is the same as a
free.
PROBLEMS ADDRESSED IN AXPACRT03_061 KIT
o A correction has been made which allows OpenVMS AXP C programs
to correctly open an LRA0, a PC printer device found on certain
newer AXP systems. Prior to this correction, attempting to
open such devices would result in vaxc$errno being set to
RMS$_IOP (operation invalid for file organization or device).
o The functions which write data to a file corrupt the data in
the file if an "exceeded disk quota" error occurs during the
write operation.
o The behavior of passing negated scansets to the scanf function
was changed such that a "-" between two characters where the
first is less than the second is treated as a range character
set.
o The function getenv was enhanced to perform a case insensitive
lookup if the case sensitive lookup fails.
o The functions which read data from files would fail to read
lines from an RMS "variable with fixed control" file with print
format carriage control attributes. This typically occurred if
the lines were double spaced.
o Calls to the fwrite function without a trailing n resulted in
implied newlines being written if the following conditions
applied: the file was an RMS sequential variable with fixed
control file with print format carriage control attributes.
o The functions close and fclose did not properly set the value
of vaxc$errno when the close operation failed.
o The function ftell has been corrected to take into account that
an unget character may exist. If such a character exists, the
file position is returned as the position of this character in
the file; as if the character has not yet been read.
o When working with remotely accessed files via DECnet, the
function fseek would fail to position correctly in files
containing fixed length records. Also, the function ftell
would report an incorrect position.
o A process would terminate after the second CTRL-C (CONTROL C)
regardless of the application re-establishing SIGINT
processing. The SIGINT handling now works as documented.
o The file writing functions would lose characters when writing
to a file whose attributes include carriage return carriage
control and whose record size is the size of the I/O buffer
being used by the RTL. Typically this buffer size is a power
of 2 greater than 8192.
o In V6.1 and earlier releases, if the buffer argument to setvbuf
was NULL, then setvbuf would reset the buffer to the one
allocated by the DEC C RTL when the file was opened. New
behavior is that if a NULL buffer argument is passed, and the
size argument is larger than the buffer allocated by the RTL
when the file was opened, then setvbuf will allocate a buffer
equal to the specified size, and use that as the file buffer.
o The functions stat and fstat would fail to return any
information about a remote file that was already opened for
exclusive access.
o The fclose function has been corrected to properly deallocate
channels used when the user has opened the NULL (NL:) device.
o The printf function was enhanced to print "(null)" when passed
a null pointer. Prior to this, the DEC C RTL would issue an
access violation error.
o The RTL now properly parses RMS options of the form "DNA=".
This change was made for the benefit of applications migrating
from VAX C to DEC C.
o The function puts now correctly can write a string whose length
exceeds 32,767 bytes. Prior to this correction, the function
would report that it succeeded, while it actually had failed.
The function puts has been corrected such that when strings are
written whose length exceeds 8131 bytes, typing the file no
longer results in the error message "SYSTEM-F-EXQUOTA, process
quota exceeded".
o The function read no longer adds an extra NULL character to the
end of a record when the record attribute is Fortran Carriage
Control and the carriage control character is NULL. The new
behavior is now compatible with VAX C, which simply removes the
carriage control character.
o A problem was fixed when reading fixed length record files
using a combination of 'lseek' and 'read' which behaved
correctly using the VAX C product.
o The function fseek no longer fails when passed a direction of
SEEK_END and a non-zero offset argument. This correction
applies to files with fixed length records.
o The function read has been corrected to allow reading the 'n'
character from a DECnet task to task network device.
o The function system may now be used from a signal handler which
has been triggered by the SIGALRM function. Prior to this
correction, this combination of calls resulted in the process
issuing the system call hanging.
o The function pipe no longer fails if the flags O_RDWR, O_RDONLY
or O_WRONLY are specified. These flags are now ignored by the
function.
o For child processes in which the parent has used the dup
function to redefine file descriptor zero to be a pipe,
SYS$ERROR is no longer defined to be the NLA0 device.
o A correction has been made to the RTL such that the I/O system
properly inherits a record attribute of none when a previous
version of the file had an undefined record format. Prior to
this correction, the newly created file would be created with
carriage return record attributes.
The functions fopen, open, and creat have been corrected to
allow the RMS option "rat=none" to override the record
attributes of the previous version of the file.
The function ftell now correctly reports the file position for
files which have an undefined record format. This includes
when the file is positioned at the end of the file.
o Depending upon previous usages of virtual memory, the first
call to the alarm function in an application sometimes would
return a non-zero value. Also, the first call to the strtok
function, when passed NULL as the first argument, would
sometimes return a non-zero value.
PROBLEMS ADDRESSED IN AXPACRT02_061 KIT:
o DEC C on OpenVMS AXP V6.1 ignores the Maximum Record Size (mrs)
value provided by the user, and sets the mrs to 32767
regardless of the mrs value specified. For example, with the
statement:
fp = fopen("test.dat","w","mrs=512");
The mrs is still set to 32767 instead of the specified 512.
o If the user has privileges set to be able to create SUPER mode
logicals, then the chdir request will always be permanent.
o A program calls fclose(fp) to close the disk file associated
with the "FILE *" fp, but the disk is full and the fclose call
fails. At this point the file cannot be deleted from the disk
because the program still has it open; but the program cannot
close it. As a result the file cannot be deleted for as long
as the program is running.
o Wait gets confused with multiple children. The problem occurs
if the process that finished is not the first of the children
and no children have finished before the call to wait.
o After installing the AXPACRT01_061 ECO kit, the IEEE problems
with printf have been fixed. The IEEE problems with fcvt still
exist.
o The lseek function fails to write to the correct block if the
file does *not* exist and the write is 1024 bytes.
PROBLEMS ADDRESSED IN AXPACRT01_061 KIT:
o The getch curses routine does not wait for input, even when
compiling using /DEFINE=__VMS_CURSES. This kit fixes the
problem when the C code is compiled using /DEFINE=__VMS_CURSES
o The access routine, when used to determine access of a file
through the use of a search list that spans multiple physical
devices, fails.
o This ECO fixes a problem with the strtok function, caused by an
internal array of 256 entries not initializing the last entry
of the array. This array is used to determine which characters
are to be treated as token separators. Being allocated on the
stack, this final entry is randomly either zero or non-zero.
If this byte is non-zero and the user's string contains an
X'FF' byte, the strtok function produces incorrect results. If
this byte is zero or the user's string does not contain an
ASCII 255 byte, then the function behaves correctly.
o The printf family of functions, as well as the fcvt function,
did not correctly output t-float floating point numbers in
programs compiled as:
cc/float=ieee
INSTALLATION NOTES:
Install this kit with the VMSINSTAL utility by logging into the SYSTEM
account, and typing the following at the DCL prompt:
@SYS$UPDATE:VMSINSTAL ALPACRT10_061 [location of the saveset]
The saveset location may be a tape drive, or a disk directory that
contains the kit saveset.
System should be rebooted after successful installation of the kit. If
you have other nodes in your VMScluster, they should also be rebooted
in order to make use of the new image(s).
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 V6.1 systems. The new image will not take effect until the
system is rebooted.
REMOVAL INSTRUCTIONS:
Remove this kit and restore the original files and libraries by logging
into the SYSTEM account, and typing the following at the DCL prompt:
@SYS$UPDATE:ACRT$ECO_DROP
This patch can be found at any of these sites:
Colorado Site
Georgia Site
Files on this server are as follows:
alpacrt10_061.README
alpacrt10_061.CHKSUM
alpacrt10_061.CVRLET_TXT
alpacrt10_061.a-dcx_axpexe
|