ECO NUMBER:     VMS721_ACRTL-V0200
             PRODUCT:        OpenVMS Alpha OPERATING SYSTEM 7.2-1, 72-1H1
             UPDATE PRODUCT: OpenVMS Alpha OPERATING SYSTEM 7.2-1, 72-1H1




                                COVER LETTER


1  KIT NAME:

     VMS721_ACRTL-V0200


2  KITS SUPERSEDED BY THIS KIT:

     VMS721_ACRTL-V0100


3  KIT DEPENDENCIES:

     3.1  The  following  remedial  kit(s)  must  be  installed   BEFORE
          installation of this, or any required kit:


      o  VSM721_UPDATE-V0100

      o  VSM721_PCSI-V0100



     3.2  In order to receive all the corrections listed  in  this  kit,
          the following remedial kits should also be installed:

     None.


4  KIT DESCRIPTION:

     4.1  Version(s) of OpenVMS to which this kit may be applied:

     OpenVMS Alpha V7.2-1, V7.2-1H1


     4.2  Files patched or replaced:


      o  [SYSLIB]DECC$SHR.EXE (new image)

      o  [SYSLIB]CRTL.OBJ (new file - used to update STARLET.OBJ)

      o  [SYSLIB]CRTLMSGDEF.OBJ (new file - used to update STARLET.OBJ)



5  PROBLEMS ADDRESSED IN KIT VMS721_ACRTL-V0200


      o  The Compaq C RTL functions which make calls to  RMS  have  been
         modified  to  better support ODS-5 disks.  This is an extensive
         set of changes throughout the RTL to support case preservation,
         long  file  names,  and non-standard file name characters.  The

-- COVER LETTER --                                              Page 2
                                                        11 August 2000


         default behavior of the RTL has not changed.

         The Compaq C RTL supports case preservation in  file  names  on
         ODS  level  5  disks.   This applies when creating or reporting
         file names.  By default, this feature is disabled.   To  enable
         this  feature define the logical name DECC$EFS_CASE_PRESERVE to
         "ENABLE".   If  file  names  are  all  in  upper  case,  define
         DECC$EFS_CASE_SPECIAL  to  "ENABLE"  to  convert the names into
         lower case when reporting the name  in  UNIX  style.   If  file
         names are not all in upper case, then the case is preserved.

         Most C RTL functions now accept long OpenVMS-style  file  names
         as arguments.  For OpenVMS Alpha Version 7.2, some basic Compaq
         C RTL I/O functions (creat, stat, and the  functions  from  the
         open   family  of  functions)  were  enhanced  to  accept  long
         OpenVMS-style file names for an ODS-5 device.

         In this ECO kit, all other Compaq C RTL functions, except chdir
         and  the functions from the exec family of functions, were also
         enhanced to accept long OpenVMS-style file names for  an  ODS-5
         device.

         All  C  RTL  functions  that  accept  or   report   full   file
         specifications  will  process  file  specifications  up to 4095
         bytes long, subject to the rules defined for the media  format.
         For file specifications in OpenVMS format, there are no special
         restrictions.  In situations where a  full  file  specification
         cannot  be  reported  because  the  buffer  is  too  short, the
         function attempts to report the abbreviated name.

         There are restrictions with UNIX file names.  Names  containing
         special   characters,  such  as  multiple  periods,  caret,  or
         multinational characters, may be rejected.  A function call may
         report  failure  if  the  output  buffer is not large enough to
         receive the full name.  For OpenVMS-style names,  the  reported
         name  would  contain  a  FID-abbreviated  name.   There  is  no
         representation of FID-abbreviated names defined for UNIX.

      o  The Compaq C RTL was enhanced to allow interpreting the leading
         part   of   a   UNIX-style   file  specification  as  either  a
         subdirectory name or a device name.

         The translation of the UNIX-style file name  "foo/bar"  to  the
         OpenVMS-style  file  name "foo:bar" was the only translation in
         previous versions OpenVMS.  It remains the default.

         To request translation of the UNIX-style name "foo/bar" to  the
         OpenVMS-style  name  "[.foo]bar",  DEFINE the following logical
         name to any value:

         $ DEFINE DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION ENABLE

         To return to the default file-name  translation,  DEASSIGN  the
         logical  name.  The logical name is checked only once per image
         activation, not on a file-by-file basis.

-- COVER LETTER --                                              Page 3
                                                        11 August 2000


      o  The file creation functions  (fopen,  open,  creat)  have  been
         corrected  to not inherit file attributes if a directory by the
         same name exists for the  file  being  created.   For  example,
         creating  a  file named "foo." in a directory which contained a
         "foo.dir" would incorrectly inherit file attributes  from  this
         directory file.

      o  The stat function no longer puts the wrong values into st_?time
         members of the stat structure.  More precisely, during daylight
         savings time the values of st_?time  are  no  longer  one  hour
         ahead  from  file  creation/modification  time  reported by the
         $DIRECTORY command.

      o  Nonquoted command-line arguments passed to C and  C++  programs
         (argv  arguments) can now optionally have their case preserved,
         rather than being  lowercased  as  in  previous  versions.   By
         default, this feature is disabled.

         To enable this case preservation feature,  define  the  logical
         name    DECC$ARGV_PARSE_STYLE   to   "ENABLE"   and   set   the
         process-level DCL parse style flag to "EXTENDED" in the process
         running  the  program.  Enabling this feature also ensures that
         the image name returned in argv[0] is also case-preserved.

      o  The time functions time, ftime, gettimeofday and getclock would
         fail  for  a  TDF  (time differential factor) of -13 hours, the
         value required in New Zealand.  According to  the  U.S.   Naval
         Observatory  information  the valid range for the TDF is -13.75
         to +13, inclusive.  The C RTL now allows this full range.

      o  The _malloc64 function was corrected to allow initialization of
         this function in a threadsafe manner.  Prior to this change, if
         the first call occurs after the program  has  created  multiple
         threads  and  more than one thread calls the _malloc64 routine,
         an access violation may occur.

      o  In the previous  ECO  kit,  a  change  was  introduced  to  the
         function    strptime()   for   XPG5-compatibility   to   handle
         expressions for the 2-digit year format %y when the century was
         not  specified.   The  requirement  is for 2-digit years in the
         range 0-68 to be treated as 21st century and years in the range
         69-99  as  20th  century.  The 2-digit years in the range 69-99
         were incorrectly being treated as 21st century.

      o  The execlp and execvp functions were unconditionally  prefixing
         the  file  specification  of  the  image to be run in the child
         process  with  "VAXC$PATH:"  string.   When  passed   a   fully
         qualified  file  specification, this would result in an invalid
         file specification.

      o  The behavior of lseek() and fseek() at positions beyond the end
         of  data  in  a  file  were  not  conforming  to the POSIX/ANSI
         standard.  The file was being physically null  padded  on  disk
         even  though  the  standard  only requires this null padding if
         data is actually written at this point.  In the  case  reported
         by  the  user,  seeking  to  the end of a file by using a large

-- COVER LETTER --                                              Page 4
                                                        11 August 2000


         offset would take a long time and may  exhaust  available  disk
         space.    To   get   the   POSIX   behavior,  you  must  define
         DECC$POSIX_SEEK_STREAM_FILE as "ENABLE".  The default  behavior
         is unchanged.

      o  The Compaq C RTL was enhanced to  open  all  files  for  shared
         access  as if the "shr=del,get,put,upd" option was specified in
         the open* or creat call.  To enable this  feature,  define  the
         logical  name  DECC$FILE_SHARING  to  the  value "ENABLE".  The
         value is case-insensitive and is checked only  once  per  image
         activation, not on a file-by-file basis.

      o  The Compaq C RTL was failing when the amount of data written to
         a  pipe  exceeded  the  buffer  size of that pipe.  The RTL now
         breaks the large write into a sequence of writes whose size  is
         the size of the underlying mailbox used to implement pipes.

      o  The opendir function now accepts ".." to be equivalent to  both
         "../" and "[-]".

      o  A problem was reported that the RTL could  hang  if  exit  were
         called  while  threads  were  continuing  to  do I/O.  Analysis
         showed that the hang was caused by a thread  holding  the  lock
         necessary  to  close  the file and the exit handler blocking on
         this lock.  The change implemented was to not attempt to  close
         files whose locks were currently in use.

      o  When  a  stream  file  is  extended  using  ftruncate()  it  is
         documented  that  the extended area will be filled with zeroes.
         This is now done correctly.  Prior to this change, the file was
         not extended.

      o  The documentation of the select function states that it returns
         either  when  a socket is ready to be read or written, when the
         timeout period expires, or when exceptions occur.  It  was  not
         properly  terminating when an exception occurred.  This problem
         was corrected by dynamically linking to and  calling  an  abort
         function  in  the  socket  library.   A  complete correction to
         interrupting the select function will also require an  eco  kit
         from  the  Compaq  TCP/IP product which includes this new abort
         function.

      o  The fstat function was corrected to  not  access  violate  when
         called   with   stdin,   stdout,   stderr,   or   a   directory
         specification.

      o  The chdir function  was  not  well  behaved  when  the  calling
         program  passed  an  argument  which was a search list logical.
         The chdir function was  unconditionally  changing  the  logical
         sys$disk to the first member of the search list was effectively
         dropping the remaining members.  The change in behavior is seen
         as  a step in the right direction, but there are plans for more
         work in this area.

-- COVER LETTER --                                              Page 5
                                                        11 August 2000


      o  The stat functions were not correctly handling files which were
         not directories but did use a .dir extension.  This problem was
         discovered when porting a unix application which  used  a  .dir
         extension to store application specific information.

      o  The RTL functions which process file  specifications  were  not
         correctly  processing files which contained a hyphen character.
         The RTL was incorrectly assuming that hyphens were only allowed
         to specify a relative directory path.



6  PROBLEMS ADDRESSED IN KIT VMS721_ACRT-V0100


      o  The getenv() function has been corrected to  check  for  a  CLI
         symbol  only  when called in user access mode.  While DEC C RTL
         is a user-mode run time library, we decided to correct getenv()
         in  order  to  make  the  library more robust.  This is because
         calling 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 VMS
         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,  it  was  changed  how  the
         strptime()   function   processes  the  "%y"  directive  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  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.

-- COVER LETTER --                                              Page 6
                                                        11 August 2000


         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
         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 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   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 VMS 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.

         None of these problems were ever reported by a customer.

      o  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,  readdir()  function  could
         return incorrect file names.

-- COVER LETTER --                                              Page 7
                                                        11 August 2000


      o  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 Eastern time zone.

         The failure 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 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  Eastern  time  zone.   Given  the
         possibility  of  calling mktime() with invalid time, the stat()
         function, probably, should not have used mktime() in the  first
         place  or  at  least  should  have  been  prepared for mktime()
         failure.

      o  The CRTL I/O  subsystem  was  enhanced  to  lift  eight  nested
         directory  levels  restriction for an ODS-5 device.  It affects
         such DEC C RTL functions as access, mkdir, opendir, rmdir,  and
         stat.

         The  following  program  example  shows   different   VMS   and
         Unix-style deep directory specifications.

         #include <dirent.h>
         #include <errno.h>
         #include <stat.h>
         #include <stdio.h>
         #include <string.h>
         #include <unistd.h>

         #define DIM(_s) (sizeof(_s) / sizeof(_s[0]))

         /*
         ** we assume presence of root$ concieled device:
         **
         ** define/NoLog/Tran=(Conceal,Terminal) root$ node$dka0:[000000.]

-- COVER LETTER --                                              Page 8
                                                        11 August 2000


         **
         */

         static char *filename[] = {
         "node$dka0:[w.x.y.z.a.b.c.d.e.f.g.h.i.j]",    /* (1) */
         "node$dka0:[w.x.y.z.a.b.c.d.e.f.g.h.i]j.dir", /* (2) */
         "root$/w/x/y/z/a/b/c/d/e/f/g/h/i/j",          /* (3) */
         };

         main()
         {
           struct stat s;
           int i;
           char *name;

           for(i=0; i < DIM(filename); ++i) {
             name = filename[i];

             if ( mkdir(name,0) == -1 )
               printf("%d? mkdir(): %s\n", i+1, strerror(errno));

             if ( stat(name,&s) )
               printf("%d? stat(): %s\n", i+1, strerror(errno));
             else if ( !S_ISDIR(s.st_mode) )
               printf("%d? stat(): %s\n", i+1, "not a directory???");

             if ( !opendir(name) )
               printf("%d? opendir(): %s\n", i+1, strerror(errno));

             if ( access(name,F_OK) == -1 )
               printf("%d? access(): %s\n", i+1, strerror(errno));

             if ( rmdir(name) == -1 )
               printf("%d? rmdir(): %s\n", i+1, strerror(errno));
           }
         }

         Please note, that the DEC C RTL still does  not  support  mixed
         Unix/VMS-style  file  names  coded  using extended ODS-5 syntax
         like "doc/foo.bar.bar", "~foo^.bar" and "./tmp/foo.bar.b^_ar".

      o  The select() function has  been  corrected  to  return  failure
         status if either invalid file descriptor or file descriptor not
         associated with a socket is found in one of the specified  file
         descriptor  sets.   In  case  of  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 is
         because currently the select() function  can  operate  only  on
         sockets.

-- COVER LETTER --                                              Page 9
                                                        11 August 2000


         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 printf() "engine" introduced  in  ALPACRT07_071  kit
         has  been  fixed.  The bug was that when 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 VMS time functions have been corrected to handle
         times  after  19-Jan-2038 3:14:07.  Data type time_t is defined
         on VMS 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 printf() family of functions have been enhanced to  perform
         better  when  the  calling  application has exhausted available
         memory.

      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.


-- COVER LETTER --                                             Page 10
                                                        11 August 2000


7  KIT INSTALLATION RATING:

     The following kit  installation  rating,  based  upon  current  CLD
     information,  is  provided  to  serve as a guide to which customers
     should apply this remedial kit.  (Reference attached Disclaimer  of
     Warranty and Limitation of Liability Statement)

     INSTALLATION RATING:

       3 : To  be  installed  by  customers  experiencing  the  problems
           corrected.



8  INSTALLATION INSTRUCTIONS:

     Install this kit with the POLYCENTER Software Installation  Utility
     by logging into the SYSTEM account, and typing the following at the
     DCL prompt:

      PRODUCT INSTALL VMS721_ACRTL /SOURCE=[kit location]

     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.

     Since the images in this kit will not take effect until the  system
     is rebooted, you must reboot the system after installing this kit.

     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.

     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 systems.  The new  image  will  not
     take effect until the system is rebooted.

     Copyright  (c)  Compaq  Computer  Corporation,  2000   All   Rights
     Reserved.   Unpublished rights reserved under the copyright laws of
     the United States.

     The software contained on this media is proprietary to and embodies
     the   confidential   technology  of  Compaq  Computer  Corporation.
     Possession, use, or dissemination of  the  software  and  media  is
     authorized  only  pursuant  to  a valid written license from Compaq

-- COVER LETTER --                                             Page 11
                                                        11 August 2000


     Computer Corporation.

     DISCLAIMER OF WARRANTY AND LIMITATION OF LIABILITY

     THIS PATCH IS PROVIDED AS IS, WITHOUT WARRANTY OF  ANY  KIND.   ALL
     EXPRESS  OR  IMPLIED  CONDITIONS,  REPRESENTATIONS  AND WARRANTIES,
     INCLUDING ANY IMPLIED  WARRANTY  OF  MERCHANTABILITY,  FITNESS  FOR
     PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED TO THE
     EXTENT PERMITTED BY APPLICABLE LAW.  IN NO  EVENT  WILL  COMPAQ  BE
     LIABLE  FOR  ANY  LOST REVENUE OR PROFIT, OR FOR SPECIAL, INDIRECT,
     CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER  CAUSED  AND
     REGARDLESS  OF  THE  THEORY OF LIABILITY, WITH RESPECT TO ANY PATCH
     MADE AVAILABLE HERE OR TO THE USE OF SUCH PATCH.