Linux Standard Base Test Development

	  Test Assertions

		 for

	LSB-OS test package


	  The Open Group and
	     UniSoft Ltd.

	  November 24th, 2000


	     Revision 1.0



Test Specification	Revision 1.0
LSB-OS test package development

1.Notes for Reviewers

Assertions for the LSB-os test suite

The Open Group tries to re-use test technology whenever possible.
As a result, assertions in the LSB-os test package come from a variety
of sources.

This has a bearing on the type of review comments that might be
appropriate for the assertions for each test case, as follows:

       Assertions derived from The Open Group test suites

       These assertions and the accompanying test cases are used for
       UNIX98 branding, and have been widely reviewed and accepted
       by the industry.
       It is probably only appropriate to comment on whether or not
       one of these assertions should be included in LSB-os, rather
       than commenting on the detail of the assertion text.


       Assertions derived from other industry-standard test suites

       These assertions and the accompanying test cases are used for
       testing conformance to other standards.
       Although these assertions have probably been subject to less
       scrutiny than those in the The Open Group test suites they are,
	   nevertheless, generally accepted by the organisations that use them.
       Again, it is probably only appropriate to comment on whether
       or not one of these assertions should be included in LSB-os,
       rather than commenting on the detail of the assertion text.


       Assertions written specifically for LSB-os

       These are new assertions written for this test package and are
       offered for external review for the first time.
       It is probably appropriate for reviewers to pay most attention
       to assertions in this category.



The files in each category are as follows:

Assertions derived from TOG test suites

LSB.os/aio/aio_cancel/T.aio_cancel
LSB.os/aio/aio_error/T.aio_error
LSB.os/aio/aio_fsync/T.aio_fsync



Test Specification			   Revision 1.0
LSB-OS test package development

LSB.os/aio/aio_read/T.aio_read
LSB.os/aio/aio_read_X/T.aio_read_X
LSB.os/aio/aio_return/T.aio_return
LSB.os/aio/aio_suspend/T.aio_suspend
LSB.os/aio/aio_write/T.aio_write
LSB.os/aio/aio_write_X/T.aio_write_X
LSB.os/aio/lio_listio/T.lio_listio
LSB.os/aio/lio_listio_X/T.lio_listio_X
LSB.os/files/dev_null/T.dev_null
LSB.os/files/dev_tty/T.dev_tty
LSB.os/files/seekdir/T.seekdir
LSB.os/files/telldir/T.telldir
LSB.os/genuts/fnmatch/T.fnmatch
LSB.os/genuts/ftw/T.ftw
LSB.os/genuts/getopt/T.getopt
LSB.os/genuts/glob/T.glob
LSB.os/genuts/pclose/T.pclose
LSB.os/genuts/popen/T.popen
LSB.os/genuts/wordexp/T.wordexp
LSB.os/ipc/msgctl/T.msgctl
LSB.os/ipc/msgget/T.msgget
LSB.os/ipc/msgrcv/T.msgrcv
LSB.os/ipc/msgsnd/T.msgsnd
LSB.os/ipc/semctl/T.semctl
LSB.os/ipc/semget/T.semget
LSB.os/ipc/semop/T.semop
LSB.os/ipc/shmat/T.shmat
LSB.os/ipc/shmctl/T.shmctl
LSB.os/ipc/shmdt/T.shmdt
LSB.os/ipc/shmget/T.shmget
LSB.os/libdl/dlclose/T.dlclose
LSB.os/libdl/dlerror/T.dlerror
LSB.os/libdl/dlopen/T.dlopen
LSB.os/mfiles/mmap/T.mmap
LSB.os/mfiles/mmap_P/T.mmap_P
LSB.os/mfiles/mmap_X/T.mmap_X
LSB.os/mfiles/msync/T.msync
LSB.os/mfiles/msync_P/T.msync_P
LSB.os/mfiles/munmap/T.munmap
LSB.os/mfiles/munmap_P/T.munmap_P
LSB.os/mfiles/munmap_X/T.munmap_X
LSB.os/mprotect/mprotect_P/T.mprotect_P
LSB.os/procenv/chroot/T.chroot
LSB.os/procenv/cuserid/T.cuserid
LSB.os/procenv/nice/T.nice
LSB.os/procenv/nice_X/T.nice_X
LSB.os/procenv/putenv/T.putenv
LSB.os/procenv/ulimit/T.ulimit
LSB.os/procprim/exec/T.execl



Test Specification					       Revision 1.0
LSB-OS test package development

LSB.os/procprim/exec/T.execle
LSB.os/procprim/exec/T.execlp
LSB.os/procprim/exec/T.execv
LSB.os/procprim/exec/T.execve
LSB.os/procprim/exec/T.execvp
LSB.os/procprim/fork/T.fork
LSB.os/procprim/kill_X/T.kill_X
LSB.os/streamio/fgetpos/T.fgetpos
LSB.os/streamio/fgetpos_1/T.fgetpos_1
LSB.os/streamio/fsetpos/T.fsetpos
LSB.os/string/mblen/T.mblen
LSB.os/string/mbstowcs/T.mbstowcs
LSB.os/string/memmove/T.memmove
LSB.os/string/wcstombs/T.wcstombs
LSB.os/string/wctomb/T.wctomb
LSB.os/time/clock/T.clock
LSB.os/time/difftime/T.difftime
LSB.os/time/strptime/T.strptime

Assertions derived from other industry-standard test suites

LSB.os/genuts/nftw/T.nftw
LSB.os/ioprim/readv/T.readv
LSB.os/ioprim/writev/T.writev
LSB.os/ipc/ftok/T.ftok
LSB.os/jump/getcontext/T.getcontext
LSB.os/jump/makecontext/T.makecontext
LSB.os/jump/setcontext/T.setcontext
LSB.os/procprim/exec_A/T.execl_A
LSB.os/procprim/exec_A/T.execle_A
LSB.os/procprim/exec_A/T.execlp_A
LSB.os/procprim/exec_A/T.execv_A
LSB.os/procprim/exec_A/T.execve_A
LSB.os/procprim/exec_A/T.execvp_A
LSB.os/procprim/exec_S/T.execl_S
LSB.os/procprim/exec_S/T.execle_S
LSB.os/procprim/exec_S/T.execlp_S
LSB.os/procprim/exec_S/T.execv_S
LSB.os/procprim/exec_S/T.execve_S
LSB.os/procprim/exec_S/T.execvp_S
LSB.os/procprim/fork_S/T.fork_S

Assertions written specifically for LSB-os

LSB.os/devclass/grantpt_L/T.grantpt_L
LSB.os/devclass/ptsname_L/T.pstname_L
LSB.os/files/telldir_L/T.telldir_L
LSB.os/genuts/closelog_L/T.closelog_L
LSB.os/genuts/ftw_L/T.ftw_L



Test Specification							    Revision 1.0
LSB-OS test package development

LSB.os/genuts/nftw_L/T.nftw_L
LSB.os/genuts/openlog_L/T.openlog_L
LSB.os/genuts/syslog_L/T.syslog_L (see Note below)
LSB.os/ipc/ftok_L/T.ftok_L
LSB.os/ipc/shmctl_L/T.shmctl_L
LSB.os/procprim/exec_L/T.execl_L
LSB.os/procprim/exec_L/T.execle_L
LSB.os/procprim/exec_L/T.execlp_L
LSB.os/procprim/exec_L/T.execv_L
LSB.os/procprim/exec_L/T.execve_L
LSB.os/procprim/exec_L/T.execvp_L
LSB.os/string/mblen_L/T.mblen_L


(Note: The formatting assertions for syslog() have been adapted from the
corresponding assertions for printf() found in TOG's VSX test suite.)


     aio_cancel(VSRTs5.1.1 (Applied Testing and Taio_cancel(rt.os/aio)

     NAME
          rt.os/aio/aio_cancel - cancel an Asynchronous I/O request
          testset

     DESCRIPTION
          Tests the aio_cancel() function for conformance to System
          Interfaces and Headers, Issue 5 Page: aio_cancel().

     TESTS
     Compliance
          1    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_cancel() function as
               described in System Interfaces and Headers, Issue 5,
               and there are one or more asynchronous I/O operations
               which the implementation defines as cancelable:
                 A call to aio_cancel() when aiocbp is not NULL shall
                 cancel the the corresponding asynchronous I/O request
                 against fildes.

          2    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_cancel() function as
               described in System Interfaces and Headers, Issue 5,
               and there are one or more asynchronous I/O operations
               which the implementation defines as cancelable:
                 A call to aio_cancel() when aiocbp is NULL shall
                 cancel all outstanding cancelable asynchronous I/O
                 requests against fildes.

          3    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_cancel() function as
               described in System Interfaces and Headers, Issue 5,
               and there are one or more asynchronous I/O operations
               which the implementation defines as cancelable:
                 A call to aio_cancel() shall return AIO_CANCELED if
                 all the requested operation(s) were canceled.

          4    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_cancel() function as
               described in System Interfaces and Headers, Issue 5,
               and there are one or more asynchronous I/O operations
               which the implementation defines as cancelable:
                 A call to aio_cancel() shall return AIO_ALLDONE if
                 all the requested operation(s) have already
                 completed.

          5    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_cancel() function as
               described in System Interfaces and Headers, Issue 5,
               and there are one or more asynchronous I/O operations
               which the implementation defines as cancelable:
                 A call to aio_cancel() shall cause normal
                 asynchronous notification to occur for operations

     Page 1                                       (printed 11/23/2000)

     aio_cancel(VSRTs5.1.1 (Applied Testing and Taio_cancel(rt.os/aio)

                 that are successfully canceled.

          6    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_cancel() function as
               described in System Interfaces and Headers, Issue 5,
               and there are one or more asynchronous I/O operations
               which the implementation defines as cancelable:
                 After a call to aio_cancel() the associated error
                 status for operations that are successfully canceled
                 shall be set to ECANCELED and return status set to
                 -1.

     Deviance
          7    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_cancel() function as
               described in System Interfaces and Headers, Issue 5,
               and there are one or more asynchronous I/O operations
               which the implementation defines as cancelable:
                 A call to aio_cancel() shall return -1 and set errno
                 to EBADF if fildes is not a valid file descriptor.

          8    If _POSIX_ASYNCHRONOUS_IO is not defined and the
               implementation does not support the aio_cancel()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A call to aio_cancel() shall return -1 and set errno
                 to ENOSYS.

     Untestable Aspects
          1    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_cancel() function as
               described in System Interfaces and Headers, Issue 5,
               and there are one or more asynchronous I/O operations
               which the implementation defines as cancelable:
                 A call to aio_cancel() shall return AIO_NOTCANCELED
                 when at least one or the requested operation(s)
                 cannot be canceled as it is in progress.
                 Reason for omission:  There is no reliable method for
                 ensuring an operation is in progress at the time of a
                 call to aio_cancel().

          2    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_cancel() function as
               described in System Interfaces and Headers, Issue 5,
               and there are one or more asynchronous I/O operations
               which the implementation defines as cancelable:
                 After a call to aio_cancel() the normal asynchronous
                 completion process shall take place for requests
                 which could not be canceled.
                 Reason for omission:  There is no reliable method for
                 ensuring an operation is in progress at the time of a
                 call to aio_cancel().

     Page 2                                       (printed 11/23/2000)

     aio_cancel(VSRTs5.1.1 (Applied Testing and Taio_cancel(rt.os/aio)

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 3                                       (printed 11/23/2000)

     aio_error(rVSRT/5.1.1 (Applied Testing and Teaio_error(rt.os/aio)

     NAME
          rt.os/aio/aio_error - retrieve error status for an
          Asynchronous I/O request testset

     DESCRIPTION
          Tests the aio_error() function for conformance to System
          Interfaces and Headers, Issue 5 Page: aio_error().

     TESTS
     Compliance
          1    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_error() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_error() when the asynchronous I/O
                 operation associated with the aiocb structure
                 referenced by aiocbp completed unsuccessfully shall
                 return the errno value that would be set by the
                 corresponding read(), write(), or fsync() operation.

          2    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_error() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_error() when the asynchronous I/O
                 operation associated with the aiocb structure
                 referenced by aiocbp completed successfully shall
                 return 0.

          3    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_error() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_error() when the asynchronous I/O
                 operation associated with the aiocb structure
                 referenced by aiocbp has not yet completed shall
                 return EINPROGRESS.

     Deviance
          4    If _POSIX_ASYNCHRONOUS_IO is not defined and the
               implementation does not support the aio_error()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A call to aio_error() shall return -1 and set errno
                 to ENOSYS.

     Untestable Aspects
          1    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_error() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_error() may return -1 and set errno to
                 EINVAL if aiocbp refers to an operation whose return
                 status has not yet been retrieved.
                 Reason for omission:  The specification is inadequate
                 for testing (it does not define under what conditions

     Page 1                                       (printed 11/23/2000)

     aio_error(rVSRT/5.1.1 (Applied Testing and Teaio_error(rt.os/aio)

                 this error will occur).

     Notes
          Tests will be run against a file type for which the
          implementation supports the necessary types of Realtime I/O
          and provides an appropriate file for testing.

          The existence of at such a file is assumed as a prerequisite
          in these tests.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     aio_fsync(rVSRT/5.1.1 (Applied Testing and Teaio_fsync(rt.os/aio)

     NAME
          rt.os/aio/aio_fsync - asynchronous file synchronization
          testset

     DESCRIPTION
          Tests the aio_fsync() function for conformance to System
          Interfaces and Headers, Issue 5 Page: aio_fsync().

     TESTS
     Compliance
          1    If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONOUS_IO are
               defined or the implementation supports the aio_fsync()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A successful call to aio_fsync() shall queue the
                 aiocb structure referenced by aiocbp for the file
                 indicated by aiocbp->aio_fildes, setting its error
                 status to EINPROGRESS and return 0.

          2    If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONOUS_IO are
               defined or the implementation supports the aio_fsync()
               function as described in System Interfaces and Headers,
               Issue 5:
                 When data for all asynchronous I/O operations for the
                 file indicated by aiocbp->aio_fildes queued prior to
                 a call to aio_fsync() has been successfully
                 transferred the error status for the the aiocb
                 structure referenced by aiocbp shall be set to
                 indicate the success or failure of the operation,
                 which can be retrieved with aio_error() and
                 aio_return().

          3    If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONOUS_IO are
               defined or the implementation supports the aio_fsync()
               function as described in System Interfaces and Headers,
               Issue 5:
                 On a call to aio_fsync() when aiocbp-
                 >aio_sigev.sigev_notify is SIGEV_NONE no asynchronous
                 notification shall be delivered when the operation
                 completes.

          4    If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONOUS_IO are
               defined or the implementation supports the aio_fsync()
               function as described in System Interfaces and Headers,
               Issue 5:
                 On a call to aio_fsync() when aiocbp-
                 >aio_sigev.sigev_notify is SIGEV_SIGNAL the signal
                 specified in aiocbp->aio_sigev.sigev_signo shall be
                 generated for the process when the operation
                 completes.

          5    If _POSIX_ASYNCHRONOUS_IO, _POSIX_SYNCHRONOUS_IO and

     Page 1                                       (printed 11/23/2000)

     aio_fsync(rVSRT/5.1.1 (Applied Testing and Teaio_fsync(rt.os/aio)

               _POSIX_REALTIME_SIGNALS are defined or the
               implementation supports the aio_fsync() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to aio_fsync() when aiocbp-
                 >aio_sigev.sigev_notify is SIGEV_SIGNAL and the
                 SA_SIGINFO flag is set for the signal specified in
                 aiocbp->aio_sigev.sigev_signo, the signal shall be
                 queued for the process when it is generated and the
                 value specified in aiocbp->aio_sigev.sigev_value
                 shall be in the si_value component of the generated
                 signal.

          6    If _POSIX_ASYNCHRONOUS_IO, _POSIX_SYNCHRONOUS_IO and
               _POSIX_REALTIME_SIGNALS are defined or the
               implementation supports the aio_fsync() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to aio_fsync() when aiocbp-
                 >aio_sigev.sigev_notify is SIGEV_THREAD the function
                 in aiocbp->aio_sigev.sigev_notify_function shall be
                 called with the value of aiocbp-
                 >aio_sigev.sigev_value as a parameter when the
                 operation completes, executed in an environment as if
                 it were the start_routine for a newly created thread
                 with thread attributes specified by aiocbp-
                 >aio_sigev.sigev_notify_attributes.

          7    If _POSIX_ASYNCHRONOUS_IO, _POSIX_SYNCHRONOUS_IO and
               _POSIX_REALTIME_SIGNALS are defined or the
               implementation supports the aio_fsync() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to aio_fsync() when aiocbp-
                 >aio_sigev.sigev_notify is SIGEV_THREAD and aiocbp-
                 >aio_sigev.sigev_notify_attributes is NULL the
                 function in aiocbp->aio_sigev.sigev_notify_function
                 shall be called with the value of aiocbp-
                 >aio_sigev.sigev_value as a parameter when the
                 operation completes, executed in an environment as if
                 it were the start_routine for a newly created thread
                 with the detachstate attribute set to
                 PTHREAD_CREATE_DETACHED.

          8    If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONOUS_IO are
               defined or the implementation supports the aio_fsync()
               function as described in System Interfaces and Headers,
               Issue 5:
                 When aiocbp is NULL a call to aio_fsync() shall not
                 cause a signal to be generated on completion of the
                 operation.

          9    If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONOUS_IO are
               defined or the implementation supports the aio_fsync()
               function as described in System Interfaces and Headers,

     Page 2                                       (printed 11/23/2000)

     aio_fsync(rVSRT/5.1.1 (Applied Testing and Teaio_fsync(rt.os/aio)

               Issue 5:
                 On a call to aio_fsync() all members of the aiocb
                 structure referenced by aiocbp other than aio_fildes
                 and aio_sigevent shall be ignored.

     Deviance
          10   If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONOUS_IO are
               defined or the implementation supports the aio_fsync()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A call to aio_fsync() shall return -1 and set errno
                 to EBADF when aiocbp->aio_fildes is not a valid file
                 descriptor open for writing.

          11   If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONOUS_IO are
               defined or the implementation supports the aio_fsync()
               function as described in System Interfaces and Headers,
               Issue 5 and there is a file type for which the
               implementation does not support synchronized I/O:
                 A call to aio_fsync() shall return -1 and set errno
                 to EINVAL when the implementation does not support
                 synchronized I/O for this file.

          12   If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONOUS_IO are
               defined or the implementation supports the aio_fsync()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A call to aio_fsync() shall return -1 and set errno
                 to EINVAL when the value of op is neither O_DSYNC or
                 O_SYNC.

          13   If _POSIX_ASYNCHRONOUS_IO or _POSIX_SYNCHRONOUS_IO are
               not defined and the implementation does not support the
               aio_fsync() function as described in System Interfaces
               and Headers, Issue 5:
                 A call to aio_fsync() shall return -1 and set errno
                 to ENOSYS.

     Untestable Aspects
          1    If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONOUS_IO are
               defined or the implementation supports the aio_fsync()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A call to aio_fsync() when op is O_DSYNC shall cause
                 all currently queued operations for the file
                 indicated by aiocbp->aio_fildes to be completed as
                 defined for synchronized I/O data integrity.
                 Reason for omission:  It is not possible to determine
                 in a portable manner whether data has been written to
                 the file-system or whether file or data integrity
                 completion was provided.

     Page 3                                       (printed 11/23/2000)

     aio_fsync(rVSRT/5.1.1 (Applied Testing and Teaio_fsync(rt.os/aio)

          2    If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONOUS_IO are
               defined or the implementation supports the aio_fsync()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A call to aio_fsync() when op is O_SYNC shall cause
                 all currently queued operations for the file
                 indicated by aiocbp->aio_fildes to be completed as
                 defined for synchronized I/O file integrity.
                 Reason for omission:  It is not possible to determine
                 in a portable manner whether data has been written to
                 the file-system or whether file or data integrity
                 completion was provided.

          3    If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONOUS_IO are
               defined or the implementation supports the aio_fsync()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A call to aio_fsync() shall return -1 and set errno
                 to EAGAIN when the requested asynchronous I/O
                 operation is not queued due to temporary resource
                 limitations.
                 Reason for omission:  This is not reliable test
                 method for this assertion.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 4                                       (printed 11/23/2000)

     aio_read(rtVSRTa5.1.1 (Applied Testing and Tecaio_read(rt.os/aio)

     NAME
          rt.os/aio/aio_read - asynchronous read from a file testset

     DESCRIPTION
          Tests the aio_read() function for conformance to System
          Interfaces and Headers, Issue 5 Page: aio_read().

     TESTS
     Compliance
          1    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_read() function as
               described in System Interfaces and Headers, Issue 5:
                 A successful call to aio_read() shall initiate or
                 queue a request on behalf of the calling process to
                 read aiocbp->aio_nbytes from the file associated with
                 aiocbp->aio_fildes into the buffer pointed to by
                 aiocbp->aio_buf and return 0.

          2    If _POSIX_ASYNCHRONOUS_IO and _POSIX_PRIORITIZED_IO are
               defined or the implementation supports the aio_read()
               function as described in System Interfaces and Headers,
               Issue 5:
                 The request generated by a call to aio_read() from a
                 process whose scheduling policy is SCHED_FIFO or
                 SCHED_RR shall be queued in priority order at a
                 priority equal to the scheduling priority of the
                 process minus aiocbp->aio_reqprio for values of
                 aiocbp->aio_reqprio which lower the operation
                 priority, in the range 0 to {AIO_PRIO_DELTA_MAX}.

          3    If _POSIX_ASYNCHRONOUS_IO and _POSIX_PRIORITIZED_IO are
               defined or the implementation supports the aio_read()
               function as described in System Interfaces and Headers,
               Issue 5, and the implementation supports prioritized
               I/O on character special files:
                 Requests generated by calls to aio_read() from
                 processes whose scheduling policy is SCHED_FIFO or
                 SCHED_RR with the same priority to a character
                 special file shall be processed by the underlying
                 device in FIFO order.

          4    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_read() function as
               described in System Interfaces and Headers, Issue 5:
                 Unless aiocbp->aio_fildes is associated with a device
                 which is incapable of seeking the request generated
                 by a call to aio_read() shall take place at the
                 absolute position in the file given by aiocbp-
                 >aio_offset.

          5    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_read() function as

     Page 1                                       (printed 11/23/2000)

     aio_read(rtVSRTa5.1.1 (Applied Testing and Tecaio_read(rt.os/aio)

               described in System Interfaces and Headers, Issue 5:
                 On a call to aio_read() when aiocbp-
                 >aio_sigevent.sigev_notify is SIGEV_NONE no
                 asynchronous notification shall be delivered when the
                 operation completes.

          6    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_read() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to aio_read() when aiocbp-
                 >aio_sigevent.sigev_notify is SIGEV_SIGNAL the signal
                 specified in aiocbp->aio_sigevent.sigev_signo shall
                 be generated for the process when the operation
                 completes.

          7    If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               aio_read() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to aio_read() when aiocbp-
                 >aio_sigevent.sigev_notify is SIGEV_SIGNAL and the
                 SA_SIGINFO flag is set for the signal specified in
                 aiocbp->aio_sigevent.sigev_signo, the signal shall be
                 queued for the process when it is generated and the
                 value specified in aiocbp->aio_sigevent.sigev_value
                 shall be in the si_value component of the generated
                 signal.

          8    If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               aio_read() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to aio_read() when aiocbp-
                 >aio_sigevent.sigev_notify is SIGEV_THREAD the
                 function in aiocbp-
                 >aio_sigevent.sigev_notify_function shall be called
                 with the value of aiocbp->aio_sigevent.sigev_value as
                 a parameter when the operation completes, executed in
                 an environment as if it were the start_routine for a
                 newly created thread with thread attributes specified
                 by aiocbp->aio_sigevent.sigev_notify_attributes.

          9    If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               aio_read() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to aio_read() when aiocbp-
                 >aio_sigevent.sigev_notify is SIGEV_THREAD and
                 aiocbp->aio_sigevent.sigev_notify_attributes is NULL,
                 the function in aiocbp-
                 >aio_sigevent.sigev_notify_function shall be called
                 with the value of aiocbp->aio_sigevent.sigev_value as

     Page 2                                       (printed 11/23/2000)

     aio_read(rtVSRTa5.1.1 (Applied Testing and Tecaio_read(rt.os/aio)

                 a parameter when the operation completes, executed in
                 an environment as if it were the start_routine for a
                 newly created thread with the detachstate attribute
                 set to PTHREAD_CREATE_DETACHED.

          10   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_read() function as
               described in System Interfaces and Headers, Issue 5:
                 The aiocbp argument to aio_read() shall be usable as
                 an argument to aio_error() and aio_return() in order
                 to determine the error and return status,
                 respectively, of the operation while it is
                 proceeding.

     Deviance
          11   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_read() function as
               described in System Interfaces and Headers, Issue 5:
                 When aiocbp->aio_fildes is not a valid file
                 descriptor open for reading, either:
                   the aio_read() function shall return -1 and set
                   errno to EBADF
                           or
                   the return status of the asynchronous operation
                   shall be set to -1 and its error status shall be
                   set to EBADF.

          12   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_read() function as
               described in System Interfaces and Headers, Issue 5:
                 When the offset implied by aiocbp->aio_offset would
                 be invalid, either:
                   the aio_read() function shall return -1 and set
                   errno to EINVAL
                           or
                   the return status of the asynchronous operation
                   shall be set to -1 and its error status shall be
                   set to EINVAL.

          13   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_read() function as
               described in System Interfaces and Headers, Issue 5:
                 When aiocbp->aio_reqprio is not a valid value,
                 either:
                   the aio_read() function shall return -1 and set
                   errno to EINVAL
                           or
                   the return status of the asynchronous operation
                   shall be set to -1 and its error status shall be
                   set to EINVAL.

          14   If _POSIX_ASYNCHRONOUS_IO is defined or the

     Page 3                                       (printed 11/23/2000)

     aio_read(rtVSRTa5.1.1 (Applied Testing and Tecaio_read(rt.os/aio)

               implementation supports the aio_read() function as
               described in System Interfaces and Headers, Issue 5:
                 When aiocbp->aio_nbytes is not a valid value, either:
                   the aio_read() function shall return -1 and set
                   errno to EINVAL
                           or
                   the return status of the asynchronous operation
                   shall be set to -1 and its error status shall be
                   set to EINVAL.

          15   If _POSIX_ASYNCHRONOUS_IO is not defined and the
               implementation does not support the aio_read() function
               as described in System Interfaces and Headers, Issue 5:
                 A call to aio_read() shall return -1 and set errno to
                 ENOSYS.

     Untestable Aspects
          1    If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONIZED_IO
               are defined or the implementation supports the
               aio_read() function as described in System Interfaces
               and Headers, Issue 5:
                 When synchronized I/O is enabled on the file
                 associated with aiocbp->aio_fildes the behavior of a
                 call to aio_read() is as per the definitions of
                 synchronized I/O data integrity and synchronized I/O
                 file integrity.
                 Reason for omission:  It is not possible to determine
                 in a portable manner whether data has been written to
                 the file-system.

          2    If _POSIX_ASYNCHRONOUS_IO and _POSIX_PRIORITIZED_IO are
               defined or the implementation supports the aio_read()
               function as described in System Interfaces and Headers,
               Issue 5:
                 When prioritized requests to the same file generated
                 by calls to aio_read() are blocked waiting for a
                 resource, higher priority requests shall be granted
                 the resource before lower priority requests.
                 Reason for omission: There is no portable test method
                 for this requirement.

          3    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_read() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_read() shall return -1 and set errno to
                 EAGAIN when the requested asynchronous I/O operation
                 is not queued due to temporary resource limitations.
                 Reason for omission:  This is no reliable test method
                 for this assertion.

     Notes
          Tests must be run against a file type which is capable of

     Page 4                                       (printed 11/23/2000)

     aio_read(rtVSRTa5.1.1 (Applied Testing and Tecaio_read(rt.os/aio)

          seeking and for which the implementation supports the
          necessary types of Realtime I/O and provides an appropriate
          file for testing.

          The existence of such a file is assumed as a prerequisite in
          these tests.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 5                                       (printed 11/23/2000)

     aio_read_X(VSRTs5.1.1 (Applied Testing and Taio_read_X(rt.os/aio)

     NAME
          rt.os/aio/aio_read_X - asynchronous read from a file
          testset

     DESCRIPTION
          Tests the aio_read() function for conformance to the X/Open
          extensions defined in System Interfaces and Headers, Issue 5
          Page: aio_read().

     TESTS
     Compliance
          1    If the implementation allows creation of a file
               description with an offset maximum less than the
               largest size it supports for an off_t:
                 For regular files no data transfer will occur as a
                 result of a call to aio_read() past the offset
                 maximum established in the open file description
                 asociated with aiocbp->aio_fildes.

     Deviance
          2    If the implementation allows creation of a file
               description with an offset maximum less than the
               largest size it supports for an off_t:
                 When the file associated with aiocbp->aio_fildes is a
                 regular file and aiocbp->aio_offset is before the
                 end-of-file and at the offset maximum established in
                 the open file description asociated with aiocbp-
                 >aio_fildes, either:
                   the aio_read() function shall return -1 and set
                   errno to EOVERFLOW
                           or
                   the return status of the asynchronous operation
                   shall be set to -1 and its error status shall be
                   set to EOVERFLOW.

          3    If the implementation allows creation of a file
               description with an offset maximum less than the
               largest size it supports for an off_t:
                 When the file associated with aiocbp->aio_fildes is a
                 regular file and aiocbp->aio_offset is before the
                 end-of-file and beyond the offset maximum established
                 in the open file description asociated with aiocbp-
                 >aio_fildes, either:
                   the aio_read() function shall return -1 and set
                   errno to EOVERFLOW
                           or
                   the return status of the asynchronous operation
                   shall be set to -1 and its error status shall be
                   set to EOVERFLOW.

     RELEASE
          Release VSRT 5.1.1

     Page 1                                       (printed 11/23/2000)

     aio_read_X(VSRTs5.1.1 (Applied Testing and Taio_read_X(rt.os/aio)

          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     aio_return(VSRTs5.1.1 (Applied Testing and Taio_return(rt.os/aio)

     NAME
          rt.os/aio/aio_return - retrieve return status for an
          Asynchronous I/O request testset

     DESCRIPTION
          Tests the aio_return() function for conformance to System
          Interfaces and Headers, Issue 5 Page: aio_return().

     TESTS
     Compliance
          1    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_return() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_return() when the asynchronous I/O
                 operation associated with the aiocb structure
                 referenced by aiocbp completed unsuccessfully shall
                 return -1.

          2    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_return() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_return() when the asynchronous I/O
                 operation associated with the aiocb structure
                 referenced by aiocbp completed successfully shall
                 return the number of bytes transferred.

     Deviance
          3    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_return() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_return() shall return -1 and set errno
                 to EINVAL if aiocbp does not refer to an operation
                 whose return status has not yet been retrieved.

          4    If _POSIX_ASYNCHRONOUS_IO is not defined and the
               implementation does not support the aio_return()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A call to aio_return() shall return -1 and set errno
                 to ENOSYS.

     Notes
          Tests will be run against a file type for which the
          implementation supports the necessary types of Realtime I/O
          and provides an appropriate file for testing.

          The existence of at least such a file is assumed as a
          prerequisite in these tests.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open

     Page 1                                       (printed 11/23/2000)

     aio_return(VSRTs5.1.1 (Applied Testing and Taio_return(rt.os/aio)

          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     aio_suspendVSRTo5.1.1)(Applied Testing and aio_suspend(rt.os/aio)

     NAME
          rt.os/aio/aio_suspend - wait for an Asynchronous I/O request
          testset

     DESCRIPTION
          Tests the aio_suspend() function for conformance to System
          Interfaces and Headers, Issue 5 Page: aio_suspend().

     TESTS
     Compliance
          1    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_suspend() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_suspend() when timeout is NULL shall
                 suspend the calling thread until at least one of the
                 nent asynchronous I/O operations referenced by list
                 has completed, unless it is interrupted by a signal,
                 and then return 0.

          2    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_suspend() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_suspend() when timeout is not NULL
                 shall return -1 and set errno to EAGAIN if the time
                 interval specified in timeout passes before any I/O
                 operations referenced by list complete and it is not
                 interrupted by a signal during this interval.

          3    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_suspend() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_suspend() shall ignore NULL entries in
                 list.

          4    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_suspend() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_suspend() when any of the I/O
                 operations reference by list have already completed
                 shall not suspend the calling thread.

     Deviance
          5    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_suspend() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_suspend() shall return -1 and set errno
                 to EINTR if a signal interrupted the function.

          6    If _POSIX_ASYNCHRONOUS_IO is not defined and the
               implementation does not support the aio_suspend()
               function as described in System Interfaces and Headers,
               Issue 5:

     Page 1                                       (printed 11/23/2000)

     aio_suspendVSRTo5.1.1)(Applied Testing and aio_suspend(rt.os/aio)

                 A call to aio_suspend() shall return -1 and set errno
                 to ENOSYS.

     Notes
          Tests will be run against a file type for which the
          implementation supports the necessary types of Realtime I/O
          and provides an appropriate file for testing.

          The existence of at least such a file is assumed as a
          prerequisite in these tests.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     aio_write(rVSRT/5.1.1 (Applied Testing and Teaio_write(rt.os/aio)

     NAME
          rt.os/aio/aio_write - asynchronous write to a file testset

     DESCRIPTION
          Tests the aio_write() function for conformance to System
          Interfaces and Headers, Issue 5 Page: aio_write().

     TESTS
     Compliance
          1    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_write() function as
               described in System Interfaces and Headers, Issue 5:
                 A successful call to aio_write() shall initiate or
                 queue a request on behalf of the calling process to
                 write aiocbp->aio_nbytes from the file associated
                 with aiocbp->aio_fildes from the buffer pointed to by
                 aiocbp->aio_buf and return 0.

          2    If _POSIX_ASYNCHRONOUS_IO and _POSIX_PRIORITIZED_IO are
               defined or the implementation supports the aio_write()
               function as described in System Interfaces and Headers,
               Issue 5:
                 The request generated by a call to aio_write() from a
                 process whose scheduling policy is SCHED_FIFO or
                 SCHED_RR shall be queued in priority order at a
                 priority equal to the scheduling priority of the
                 process minus aiocbp->aio_reqprio for values of
                 aiocbp->aio_reqprio which lower the operation
                 priority, in the range 0 to {AIO_PRIO_DELTA_MAX}.

          3    If _POSIX_ASYNCHRONOUS_IO and _POSIX_PRIORITIZED_IO are
               defined or the implementation supports the aio_write()
               function as described in System Interfaces and Headers,
               Issue 5, and the implementation supports prioritized
               I/O on character special files:
                 Requests generated by calls to aio_write() from
                 processes whose scheduling policy is SCHED_FIFO or
                 SCHED_RR with the same priority to a character
                 special file shall be processed by the underlying
                 device in FIFO order.

          4    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_write() function as
               described in System Interfaces and Headers, Issue 5:
                 Unless the O_APPEND flag is set for aiocbp-
                 >aio_fildes or that file is associated with a device
                 which is incapable of seeking the request generated
                 by a call to aio_write() shall take place at the
                 absolute position in the file given by aiocbp-
                 >aio_offset.

          5    If _POSIX_ASYNCHRONOUS_IO is defined or the

     Page 1                                       (printed 11/23/2000)

     aio_write(rVSRT/5.1.1 (Applied Testing and Teaio_write(rt.os/aio)

               implementation supports the aio_write() function as
               described in System Interfaces and Headers, Issue 5:
                 If the O_APPEND flag is set for aiocbp->aio_fildes
                 requests generated by calls to aio_write() shall
                 append to the file.

          6    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_write() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to aio_write() when aiocbp-
                 >aio_sigevent.sigev_notify is SIGEV_NONE no
                 asynchronous notification shall be delivered when the
                 operation completes.

          7    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_write() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to aio_write() when aiocbp-
                 >aio_sigevent.sigev_notify is SIGEV_SIGNAL the signal
                 specified in aiocbp->aio_sigevent.sigev_signo shall
                 be generated for the process when the operation
                 completes.

          8    If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               aio_write() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to aio_write() when aiocbp-
                 >aio_sigevent.sigev_notify is SIGEV_SIGNAL and the
                 SA_SIGINFO flag is set for the signal specified in
                 aiocbp->aio_sigevent.sigev_signo, the signal shall be
                 queued for the process when it is generated and the
                 value specified in aiocbp->aio_sigevent.sigev_value
                 shall be in the si_value component of the generated
                 signal.

          9    If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               aio_write() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to aio_write() when aiocbp-
                 >aio_sigevent.sigev_notify is SIGEV_THREAD the
                 function in aiocbp-
                 >aio_sigevent.sigev_notify_function shall be called
                 with the value of aiocbp->aio_sigevent.sigev_value as
                 a parameter when the operation completes, executed in
                 an environment as if it were the start_routine for a
                 newly created thread with thread attributes specified
                 by aiocbp->aio_sigevent.sigev_notify_attributes.

          10   If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the

     Page 2                                       (printed 11/23/2000)

     aio_write(rVSRT/5.1.1 (Applied Testing and Teaio_write(rt.os/aio)

               aio_write() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to aio_write() when aiocbp-
                 >aio_sigevent.sigev_notify is SIGEV_THREAD and
                 aiocbp->aio_sigevent.sigev_notify_attributes is NULL,
                 the function in aiocbp-
                 >aio_sigevent.sigev_notify_function shall be called
                 with the value of aiocbp->aio_sigevent.sigev_value as
                 a parameter when the operation completes, executed in
                 an environment as if it were the start_routine for a
                 newly created thread with the detachstate attribute
                 set to PTHREAD_CREATE_DETACHED.

          11   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_write() function as
               described in System Interfaces and Headers, Issue 5:
                 The aiocbp argument to aio_write() shall be usable as
                 an argument to aio_error() and aio_return() in order
                 to determine the error and return status,
                 respectively, of the operation while it is
                 proceeding.

     Deviance
          12   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_write() function as
               described in System Interfaces and Headers, Issue 5:
                 When aiocbp->aio_fildes is not a valid file
                 descriptor open for writing, either:
                   the aio_write() function shall return -1 and set
                   errno to EBADF
                           or
                   the return status of the asynchronous operation
                   shall be set to -1 and its error status shall be
                   set to EBADF.

          13   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_write() function as
               described in System Interfaces and Headers, Issue 5:
                 When the offset implied by aiocbp->aio_offset would
                 be invalid, either:
                   the aio_write() function shall return -1 and set
                   errno to EINVAL
                           or
                   the return status of the asynchronous operation
                   shall be set to -1 and its error status shall be
                   set to EINVAL.

          14   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_write() function as
               described in System Interfaces and Headers, Issue 5:
                 When aiocbp->aio_reqprio is not a valid value,
                 either:

     Page 3                                       (printed 11/23/2000)

     aio_write(rVSRT/5.1.1 (Applied Testing and Teaio_write(rt.os/aio)

                   the aio_write() function shall return -1 and set
                   errno to EINVAL
                           or
                   the return status of the asynchronous operation
                   shall be set to -1 and its error status shall be
                   set to EINVAL.

          15   This assertion is not in use.

          16   If _POSIX_ASYNCHRONOUS_IO is not defined and the
               implementation does not support the aio_write()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A call to aio_write() shall return -1 and set errno
                 to ENOSYS.

     Untestable Aspects
          1    If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONIZED_IO
               are defined or the implementation supports the
               aio_write() function as described in System Interfaces
               and Headers, Issue 5:
                 When synchronized I/O is enabled on the file
                 associated with aiocbp->aio_fildes the behavior of a
                 call to aio_write() is as per the definitions of
                 synchronized I/O data integrity and synchronized I/O
                 file integrity.
                 Reason for omission:  It is not possible to determine
                 in a portable manner whether data has been written to
                 the file-system.

          2    If _POSIX_ASYNCHRONOUS_IO and _POSIX_PRIORITIZED_IO are
               defined or the implementation supports the aio_write()
               function as described in System Interfaces and Headers,
               Issue 5:
                 When prioritized requests to the same file generated
                 by calls to aio_write() are blocked waiting for a
                 resource, higher priority requests shall be granted
                 the resource before lower priority requests.
                 Reason for omission: There is no portable test method
                 for this requirement.

          3    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the aio_write() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to aio_write() shall return -1 and set errno
                 to EAGAIN when the requested asynchronous I/O
                 operation is not queued due to system resource
                 limitations.
                 Reason for omission: This is no reliable test method
                 for this assertion.

          4    If _POSIX_ASYNCHRONOUS_IO is defined or the

     Page 4                                       (printed 11/23/2000)

     aio_write(rVSRT/5.1.1 (Applied Testing and Teaio_write(rt.os/aio)

               implementation supports the aio_write() function as
               described in System Interfaces and Headers, Issue 5:
                 When aiocbp->aio_nbytes is not a valid value, either:
                   the aio_write() function shall return -1 and set
                   errno to EINVAL
                           or
                   the return status of the asynchronous operation
                   shall be set to -1 and its error status shall be
                   set to EINVAL.
                   Reason for omission: This is no reliable test
                   method for this assertion.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 5                                       (printed 11/23/2000)

     aio_write_XVSRTo5.1.1)(Applied Testing and aio_write_X(rt.os/aio)

     NAME
          rt.os/aio/aio_write_X - asynchronous write to a file testset

     DESCRIPTION
          Tests the aio_write() function for conformance to the X/Open
          extensions defined in System Interfaces and Headers, Issue 5
          Page: aio_write().

     TESTS
     Compliance
          1    If the implementation allows creation of a file
               description with an offset maximum less than the
               largest size it supports for an off_t:
                 For regular files no data transfer will occur as a
                 result of a call to aio_write() past the offset
                 maximum established in the open file description
                 asociated with aiocbp->aio_fildes.

     Deviance
          2    If the implementation allows creation of a file
               description with an offset maximum less than the
               largest size it supports for an off_t:
                 When the file associated with aiocbp->aio_fildes is a
                 regular file, aiocbp->aio_nbytes is greater than 0,
                 and aiocbp->aio_offset is at the offset maximum
                 established in the open file description asociated
                 with aiocbp->aio_fildes, either:
                   the aio_write() function shall return -1 and set
                   errno to EFBIG
                           or
                   the return status of the asynchronous operation
                   shall be set to -1 and its error status shall be
                   set to EFBIG.

          3    If the implementation allows creation of a file
               description with an offset maximum less than the
               largest size it supports for an off_t:
                 When the file associated with aiocbp->aio_fildes is a
                 regular file, aiocbp->aio_nbytes is greater than 0,
                 and aiocbp->aio_offset is beyond the offset maximum
                 established in the open file description asociated
                 with aiocbp->aio_fildes, either:
                   the aio_write() function shall return -1 and set
                   errno to EFBIG
                           or
                   the return status of the asynchronous operation
                   shall be set to -1 and its error status shall be
                   set to EFBIG.

     Notes
          Tests must be run against a file type which is capable of
          seeking and for which the implementation supports the

     Page 1                                       (printed 11/23/2000)

     aio_write_XVSRTo5.1.1)(Applied Testing and aio_write_X(rt.os/aio)

          necessary types of Realtime I/O and provides an appropriate
          file for testing.

          The existence of such a file is assumed as a prerequisite in
          these tests.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     lio_listio(VSRTs5.1.1 (Applied Testing and Tlio_listio(rt.os/aio)

     NAME
          rt.os/aio/lio_listio - list directed I/O  testset

     DESCRIPTION
          Tests the lio_listio() function for conformance to System
          Interfaces and Headers, Issue 5 Page: lio_listio().

     TESTS
     Compliance
          1    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 A successful call to lio_listio() when mode is
                 LIO_WAIT shall initiate the nent asynchronous I/O
                 requests in list, wait until all I/O is complete,
                 return 0, and not generate a signal on completion.

          2    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 A successful call to lio_listio() when mode is
                 LIO_NOWAIT shall initiate or queue the nent
                 asynchronous I/O requests in list, and return 0
                 immediately.

          3    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when mode is LIO_NOWAIT and
                 sig->sigev_notify is SIGEV_NONE no asynchronous
                 notification shall be delivered when the all the
                 operations complete.

          4    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when mode is LIO_NOWAIT and
                 sig is NULL no asynchronous notification shall be
                 delivered when the all the operations complete.

          5    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when mode is LIO_NOWAIT and
                 sig->sigev_notify is SIGEV_SIGNAL the signal
                 specified in sig->sigev_signo shall be generated for
                 the process when the all the operations complete.

          6    If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               lio_listio() function as described in System Interfaces
               and Headers, Issue 5:

     Page 1                                       (printed 11/23/2000)

     lio_listio(VSRTs5.1.1 (Applied Testing and Tlio_listio(rt.os/aio)

                 On a call to lio_listio() when mode is LIO_NOWAIT and
                 sig->sigev_notify is SIGEV_SIGNAL and the SA_SIGINFO
                 flag is set for the signal specified in sig-
                 >sigev_signo, the signal shall be queued for the
                 process when it is generated and the value specified
                 in sig->sigev_value shall be in the si_value
                 component of the generated signal.

          7    If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               lio_listio() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to lio_listio() when mode is LIO_NOWAIT and
                 sig->sigev_notify is SIGEV_THREAD the function in
                 sig->sigev_notify_function shall be called with the
                 value of sig->sigev_value as a parameter when all the
                 operations complete, executed in an environment as if
                 it were the start_routine for a newly created thread
                 with thread attributes specified by sig-
                 >sigev_notify_attributes.

          8    If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               lio_listio() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to lio_listio() when mode is LIO_NOWAIT,
                 sig->sigev_notify is SIGEV_THREAD, and sig-
                 >sigev_notify_attributes is NULL, the function in
                 sig->sigev_notify_function shall be called with the
                 value of sig->sigev_value as a parameter when all the
                 operations complete, executed in an environment as if
                 it were the start_routine for a newly created thread
                 with the detachstate attribute set to
                 PTHREAD_CREATE_DETACHED.

          9    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to lio_listio() shall ignore NULL entries in
                 list.

          10   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to lio_listio() shall ignore list entries for
                 which the aio_lio_opcode member is LIST_NOP.

          11   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 The addresses of the aiocb structures passed to
                 lio_listio() in list shall be usable as arguments to

     Page 2                                       (printed 11/23/2000)

     lio_listio(VSRTs5.1.1 (Applied Testing and Tlio_listio(rt.os/aio)

                 aio_error() and aio_return() in order to determine
                 the error and return status, respectively, of an
                 operation while it is proceeding.

          12   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 When list[n].aio_lio_opcode is LIO_READ a call to
                 lio_listio() shall initiate or queue a request on
                 behalf of the calling process to read list[n]-
                 >aio_nbytes from the file associated with list[n]-
                 >aio_fildes into the buffer pointed to by list[n]-
                 >aio_buf.

          13   If _POSIX_ASYNCHRONOUS_IO and _POSIX_PRIORITIZED_IO are
               defined or the implementation supports the lio_listio()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A read request generated by a call to lio_listio()
                 from a process whose scheduling policy is SCHED_FIFO
                 or SCHED_RR shall be queued in priority order at a
                 priority equal to the scheduling priority of the
                 process minus list[n]->aio_reqprio for values of
                 list[n]->aio_reqprio which lower the operation
                 priority, in the range 0 to {AIO_PRIO_DELTA_MAX}.

          14   If _POSIX_ASYNCHRONOUS_IO and _POSIX_PRIORITIZED_IO are
               defined or the implementation supports the lio_listio()
               function as described in System Interfaces and Headers,
               Issue 5, and the implementation supports prioritized
               I/O on character special files:
                 Read requests generated by calls to lio_listio() from
                 processes whose scheduling policy is SCHED_FIFO or
                 SCHED_RR with the same priority to a character
                 special file shall be processed by the underlying
                 device in FIFO order.

          15   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 Unless list[n]->aio_fildes is associated with a
                 device which is incapable of seeking a request
                 generated by a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_READ shall take place at the
                 absolute position in the file given by list[n]-
                 >aio_offset.

          16   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_READ and list[n]-

     Page 3                                       (printed 11/23/2000)

     lio_listio(VSRTs5.1.1 (Applied Testing and Tlio_listio(rt.os/aio)

                 >aio_sigevent.sigev_notify is SIGEV_NONE no
                 asynchronous notification shall be delivered when the
                 operation completes.

          17   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_READ and list[n]-
                 >aio_sigevent.sigev_notify is SIGEV_SIGNAL the signal
                 specified in list[n]->aio_sigevent.sigev_signo shall
                 be generated for the process when the operation
                 completes.

          18   If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               lio_listio() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_READ and list[n]-
                 >aio_sigevent.sigev_notify is SIGEV_SIGNAL and the
                 SA_SIGINFO flag is set for the signal specified in
                 list[n]->aio_sigevent.sigev_signo, the signal shall
                 be queued for the process when it is generated and
                 the value specified in list[n]-
                 >aio_sigevent.sigev_value shall be in the si_value
                 component of the generated signal.

          19   If _POSIX_ASYNCHRONOUS_IO, and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               lio_listio() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_READ and list[n]-
                 >aio_sigevent.sigev_notify is SIGEV_THREAD the
                 function in list[n]-
                 >aio_sigevent.sigev_notify_function shall be called
                 with the value of list[n]->aio_sigevent.sigev_value
                 as a parameter when the operation completes, executed
                 in an environment as if it were the start_routine for
                 a newly created thread with thread attributes
                 specified by list[n]-
                 >aio_sigevent.sigev_notify_attributes.

          20   If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               lio_listio() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_READ, list[n]-
                 >aio_sigevent.sigev_notify is SIGEV_THREAD, and
                 list[n]->aio_sigevent.sigev_notify_attributes is

     Page 4                                       (printed 11/23/2000)

     lio_listio(VSRTs5.1.1 (Applied Testing and Tlio_listio(rt.os/aio)

                 NULL, the function in list[n]-
                 >aio_sigevent.sigev_notify_function shall be called
                 with the value of list[n]->aio_sigevent.sigev_value
                 as a parameter when the operation completes, executed
                 in an environment as if it were the start_routine for
                 a newly created thread with the detachstate attribute
                 set to PTHREAD_CREATE_DETACHED.

          21   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 When list[n].aio_lio_opcode is LIO_WRITE a call to
                 lio_listio() shall initiate or queue a request on
                 behalf of the calling process to write list[n]-
                 >aio_nbytes from the file associated with list[n]-
                 >aio_fildes from the buffer pointed to by list[n]-
                 >aio_buf.

          22   If _POSIX_ASYNCHRONOUS_IO and _POSIX_PRIORITIZED_IO are
               defined or the implementation supports the lio_listio()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A write request generated by a call to lio_listio()
                 from a process whose scheduling policy is SCHED_FIFO
                 or SCHED_RR shall be queued in priority order at a
                 priority equal to the scheduling priority of the
                 process minus list[n]->aio_reqprio for values of
                 list[n]->aio_reqprio which lower the operation
                 priority, in the range 0 to {AIO_PRIO_DELTA_MAX}.

          23   If _POSIX_ASYNCHRONOUS_IO and _POSIX_PRIORITIZED_IO are
               defined or the implementation supports the lio_listio()
               function as described in System Interfaces and Headers,
               Issue 5, and the implementation supports prioritized
               I/O on character special files:
                 Write requests generated by calls to lio_listio()
                 from processes whose scheduling policy is SCHED_FIFO
                 or SCHED_RR with the same priority to a character
                 special file shall be processed by the underlying
                 device in FIFO order.

          24   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 Unless the O_APPEND flag is set for list[n]-
                 >aio_fildes or that file is associated with a device
                 which is incapable of seeking a request generated by
                 a call to lio_listio() when list[n].aio_lio_opcode is
                 LIO_WRITE shall take place at the absolute position
                 in the file given by list[n]->aio_offset.

          25   If _POSIX_ASYNCHRONOUS_IO is defined or the

     Page 5                                       (printed 11/23/2000)

     lio_listio(VSRTs5.1.1 (Applied Testing and Tlio_listio(rt.os/aio)

               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 If the O_APPEND flag is set for list[n]->aio_fildes
                 write requests generated by calls to lio_listio()
                 shall append to the file.

          26   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when list[n].aio_lio_opcode
                 is LIO_WRITE and list[n]->aio_sigevent.sigev_notify
                 is SIGEV_NONE no asynchronous notification shall be
                 delivered when the operation completes.

          27   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when list[n].aio_lio_opcode
                 is LIO_WRITE and list[n]->aio_sigevent.sigev_notify
                 is SIGEV_SIGNAL the signal specified in list[n]-
                 >aio_sigevent.sigev_signo shall be generated for the
                 process when the operation completes.

          28   If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               lio_listio() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to lio_listio() when list[n].aio_lio_opcode
                 is LIO_WRITE and list[n]->aio_sigevent.sigev_notify
                 is SIGEV_SIGNAL and the SA_SIGINFO flag is set for
                 the signal specified in list[n]-
                 >aio_sigevent.sigev_signo, the signal shall be queued
                 for the process when it is generated and the value
                 specified in list[n]->aio_sigevent.sigev_value shall
                 be in the si_value component of the generated signal.

          29   If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS
               are defined or the implementation supports the
               lio_listio() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to lio_listio() when list[n].aio_lio_opcode
                 is LIO_WRITE and list[n]->aio_sigevent.sigev_notify
                 is SIGEV_THREAD the function in list[n]-
                 >aio_sigevent.sigev_notify_function shall be called
                 with the value of list[n]->aio_sigevent.sigev_value
                 as a parameter when the operation completes, executed
                 in an environment as if it were the start_routine for
                 a newly created thread with thread attributes
                 specified by list[n]-
                 >aio_sigevent.sigev_notify_attributes.

          30   If _POSIX_ASYNCHRONOUS_IO and _POSIX_REALTIME_SIGNALS

     Page 6                                       (printed 11/23/2000)

     lio_listio(VSRTs5.1.1 (Applied Testing and Tlio_listio(rt.os/aio)

               are defined or the implementation supports the
               lio_listio() function as described in System Interfaces
               and Headers, Issue 5:
                 On a call to lio_listio() when list[n].aio_lio_opcode
                 is LIO_WRITE, list[n]->aio_sigevent.sigev_notify is
                 SIGEV_THREAD, and list[n]-
                 >aio_sigevent.sigev_notify_attributes is NULL, the
                 function in list[n]-
                 >aio_sigevent.sigev_notify_function shall be called
                 with the value of list[n]->aio_sigevent.sigev_value
                 as a parameter when the operation completes, executed
                 in an environment as if it were the start_routine for
                 a newly created thread with the detachstate attribute
                 set to PTHREAD_CREATE_DETACHED.

     Deviance
          31   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to lio_listio() shall return -1 and set errno
                 to EAGAIN when the number of entries indicated by
                 nent would cause the systemwide limit AIO_MAX to be
                 exceeded.

          32   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to lio_listio() shall return -1 and set errno
                 to EINVAL when mode is not a proper value.

          33   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to lio_listio() shall return -1 and set errno
                 to EINVAL when the value of nent is greater than
                 AIO_LISTIO_MAX.

          34   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to lio_listio() when mode is LIO_WAIT shall
                 return -1 and set errno to EINTR when the operation
                 is interrupted by a signal.

          35   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to lio_listio() shall return -1 and set errno
                 to EIO when one of more of the individual I/O
                 operations fail.

          36   If _POSIX_ASYNCHRONOUS_IO is defined or the

     Page 7                                       (printed 11/23/2000)

     lio_listio(VSRTs5.1.1 (Applied Testing and Tlio_listio(rt.os/aio)

               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_READ and list[n]->aio_fildes
                 is not a valid file descriptor open for reading the
                 return status of the asynchronous operation shall be
                 set to -1 and its error status shall be set to EBADF.

          37   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_READ and the offset implied by
                 list[n]->aio_offset would be invalid the return
                 status of the asynchronous operation shall be set to
                 -1 and its error status shall be set to EINVAL.

          38   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_READ and list[n]->aio_reqprio
                 is not a valid value the return status of the
                 asynchronous operation shall be set to -1 and its
                 error status shall be set to EINVAL.

          39   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 When list[n]->aio_lio_opcode is LIO_READ and
                 list[n]->aio_nbytes is not a valid value the return
                 status of the asynchronous operation shall be set to
                 -1 and its error status shall be set to EINVAL.

          40   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when list[n].aio_lio_opcode
                 is LIO_WRITE and list[n]->aio_fildes is not a valid
                 file descriptor open for writing the return status of
                 the asynchronous operation shall be set to -1 and its
                 error status shall be set to EBADF.

          41   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when list[n].aio_lio_opcode
                 is LIO_WRITE and the offset implied by list[n]-
                 >aio_offset would be invalid the return status of the
                 asynchronous operation shall be set to -1 and its
                 error status shall be set to EINVAL.

     Page 8                                       (printed 11/23/2000)

     lio_listio(VSRTs5.1.1 (Applied Testing and Tlio_listio(rt.os/aio)

          42   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when list[n].aio_lio_opcode
                 is LIO_WRITE and list[n]->aio_reqprio is not a valid
                 value the return status of the asynchronous operation
                 shall be set to -1 and its error status shall be set
                 to EINVAL.

          43   This assertion is not in use.

          44   If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when a requested operation
                 is canceled by a call to aio_cancel() the return
                 status of the asynchronous operation shall be set to
                 -1 and its error status shall be set to ECANCELED.

          45   If _POSIX_ASYNCHRONOUS_IO is not defined and the
               implementation does not support the lio_listio()
               function as described in System Interfaces and Headers,
               Issue 5:
                 A call to lio_listio() shall return -1 and set errno
                 to ENOSYS.

     Untestable Aspects
          1    If _POSIX_ASYNCHRONOUS_IO and _POSIX_SYNCHRONIZED_IO
               are defined or the implementation supports the
               lio_listio() function as described in System Interfaces
               and Headers, Issue 5:
                 When synchronized I/O is enabled on the file
                 associated with list[n]->aio_fildes the behavior of
                 the operation initiated by a call to lio_listio() is
                 as per the definitions of synchronized I/O data
                 integrity and synchronized I/O file integrity.
                 Reason for omission:  It is not possible to determine
                 in a portable manner whether data has been written to
                 the file-system.

          2    If _POSIX_ASYNCHRONOUS_IO and _POSIX_PRIORITIZED_IO are
               defined or the implementation supports the lio_listio()
               function as described in System Interfaces and Headers,
               Issue 5:
                 When prioritized requests to the same file generated
                 by calls to lio_listio() are blocked waiting for a
                 resource, higher priority requests shall be granted
                 the resource before lower priority requests.
                 Reason for omission: There is no portable test method
                 for this requirement.

          3    If _POSIX_ASYNCHRONOUS_IO is defined or the

     Page 9                                       (printed 11/23/2000)

     lio_listio(VSRTs5.1.1 (Applied Testing and Tlio_listio(rt.os/aio)

               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to lio_listio() shall return -1 and set errno
                 to EAGAIN when the resources necessary to queue all
                 the I/O requests are not available.
                 Reason for omission:  This is no reliable test method
                 for this assertion.

          4    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to lio_listio() shall return -1 and set errno
                 to EAGAIN when list[n]->aio_lio_opcode is LIO_READ
                 and the requested asynchronous I/O operation is not
                 queued due to temporary resource limitations.
                 Reason for omission:  This is no reliable test method
                 for this assertion.

          5    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to lio_listio() when list[n].aio_lio_opcode is
                 LIO_WRITE shall return -1 and set errno to EAGAIN
                 when the requested asynchronous I/O operation is not
                 queued due to system resource limitations.
                 Reason for omission: This is no reliable test method
                 for this assertion.

          6    If _POSIX_ASYNCHRONOUS_IO is defined or the
               implementation supports the lio_listio() function as
               described in System Interfaces and Headers, Issue 5:
                 On a call to lio_listio() when list[n].aio_lio_opcode
                 is LIO_WRITE and list[n]->aio_nbytes is not a valid
                 value the return status of the asynchronous operation
                 shall be set to -1 and its error status shall be set
                 to EINVAL.
                 Reason for omission: This is no reliable test method
                 for this assertion.

     Notes
          Tests must be run against a file type which is capable of
          seeking and for which the implementation supports the
          necessary types of Realtime I/O and provides appropriate
          files for testing.

          The existence of such files is assumed as a prerequisite in
          these tests.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.

     Page 10                                      (printed 11/23/2000)

     lio_listio(VSRTs5.1.1 (Applied Testing and Tlio_listio(rt.os/aio)

          All rights reserved

     Page 11                                      (printed 11/23/2000)

     lio_listio_VSRT.5.1.1o(Applied Testing andlio_listio_X(rt.os/aio)

     NAME
          rt.os/aio/lio_listio_X - list directed I/O testset

     DESCRIPTION
          Tests the lio_listio() function for conformance to the
          X/Open extensions defined in System Interfaces and Headers,
          Issue 5 Page: lio_listio().

     TESTS
     Compliance
          1    If the implementation allows creation of a file
               description with an offset maximum less than the
               largest size it supports for an off_t:
                 For regular files no data will be written as a result
                 of a call to lio_listio() past the offset maximum
                 established in the open file description associated
                 with aiocbp->aio_fildes.

          2    If the implementation allows creation of a file
               description with an offset maximum less than the
               largest size it supports for an off_t:
                 For regular files no data will be read as a result of
                 a call to lio_listio() past the offset maximum
                 established in the open file description associated
                 with aiocbp->aio_fildes.

     Deviance
          3    If the implementation allows creation of a file
               description with an offset maximum less than the
               largest size it supports for an off_t:
                 On a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_WRITE, the file associated
                 with list[n]->aio_fildes is a regular file, list[n]-
                 >aio_nbytes is greater than 0, and list[n]-
                 >aio_offset is at the offset maximum established in
                 the open file description associated with list[n]-
                 >aio_fildes the return status of the asynchronous
                 operation shall be set to -1 and its error status
                 shall be set to EFBIG.

          4    If the implementation allows creation of a file
               description with an offset maximum less than the
               largest size it supports for an off_t:
                 On a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_WRITE, the file associated
                 with list[n]->aio_fildes is a regular file, list[n]-
                 >aio_nbytes is greater than 0, and list[n]-
                 >aio_offset is beyond the offset maximum established
                 in the open file description associated with
                 list[n]->aio_fildes the return status of the
                 asynchronous operation shall be set to -1 and its
                 error status shall be set to EFBIG.

     Page 1                                       (printed 11/23/2000)

     lio_listio_VSRT.5.1.1o(Applied Testing andlio_listio_X(rt.os/aio)

          5    If the implementation allows creation of a file
               description with an offset maximum less than the
               largest size it supports for an off_t:
                 On a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_READ, the file associated with
                 list[n]->aio_fildes is a regular file and list[n]-
                 >aio_offset is before the end-of-file and at the
                 offset maximum established in the open file
                 description associated with list[n]->aio_fildes the
                 return status of the asynchronous operation shall be
                 set to -1 and its error status shall be set to
                 EOVERFLOW.

          6    If the implementation allows creation of a file
               description with an offset maximum less than the
               largest size it supports for an off_t:
                 On a call to lio_listio() when list[n]-
                 >aio_lio_opcode is LIO_READ, the file associated with
                 list[n]->aio_fildes is a regular file and list[n]-
                 >aio_offset is before the end-of-file and beyond the
                 offset maximum established in the open file
                 description associated with list[n]->aio_fildes the
                 return status of the asynchronous operation shall be
                 set to -1 and its error status shall be set to
                 EOVERFLOW.

     Notes
          Tests must be run against a file type which is capable of
          seeking and for which the implementation supports the
          necessary types of Realtime I/O and provides an appropriate
          file for testing.

          The existence of such a file is assumed as a prerequisite in
          these tests.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     grantpt_L(LSB.os/devRelease 1.1 (UniSofgrantpt_L(LSB.os/devclass)

     NAME
          LSB.os/devclass/grantpt_L - grant access to the slave
          pseudo-terminal device test case

     DESCRIPTION
          This test case tests the grantpt() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:grantpt()

     TESTS
          1    When fildes refers to a master pseudo-terminal device,
               then a call to grantpt(fildes) performs the following
               operations on the corresponding slave device:

                    sets the user ID to the real UID of the calling
                    process;

                    sets the permissions to readable and writable by
                    owner and writable by group;

               and returns zero.

          2    When fildes does not refer to an open file, then a call
               to grantpt(fildes) returns -1 and sets errno to EBADF.

          3    When fildes is a valid file descriptor that does not
               refer to a master pseudo-terminal device, then a call
               to grantpt(fildes) returns -1 and sets errno to EINVAL.

          4    When fildes refers to a master pseudo-terminal device
               and the corresponding slave device cannot be accessed,
               then a call to grantpt(fildes) returns -1 and sets
               errno to EACCES.

     Untestable aspects
          1    When fildes refers to a master pseudo-terminal device,
               then a call to grantpt(fildes) sets the group of the
               corresponding slave device to an unspecified group ID.
               Reason for omission: The corresponding statement in the
               standard to which conformance is being measured is not
               specific enough to write a portable test.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 1                                       (printed 11/23/2000)

     ptsname_L(LSB.os/devRelease 1.1 (UniSofptsname_L(LSB.os/devclass)

     NAME
          LSB.os/devclass/ptsname_L - get name of the slave pseudo-
          terminal device test case

     DESCRIPTION
          This test case tests the ptsname() system call interface for
          conformance to The Open Group's CAE Specification: System
          Interfaces and Headers, page:ptsname()

     TESTS
          1    When fildes refers to a master pseudo-terminal device,
               then a call to ptsname(fildes) returns a pointer to a
               zero-terminated string containing the pathname of the
               corresponding slave device.

          2    When fildes does not refer to a master pseudo-terminal
               device, then a call to ptsname(fildes) returns a NULL
               pointer.
               Testing requirements: Test using a valid open file
               descriptor, and a file descriptor that does not refer
               to an open file.

     Untestable aspects
          1    When fildes refers to a master pseudo-terminal device
               and the corresponding slave device does not exist in
               the file system, then a call to ptsname(fildes) returns
               a NULL pointer.
               Reason for omission: The corresponding statement in the
               standard to which conformance is being measured is not
               specific enough to write a portable test.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 1                                       (printed 11/23/2000)

     dev_null(XOPEN.os/fRelease 4.4.1 (UniSoftdev_null(XOPEN.os/files)

     NAME
          XOPEN.os/files/dev_null - the null device

     DESCRIPTION
          Dev_null tests the /dev/null device for conformance to the
          XSI System Definitions Page:Devices

     TESTS
     Compliance
          1    Data written on /dev/null is discarded and reads from
               /dev/null always return 0 bytes

     OUTPUTS
     Tests:
          1    Pass/Fail indication - failure information includes the
               expected and detected errno and return value.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     dev_tty(XOPEN.os/fiRelease 4.4.1 (UniSoft dev_tty(XOPEN.os/files)

     NAME
          XOPEN.os/files/dev_tty - the tty device

     DESCRIPTION
          Dev_tty tests the /dev/tty device for conformance to the XSI
          System Definitions Page:Devices

     TESTS
     Compliance
          1    The file /dev/tty is, in each process, a synonym for
               the controlling terminal associated with the process
               group of that process, if any.

     OUTPUTS
     Tests:
          1    Pass/Fail indication - failure information includes the
               expected and detected errno and return value.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     seekdir(XOPEN.os/fiRelease 4.4.1 (UniSoft seekdir(XOPEN.os/files)

     NAME
          XOPEN.os/files/seekdir - directory operations testset

     DESCRIPTION
          Seekdir tests the seekdir() subroutine call interface for
          conformance to the XSI System Interfaces Page:seekdir()

     TESTS
     Compliance
          1    seekdir() sets the position for the next readdir()
               operation, such that it will read in the first dirent
               structure that occurs after the location specified by
               loc.

     OUTPUTS
     Tests:
          1    Pass/Fail indication - failure information includes
               detected and expected return value.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     telldir(XOPEN.os/fiRelease 4.4.1 (UniSoft telldir(XOPEN.os/files)

     NAME
          XOPEN.os/files/telldir - directory operations testset

     DESCRIPTION
          Telldir tests the telldir() subroutine call interface for
          conformance to the XSI System Interfaces Page:telldir()
          This subroutine description was not included in Issue 1 of
          the XPG and these tests are omitted when testing against
          this issue.

     TESTS
     Compliance
          1    telldir() returns the current location of the directory
               entry associated with dirp.

     OUTPUTS
     Tests:
          1    Pass/Fail indication - failure information includes
               detected and expected return value.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     telldir_L(LSB.os/filRelease 1.1 (UniSoft Ltelldir_L(LSB.os/files)

     NAME
          LSB.os/files/telldir_L - current location of a named
          directory stream test case

     DESCRIPTION
          This test case tests the telldir() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:telldir()

     TESTS
          1    When the last operation on an open directory stream
               dirp was a call to seekdir(dirp, loc), then a call to
               telldir(dirp) returns loc.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 1                                       (printed 11/23/2000)

     closelog_L(LSB.os/geRelease 1.1 (UniSoftcloselog_L(LSB.os/genuts)

     NAME
          LSB.os/genuts/closelog_L - control system log test case

     DESCRIPTION
          This test case tests the closelog() system call interface
          for conformance to The Open Group's CAE Specification:
          System Interfaces and Headers, page:closelog()

     TESTS
          1    If the implementation allocates file descriptors during
               a call to openlog() or syslog():
                    A call to closelog() closes any open file
                    descriptors allocated during a previous call to
                    openlog().
                    Testing requirements: Test using a previous call
                    to openlog(ident, logopt, facility) with
                    LOG_NDELAY set in logopt.

          2    If the implementation allocates file descriptors during
               a call to openlog() or syslog():
                    A call to closelog() closes any open file
                    descriptors allocated during a previous call to
                    syslog().

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 1                                       (printed 11/23/2000)

     fnmatch(XPG4.os/genRelease 4.4.1 (UniSoft fnmatch(XPG4.os/genuts)

     NAME
          XPG4.os/genuts/fnmatch - match filename of pathname testset

     DESCRIPTION
          Tests the fnmatch(), system call interface for conformance
          to the XSI System Interfaces Page:fnmatch()

     TESTS
     Compliance
          1    If fnmatch() is supported:
                   When the flags argument is zero and the string
                   specified by string matches the specified pattern,
                   then a call to fnmatch() returns 0.
                   Testing Requirements:  The test shall ensure that
                   each of the following are true:
                   a. A slash character in string is matched by
                   characters other than an explicit slash in pattern.
                   b. A backslash character in pattern is treated as a
                   quoting character.
                   c. A leading period character in string is matched
                   by characters other than an explicit leading period
                   in pattern.
                   d. A period character after a slash character in
                   string is matched by characters other than an
                   explicit period in pattern.
               Otherwise:
                   A call to fnmatch() returns a non-zero value not
                   equal to FNM_NOMATCH and sets errno to ENOSYS.

          2    If fnmatch() is supported:
                   When the flags argument is zero and the string
                   specified by string does not match the specified
                   pattern, then a call to fnmatch() returns
                   FNM_NOMATCH.
               Otherwise:
                   A call to fnmatch() returns a non-zero value not
                   equal to FNM_NOMATCH and sets errno to ENOSYS.

          3    If fnmatch() is supported:
                   When the FNM_PATHNAME flag is set and the
                   FNM_PERIOD flag is clear in the flags argument and
                   the string specified by string matches the
                   specified pattern with each slash in pattern
                   explicitly matching a slash in string, then a call
                   to fnmatch() returns 0.
                   Testing Requirements:  The test shall ensure that
                   each of the following are true:
                   a. A leading period character in string is matched
                   by characters other than an explicit leading period
                   in pattern.
                   b. A period character after a slash character in
                   string is matched by characters other than an

     Page 1                                       (printed 11/23/2000)

     fnmatch(XPG4.os/genRelease 4.4.1 (UniSoft fnmatch(XPG4.os/genuts)

                   explicit period in pattern.
               Otherwise:
                   A call to fnmatch() returns a non-zero value not
                   equal to FNM_NOMATCH and sets errno to ENOSYS.

          4    If fnmatch() is supported:
                   When the FNM_PATHNAME flag is set and the
                   FNM_PERIOD flag is clear in the flags argument and
                   the string specified by string matches the
                   specified pattern except that one or more slashes
                   in pattern does not explicitly match a slash in
                   string, then a call to fnmatch() returns
                   FNM_NOMATCH.
               Otherwise:
                   A call to fnmatch() returns a non-zero value not
                   equal to FNM_NOMATCH and sets errno to ENOSYS.

          5    If fnmatch() is supported:
                   When the FNM_NOESCAPE flag is clear in the flags
                   argument and the string specified by string matches
                   the specified pattern with each character pair
                   commencing with a backslash character in pattern
                   explicitly matching the second character in the
                   character pair in string, then a call to fnmatch()
                   returns 0.
               Otherwise:
                   A call to fnmatch() returns a non-zero value not
                   equal to FNM_NOMATCH and sets errno to ENOSYS.

          6    If fnmatch() is supported:
                   When the FNM_NOESCAPE flag is set in the flags
                   argument and the string specified by string matches
                   the specified pattern with each backslash character
                   in pattern explicitly matching a backslash
                   character in string, then a call to fnmatch()
                   returns 0.
               Otherwise:
                   A call to fnmatch() returns a non-zero value not
                   equal to FNM_NOMATCH and sets errno to ENOSYS.

          7    If fnmatch() is supported:
                   When the FNM_PERIOD flag is set and the
                   FNM_PATHNAME flag is clear in the flags argument
                   and the string specified by string matches the
                   specified pattern and the first character of
                   pattern is a period, then a call to fnmatch()
                   returns 0.
                   Testing Requirements:  The test shall ensure that
                   each of the following are true:
                   a. A slash character in string is matched by
                   characters other than an explicit slash in pattern.
                   b. A period character after a slash character in

     Page 2                                       (printed 11/23/2000)

     fnmatch(XPG4.os/genRelease 4.4.1 (UniSoft fnmatch(XPG4.os/genuts)

                   string is matched by characters other than an
                   explicit period in pattern.
               Otherwise:
                   A call to fnmatch() returns a non-zero value not
                   equal to FNM_NOMATCH and sets errno to ENOSYS.

          8    If fnmatch() is supported:
                   When the FNM_PERIOD flag is set and the
                   FNM_PATHNAME flag is clear in the flags argument
                   and the string specified by string matches the
                   specified pattern except that a leading period
                   character in string is not explicitly matched by a
                   period in pattern, then a call to fnmatch() returns
                   FNM_NOMATCH.
               Otherwise:
                   A call to fnmatch() returns a non-zero value not
                   equal to FNM_NOMATCH and sets errno to ENOSYS.

          9    If fnmatch() is supported:
                   When both the FNM_PERIOD and the FNM_PATHNAME flags
                   are set in the flags argument and the string
                   specified by string matches the specified pattern
                   and either the first character in pattern or the
                   character immediately following one or more of the
                   slashes in pattern is a period, then a call to
                   fnmatch() returns 0.
               Otherwise:
                   A call to fnmatch() returns a non-zero value not
                   equal to FNM_NOMATCH and sets errno to ENOSYS.

          10   If fnmatch() is supported:
                   When both the FNM_PERIOD and the FNM_PATHNAME flags
                   are set in the flags argument and the string
                   specified by string matches the specified pattern
                   except that either a leading period character or a
                   period character immediately following one or more
                   of the slash characters in string is not explicitly
                   matched by a period in pattern, then a call to
                   fnmatch() returns FNM_NOMATCH.
               Otherwise:
                   A call to fnmatch() returns a non-zero value not
                   equal to FNM_NOMATCH and sets errno to ENOSYS.

     Untestable Aspects
          1    If fnmatch() is supported:
                   When a call to fnmatch() completes unsuccessfully,
                   then a nonzero value not equal to FNM_NOMATCH is
                   returned.

     OUTPUTS
     Tests:
          1-10 Pass/Fail indication - failure information includes

     Page 3                                       (printed 11/23/2000)

     fnmatch(XPG4.os/genRelease 4.4.1 (UniSoft fnmatch(XPG4.os/genuts)

               expected and detected return values.

     RELEASE
          4.4.1 (06/09/97)

     Page 4                                       (printed 11/23/2000)

     ftw(XOPEN.os/genutsRelease 4.4.1 (UniSoft Ltdftw(XOPEN.os/genuts)

     NAME
          XOPEN.os/genuts/ftw - walk a file tree testset

     DESCRIPTION
          Ftw tests the ftw() subroutine interface for conformance to
          the XSI System Interfaces Page:ftw()

     TESTS
     Compliance
          1    ftw() recursively descends the directory hierarchy
               rooted in path until it has traversed the whole tree,
               calling the function fn for each object in the
               directory tree, and returns zero.

          2    ftw() visits a directory before visiting its
               descendants.

          3    ftw() passes
               a. the path-name of the current object, which is a NULL
               terminated string including the root name specified by
               path, as the first argument of the function fn;
               b. a pointer to a stat structure, containing
               information about the current object, as the second
               argument of the function fn;
               c. an integer as the third argument of the function,
               which should be defined as :
                    i. FTW_F if the object is a file;
                    ii. FTW_D if the object is a directory;
                    iii. FTW_DNR if the object is a directory that
                    cannot be read;
                    iv. FTW_NS if a stat() could not be carried out on
                    the object.

          4    If the integer passed to the function fn is FTW_DNR
               then the descendants of the directory will not be
               processed.

          5    ftw() closes any file descriptors or directory streams
               used to traverse the directory tree.

          6    ndirs is the maximum number of file descriptors or
               directory streams used by ftw().

          7    If ndirs is negative or zero, then ftw() either
               executes as if it were 1 or returns -1 and sets errno
               to EINVAL.

          8    If the function fn returns a non-zero value then ftw()
               stops and returns the return value of fn.

     Deviance
          9    If _POSIX_PATH_MAX <= {PATH_MAX} <= PCTS_PATH_MAX, then

     Page 1                                       (printed 11/23/2000)

     ftw(XOPEN.os/genutsRelease 4.4.1 (UniSoft Ltdftw(XOPEN.os/genuts)

               ftw() returns -1 and sets errno to ENAMETOOLONG if the
               length of path exceeds PATH_MAX;
                                      otherwise
               a call to ftw() when the length of the path argument
               equals PCTS_PATH_MAX does not give an ENAMETOOLONG
               error.

          10   For the XNFS specification:
                   Not in use.
               For the XSH specification:
                   If POSIX_NO_TRUNC is in effect:
                       If _POSIX_NAME_MAX <= {NAME_MAX} <=
                       PCTS_NAME_MAX, then ftw() returns -1 and sets
                       errno to ENAMETOOLONG if a component of path
                       exceeds NAME_MAX;
                                          otherwise
                       a call to ftw() when the length of a component
                       of path equals PCTS_NAME_MAX does not give an
                       ENAMETOOLONG error.

          11   ftw() returns -1 and sets errno to ENOENT if path
               points to a file which does not exist.

          12   ftw() returns -1 and sets errno to ENOENT if path is an
               empty string.

          13   ftw() returns -1 and sets errno to ENOTDIR if a
               component of path is not a directory.

          14   For the XNFS specification:
                   If {_POSIX_NO_TRUNC} is defined on the client and
                   {NAME_MAX} on the client is less than or equal to
                   PCTS_NAME_MAX:
                       When the length of a pathname component of path
                       is longer than {NAME_MAX} on the client, then a
                       call to ftw(path, args ...) returns a value of
                       -1 and sets errno to ENAMETOOLONG.
               For the XSH specification:
                   Not in use.

          15   For the XNFS specification:
                   If {_POSIX_NO_TRUNC} is defined on the server and
                   {NAME_MAX} on the server is less than or equal to
                   PCTS_NAME_MAX and {NAME_MAX} on the server is less
                   than NFS_MAXNAMLEN and {NAME_MAX} on the server is
                   less than {NAME_MAX} on the client:
                       When the length of a pathname component of path
                       is longer than {NAME_MAX} on the server, then a
                       call to ftw(path, args ...) returns a value of
                       -1 and sets errno to ENAMETOOLONG.
               For the XSH specification:
                   Not in use.

     Page 2                                       (printed 11/23/2000)

     ftw(XOPEN.os/genutsRelease 4.4.1 (UniSoft Ltdftw(XOPEN.os/genuts)

          16   For the XNFS specification:
                   If {_POSIX_NO_TRUNC} is defined on the client and
                   {NAME_MAX} on the client is greater than or equal
                   to NFS_MAXNAMLEN and {_POSIX_NO_TRUNC} is defined
                   on the server and {NAME_MAX} on the server is
                   greater than or equal to NFS_MAXNAMLEN:
                       When the length of a pathname component of path
                       is equal to NFS_MAXNAMLEN, then a call to
                       ftw(path, args ...) does not give an
                       ENAMETOOLONG error.
               For the XSH specification:
                   Not in use.

          17   For the XNFS specification:
                   If {_POSIX_NO_TRUNC} is defined on the client and
                   {NAME_MAX} on the client is greater than or equal
                   to NFS_MAXNAMLEN and {_POSIX_NO_TRUNC} is not
                   defined on the server:
                       When the length of a pathname component of path
                       is equal to NFS_MAXNAMLEN, then a call to
                       ftw(path, args ...) does not give an
                       ENAMETOOLONG error.
               For the XSH specification:
                   Not in use.

     OUTPUTS
     Tests:
          1    Pass/Fail indication - failure information includes
               detected and expected return value and point of failure
               in directory tree.

          2    Pass/Fail indication only.

          3    Pass/Fail indication - failure information includes
               detected and expected argument value.

          4-5  Pass/Fail indication only.

          6-7  Pass/Fail indication - failure information includes
               detected and expected number of file descriptors used
               by ftw().

          8    Pass/Fail indication - failure information includes
               detected and expected return value.

          9    Pass/Fail indication - failure information includes
               detected and expected errno and return value.

          10   Pass/Fail/Unsupported indication - failure information
               includes expected and detected error number and return
               value.

     Page 3                                       (printed 11/23/2000)

     ftw(XOPEN.os/genutsRelease 4.4.1 (UniSoft Ltdftw(XOPEN.os/genuts)

          11-13
               Pass/Fail indication - failure information includes
               detected and expected errno and return value.

          14-17
               Pass/Fail/Unsupported indication - failure information
               includes expected and detected error number and return
               value.

     RELEASE
          4.4.1 (06/09/97)

     Page 4                                       (printed 11/23/2000)

     ftw_L(LSB.os/genuts)Release 1.1 (UniSoft Ltd.ftw_L(LSB.os/genuts)

     NAME
          LSB.os/genuts/ftw_L - traverse (walk) a file tree test case

     DESCRIPTION
          This test case tests the ftw() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:ftw()

     TESTS
          1    On a call to ftw(path, fn, ndirs) the pathname path is
               resolved in accordance with the requirements for
               pathname resolution.

          2    On a call to ftw(path, fn, ndirs) the filename path
               supports portable filenames.

          3    A call to ftw(path, fn, ndirs) uses at most one file
               descriptor for each directory level traversed.

          4    When a call to ftw(path, fn, ndirs) encounters an
               object that is a symbolic link on which a call to
               stat() is successful, then the implementation calls the
               function (*fn)(object, ptr, flag) with flag equal to
               FTW_SL.

          5    When a call to ftw(path, fn, ndirs) encounters an
               object that is a symbolic link on which a call to
               stat() is unsuccessful, then the implementation calls
               the function (*fn)(object, ptr, flag) with flag equal
               to FTW_SL or FTW_NS.

          6    When search permission is denied for any component of
               path, then a call to ftw(path, fn, ndirs) returns -1
               with errno set to EACCES.

          7    When read permission is denied for path, then a call to
               ftw(path, fn, ndirs) returns -1 with errno set to
               EACCES.

          8    When too many symbolic links are encountered when
               resolving path, then a call to ftw(path, fn, ndirs)
               returns -1 with errno set to ELOOP.

     Untestable aspects
          1    When path is a symbolic link and the resolution of path
               produces an intermediate result whose length exceeds
               {PATH_MAX}, then a call to ftw(path, fn, ndirs) returns
               -1 with errno set to ENAMETOOLONG.
               Reason for omission:  There is no known portable test
               method for this assertion.

     Page 1                                       (printed 11/23/2000)

     ftw_L(LSB.os/genuts)Release 1.1 (UniSoft Ltd.ftw_L(LSB.os/genuts)

     Grey areas
          1    When ftw() encounters a symbolic link, does the stat
               structure passed to the user-supplied function refer to
               the symbolic link or to the object pointed to by the
               symbolic link?  Should each of the references in the
               specification to a call to stat() made by the
               implementation have been updated to lstat() when the
               references to symbolic links were added?

          2    When ftw() encounters a symbolic link that points to a
               directory, does it follow the symbolic link and descend
               the pointed-to directory?  The mention of calling
               stat() on each object encountered during directory
               traversal seems to contradict the reporting of FTW_SL
               when a symbolic link is encountered.

          3    The description of the ELOOP error condition is rather
               unclear.  Should it say: ``[ELOOP] Too many symbolic
               links were encountered while resolving path''?

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 2                                       (printed 11/23/2000)

     getopt(XPG4.os/genuRelease 4.4.4 (UniSoft Lgetopt(XPG4.os/genuts)

     NAME
          XPG4.os/genuts/getopt - command option parsing testset

     DESCRIPTION
          Getopt tests the getopt() subroutine interface for
          conformance to the XSI System Interfaces Page:getopt()

     TESTS
     Compliance
          1    When the variable opterr is not set to zero and a call
               to getopt() is made with optind and the arguments argc,
               argv, and the option string optstring as per the table
               below, then getopt() outputs the corresponding
               information, if any, to standard error and returns the
               value and sets the variables optind, optarg, and optopt
               as specified in the corresponding columns of the table.

               optstring Set of          optind  optarg   Return stderr     optopt
                         Arguments       In  Out
               ''        --fred          1   2   Unset    -1     No O/P     Unset
               ''        -a fred         1   2   Unset    ?      Diagnostic a
               ''        -a fred         2   2   Unset    -1     No O/P     Unset
               :         --fred          1   2   Unset    -1     No O/P     Unset
               :         -a fred         1   2   Unset    ?      No O/P     a
               :         -a fred         2   2   Unset    -1     No O/P     Unset
               abcd      -a -c fred      1   2   Unset    a      No O/P     Unset
               abcd      -a -c fred      2   3   Unset    c      No O/P     Unset
               abcd      -a -c fred      3   3   Unset    -1     No O/P     Unset
               abcd      -ac fred        1   1   Unset    a      No O/P     Unset
               abcd      -ac fred        N/C 2   Unset    c      No O/P     Unset
               abcd      -ac fred        2   2   Unset    -1     No O/P     Unset
               abcd      -z fred         1   2   Unset    ?      Diagnostic z
               abcd      -a -- -b        1   2   Unset    a      No O/P     Unset
               abcd      -a -- -b        2   3   Unset    -1     No O/P     Unset
               abcd      -a -c fred      1   2   Unset    a      No O/P     Unset
               abcd      -a -c fred      2   3   Unset    c      No O/P     Unset
               abcd      -a -c fred      3   3   Unset    -1     No O/P     Unset
               :abcd     -z fred         1   2   Unset    ?      No O/P     z
               ab:cd:e   -a -d opt fred  1   2   Unset    a      No O/P     Unset
               ab:cd:e   -a -d opt fred  2   4   opt      d      No O/P     Unset
               ab:cd:e   -a -d opt       2   4   opt      d      No O/P     Unset
               ab:cd:e   -a -dopt fred   2   3   opt      d      No O/P     Unset
               ab:cd:e   -a -dopt        2   3   opt      d      No O/P     Unset
               ab:cd:e   -a -d opt fred  4   4   Unset    -1     No O/P     Unset
               ab:cd:e   -a -d           2   3   Unset    ?      Diagnostic d
               ab:cd:e   -d -a fred      1   3   -a       d      No O/P     Unset
               ab:cd:e   -d-a fred       1   2   -a       d      No O/P     Unset
               ab:cd:e   -a opt -d opt2  1   2   Unset    a      No O/P     Unset
               ab:cd:e   -a opt -d opt2  2   2   Unset    -1     No O/P     Unset
               ab:cd:e   -abd fred       1   1   Unset    a      No O/P     Unset
               ab:cd:e   -abd fred       N/C 2   d        b      No O/P     Unset
               ab:cd:e   -abd            1   1   Unset    a      No O/P     Unset

     Page 1                                       (printed 11/23/2000)

     getopt(XPG4.os/genuRelease 4.4.4 (UniSoft Lgetopt(XPG4.os/genuts)

               ab:cd:e   -abd            N/C 2   d        b      No O/P     Unset
               ab:cd:e   -ab opt fred    1   1   Unset    a      No O/P     Unset
               ab:cd:e   -ab opt fred    N/C 3   opt      b      No O/P     Unset
               ab:cd:e   -ab opt         1   1   Unset    a      No O/P     Unset
               ab:cd:e   -ab opt         N/C 3   opt      b      No O/P     Unset
               ab:cd:e   -ab             1   1   Unset    a      No O/P     Unset
               ab:cd:e   -ab             N/C 2   Unset    ?      Diagnostic b
               ab:cd:e   -b opt -- fred  1   3   opt      b      No O/P     Unset
               ab:cd:e   -b opt -- fred  3   4   Unset    -1     No O/P     Unset
               ab:cd:e   -b -- -c fred   1   3   --       b      No O/P     Unset
               ab:cd:e   -b -- -c fred   3   4   Unset    c      No O/P     Unset
               ab:cd:e   -b '' -c fred   1   3   Null     b      No O/P     Unset
               ab:cd:e   -b '' -c fred   3   4   Unset    c      No O/P     Unset
               ab:cd:e   -b 'o1 o2' fred 1   3   o1 o2    b      No O/P     Unset
               ab:cd:e   '-bo1 o2' fred  1   2   o1 o2    b      No O/P     Unset
               ab:cd:e   '-b o1 o2' fred 1   2   ' o1 o2' b      No O/P     Unset
               :ab:cd:e  -a -d opt fred  2   4   opt      d      No O/P     Unset
               :ab:cd:e  -a -d opt       2   4   opt      d      No O/P     Unset
               :ab:cd:e  -a -d opt fred  4   4   Unset    -1     No O/P     Unset
               :ab:cd:e  -a -d           2   3   NULL     :      No O/P     d
               :ab:cd:e  -ab             1   1   Unset    a      No O/P     Unset
               :ab:cd:e  -ab             N/C 2   NULL     :      No O/P     b
               ab:       -: -a fred      1   2   Unset    ?      Diagnostic :
               :ab:      -: -a fred      1   2   Unset    :      No O/P     Unset

          2    Prior to the first call to getopt() the variable optind
               is set by the system to be equal to 1.

          3    When opterr is set to zero, then a call to getopt()
               does not print diagnostics to standard error.

          4    The formats of the diagnostics printed to standard
               error by a call to getopt() in the POSIX locale are as
               follows:
               "%s: illegal option -- %c\n", <program name>, <option
               character>
               "%s: option requires an argument -- %c\n", <program
               name>, <option character>

     OUTPUTS
     Tests:
          1    Pass/Fail indication - failure information includes
               detected and expected return value, optind, optarg,
               optopt and output to stderr.

          2    Pass/Fail indication - failure information includes
               detected and expected value of optind.

          3-4  Pass/Fail indication - failure information includes
               detected and expected return value and output to
               stderr.

     Page 2                                       (printed 11/23/2000)

     getopt(XPG4.os/genuRelease 4.4.4 (UniSoft Lgetopt(XPG4.os/genuts)

     NOTE
          This testset supersedes XOPEN.os/genuts/getopt, which is
          only executed in XPG3 mode (its tests give NOTINUSE results
          in other modes).

     RELEASE
          4.4.4 (07/19/99)

     Page 3                                       (printed 11/23/2000)

     glob(XPG4.os/genutsRelease 4.4.1 (UniSoft Ltdglob(XPG4.os/genuts)

     NAME
          XPG4.os/genuts/glob - generate pathnames matching a pattern
          testset

     DESCRIPTION
          Tests the glob() and globfree() system call interfaces for
          conformance to the XSI System Interfaces Page:glob()

     TESTS
     Compliance
          1    If glob() is supported:
                   When a call to glob() has read permission on each
                   directory of any filename component of pattern that
                   contains any of the special characters *, ? or [
                   and has search permission on every component of a
                   path except the last, then glob() completes
                   successfully without calling the error function
                   errfunc.
                   Testing Requirements:  Test with patterns
                   containing these special characters and patterns
                   which do not contain these characters.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          2    If glob() is supported:
                   The glob() function creates a list of all
                   accessible pathnames which match the argument
                   pattern.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          3    If glob() is supported:
                   When pattern is a single character other than
                   newline, and unquoted ?, * or [ then a call to
                   glob() matches the pattern to a file with the same
                   name.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          4    If glob() is supported:
                   When pattern contains the characters ?, * and [
                   inside a bracket expression, then a call to glob()
                   attaches no special meaning to those characters.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          5    If glob() is supported:
                   When pattern contains a concatenation of patterns,

     Page 1                                       (printed 11/23/2000)

     glob(XPG4.os/genutsRelease 4.4.1 (UniSoft Ltdglob(XPG4.os/genuts)

                   each of which match a single character, then a call
                   to glob() matches pattern to pathnames which are
                   the concatenation of the characters matched by each
                   pattern.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          6    If glob() is supported:
                   The glob() function only matches a slash in a
                   pathname to an explicit slash character in pattern.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          7    If glob() is supported:
                   When pattern contains *, then a call to glob()
                   matches the * to any characters except slash,
                   leading dot and dot following slash.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          8    If glob() is supported:
                   When pattern contains ?, then a call to glob()
                   matches the ? to any single character except slash,
                   leading dot and dot following slash.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          9    If glob() is supported:
                   When pattern contains [s], then a call to glob()
                   matches the [s] to any one of the characters in the
                   set s except slash, leading dot and dot following
                   slash.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          10   Not in use.

          11   If glob() is supported:
                   When pattern contains [!s], then a call to glob()
                   matches the [!s] to any characters not in the set s
                   except slash, leading dot and dot following slash.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          12   If glob() is supported:
                   When pattern commences with a slash character, then

     Page 2                                       (printed 11/23/2000)

     glob(XPG4.os/genutsRelease 4.4.1 (UniSoft Ltdglob(XPG4.os/genuts)

                   a call to glob() commences searching for matching
                   filenames at the calling process' root directory.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          13   If glob() is supported:
                   When pattern does not commence with a slash
                   character, then a call to glob() commences
                   searching for matching filenames at the calling
                   process' current working directory, interpreting an
                   explicit pathname element of dot-dot (..) as the
                   parent directory of the previous pathname element.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          14   If glob() is supported:
                   A successful call to glob() returns a value of
                   zero, sets the gl_pathc structure member of the
                   argument addressed by pglob to the number of
                   matched pathnames and sets the gl_pathv structure
                   member to contain a pointer to a null-terminated
                   list of matched and sorted pathnames.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          15   If glob() is supported:
                   When the GLOB_NOSORT flag is not set in the flags
                   argument, then pathnames returned by glob() are
                   sorted according to collation sequence
                   corresponding to the value of the current setting
                   of the LC_COLLATE category.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          16   If glob() is supported:
                   When the GLOB_NOCHECK flag is not set in the flags
                   argument and no pathnames are found which match
                   pattern, then the gl_pathc structure member of the
                   pglob argument is set to zero.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          17   If glob() is supported:
                   A call to glob() allocates the memory pointed to by
                   the gl_pathv structure member addressed by the
                   pglob argument.
               Otherwise:

     Page 3                                       (printed 11/23/2000)

     glob(XPG4.os/genutsRelease 4.4.1 (UniSoft Ltdglob(XPG4.os/genuts)

                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          18   If globfree() is supported:
                   When the pglob argument refers to a structure whose
                   address was supplied to a previous call to glob(),
                   then a call to globfree() frees any space
                   associated with the structure addressed by pglob.
               Otherwise:
                   A call to globfree() sets errno to ENOSYS.

          19   If glob() is supported:
                   When the GLOB_APPEND flag is set in flags, then the
                   pathnames generated from this call to glob() are
                   stored in the gl_pathv element of the structure
                   addressed by pglob after the current set of
                   pathnames, which remain unchanged, and the gl_pathc
                   element of the structure is updated to provide the
                   total number of elements from the two calls.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          20   If glob() is supported:
                   When the GLOB_DOOFFS flag is set in flags, then a
                   call to glob() commences the array of pointers in
                   the gl_pathv element of the structure addressed by
                   pglob with the number of NULL pointers specified in
                   the gl_offs element of the structure and follows
                   this with gl_pathc pathname pointers, followed by
                   the terminating NULL pointer.
                   Test with the GLOB_APPEND flag set and with this
                   flag clear.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          21   If glob() is supported:
                   When the GLOB_ERR flag is not set in flags, errfunc
                   is NULL and a call to glob() encounters a directory
                   which cannot be opened or read, then the call to
                   glob() ignores the error and continues to generate
                   other matching filenames.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          22   If glob() is supported:
                   When the GLOB_MARK flag is set in flags and a
                   pathname that matches pattern is a directory, then
                   a call to glob() appends a slash to the
                   corresponding pathname referenced by the gl_pathv

     Page 4                                       (printed 11/23/2000)

     glob(XPG4.os/genutsRelease 4.4.1 (UniSoft Ltdglob(XPG4.os/genuts)

                   structure element.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          23   If glob() is supported:
                   When the GLOB_NOCHECK flag is set in flags and
                   pattern does not match any pathnames, then a call
                   to glob() sets the gl_pathv structure element of
                   pglob to pattern and sets the gl_pathc structure
                   element to 1.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          24   If glob() is supported:
                   When the GLOB_NOSORT flag is set in flags, then a
                   call to glob() returns a list of matching pathnames
                   in the gl_pathv structure element of pglob in an
                   unspecified order.
                   Testing Requirements:  Test the contents of
                   gl_pathv without assuming any specific order.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          25   If glob() is supported:
                   When the GLOB_NOESCAPE flag is not set in flags and
                   pattern contains one or more character pairs
                   commencing with a backslash character (\), then a
                   call to glob() matches the second character in the
                   pair with the same character in a filename.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          26   If glob() is supported:
                   When the GLOB_NOESCAPE flag is set in flags and
                   pattern contains one or more backslash characters
                   (\), then a call to glob() matches the backslash
                   character with the same character in a filename.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          27   If glob() is supported:
                   When a directory is encountered that cannot be
                   opened or read during the search and errfunc is not
                   NULL, then a call to glob() executes a call to the
                   function errfunc with the two arguments epath,
                   which points to the name of the path that failed,
                   and eerrno which is the value of errno as set by

     Page 5                                       (printed 11/23/2000)

     glob(XPG4.os/genutsRelease 4.4.1 (UniSoft Ltdglob(XPG4.os/genuts)

                   the opendir(), readdir(), or stat() functions.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          28   If glob() is supported:
                   When the GLOB_ERR flag is not set in flags, a call
                   to glob() encounters a directory which cannot be
                   opened or read and the ensuing call to errfunc()
                   returns zero, then the call to glob() ignores the
                   error and continues to generate other matching
                   filenames.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

     Deviance
          29   If glob() is supported:
                   When the GLOB_ERR flag is set in flags and a call
                   to glob() encounters a directory which cannot be
                   opened or read, then the error return value
                   GLOB_ABORTED is returned and the gl_pathc and
                   gl_pathv structure elements are set to reflect the
                   set of filenames generated prior to the directory
                   being encountered.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          30   If glob() is supported:
                   When a call to glob() encounters a directory which
                   cannot be opened or read and the (*errfunc)() is
                   called and returns non-zero, then the error return
                   value GLOB_ABORTED is returned and the gl_pathc and
                   gl_pathv structure elements are set to reflect the
                   set of filenames generated prior to the directory
                   being encountered.
                   Testing Requirements:  Test with GLOB_ERR set and
                   unset.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

          31   If glob() is supported:
                   When the GLOB_NOCHECK flag is not set in flags and
                   pattern does not match any pathnames, then a call
                   to glob() sets the gl_pathc structure element of
                   pglob to 0 and returns GLOB_NOMATCH.
               Otherwise:
                   A call to glob() returns GLOB_NOSYS and sets errno
                   to ENOSYS.

     Page 6                                       (printed 11/23/2000)

     glob(XPG4.os/genutsRelease 4.4.1 (UniSoft Ltdglob(XPG4.os/genuts)

     Untestable Aspects
          1    When a call to glob() fails in an attempt to allocate
               memory, then the error return value GLOB_NOSPACE is
               returned.

     OUTPUTS
     Tests:
          1-28 Pass/Fail indication - failure information includes
               expected and detected return values.

          29-31
               Pass/Fail indication - failure information includes
               expected and detected error numbers and return values.

     RELEASE
          4.4.1 (06/09/97)

     Page 7                                       (printed 11/23/2000)

     nftw(GABI.os/genuRelease 1.3 (UniSoft Group Lnftw(GABI.os/genuts)

     NAME
          GABI.os/genuts/nftw - walk a file tree.

     DESCRIPTION
          Nftw tests the nftw() subroutine call interface for
          conformance to the SVID3 definition.  Page:ftw(BA_LIB)

     TESTS
     Compliance
          1    A call to nftw(path,fn,depth,flags) recursively
               descends the directory hierarchy rooted in path until
               it has traversed the whole tree, calling the function
               fn for each object in the directory tree, and return
               zero.

          2    When flags contains FTW_PHYS, then a call to
               nftw(path,fn,depth,flags) does not follow symbolic
               links.

          3    When flags does not contain FTW_PHYS, then a call to
               nftw(path,fn,depth,flags) follows symbolic links except
               that it does not walk down any path that crosses
               itself.

          4    When flags contains FTW_MOUNT, then a call to
               nftw(path,fn,depth,flags) does not cross a mount point.

          5    When flags does not contain FTW_MOUNT, then a call to
               nftw(path,fn,depth,flags) crosses mount points as
               necessary.

          6    When flags contains FTW_DEPTH, then a call to
               nftw(path,fn,depth,flags) visits all descendents before
               visiting the directory itself.

          7    When flags does not contain FTW_DEPTH, then a call to
               nftw(path,fn,depth,flags) visits a directory before
               visiting its descendants.

          8    When flags contains FTW_CHDIR, then a call to
               nftw(path,fn,depth,flags) changes to each directory
               before reading it.

          9    A call to nftw(path,fn,depth,flags) shall pass:
               the path-name of the current object, which is a NULL
               terminated string including the root name specified by
               path, as the first argument of the function fn;
               a pointer to a stat structure, containing information
               about the current object, as the second argument of the
               function fn;
               an integer as the third argument of the function, which
               shall be:

     Page 1                                       (printed 11/23/2000)

     nftw(GABI.os/genuRelease 1.3 (UniSoft Group Lnftw(GABI.os/genuts)

                    i. FTW_F if the object is a file;
                    ii. FTW_D if the object is a directory and
                    subdirectories have not been visited;
                    iii. FTW_DP if the object is a directory and
                    subdirectories have been visited;
                    iv FTW_SL if the object is a symbolic link;
                    v. FTW_DNR if the object is a directory that
                    cannot be read;
                    vi. FTW_NS if a stat() could not be carried out on
                    the object.
               a structure which contains the offset into the pathname
               of the object and the depth relative to the root of the
               walk as the fourth argument of the function.

          10   On a call to nftw(path,fn,depth,flags) when the integer
               passed to the function fn is FTW_DNR then the
               descendants of the directory shall not be processed.

          11   A call to nftw(path,fn,depth,flags) shall close any
               file descriptors or directory streams used to traverse
               the directory tree.

          12   On a call to nftw(path,fn,depth,flags) depth is the
               maximum number of file descriptors or directory streams
               that shall be used.

          13   A call to nftw(path,fn,depth,flags) when the function
               fn returns a non-zero value shall stop and return the
               return value of fn.

     Deviance
          14   ENAMETOOLONG in errno and return -1 on a call to
               nftw(path,fn,depth,flags) if the length of path exceeds
               pathconf(path,_PC_PATH_MAX).

          15   If a call to pathconf(_PC_NO_TRUNC) return other than
               -1 then ENAMETOOLONG in errno and return -1 on a call
               to nftw(path,fn,depth,flags) if a component of path
               exceeds pathconf(path,_PC_NAME_MAX).

          16   ENOENT in errno and return -1 on a call to
               nftw(path,fn,depth,flags) if path points to a file
               which does not exist.

          17   ENOENT in errno and return -1 on a call to
               nftw(path,fn,depth,flags) if path is an empty string.

          18   ENOTDIR in errno and return -1 on a call to
               nftw(path,fn,depth,flags) if path is not a directory.

     OUTPUTS
     Tests:

     Page 2                                       (printed 11/23/2000)

     nftw(GABI.os/genuRelease 1.3 (UniSoft Group Lnftw(GABI.os/genuts)

          1

     PROBLEMS
          The term "crosses itself" is poorly defined. Need to clarify
          what this means.

     RELEASE
          1.7 (8/1/92)

     Page 3                                       (printed 11/23/2000)

     nftw_L(LSB.os/genutsRelease 1.1 (UniSoft Ltdnftw_L(LSB.os/genuts)

     NAME
          LSB.os/genuts/nftw_L - walk a file tree test case

     DESCRIPTION
          This test case tests the nftw() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:nftw()

     TESTS
          1    On a call to nftw(path, fn, depth, flags) the pathname
               path is resolved in accordance with the requirements
               for pathname resolution.

          2    On a call to nftw(path, fn, depth, flags) the filename
               path supports portable filenames.

          3    A call to nftw(path, fn, depth, flags) uses at most one
               file descriptor for each directory level traversed.

          4    When search permission is denied for any component of
               path, then a call to nftw(path, fn, depth, flags)
               returns -1 with errno set to EACCES.

          5    When read permission is denied for path, then a call to
               nftw(path, fn, depth, flags) returns -1 with errno set
               to EACCES.

          6    When too many symbolic links are encountered when
               resolving path, then a call to
               nftw(path, fn, depth, flags) returns -1 with errno set
               to ELOOP.

     Untestable aspects
          1    When {OPEN_MAX} file descriptors are currently open in
               the calling process, then a call to
               nftw(path, fn, depth, flags) returns -1 with errno set
               to EMFILE.
               Reason for omission:  There is no known portable test
               method for this assertion.

          2    When no more file descriptors can be opened in the
               system, then a call to nftw(path, fn, depth, flags)
               returns -1 with errno set to ENFILE.
               Reason for omission:  There is no known portable test
               method for this assertion.

          3    When path is a symbolic link and the resolution of path
               produces an intermediate result whose length exceeds
               {PATH_MAX}, then a call to nftw(path, fn, depth, flags)
               returns -1 with errno set to ENAMETOOLONG.
               Reason for omission:  There is no known portable test
               method for this assertion.

     Page 1                                       (printed 11/23/2000)

     nftw_L(LSB.os/genutsRelease 1.1 (UniSoft Ltdnftw_L(LSB.os/genuts)

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 2                                       (printed 11/23/2000)

     openlog_L(LSB.os/genRelease 1.1 (UniSoft openlog_L(LSB.os/genuts)

     NAME
          LSB.os/genuts/openlog_L - control system log test case

     DESCRIPTION
          This test case tests the openlog() system call interface for
          conformance to The Open Group's CAE Specification: System
          Interfaces and Headers, page:openlog()

     TESTS
          1    A call to openlog(ident, logopt, facility) causes each
               message that is generated by a subsequent call to
               syslog() to have ident prepended to it.

          2    When LOG_PID is set in logopt, then a call to
               openlog(ident, logopt, facility) causes each message
               that is generated by a subsequent call to syslog() to
               include the process ID of the calling process.

          3    A call to openlog(ident, logopt, facility) causes each
               message generated by a subsequent call to syslog() in
               which no facility value is specified to be logged with
               the specified facility value.

     Untestable aspects
          1    When LOG_CONS is set in logopt, then a call to
               openlog(ident, logopt, facility) causes each message
               generated by a subsequent call to syslog() which cannot
               be sent to the logging facility to be written on the
               system console.
               Reason for omission:  There is no known portable test
               method for this assertion.

          2    When LOG_NDELAY is set in logopt, then a call to
               openlog(ident, logopt, facility) opens the connection
               to the logging facility.
               Reason for omission:  There is no known portable test
               method for this assertion.

          3    When LOG_NDELAY is not set in logopt, then a call to
               openlog(ident, logopt, facility) does not open the
               connection to the logging facility.
               Reason for omission:  There is no known portable test
               method for this assertion.

          4    When LOG_ODELAY is set in logopt, then a call to
               openlog(ident, logopt, facility) does not open the
               connection to the logging facility.
               Reason for omission:  There is no known portable test
               method for this assertion.

          5    When LOG_NOWAIT is set in logopt, then a call to
               openlog(ident, logopt, facility) causes a subsequent

     Page 1                                       (printed 11/23/2000)

     openlog_L(LSB.os/genRelease 1.1 (UniSoft openlog_L(LSB.os/genuts)

               call to syslog() in which a child process is created to
               return without waiting for the child to exit.
               Reason for omission:  There is no known portable test
               method for this assertion.

     Grey areas
          1    The specification does not say what is supposed to
               happen when openlog(ident, logopt, facility) is called
               with both LOG_NDELAY and LOG_ODELAY set in logopt.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 2                                       (printed 11/23/2000)

     pclose(XOPEN.os/genRelease 4.4.1 (UniSoft pclose(XOPEN.os/genuts)

     NAME
          XOPEN.os/genuts/pclose - terminate pipe to/from a process
          testset

     DESCRIPTION
          Pclose tests the pclose() subroutine call interface for
          conformance to the XSI System Interfaces Page:pclose()

     TESTS
     Compliance
          1    pclose() waits for the process associated with the
               stream to terminate before closing stream.

          2    pclose() returns the exit status of command.

          3    When a process has created child processes and also
               makes a call to pclose(), then the termination status
               of the child processes other than those created by the
               call to popen(), are not affected by the call to
               pclose().
               Not tested in XPG3 mode.

     Deviance
          4    pclose() returns -1 if stream is not associated with a
               popen() command.
               Tested in XPG3 mode only.

          5    pclose() returns -1 and sets errno to ECHILD if the
               status of the child can not be obtained.

          6    When an error prevents the command language interpreter
               from executing after the child process is created, then
               the return value from a call to pclose() is as if the
               command language interpreter had terminated using
               exit(127) or _exit(127).
               Not tested in XPG3 mode.

     OUTPUTS
     Tests:
          1    Pass/Fail indication only.

          2    Pass/Fail indication - failure information includes
               expected and detected return value.

          3    Pass/Fail indication only.

          4    Pass/Fail indication - failure information includes
               expected and detected return value.

          5    Pass/Fail indication - failure information includes
               expected and detected errno and return value.

     Page 1                                       (printed 11/23/2000)

     pclose(XOPEN.os/genRelease 4.4.1 (UniSoft pclose(XOPEN.os/genuts)

          6    Pass/Fail indication - failure information includes
               expected and detected return value.

     RELEASE
          4.4.1 (06/09/97)

     Page 2                                       (printed 11/23/2000)

     popen(XOPEN.os/genuRelease 4.4.1 (UniSoft Lpopen(XOPEN.os/genuts)

     NAME
          XOPEN.os/genuts/popen - initiate pipe to/from a process
          testset

     DESCRIPTION
          Popen tests the popen() subroutine call interface for
          conformance to the XSI System Interfaces Page:popen()

     TESTS
     Compliance
          1    When type = w popen() returns a pointer to a stream
               that can be used to write to the standard input of the
               command specified by command.

          2    When type = r popen() returns a pointer to a stream
               that can be used to read from the standard output of
               the command specified by command.

          3    If command cannot be executed then a read or write to
               the stream will fail.
               This test is executed in XPG3 mode only.

          4    When a call to popen() completes successfully, then
               both the parent and the child process are capable of
               executing independently before either terminates.
               Not tested in XPG3 mode.

          5    A call to popen() executes the command specified by the
               string pointed to by command in the same manner as
               would occur in a process created by a call to fork()
               followed by a call to execl(<shell path>, "sh", "-c",
               command, (char *)0).
               Not tested in XPG3 mode.

     Deviance
          6    popen() returns a null pointer if a stream cannot be
               created in the calling process.

          7    When a pipe cannot be created, then a call to popen()
               returns a NULL pointer.
               Not tested in XPG3 mode.

          8    When a subprocess cannot be created, then a call to
               popen() returns a NULL pointer.
               Not tested in XPG3 mode.

          9    If the implementation detects EINVAL: when the mode
               argument is invalid, then a call to popen() returns
               NULL and sets errno to EINVAL.
               Not tested in XPG3 mode.

     OUTPUTS

     Page 1                                       (printed 11/23/2000)

     popen(XOPEN.os/genuRelease 4.4.1 (UniSoft Lpopen(XOPEN.os/genuts)

     Tests:
          1-2  Pass/Fail indication - failure information includes
               expected and detected data transferred through pipe.

          3-5  Pass/Fail indication only.

          6-8  Pass/Fail indication - failure information includes
               expected and detected return values.

          9    Pass/Fail indication - failure information includes
               expected and detected errno and return values.

     PARAMETERS
          1    VSX_INVALID_POPEN_MODE : An invalid mode argument for
               popen(), set to "unsup" if popen() does not detect
               EINVAL errors.  Used in test 9.

     RELEASE
          4.4.1 (06/09/97)

     Page 2                                       (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

     NAME
          LSB.os/genuts/syslog_L - control system log test case

     DESCRIPTION
          This test case tests the syslog() system call interface for
          conformance to The Open Group's CAE Specification: System
          Interfaces and Headers, page:syslog()

     TESTS
          1    A call to syslog(priority, message, ...) sends the
               specified message to a logging facility.  The logged
               message includes a header and a body: the header
               contains a timestamp and a tag string and the body is
               derived from the message and any following arguments
               that were passed to syslog(), formatted after the style
               of printf() with plain characters passed through
               unaltered.

          2    When a valid severity level value is ORed into
               priority, then the message generated by a call to
               syslog(priority, message, ...) is logged with the
               specified severity level.

          3    When a valid facility value is ORed into priority, then
               the message generated by a call to
               syslog(priority, message, ...) is logged with the
               specified facility value.

          4    When no valid facility value is ORed into priority and
               a default facility value has been specified in a
               previous call to openlog(), then the message generated
               by a call to syslog(priority, message, ...) is logged
               with the default facility value.

          5    When no valid facility value is ORed into priority and
               there has been no previous call to openlog() in which a
               default facility value has been specified, then the
               message generated by a call to
               syslog(priority, message, ...) is logged with a
               facility value of LOG_USER.

          6    When message contains %m, then in the message generated
               by a call to syslog(priority, message, ...) the %m is
               replaced by a digit string whose value is taken from
               errno in the calling process.

          7    When message does not include a trailing newline, then
               a call to syslog(priority, message, ...) appends a
               newline to the logged message.

          8    When message includes a conversion specification in
               which the field width is not specified or the field

     Page 1                                       (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               width is smaller than the converted number, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the converted
               number is not truncated and the field is expanded to
               contain the conversion result.

          9    When message contains %d, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               integer specified by arg is converted to a signed
               decimal character string with a default precision of
               one.

          10   When message contains %i, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               integer specified by arg is converted to a signed
               decimal character string with a default precision of
               one.

          11   When message contains %o, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               integer specified by arg is converted to an unsigned
               octal character string with a default precision of one.

          12   When message contains %u, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               integer specified by arg is converted to a decimal
               character string with a default precision of one.

          13   When message contains %x, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               integer specified by arg is converted to a hexadecimal
               notation character string, using the letters "abcdef"
               with a default precision of one.

          14   When message contains %X, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               integer specified by arg is converted to a hexadecimal
               notation character string, using the letters "ABCDEF"
               with a default precision of one.

          15   When message contains %f, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               float or double specified by arg is converted to a
               decimal notation character string of the form
               "[-]ddd.ddd" where six digits are output after the
               decimal point character by default.

          16   When message contains %e, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               float or double specified by arg is converted to a
               decimal notation character string of the form
               "[-]d.ddde_dd" where, by default, there is one digit

     Page 2                                       (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               before the decimal point character, six digits after
               the decimal point character and the exponent always has
               at least two digits.

          17   When message contains %e, and the float or double
               specified by arg is greater than or equal to 1e+100,
               then in the message generated by a call to
               syslog(priority, message, arg, ...), additional
               exponent digits are added as necessary.

          18   When message contains %E, then in the message generated
               by a call to syslog(priority, message, arg, ...), this
               directive produces the same effect as the "%e" notation
               except that the string has an "E" instead of an "e"
               introducing the exponent.

          19   When message contains %g and the exponent, resulting
               from a conversion to "%e" format of the float or double
               specified by arg, would be greater than or equal to -4,
               or less than the default precision of 6, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the "%f" format is
               used for the conversion.

          20   When message contains %g and the exponent, resulting
               from a conversion to "%e" format of the float or double
               specified by arg, would be less than -4, or greater
               than or equal to the default precision of 6, then in
               the message generated by a call to
               syslog(priority, message, arg, ...), the "%e" format is
               used for the conversion.

          21   When message contains %G, then in the message generated
               by a call to syslog(priority, message, arg, ...), this
               directive produces the same effect as the "%g" notation
               except that it uses the "%E" format instead of the "%e"
               format.

          22   When message contains %g or %G, then in the message
               generated by a call to
               syslog(priority, message, arg, ...), trailing zeros are
               removed from the fractional portion of the result.

          23   When message contains %g or %G, then in the message
               generated by a call to
               syslog(priority, message, arg, ...), a decimal point
               character appears in the result only in the case that
               it is followed by a digit.

          24   When message contains %c, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               character specified by arg is printed.

     Page 3                                       (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

          25   When message contains %s, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               character pointer specified by arg is assumed to be a
               string and characters from the string are printed until
               a null character is encountered.

          26   When message contains %C, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               wide character specified by arg is converted to its
               multibyte equivalent and printed.

               Not tested in POSIX and XPG3 modes.

          27   When message contains %S, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               wide string pointed to by arg is converted to a
               multibyte sequence until a null wide character is
               reached and the multibyte sequence is printed.

               Not tested in POSIX and XPG3 modes.

          28   When message contains %p, then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               pointer to void specified by arg is converted to an
               implementation defined sequence of printable
               characters.

          29   When message contains %n, then on a call to
               syslog(priority, message, arg, ...), arg is a pointer
               to an integer into which is written the number of
               characters written so far by this call to the function.
               No argument is converted.

          30   When message contains %%, then in the message generated
               by a call to syslog(priority, message, ...), a "%" is
               printed and no argument is converted.

          31   When message contains %l?, where ? = a type conversion
               character (d, i, o, u, x, X, n), then in the message
               generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | i | o | u | x | X], then arg is taken
               to be a long integer and converted accordingly;
               b. when ? = [n], then arg is taken to be a pointer to a
               long integer which is written accordingly.

          32   When message contains %h?, where ? = a type conversion
               character (d, i, o, u, x, X, n), then in the message
               generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | i | o | u | x | X], then arg is
               converted as if the h were not there;

     Page 4                                       (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               b. when ? = [n], then arg is taken to be a pointer to a
               short integer which is written accordingly.

          33   When message contains %.?, where ? = a type conversion
               character (d, hi, lo, f, e, g, s, S), then in the
               message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | hi | lo], then the result is
               equivalent to "%?";
               b. when ? = [d | hi | lo], arg = 0 then arg is
               converted to a null string;
               c. when ? = [f | e], then no decimal point character
               occurs in the decimal notation character string that
               arg is converted to;
               d. when ? = [g], then :
                    i. for ((arg >= 1E-04) && (arg < 1)) || ((arg <=
                    -1E-04) && (arg > -1)), the result is printed in
                    'f' format with one significant digit;
                    ii. for ((arg < 1E-04) && (arg > -1E-04)) || ((arg
                    >= 1) && (arg <= -1)), no decimal point character
                    occurs in the decimal notation character string
                    that arg is converted to;
               e. when ? = [s | S], then the result is converted to a
               null string.

               The S directive is not tested in POSIX and XPG3 modes.

          34   When message contains %.m?, where ? = a type conversion
               character (d, hi, lo, f, e, g, s, S), then in the
               message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | hi | lo], and m = an integer, then m
               represents the minimum number of digits that appear in
               the converted output and in the case that the value
               being converted can be represented in a fewer number of
               digits than m, it will be expanded with leading zeros;
               b. when ? = [f | e], and m = an integer, then m
               represents the number of digits after the decimal point
               character in the converted output string;
               c. when ? = [g], m = an integer precision and m <= 4
               then :
                    i. for ((arg >= 1E-m) && (arg < 1)) || ((arg <=
                    -1E-m) && (arg > -1)), "0" is printed out;
                    ii. for ((arg < 1E-m) && (arg > -1E-m)) || ((arg
                    >= 1) && (arg <= -1)), m decimal places of
                    precision will be printed out in the result arg is
                    converted to;
               d. when ? = [g], and m = an integer then in the case
               that the exponent of the converted number is greater
               than or equal to m or less than -4 then "%e", ("%E"
               format when "%.mG" given) will be used for converting
               arg;

     Page 5                                       (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               e. when ? = [s | S], and m = an integer, then m
               represents the maximum number of bytes to be printed in
               the case that a null character (or null wide character)
               is not reached;

               The S directive is not tested in POSIX and XPG3 modes.

          35   When message contains %n?, where ? = a type conversion
               character (d, hi, lo, x, f, e, g, c, C, s, S) and n =
               an integer, then in the message generated by a call to
               syslog(priority, message, arg, ...), n represents the
               minimum field width of the converted output string and
               in the case that the converted value has fewer bytes
               then it will be padded on the left with spaces.

               The C and S directives are not tested in POSIX and XPG3
               modes.

          36   When message contains %0n?, where ? = a type conversion
               character (d, hi, lo, x, f, e, g) and n = an integer,
               then in the message generated by a call to
               syslog(priority, message, arg, ...), n represents the
               minimum field width of the converted output string and
               in the case that the converted value has fewer
               characters then it will be padded on the left with
               zeroes, following any sign or base.

          37   When message contains %n.?, where ? = a type conversion
               character (d, hi, lo, f, e, g, s, S) and n = an
               integer, then in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d, hi, lo, f, e, g, s, S], then n
               represents the minimum field width of the converted
               output string and the precision of the string is set to
               the default value for that particular conversion type;

               The S directive is not tested in POSIX and XPG3 modes.

          38   When message contains %n.m?, where ? = a type
               conversion character (d, hi, lo, f, e, g, s, S) and
               n & m = an integer, then in the message generated by a
               call to syslog(priority, message, arg, ...):
               a. when ? = [d, hi, lo, f, e, g, s, S], then n
               represents the minimum field width of the converted
               output string, m represents the precision of the string
               for that particular conversion type and the result is
               equivalent to the result from "%n?" except for the
               modification for a precision of m;

               The S directive is not tested in POSIX and XPG3 modes.

          39   When message contains %*?, where ? = a type conversion

     Page 6                                       (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               character (d, hi, lo, f, e, g, c, C, s, S), then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the "*" takes the
               place of the field width integer the value of which is
               taken from an integer argument that precedes the
               argument to be converted (from the nth argument).
               A negative field width is taken as a - flag followed by
               a positive field width (not required in XPG3 mode).

               The C and S directives are not tested in POSIX and XPG3
               modes.

          40   When message contains %.*?, where ? = a type conversion
               character (d, hi, lo, f, e, g, s, S), then in the
               message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d, hi, lo, f, e, g, s, S], then the "*"
               takes the place of the precision integer the value of
               which is taken from an integer argument that precedes
               the argument to be converted (from the mth argument);
               A negative precision is taken as if the precision were
               omitted (not required in XPG3 mode).

               The S directive is not tested in POSIX and XPG3 modes.

          41   When message contains %*.?, where ? = a type conversion
               character (d, hi, lo, f, e, g, s, S), then in the
               message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d, hi, lo, f, e, g, s, S], then the "*"
               takes the place of the minimum field width of the
               converted output string and the precision of the string
               is set to the default value for that particular
               conversion type;
               A negative field width is taken as a - flag followed by
               a positive field width (not required in XPG3 mode).

               The S directive is not tested in POSIX and XPG3 modes.

          42   When message contains %*.*?, where ? = a type
               conversion character (d, hi, lo, f, e, g, s, S), then
               in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d, hi, lo, f, e, g, s, S], then the first
               "*" takes the place of the field width integer and the
               second "*" takes the place of precision integer.  Both
               take their values from integer arguments.
               A negative field width is taken as a - flag followed by
               a positive field width (not required in XPG3 mode).
               A negative precision is taken as if the precision were
               omitted (not required in XPG3 mode).

     Page 7                                       (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               The S directive is not tested in POSIX and XPG3 modes.

          43   When message contains %#?, where ? = a type conversion
               character (d, hi, o, lo, x, lX, f, e, g, c, s), then in
               the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | hi | f | e | c | s] then the result is
               equivalent to "%?", (the "#" flag only affects ? = [f |
               e | E] when a precision of 0 is specified);
               b. when ? = [o | lo] then the "#" flag increases the
               precision to force the first digit of the result to be
               a zero;
               c. when ? = [x] then the "#" flag increases the
               precision to prefix a non-zero result with a "0x";
               d. when ? = [lX] then the "#" flag increases the
               precision to prefix a non-zero result with a "0X";
               e. when ? = [g] then "#" flag prevents removal of
               trailing zeros from the result so that precision number
               of digits are always printed out after the decimal
               point character;

               The d, hi, c and s directives are tested in XPG3 mode
               only.

          44   When message contains % ?, where ? = a type conversion
               character (d, hi, u, lo, f, e, g, c, C, s, S), then in
               the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [c | C | s | S | u | lo], the " " flag has
               no effect on the conversion of arg and the result is
               equivalent to "%?";
               b. when ? = [d | hi | f | e | g], the result is
               equivalent to "%?" except that in the case that the
               first character is not a sign the " " flag prefixes the
               result with a blank.

               The C and S directives are not tested in POSIX and XPG3
               modes.

          45   When message contains %+?, where ? = a type conversion
               character (d, hi, u, lo, f, e, g, c, C, s, S), then in
               the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [c | C | s | S | u | lo], the "+" flag has
               no effect on the conversion of arg and the result is
               equivalent to "%?";
               b. when ? = [d | hi | f | e | g], the result is
               equivalent to "%?" except that the first character of
               the result is always a sign ('+' or '-').

               The C and S directives are not tested in POSIX and XPG3
               modes.

     Page 8                                       (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

          46   When message contains %-n?  where ? = a type conversion
               character (d, hi, u, lo, f, e, g, c, C, s, S) then in
               the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%n?" except that it is left justified.

               The C and S directives are not tested in POSIX and XPG3
               modes.

          47   When message contains %+-n?, where ? = a type
               conversion character (d, hi, u, lo, f, e, g, c, C, s,
               S) then in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%+n?" except that it is left justified.

               The C and S directives are not tested in POSIX and XPG3
               modes.

          48   When message contains % -n?, where ? = a type
               conversion character (d, hi, u, lo, f, e, g, c, C, s,
               S) then in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "% n?" except that it is left justified.

               The C and S directives are not tested in POSIX and XPG3
               modes.

          49   When message contains %+ ?, where ? = a type conversion
               character (d, hi, u, lo, f, e, g, c, C, s, S), then in
               the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%+?".

               The C and S directives are not tested in POSIX and XPG3
               modes.

          50   When message contains %- +?, where ? = a type
               conversion character (d, hi, u, lo, f, e, g, c, C, s,
               S) then in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%-+?".

               The C and S directives are not tested in POSIX and XPG3
               modes.

          51   When message contains %+n.*?, where ? = a type
               conversion character (d, hi, lo, f, e, g, s, S) and n =
               an integer, then in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [ s | S | lo], the "+" flag has no effect
               on the conversion of arg and the result is equivalent
               to "%n.*?";

     Page 9                                       (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               b. when ? = [d | hi | f | e | g], the result is
               equivalent to "%n.*?" except that the first character
               of the result is always a sign ('+' or '-').

               The S directive is not tested in POSIX and XPG3 modes.

          52   When message contains %-n.m?, where ? = a type
               conversion character (d, hi, lo, f, e, g, s, S) then in
               the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%n.m?" except that the result is left
               justified.

               The S directive is not tested in POSIX and XPG3 modes.

          53   When message contains %+-n.?, where ? = a type
               conversion character (d, hi, lo, f, e, g, s, S) then in
               the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%+n.?" except that it is left justified.

               The S directive is not tested in POSIX and XPG3 modes.

          54   When message contains %#.?, where ? = a type conversion
               character (d, hi, lo, f, e, g, s), then in the message
               generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | hi | lo], then the resultant
               conversion is equivalent to "%#?";
               b. when ? = [d | hi | lo], and arg = 0 then arg is
               converted to a null character string;
               c. when ? = [f | e | g], the result is equivalent to
               "%.?" except that the decimal point character is always
               printed out;
               d. when ? = s, the result is equivalent to "%.s";

               The d, hi and s directives are tested in XPG3 mode
               only.

          55   When message contains %#*.?, where ? = a type
               conversion character (d, hi, lo, f, e, g, s), then in
               the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%#.?" except that it will have a field
               width of at least the value specified by the argument
               corresponding to * and in the case that the converted
               value has fewer characters then it will be padded on
               the left with spaces.

               The d, hi and s directives are tested in XPG3 mode
               only.

     Page 10                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

          56   When message contains %#.m?, where m = an integer and ?
               = a type conversion character (d, hi, lo, f, e, g, s),
               then in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | hi | f | e | s], the result is
               equivalent to "%.m?";
               b. when ? = [lo], the result is equivalent to "%.m?"
               except that the result always has a zero as the first
               digit;
               c. when ? = [g], the result is equivalent to "%.m?"
               except that the decimal point and trailing zeros are
               not removed;

               The d, hi and s directives are tested in XPG3 mode
               only.

          57   When message contains %# +*?, where ? = a type
               conversion character (d, hi, lo, f, e, g, c, s), then
               in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%#*?" except that the first character of
               a signed conversion result is always a sign ('+', '-').

               The d, hi, c and s directives are tested in XPG3 mode
               only.

          58   When message contains %#+-.*?, where ? = a type
               conversion character (d, hi, lo, f, e, g, s), then in
               the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%#+.*?" except that it is left
               justified.

               The d, hi and s directives are tested in XPG3 mode
               only.

          59   When message contains %# *.*?, where ? = a type
               conversion character (d, hi, lo, f, e, g, s), then in
               the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%#*.*?" except that, in the case that
               the first character of a signed conversion result is
               not a sign, a blank is prefixed to the result.

               The d, hi and s directives are tested in XPG3 mode
               only.

          60   When message contains %#- +n?, where ? = a type
               conversion character (d, hi, lo, f, e, g, c, s), then
               in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%#n?" except that it is left justified

     Page 11                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               and, in the case that the first character of a signed
               conversion result is not a sign, a blank is prefixed to
               the result.

               The d, hi, c and s directives are tested in XPG3 mode
               only.

          61   When message contains %#-*.m?, where ? = a type
               conversion character (d, hi, lo, f, e, g, s) and m = an
               integer, then in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%#*.m?" except that it is left
               justified.

               The d, hi and s directives are tested in XPG3 mode
               only.

          62   If the long double type is supported:
                    When message contains %L?, where ? is one of the
                    type conversion characters f, e, g, E or G, then
                    in the message generated by a call to
                    syslog(priority, message, arg, ...), arg is taken
                    to be a long double and converted accordingly.

          63   A call to syslog(priority, message, ...) uses the
               decimal point character defined by the locale specified
               for the LC_NUMERIC category.

          64   When the current locale setting is for the 'C' locale,
               and the decimal point character is not defined or
               supported by the currently specified language, then the
               decimal point character used in the message generated
               by a call to syslog(priority, message, ...) defaults to
               a period ".".

          65   When the conversion sequence contains "%k$", where k is
               a positive integer in the range 1 to {NL_ARGMAX}, then
               a call to syslog(priority, message, arg, ...) picks up
               the kth argument arg in the argument list and applies
               the conversion sequence, following the '$', to it, and
               a non-existent field width or field width smaller than
               the converted number does not cause truncation of the
               converted number, as the field is expanded to contain
               the conversion result.

          66   When message contains %k$d , where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the integer
               specified by arg is converted to a signed decimal
               character string with a default precision of one.

     Page 12                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

          67   When message contains %k$i, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the integer
               specified by arg is converted to a signed decimal
               character string with a default precision of one.

          68   When message contains %k$o, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the integer
               specified by arg is converted to an unsigned octal
               character string with a default precision of one.

          69   When message contains %k$u, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the integer
               specified by arg is converted to a decimal character
               string with a default precision of one.

          70   When message contains %k$x, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the integer
               specified by arg is converted to a hexadecimal notation
               character string, using the letters "abcdef" with a
               default precision of one.

          71   When message contains %k$X, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the integer
               specified by arg is converted to a hexadecimal notation
               character string, using the letters "ABCDEF" with a
               default precision of one.

          72   When message contains %k$f, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the float or
               double specified by arg is converted to a decimal
               notation character string of the form "[-]ddd.ddd"
               where six digits are output after the decimal point
               character by default.

          73   When message contains %k$e, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the float or
               double specified by arg is converted to a decimal
               notation character string of the form "[-]d.ddde_dd"

     Page 13                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               where, by default, there is one digit before the
               decimal point character, six digits after the decimal
               point character and the exponent always has at least
               two digits.

          74   When message contains %k$e, where k = a positive
               integer, arg is the kth argument and the float or
               double specified by arg is greater than or equal to
               1e+100, then in the message generated by a call to
               syslog(priority, message, arg, ...), additional
               exponent digits are added as necessary.

          75   When message contains %k$E, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), this directive
               produces the same effect as the "%k$e" notation except
               that the string has an "E" instead of an "e"
               introducing the exponent.

          76   When message contains %k$g, where k = a positive
               integer, arg is the kth argument and the exponent,
               resulting from a conversion to "%k$e" format of the
               float or double specified by arg, would be greater than
               or equal to -4, or less than the default precision of
               6, then in the message generated by a call to
               syslog(priority, message, arg, ...), the "%f" format is
               used for the conversion.

          77   When message contains %k$g, where k = a positive
               integer and arg is the kth argument and the exponent,
               resulting from a conversion to "%k$e" format of the
               float or double specified by arg, would be less than
               -4, or greater than or equal to the default precision
               of 6, then in the message generated by a call to
               syslog(priority, message, arg, ...), the "%e" format is
               used for the conversion.

          78   When message contains %k$G, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), this directive
               produces the same effect as the "%k$g" notation except
               that it uses the "%k$E" format instead of the "%k$e"
               format.

          79   When message contains %k$g or %k$G, where k = a
               positive integer and arg is the kth argument, then in
               the message generated by a call to
               syslog(priority, message, arg, ...), trailing zeros are
               removed from the result.

     Page 14                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

          80   When message contains %k$g or %k$G, where k = a
               positive integer and arg is the kth argument, then in
               the message generated by a call to
               syslog(priority, message, arg, ...), a decimal point
               character appears in the result only in the case that
               it is followed by a digit.

          81   When message contains %k$c, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the character
               specified by arg is printed.

          82   When message contains %k$s, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the character
               pointer specified by arg is assumed to be a string and
               characters from the string are printed until a null
               character is encountered.

          83   When message contains %k$C, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the wide character
               specified by arg is converted to the equivalent
               multibyte character and printed.

               Not tested in XPG3 mode.

          84   When message contains %k$S, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the wide string
               pointed to by arg is converted to the equivalent
               multibyte character sequence until a null wide
               character is reached and the result of the conversion
               is printed.

               Not tested in XPG3 mode.

          85   When message contains %k$p, where k = a positive
               integer and arg is the kth argument, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the pointer to
               void specified by arg is converted to an implementation
               defined sequence of printable characters.

          86   When message contains %k$n, where k = a positive
               integer and arg is the kth argument, then on a call to
               syslog(priority, message, arg, ...), arg is a pointer
               to an integer into which is written the number of

     Page 15                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               characters written so far by this call to the function.

          87   When message contains %k$l?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, i, o, u, x, X, n), then in the
               message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | i | o | u | x | X], then arg is taken
               to be a long integer and converted accordingly;
               b. when ? = [n], then arg is taken to be a pointer to a
               long integer which is written accordingly.

          88   When message contains %k$h?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, i, o, u, x, X, n), then in the
               message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | i | o | u | x | X], then arg is
               converted as if the h were not there;
               b. when ? = [n], then arg is taken to be a pointer to a
               short integer which is written accordingly.

          89   When message contains %k$.?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, lo, f, e, g, s, S), then
               in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | hi | lo], then the result is
               equivalent to "%k$?";
               b. when ? = [d | hi | lo], arg = 0 then arg is
               converted to a null string;
               c. when ? = [f | e], then no decimal point character
               occurs in the decimal notation character string that
               arg is converted to;
               d. when ? = [g], then :
                    i. for ((arg >= 1E-04) && (arg < 1)) || ((arg <=
                    -1E-04) && (arg > -1)), the result is printed in
                    'f' format with one significant digit;
                    ii. for ((arg < 1E-04) && (arg > -1E-04)) || ((arg
                    >= 1) && (arg <= -1)), no decimal point character
                    occurs in the decimal notation character string
                    that arg is converted to;
               e. when ? = [s | S], then the result is converted to a
               null string.

               The S conversion character is not tested in XPG3 mode.

          90   When message contains %k$.m?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character" (d, hi, lo, f, e, g, s, S), then
               in the message generated by a call to
               syslog(priority, message, arg, ...):

     Page 16                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               a. when ? = [d | hi | lo], and m = an integer, then m
               represents the minimum number of digits that appear in
               the converted output and in the case that the value
               being converted can be represented in a fewer number of
               digits than m, it will be expanded with leading zeros;
               b. when ? = [f | e], and m = an integer, then m
               represents the number of digits after the decimal point
               character in the converted output string;
               c. when ? = [g], m = an integer precision and m <= 4,
               then:
                    i. for ((arg >= 1E-m) && (arg < 1)) || ((arg <=
                    -1E-m) && (arg > -1)), "0" is printed out;
                    ii. for ((arg < 1E-m) && (arg > -1E-m)) || ((arg
                    >= 1) && (arg <= -1)), m decimal places of
                    precision will be printed out in the result arg is
                    converted to;
               d. when ? = [g], and m = an integer then in the case
               that the exponent of the converted number is greater
               than or equal to m or less than -4 then "%k$e", ("%k$E"
               format in the case that "%k$.mG" is given) will be used
               for converting arg;
               e. when ? = [s | S], and m = an integer, then m
               represents the maximum number of characters to be
               printed in the case that a null character is not
               reached;

               The S conversion character is not tested in XPG3 mode.

          91   When message contains %k$n?, where k = a positive
               integer, arg is the kth argument, ? = a type conversion
               character (d, hi, lo, x, f, e, g, c, C, s, S) and n =
               an integer, then in the message generated by a call to
               syslog(priority, message, arg, ...), n represents the
               minimum field width of the converted output string and
               in the case that the converted value has fewer
               characters then it will be padded on the left with
               spaces.

               The C and S conversion characters are not tested in
               XPG3 mode.

          92   When message contains %k$0n?, where k = a positive
               integer, arg is the kth argument, ? = a type conversion
               character (d, hi, lo, x, f, e, g) and n = an integer,
               then in the message generated by a call to
               syslog(priority, message, arg, ...), n represents the
               minimum field width of the converted output string and
               in the case that the converted value has fewer
               characters then it will be padded on the left with
               zeroes, following any sign or base.

          93   When message contains %k$n.?, where k = a positive

     Page 17                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               integer, arg is the kth argument, ? = a type conversion
               character (d, hi, lo, f, e, g, s, S) and n = an
               integer, then in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d, hi, lo, f, e, g, s, S], n represents
               the minimum field width of the converted output string
               and the precision of the string is set to the default
               value for that particular conversion type;

               The S conversion character is not tested in XPG3 mode.

          94   When message contains %k$n.m?, where k = a positive
               integer, arg is the kth argument, ? = a type conversion
               character (d, hi, lo, f, e, g, s, S) and n & m = an
               integer, then in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d, hi, lo, f, e, g, s, S], then n
               represents the minimum field width of the converted
               output string, m represents the precision of the string
               for that particular conversion type and the result is
               equivalent to the result from "%n?" except for the
               modification for a precision of m;

               The S conversion character is not tested in XPG3 mode.

          95   When message contains %k$*n$?, where k and n are
               positive integers, arg is the kth argument, field width
               is the nth argument and ? = a type conversion character
               (d, hi, lo, f, e, g, c, C, s, S), then in the message
               generated by a call to
               syslog(priority, message, arg, ...), the "*" takes the
               place of the field width integer, the value of which is
               taken from an integer argument that precedes the
               argument to be converted (from the nth argument).
               A negative field width is taken as a - flag followed by
               a positive field width (not required in XPG3 mode).

               The C and S conversion characters are not tested in
               XPG3 mode.

          96   When message contains %k$.*m$?, where k and m are
               positive integers, arg is the kth argument, precision
               is the mth argument and ? = a type conversion character
               (d, hi, lo, f, e, g, s, S), then in the message
               generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d, hi, lo, f, e, g, s, S], then the "*"
               takes the place of the precision integer the value of
               which is taken from an integer argument that precedes
               the argument to be converted (from the mth argument);
               A negative precision is taken as if the precision were
               omitted (not required in XPG3 mode).

     Page 18                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               The S conversion character is not tested in XPG3 mode.

          97   When message contains %k$*n$.?, where k and n are
               positive integers, arg is the kth argument, field width
               is the nth argument and ? = a type conversion character
               (d, hi, lo, f, e, g, s, S), then in the message
               generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d, hi, lo, f, e, g, s, S], then the "*"
               takes the place of the minimum field width of the
               converted output string and the precision of the string
               is set to the default value for that particular
               conversion type;
               A negative field width is taken as a - flag followed by
               a positive field width (not required in XPG3 mode).

               The S conversion character is not tested in XPG3 mode.

          98   When message contains %k$*n$.*m$?, where k, n and m are
               positive integers, arg is the kth argument, field width
               is the nth argument, precision is the mth argument and
               ? = a type conversion character (d, hi, lo, f, e, g, s,
               S), then in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d, hi, lo, f, e, g, s, S], then the first
               "*" takes the place of the field width integer and the
               second "*" takes the place of precision integer. Both
               take their values from integer arguments. In the case
               were the '$' argument specifiers are not used the field
               width argument must occur first, the precision argument
               second and the argument to be converted third;
               A negative field width is taken as a - flag followed by
               a positive field width (not required in XPG3 mode).
               A negative precision is taken as if the precision were
               omitted (not required in XPG3 mode).

               The S conversion character is not tested in XPG3 mode.

          99   When message contains %k$#?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, o, lo, x, lX, f, e, g, c,
               s), then in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | hi | f | e | c | s] then the result is
               equivalent to "%k$?", (the "#" flag only affects ? = [f
               | e | E] when a precision of 0 is specified);
               b. when ? = [o | lo] then the "#" flag increases the
               precision to force the first digit of the result to be
               a zero;
               c. when ? = [x] then the "#" flag increases the
               precision to prefix a non-zero result with a "0x";
               d. when ? = [lX] then the "#" flag increases the

     Page 19                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               precision to prefix a non-zero result with a "0X";
               e. when ? = [g] then "#" flag prevents removal of
               trailing zeros from the result so that precision number
               of digits are always printed out after the decimal
               point character;

               The d, hi, c and s directives are tested in XPG3 mode
               only.

          100  When message contains %k$'?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, u, lo, f, e, g, c, C, s,
               S), then in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [c | C | s | S ], the "'" flag has no
               effect on the conversion of arg and the result is
               equivalent to "%k$?";
               b. when ? = [d | hi | u | lo | f | e | g], the "'" flag
               causes the non-monetary grouping character associated
               with the LC_NUMERIC locale to be inserted into the
               value according to the non-monetary grouping rules for
               that locale.

               This test is not executed in XPG3 mode.

          101  When message contains %k$ ?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, u, lo, f, e, g, c, C, s,
               S), then in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [c | C | s | S | u | lo], the " " flag has
               no effect on the conversion of arg and the result is
               equivalent to "%k$?";
               b. when ? = [d | hi | f | e | g], the result is
               equivalent to "%k$?" except that in the case that the
               first character is not a sign the " " flag prefixes the
               result with a blank.

               The C and S conversion characters are not tested in
               XPG3 mode.

          102  When message contains %k$+?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, u, lo, f, e, g, c, C, s,
               S), then in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [c | C | s | S | u | lo], the "+" flag has
               no effect on the conversion of arg and the result is
               equivalent to "%k$?";
               b. when ? = [d | hi | f | e | g], the result is
               equivalent to "%k$?" except that the first character of
               the result is always a sign ('+' or '-').

     Page 20                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               The C and S conversion characters are not tested in
               XPG3 mode.

          103  When message contains %k$-n?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, u, lo, f, e, g, c, C, s,
               S), then in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%k$n?" except that it is left justified.

               The C and S conversion characters are not tested in
               XPG3 mode.

          104  When message contains %k$+-n?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, u, lo, f, e, g, c, C, s,
               S), then in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%k$+n?" except that it is left
               justified.

               The C and S conversion characters are not tested in
               XPG3 mode.

          105  When message contains %k$ -n?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, u, lo, f, e, g, c, C, s,
               S), then in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%k$ n?" except that it is left
               justified.

               The C and S conversion characters are not tested in
               XPG3 mode.

          106  When message contains %k$+ ?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, u, lo, f, e, g, c, C, s,
               S), then in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%k$+?".

               The C and S conversion characters are not tested in
               XPG3 mode.

          107  When message contains %k$- +?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, u, lo, f, e, g, c, C, s,
               S), then in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%k$-+?".

     Page 21                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               The C and S conversion characters are not tested in
               XPG3 mode.

          108  When message contains %k$+n.*m$?, where k and m are
               positive integers, arg is the kth argument, precision
               is the mth argument, ? = a type conversion character
               (d, hi, lo, f, e, g, s, S) and n = an integer, then in
               the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [s | S | lo], the "+" flag has no effect on
               the conversion of arg and the result is equivalent to
               "%n.*m$?";
               b. when ? = [d | hi | f | e | g], the result is
               equivalent to "%n.*m$?" except that the first character
               of the result is always a sign ('+' or '-').

               The S conversion character is not tested in XPG3 mode.

          109  When message contains %k$-n.m?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, lo, f, e, g, s, S), then
               in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%k$n.m?" except that the result is left
               justified.

               The S conversion character is not tested in XPG3 mode.

          110  When message contains %k$+-n.?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, lo, f, e, g, s, S), then
               in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%k$+n.?" except that it is left
               justified.

               The S conversion character is not tested in XPG3 mode.

          111  When message contains %k$#.?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, lo, f, e, g, s), then in
               the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | hi | lo], then the resultant
               conversion is equivalent to "%k$#?";
               b. when ? = [d | hi | lo], and arg = 0 then arg is
               converted to a null character string;
               c. when ? = [f | e | g], the result is equivalent to
               "%k$.?" except that the decimal point character is
               always printed out;
               d. when ? = s, the result is equivalent to "%k$.s";

     Page 22                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               The d, hi and s directives are tested in XPG3 mode
               only.

          112  When message contains %k$#*n$.?, where k and n are
               positive integers, arg is the kth argument, field width
               is the nth argument and ? = a type conversion character
               (d, hi, lo, f, e, g, s), then in the message generated
               by a call to syslog(priority, message, arg, ...), the
               result is equivalent to "%k$#.?" except that it will
               have a field width of at least the value specified by
               the argument corresponding to *n$ and in the case that
               the converted value has fewer characters then it will
               be padded on the left with spaces.

               The d, hi and s directives are tested in XPG3 mode
               only.

          113  When message contains %k$#.m?, where k = a positive
               integer, arg is the kth argument, m = an integer and ?
               = a type conversion character (d, hi, lo, f, e, g, s),
               then in the message generated by a call to
               syslog(priority, message, arg, ...):
               a. when ? = [d | hi | f | e | s], the result is
               equivalent to "%k$.m?";
               b. when ? = [lo], the result is equivalent to "%k$.m?"
               except that the result always has a zero as the first
               digit;
               c. when ? = [g], the result is equivalent to "%k$.m?"
               except that the decimal point and trailing zeros are
               not removed;

               The d, hi and s directives are tested in XPG3 mode
               only.

          114  When message contains %k$# +*n$?, where k and n are
               positive integers, arg is the kth argument, field width
               is the nth argument and ? = a type conversion character
               (d, hi, lo, f, e, g, c, s), then in the message
               generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%k$#*n$?" except that the first
               character of a signed conversion result is always a
               sign ('+', '-').

               The d, hi, c and s directives are tested in XPG3 mode
               only.

          115  When message contains %k$# +-.*m$?, where k and m are
               positive integers, arg is the kth argument, precision
               is the mth argument and ? = a type conversion character
               (d, hi, lo, f, e, g, s), then in the message generated
               by a call to syslog(priority, message, arg, ...), the

     Page 23                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

               result is equivalent to "%k$#+.*m$?" except that it is
               left justified.

               The d, hi and s directives are tested in XPG3 mode
               only.

          116  When message contains %k$# +*n$.*m$?, where k, n and m
               are positive integers, arg is the kth argument, field
               width is the nth argument, precision is the mth
               argument and ? = a type conversion character (d, hi,
               lo, f, e, g, s), then in the message generated by a
               call to syslog(priority, message, arg, ...), the result
               is equivalent to "%k$#*n$.*m$?" except that, in the
               case that the first character of a signed conversion
               result is not a sign, a blank is prefixed to the
               result.

               The d, hi and s directives are tested in XPG3 mode
               only.

          117  When message contains %k$#- +n?, where k = a positive
               integer, arg is the kth argument and ? = a type
               conversion character (d, hi, lo, f, e, g, c, s), then
               in the message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%k$#n?" except that it is left justified
               and, in the case that the first character of a signed
               conversion result is not a sign, a blank is prefixed to
               the result.

               The d, hi, c and s directives are tested in XPG3 mode
               only.

          118  When message contains %k$#-*n$.m? , where k and n are
               positive integers, arg is the kth argument, field width
               is the nth argument, ? = a type conversion character
               (d, hi, lo, f, e, g, s) and m = an integer, then in the
               message generated by a call to
               syslog(priority, message, arg, ...), the result is
               equivalent to "%k$*n$.m?" except that it is left
               justified.

               The d, hi and s directives are tested in XPG3 mode
               only.

          119  If the long double type is supported:
                    When message contains %k$L?, where k is a positive
                    integer, arg is the kth argument and ? is one of
                    the type conversion characters f, e, g, E or G,
                    then in the message generated by a call to
                    syslog(priority, message, arg, ...), arg is taken
                    to be a long double and converted accordingly.

     Page 24                                      (printed 11/23/2000)

     syslog_L(LSB.os/genuRelease 1.1 (UniSoft Lsyslog_L(LSB.os/genuts)

     Untestable aspects
          1    When a call to syslog(priority, message, ...) creates a
               child process and there has been a previous call to
               openlog(ident, logopt, facility) in which LOG_NOWAIT
               was not set in logopt, then the call to syslog() waits
               for the child process to terminate before returning.
               Reason for omission:  The corresponding statement in
               the standard to which conformance is being measured is
               not specific enough to write a portable test.  There is
               nothing to indicate what might cause the implementation
               to create a child process when syslog() is called.

          2    When a call to syslog(priority, message, ...) creates a
               child process and there has been no previous call to
               openlog(), then the call to syslog() waits for the
               child process to terminate before returning.
               Reason for omission:  The corresponding statement in
               the standard to which conformance is being measured is
               not specific enough to write a portable test.  There is
               nothing to indicate what might cause the implementation
               to create a child process when syslog() is called.

          3    When the h or l modifier is used with a conversion
               character other than those specified to work with the
               modifier, then the behaviour is undefined.

          4    A call to syslog(priority, message, ...), can not
               contain both '%' and "%k$", in one message string.
               Reason for omission:  The corresponding statement in
               the standard to which conformance is being measured is
               not specific enough to write a portable test.  The XPG
               does not state what would happen if both were combined
               in one message string.

     Grey areas
          1    The specification does not say what severity value is
               used when priority does not contain a valid severity
               value.

          2    The definition of the precision states that this is the
               maximum number of bytes written for the S conversion.
               However, because a S conversion produces multibyte
               sequences, it is unclear how to treat this in the case
               that a multibyte character crosses the precision
               boundary. No assumptions are made, though it is
               expected that the result of the conversion would
               produce a space character as the last byte.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 25                                      (printed 11/23/2000)

     wordexp(XPG4.os/genRelease 4.4.1 (UniSoft wordexp(XPG4.os/genuts)

     NAME
          XPG4.os/genuts/wordexp - perform word expansions

     DESCRIPTION
          Tests the wordexp() and wordfree() system call interfaces
          for conformance to the XSI System Interfaces Page:wordexp()

     TESTS
     Compliance
          1    If wordexp() is supported:
                   When words is a pointer to a string containing one
                   or more words to be expanded, then a call to
                   wordexp() performs shell word expansions, stores
                   the number of words generated in the we_wordc
                   structure element addressed by pwordexp, stores a
                   pointer to a NULL terminated list of pointers to
                   these words in the we_wordv structure element and
                   returns a value of zero.
                   Testing Requirements:  The argument words should
                   include instances of quoted <newline> , shell
                   special characters, parentheses and braces.  The
                   argument words should also include the use of shell
                   special characters, parentheses and braces in the
                   context of command substitution and the use of
                   parentheses and braces in the context of variable
                   substitution.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          2    If wordexp() is supported:
                   When words contains an unquoted word of the form
                   $var or ${var}, then a call to wordexp() replaces
                   the text $var or ${var} with the contents of the
                   environment variable var, or with an empty string
                   if var is not defined in the environment.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          3    If wordexp() is supported:
                   When words contains an unquoted word ~  or ~/, then
                   a call to wordexp() replaces the text ~ with the
                   contents of the environment variable HOME.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          4    If wordexp() is supported:
                   When words contains an unquoted word ~user  or
                   ~user/, then a call to wordexp() replaces the text
                   ~user with the path of the user's home directory.

     Page 1                                       (printed 11/23/2000)

     wordexp(XPG4.os/genRelease 4.4.1 (UniSoft wordexp(XPG4.os/genuts)

               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          5    If wordexp() is supported:
                   When words contains text quoted in ', then a call
                   to wordexp() leaves the quoted text unchanged.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          6    If wordexp() is supported:
                   When words contains an unquoted word of the form
                   $(cmd), then a call to wordexp() replaces the text
                   $(cmd) with the results of executing the command
                   cmd.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          7    If wordexp() is supported:
                   When words contains an unquoted word of the form
                   `cmd`, then a call to wordexp() replaces the text
                   `cmd` with the results of executing the command
                   cmd.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          8    If wordexp() is supported:
                   When words contains a pair of matching quote
                   characters ", then a call to wordexp() removes the
                   quotes and performs parameter substitution where
                   $var or ${var} occurs and command substitution
                   where $(cmd) or `cmd` occurs, and leaves all other
                   characters unaltered.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          9    If wordexp() is supported:
                   When words contains a pair of matching quote
                   characters ', then a call to wordexp() removes the
                   quotes and leaves the text between the quotes
                   unchanged.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          10   If wordexp() is supported:
                   When the value of IFS is exactly ' ', '\t', and
                   '\n', then on a call to wordexp(), any sequence of

     Page 2                                       (printed 11/23/2000)

     wordexp(XPG4.os/genRelease 4.4.1 (UniSoft wordexp(XPG4.os/genuts)

                   IFS characters except newline serves to delimit a
                   field, and sequences of these characters at the
                   beginning or end of input are ignored.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          11   If wordexp() is supported:
                   When the value of IFS is ' ', '\t', '\n' and some
                   other characters, then on a call to wordexp(),
                   sequences of ' ', '\t' and '\n' characters delimit
                   fields and sequences of these characters at the
                   beginning or end of input are ignored, as normal,
                   but single occurrences of the other IFS characters,
                   together with any adjacent parameter expansion and
                   command substitution.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          12   If wordexp() is supported:
                   When words contains an unquoted # character, then a
                   call to wordexp() either treats the # as a normal
                   character or ignores the # character and any
                   characters following it.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          13   If wordexp() is supported:
                   When words contains the characters ?, * and [
                   inside a bracket expression, then a call to
                   wordexp() attaches no special meaning to those
                   characters.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          14   If wordexp() is supported:
                   The wordexp() function only matches a slash in a
                   pathname to an explicit slash character in words.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          15   If wordexp() is supported:
                   When words contains *, then a call to wordexp()
                   matches the * to any characters except slash,
                   leading dot and dot following slash.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

     Page 3                                       (printed 11/23/2000)

     wordexp(XPG4.os/genRelease 4.4.1 (UniSoft wordexp(XPG4.os/genuts)

          16   If wordexp() is supported:
                   When words contains ?, then a call to wordexp()
                   matches the ? to any single character except slash,
                   leading dot and dot following slash.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          17   If wordexp() is supported:
                   When words contains [s], then a call to wordexp()
                   matches the [s] to any one of the characters in the
                   set s except slash, leading dot and dot following
                   slash.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          18   Not in use.

          19   If wordexp() is supported:
                   When words contains [!s], then a call to wordexp()
                   matches the [!s] to any characters not in the set s
                   except slash, leading dot and dot following slash.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          20   If wordexp() is supported:
                   When words commences with a slash character, then a
                   call to wordexp() commences searching for matching
                   filenames at the calling process' root directory.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          21   If wordexp() is supported:
                   When words does not commence with a slash
                   character, then a call to wordexp() commences
                   searching for matching filenames at the calling
                   process' current working directory, interpreting an
                   explicit pathname element of dot-dot (..) as the
                   parent directory of the previous pathname element.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          22   If wordexp() is supported:
                   A call to wordexp() allocates the memory pointed to
                   by the we_wordv structure member addressed by the
                   pwordexp argument.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets

     Page 4                                       (printed 11/23/2000)

     wordexp(XPG4.os/genRelease 4.4.1 (UniSoft wordexp(XPG4.os/genuts)

                   errno to ENOSYS.

          23   If wordexp() is supported:
                   When the WRDE_APPEND flag is set in flags, then the
                   word list generated from this call to wordexp() is
                   stored in the we_wordv element of the structure
                   addressed by pwordexp after the current set of
                   stored words, which remain unchanged, and the
                   we_wordc element of the structure is updated to
                   provide the total number of words from the two
                   calls.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          24   If wordexp() is supported:
                   When the WRDE_DOOFFS flag is set in flags, then a
                   call to wordexp() commences the array of pointers
                   in the we_wordv element of the structure addressed
                   by pwordexp with the number of NULL pointers
                   specified in the we_offs element of the structure
                   and follows this with we_wordc pointers to words,
                   followed by the terminating NULL pointer.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          25   If wordexp() is supported:
                   When the WRDE_REUSE flag is set in flags and the
                   pwordexp argument refers to a structure whose
                   address was supplied to a previous call to
                   wordexp(), then a call to wordexp() frees any space
                   associated with pwordexp before assigning the new
                   series of word pointers to pwordexp.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          26   If wordexp() is supported:
                   When the WRDE_SHOWERR flag is not set in flags and
                   the expansion of words involves a command
                   substitution that writes output to standard error,
                   then a call to wordexp() redirects the standard
                   error to during execution of the command.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          27   If wordexp() is supported:
                   When the WRDE_SHOWERR flag is set in flags and the
                   expansion of words involves a command substitution
                   that writes output to standard error, then a call

     Page 5                                       (printed 11/23/2000)

     wordexp(XPG4.os/genRelease 4.4.1 (UniSoft wordexp(XPG4.os/genuts)

                   to wordexp() writes these messages to the standard
                   error stream.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

     Deviance
          28   If wordexp() is supported:
                   When words contains one or more instances of
                   unquoted shell special characters or unquoted
                   parentheses or braces, then a call to wordexp()
                   returns the value of the macro WRDE_BADCHAR and the
                   contents of the structure pointed to by pwordexp
                   remain unchanged.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          29   If wordexp() is supported:
                   When the WRDE_UNDEF flag is set in flags and words
                   contains a reference to an undefined shell
                   variable, then a call to wordexp() returns the
                   value of the macro WRDE_BADVAL and the contents of
                   the structure pointed to by pwordexp remain
                   unchanged.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          30   If wordexp() is supported:
                   When words contains a string that requires command
                   substitution and the WRDE_NOCMD flag is set in
                   flags, then a call to wordexp() returns the value
                   of the macro WRDE_CMDSUB and the contents of the
                   structure pointed to by pwordexp remain unchanged.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

          31   If wordexp() is supported:
                   When an shell syntax error occurs during the
                   expansion of words then a call to wordexp() returns
                   the value of the macro WRDE_SYNTAX and the contents
                   of the structure pointed to by pwordexp remain
                   unchanged.
               Otherwise:
                   A call to wordexp() returns WRDE_NOSYS and sets
                   errno to ENOSYS.

     Untestable Aspects
          1    When a call to wordexp() fails in an attempt to
               allocate memory, then the error return value

     Page 6                                       (printed 11/23/2000)

     wordexp(XPG4.os/genRelease 4.4.1 (UniSoft wordexp(XPG4.os/genuts)

               WRDE_NOSPACE is returned and the we_wordc and we_wordv
               elements of the structure pointed to by pwordexp
               contain details of the words that have been
               successfully expanded.

          2    When the pwordexp argument refers to a structure whose
               address was supplied to a previous call to wordexp(),
               then a call to wordfree() frees any space associated
               with the structure addressed by wordexp.

     OUTPUTS
     Tests:
          1-27 Pass/Fail indication - failure information includes
               expected and detected return values.

          28-31
               Pass/Fail indication - failure information includes
               expected and detected return values and contents of
               pwordexp[].

     RELEASE
          4.4.1 (06/09/97)

     Page 7                                       (printed 11/23/2000)

     readv(GABI.os/iopRelease 1.3 (UniSoft Group readv(GABI.os/ioprim)

     NAME
          GABI.os/ioprim/readv - read from a file.

     DESCRIPTION
          Readv tests the readv() subroutine call interface for
          conformance to the SVID3 definition.  Page:read(BA_OS)

     TESTS
     Compliance
          1    A call to readv(fildes,iovec,iovcnt) reads the file
               fildes and distributes the input data into the buffers
               specified by the iov array, filling each buffer
               completely before moving to the next.  The number of
               bytes placed in buffers is returned.

          2    When no bytes are requested, then a call to
               readv(fildes,iovec,iovcnt) does not move the file
               pointer and returns 0.

          3    When fildes refers to a regular file, then a call to
               readv(fildes,iovec,iovcnt) retrieves data from the
               current file offset.

          4    A call to readv(fildes,iovec,iovcnt) increments the
               file offset by the number of bytes read.

          5    When fildes refers to a file which does not support
               seeking, then a call to readv(fildes,iovec,iovcnt)
               starts at the current position in the file.

          6    When fildes refers to a regular file and the number of
               bytes remaining in the file is less than requested,
               then a call to readv(fildes,iovec,iovcnt) returns the
               number of bytes remaining in the file and distributes
               the data corresponding to these bytes in the array of
               buffers referenced by iovec.

          7    When a call to readv(fildes,iovec,iovcnt) for file
               types other than pipe or FIFO is interrupted by a
               signal, then either number of bytes successfully read
               so far is returned, or -1 is returned and errno is set
               to EINTR.

          8    When the file offset is at or beyond the end of file,
               then a call to readv(fildes,iovec,iovcnt) returns a
               value of zero.

          9    When fildes refers to an empty pipe or FIFO that is not
               open for writing by any process, then a call to
               readv(fildes,iovec,iovcnt) returns zero.

          10   When reading an empty pipe or FIFO whose O_NONBLOCK and

     Page 1                                       (printed 11/23/2000)

     readv(GABI.os/iopRelease 1.3 (UniSoft Group readv(GABI.os/ioprim)

               O_NDELAY flags are clear, then a call to
               readv(fildes,iovec,iovcnt) blocks until data is written
               to the file or until the file is no longer open for
               writing.

          11   A call to readv(fildes,iovec,iovcnt) on any portion of
               a file capable of seeking prior to the end-of-file
               which has not been written, returns the bytes in this
               portion of the file with a value zero.

          12   A call to readv(fildes,iovec,iovcnt) marks the access
               time field st_atime for update.

          13   When fildes refers to a pipe or FIFO with at least one
               byte available, then a call to
               readv(fildes,iovec,iovcnt) requesting more bytes than
               are available returns the number of bytes available.

          14   When the file is a pipe or FIFO, and the O_NDELAY flag
               is set for the file descriptor, and the read operation
               would be delayed, then a call to
               readv(fildes,iovec,iovcnt) returns 0.

          15   When enforcement mode record locking is enabled, the
               O_NDELAY and O_NONBLOCK flags are clear and there is a
               write lock owned by another process, then a call to
               readv(fildes,iovec,iovcnt) blocks the calling process
               until all blocking write locks are removed.

          16   When enforcement mode record locking is enabled, the
               O_NDELAY or O_NONBLOCK flags are set and there is a
               write lock owned by another process, then a call to
               readv(fildes,iovec,iovcnt) returns -1 and sets errno to
               EAGAIN.

          17   When fd refers to a STREAM file in byte stream mode
               with at least the requested amount of data available,
               then a call to readv(fildes,iovec,iovcnt) retrieves as
               many bytes as were requested if they are available.

          18   When fd refers to a STREAM file in byte stream mode
               with less than requested amount of data available, then
               a call to readv(fildes,iovec,iovcnt) retrieves as many
               bytes as are available.

          19   When fd refers to a STREAM file in byte stream mode and
               a zero-byte message is encountered after some data has
               already been retrieved, then a call to
               readv(fildes,iovec,iovcnt) returns the data already
               retrieved and places the zero-byte message back on the
               stream.

     Page 2                                       (printed 11/23/2000)

     readv(GABI.os/iopRelease 1.3 (UniSoft Group readv(GABI.os/ioprim)

          20   When fd refers to a STREAM file in byte stream mode and
               a zero-byte message is encountered and no data has yet
               been retrieved, then a call to
               readv(fildes,iovec,iovcnt) removes the zero-byte
               message from the stream and returns 0.

          21   When fd refers to a STREAM file in message-nondiscard
               mode and the number of bytes remaining in the current
               message is greater than the number requested, then a
               call to readv(fildes,iovec,iovcnt) retrieves the number
               requested and leaves the remaining data in the message
               on the stream.

          22   When fd refers to a STREAM file in message-nondiscard
               mode and the number of bytes requested causes a message
               boundary to be reached, then a call to
               readv(fildes,iovec,iovcnt) retrieves as many bytes as
               are remaining in the message.

          23   When fd refers to a STREAM file in message-nondiscard
               mode and a zero-byte message is encoutered, then a call
               to readv(fildes,iovec,iovcnt) returns 0 and removes the
               zero-byte message from the stream.

          24   When fd refers to a STREAM file in message-discard mode
               and the number of bytes remaining in the current
               message is greater than the number requested, then a
               call to readv(fildes,iovec,iovcnt) retrieves the number
               requested and discards the remaining data in the
               message.

          25   When fd refers to a STREAM file in message-nondiscard
               mode and the number of bytes requested causes a message
               boundary to be reached, then a call to
               readv(fildes,iovec,iovcnt) retrieves as many bytes as
               are remaining in the message.

          26   When fd refers to a STREAM file in message-discard mode
               and a zero-byte message is encoutered, then a call to
               readv(fildes,iovec,iovcnt) returns 0 and removes the
               zero-byte message from on the stream.

          27   When fd refers to a STREAM file, then a call to
               readv(fildes,iovec,iovcnt) returns data from the
               message at the front of the stream head read queue
               regardless of the priority band of the message.

          28   When fd refers to a STREAM file in control-data mode,
               then a call to readv(fildes,iovec,iovcnt) converts
               control message to data messages.

          29   When fd refers to a STREAM file in control-discard

     Page 3                                       (printed 11/23/2000)

     readv(GABI.os/iopRelease 1.3 (UniSoft Group readv(GABI.os/ioprim)

               mode, then a call to readv(fildes,iovec,iovcnt)
               discards control messages.

     Deviance
          30   EAGAIN in errno and -1 return on a call to
               readv(fildes,iovec,iovcnt) when the file is a pipe or
               FIFO, and the O_NONBLOCK flag is set for the file
               descriptor, and the read operation would be delayed.

          31   EBADF in errno and -1 returned by a call to
               readv(fildes,iovec,iovcnt) when fildes is not a valid
               file descriptor open for reading.

          32   EINTR in errno and -1 returned by a call to
               readv(fildes,iovec,iovcnt) when a signal was caught
               before any data had been transferred.

          33   EIO in errno and -1 returned by a call to
               readv(fildes,iovec,iovcnt) when the process is in a
               background process group, and the process is ignoring
               or blocking the SIGTTIN signal, and the process is
               attempting to read from its controlling terminal.

          34   EIO in errno and -1 returned by
               readv(fildes,iovec,iovcnt) when the process is in a
               background process group, and the process group of the
               process orphaned, and the process is attempting to read
               from its controlling terminal.

          35   EINVAL in errno and -1 returned by a call to
               readv(fildes,iovec,iovcnt) when the sum of the iov_len
               values overflows an integer.

          36   EINVAL in errno and -1 returned by a call to
               readv(fildes,iovec,iovcnt) when one of the iov_len
               values is negative.

          37   EINVAL in errno and -1 returned by a call to
               readv(fildes,iovec,iovcnt) when iovcnt is less than 0.

          38   When a hangup occurs on the stream being read, a call
               to readv(fildes,iovec,iovcnt) operates normally until
               the stream head read queue is empty and returns 0
               thereafter.

          39   EBADMSG in errno and -1 returned by a call to
               readv(fildes,iovec,iovcnt) when the message waiting to
               be read is not a data message.

          40   EDEADLK in errno and -1 returned by a call to
               readv(fildes,iovec,iovcnt) when enforced record locking
               is enabled, the O_NDELAY and O_NONBLOCK flags are clear

     Page 4                                       (printed 11/23/2000)

     readv(GABI.os/iopRelease 1.3 (UniSoft Group readv(GABI.os/ioprim)

               and a deadlock condition is detected.

          41   ENOLCK in errno and -1 returned by a call to
               readv(fildes,iovec,iovcnt) when enforcement mode record
               locking is enabled and LOCK_MAX regions are already
               locked in the system.

     Untestable Aspects
          1    When fildes refers to a file associated with a stream
               that is not a pipe, FIFO, or terminal for which no data
               is currently available and the O_NDELAY and O_NONBLOCK
               flags are clear, then a call to
               readv(fildes,iovec,iovcnt) blocks the calling process
               until data is available.
               Reason:  The ability to create a stream other than for
               one of the types specified may be system dependent.
               This may be resolvable by use of a config parameter,
               but it is unclear whether this will be portable across
               all systems.

          2    When fildes refers to a file associated with a stream
               that is not a pipe, FIFO, or terminal for which no data
               is currently available and the O_NDELAY and O_NONBLOCK
               flags are set, then a call to
               readv(fildes,iovec,iovcnt) returns -1 and sets errno to
               EAGAIN.
               Reason:  The ability to create a stream other than for
               one of the types specified may be system dependent.
               This may be resolvable by use of a config parameter,
               but it is unclear whether this will be portable across
               all systems.

          3    When a stream error message is received at the stream
               head, a call to readv(fildes,iovec,iovcnt) returns -1
               and sets errno to the value returned in the error
               message.
               Reason:  How can a streams error message be placed at
               the head of the queue? It does not seem that this can
               be accomplished in a portable manner.

          4    EINVAL in errno and -1 returned by a call to
               readv(fildes,iovec,iovcnt) when an attempt is made to
               read from a stream linked to a multiplexor.
               Reason:  This test requires the presence of a
               multiplexing streams module. There is no guarantee that
               this will exist on all systems.

          5    EINVAL in errno and -1 returned by a call to
               readv(fildes,iovec,iovcnt) when iovcnt is greater than
               IOV_MAX.
               Reason:  The value of IOV_MAX is hardcoded into the
               kernel and cannot be optained without kernel source.

     Page 5                                       (printed 11/23/2000)

     readv(GABI.os/iopRelease 1.3 (UniSoft Group readv(GABI.os/ioprim)

          6    ENXIO in errno and -1 returned by a call to
               readv(fildes,iovec,iovcnt) when the device associated
               with fildes is a block or character special file and
               the value of the file pointer is out of range.
               Reason:  It is not clear how to set up a situation
               where the value of the file pointer is out of range.

     OUTPUTS
     Tests:
          1

     PROBLEMS
          There are several assertions for this interface which
          reference the O_NDELAY flag. These assertions are the same
          as ones for O_NONBLOCK in VSX3. It is unclear whether there
          is any great value in testing the level 2 aspect. Several of
          the psABIs omit the definition of O_NDELAY, this suggests
          that it is unnecessary to test this outside the psABI test
          suite.

          It is unclear from the SVID3 what happens when there is both
          a control part and a data part to the message. Are these
          considered as two separate messages with the control part
          having precedence, or how are they dealt with?  This needs a
          much tighter definition than currently provided.

     RELEASE
          1.11 (8/1/92)

     Page 6                                       (printed 11/23/2000)

     writev(GABI.os/ioRelease 1.3 (UniSoft Groupwritev(GABI.os/ioprim)

     NAME
          GABI.os/ioprim/writev - write to a file.

     DESCRIPTION
          Writev tests the writev() subroutine call interface for
          conformance to the SVID3 definition.  Page:write(BA_OS)

     TESTS
     Compliance
          1    A call to writev(fildes,iov,iovcnt) shall attempt to
               write data gathered from the array pointed to iov to
               the file associated with the file descriptor fildes and
               return the number of bytes written.

          2    When the number of bytes specified is equal to zero,
               then a call to writev(fildes,iov,iovcnt) returns 0 and
               does not move the file pointer.

          3    When the file type associated with fildes is capable of
               seeking, then a call to writev(fildes,iov,iovcnt)
               starts writing from the current file offset associated
               with the file fildes.

          4    A call to writev(fildes,iov,iovcnt) increments the file
               pointer associated with fildes by the number of bytes
               actually written.

          5    When, after a call to writev(fildes,iov,iovcnt), the
               file offset is greater than the length of the file,
               then the length of the file is updated to the value of
               the file offset.

          6    When fildes refers to a file which does not support
               seeking, then a call to writev(fildes,iov,iovcnt)
               starts writing from the current file position.

          7    When the file status flag O_APPEND is set, then a call
               to writev(fildes,iov,iovcnt) sets the file pointer to
               the end of the file prior to writing.

          8    When fildes refers to a pipe or FIFO, then a call to
               writev(fildes,iov,iovcnt) always appends data to the
               end of the pipe or FIFO.

          9    When fildes refers to a pipe or FIFO and O_NONBLOCK and
               O_NDELAY are clear, then a call to
               writev(fildes,iov,iovcnt) blocks the calling process
               until space is available to complete the write
               operation.

          10   When writing PIPE_BUF or less bytes to a pipe or FIFO
               for which O_NONBLOCK is set, then a call to

     Page 1                                       (printed 11/23/2000)

     writev(GABI.os/ioRelease 1.3 (UniSoft Groupwritev(GABI.os/ioprim)

               writev(fildes,iov,iovcnt) all the bytes requested and
               return the number of bytes written.

          11   When writing more than PIPE_BUF bytes to a pipe or FIFO
               for which O_NONBLOCK is set, then a call to
               writev(fildes,iov,iovcnt) either writes as many bytes
               as will currently fit on the pipe and returns the
               number of bytes written (possibly 0) or writes no data
               and returns -1 and sets errno to EAGAIN.

          12   When writing more than PIPE_BUF bytes to a pipe or FIFO
               for which O_NONBLOCK or O_NDELAY is set and there is no
               data in the pipe or FIFO, then a call to
               writev(fildes,iov,iovcnt) writes at least PIPE_BUF
               bytes.

          13   A call to writev(fildes,iov,iovcnt) marks the time
               fields st_ctime and st_mtime for update.

          14   When writing PIPE_BUF or fewer bytes to a pipe or FIFO
               for which O_NDELAY is set and for which space is not
               available, then a call to writev(fildes,ioc,iovcnt)
               returns 0.

          15   When writing more than PIPE_BUF bytes to a pipe or FIFO
               for which O_NDELAY is set, then a call to
               writev(fildes,ioc,iovcnt) either writes as many bytes
               as will currently fit on the pipe and returns number of
               bytes written or writes no data and returns 0.

          16   When writing to a regular file with enforced record
               locking enabled, all or part of the file has a read or
               write lock owned by another process, and O_NDELAY or
               O_NONBLOCK is set, then a call to
               writev(fildes,ioc,iovcnt) returns -1 and sets errno to
               EAGAIN.

          17   When writing to a regular file with enforced record
               locking enabled, all or part of the file has a read or
               write lock owned by another process, and O_NDELAY or
               O_NONBLOCK is clear, then a call to
               writev(fildes,ioc,iovcnt) blocks the calling process
               until all blocking locks are removed.

          18   When nbyte falls within the minimum and maximum packet
               size range for the stream, then a call to
               writev(fildes,ioc,iovcnt) writes a single packet of
               size nbytes to the stream.

          19   A call to writev(fildes,ioc,iovcnt) to a stream shall
               create messages with a priority band of zero.

     Page 2                                       (printed 11/23/2000)

     writev(GABI.os/ioRelease 1.3 (UniSoft Groupwritev(GABI.os/ioprim)

     Deviance
          20   EBADF in errno and  return -1 on a call to
               writev(fildes,iov,iovcnt) when fildes is not a valid
               file descriptor.

          21   EBADF in errno and  return -1 on a call to
               writev(fildes,iov,iovcnt) when fildes is not open for
               writing.

          22   EINTR in errno and  return -1 when a call to
               writev(fildes,iov,iovcnt) is interrupted by a signal
               and no data has been transferred.

          23   EIO in errno and  return -1 on a call to
               writev(fildes,iov,iovcnt) when the process is in a
               background process group, and the process is neither
               blocking nor ignoring the SIGTTOU signal, and the
               process group of the process is orphaned, and the
               process is attempting to write to the controlling
               terminal.

          24   EPIPE in errno, return -1 and the signal SIGPIPE sent
               to the calling process on a call to
               writev(fildes,iov,iovcnt) when an attempt was made to
               write to a pipe that has not been opened for reading by
               any process.

          25   EFBIG in errno and  return -1 on a call to
               writev(fildes,iov,iovcnt) when an attempt is made to
               write a file that has reached the system's maximum file
               size limit.

          26   ENOLCK in errno and return -1 on a call to
               writev(fildes,iov,iovcnt) when enforcement mode record
               locking is enabled and no locks are available.

          27   EDEADLK in errno and return -1 on a call to
               writev(fildes,iov,iovcnt) is enforced record locking is
               enabled and a deadlock condition was detected.

          28   EINVAL in errno and return -1 on a call to
               writev(fildes,ioc,iovcnt) when iovcnt is negative.

          29   EINVAL in errno and return -1 on a call to
               writev(fildes,ioc,iovcnt) when one of the length values
               in the array is negative.

          30   EINVAL in errno and return -1 on a call to
               writev(fildes,ioc,iovcnt) when the sum of the length
               values in the array overflows an integer.

     Untestable Aspects

     Page 3                                       (printed 11/23/2000)

     writev(GABI.os/ioRelease 1.3 (UniSoft Groupwritev(GABI.os/ioprim)

          1    When fildes refers to a stream that is not a pipe of
               FIFO, O_NDELAY and O_NONBLOCK are clear and the stream
               cannot accept any data, then a call to
               writev(fildes,ioc,iovcnt) blocks the calling process
               until the data can be accepted.
               Reason:  It is unclear which stream, other than a pipe
               or FIFO, can be used to verify this assertion in a
               portable manner.

          2    When fildes refers to a stream that is not a pipe of
               FIFO, O_NDELAY and O_NONBLOCK are set and the stream
               cannot accept any data, then a call to
               writev(fildes,ioc,iovcnt) returns -1 and sets errno to
               EAGAIN.
               Reason:  It is unclear which stream, other than a pipe
               or FIFO, can be used to verify this assertion in a
               portable manner.

          3    When fildes refers to a stream that is not a pipe of
               FIFO, O_NDELAY and O_NONBLOCK are clear and the stream
               cannot accept any more data than that which has already
               been written, then a call to writev(fildes,ioc,iovcnt)
               terminates and returns the number of bytes written.
               Reason:  It is unclear which stream, other than a pipe
               or FIFO, can be used to verify this assertion in a
               portable manner.

          4    When a write operation is carried out on a pipe or FIFO
               then data is not interleaved with data from other
               processes.
               Reason: No way demonstrate that this will not occur.

          5    When nbyte does not fall within the minimum and maximum
               packet size range for the stream, and the minimum
               packet size is zero, then a call to
               writev(fildes,ioc,iovcnt) breaks the buffer into
               maximum packet size segments (the last segment may
               contain fewer bytes).
               Reason: The packet size range cannot be obtained
               without pushing a module onto the stream.

          6    ERANGE in errno and return -1 on a call to
               writev(fildes,iov,iovcnt) to a stream when the
               requested number of bytes is outside the packet size
               range for the stream and the minimum packet size is not
               zero.
               Reason: The packet size range cannot be obtained
               without pushing a module onto the stream.

          7    EINVAL in errno and return -1 on a call to
               writev(fildes,ioc,iovcnt) when iovcnt is greater than
               the maximum value allowed by the system.

     Page 4                                       (printed 11/23/2000)

     writev(GABI.os/ioRelease 1.3 (UniSoft Groupwritev(GABI.os/ioprim)

               Reason:  The maximum value of iovcnt cannot be
               determined without kernel sources.

          8    Effect of the T_SYNC flag.
               Reason: No portable way to distinguish synchronous and
               asynchronous writes.

     OUTPUTS
     Tests:
          1

     RELEASE
          1.9 (8/1/92)

     Page 5                                       (printed 11/23/2000)

     ftok(GABI.os/ipc)Release 2.2 (UniSoft Group Ltd.ftok(GABI.os/ipc)

     NAME
          GABI.os/ipc/ftok -  standard interprocess communication
          package

     DESCRIPTION
          Assertions for testing the ftok() subroutine call interface
          for conformance to SVID 3.  Each test must also verify the
          same functionality for the synonym _ftok().

     ASSERTIONS
     Conformance
          ALL TESTS IN THIS TEST SET APPLY TO SVR4.2 ONLY.

          1    A call to ftok(path, id) shall return a key usable in
               msgget(), semget(), and shmget() calls to obtain
               interprocess identifiers.

          2    When path1 is the pathname of an existing file, and
               path2 is the pathname of a link to path1, a call to
               ftok(path1, id) shall return the same key as a call to
               ftok(path2, id).

          3    When path is the pathname of an existing file, and id1
               and id2 are different, a call to ftok(path, id1) shall
               return a key different to that returned from a call to
               ftok(path, id2).

          4    When path1 is the pathname of an existing file, and
               path2 is the pathname of a different existing file, a
               call to ftok(path1, id) shall return a key different to
               that returned from a call to ftok(path2, id).

     Page 1                                       (printed 11/23/2000)

     ftok_L(LSB.os/ipc) Release 1.1 (UniSoft Ltd.)  ftok_L(LSB.os/ipc)

     NAME
          LSB.os/ipc/ftok_L - generate an IPC key test case

     DESCRIPTION
          This test case tests the ftok() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:ftok()

     TESTS
          1    On a call to ftok(path, id), the pathname path is
               resolved in accordance with the requirements for
               pathname resolution.

          2    On a call to ftok(path, id), the filename path supports
               portable filenames.

          3    When path1 names a file and path2 names a symbolic link
               that points to path1, then a successful call to
               ftok(path1, id) returns the same key as the one
               returned by a successful call to ftok(path2, id).

          4    When the values of id1 and id2 are not equal, and the
               values of the bottom 8 bits of id1 and id2 are equal
               and non-zero, then a successful call to ftok(path, id1)
               returns the same key as the one returned by a
               successful call to ftok(path, id2).

          5    When search permission is denied for a component of
               path, then a call to ftok(path, id) returns -1 with
               errno set to EACCES.

          6    When too many symbolic links are encountered in
               resolving path, then a call to ftok(path, id) returns
               -1 with errno set to ELOOP.

          7    If _POSIX_PATH_MAX <= {PATH_MAX} <= PCTS_PATH_MAX:
                    When the length of the path argument exceeds
                    {PATH_MAX}, then a call to ftok(path, id) returns
                    -1 with errno set to ENAMETOOLONG.
               Otherwise:
                    When the length of the path argument equals
                    PCTS_PATH_MAX, then a call to ftok(path, id) does
                    not give an ENAMETOOLONG error.

          8    When a component of path does not name an existing
               file, then a call to ftok(path, id) returns -1 with
               errno set to ENOENT.

          9    When path is an empty string, then a call to
               ftok(path, id) returns -1 with errno set to ENOENT.

          10   When a component of the path prefix is not a directory,

     Page 1                                       (printed 11/23/2000)

     ftok_L(LSB.os/ipc) Release 1.1 (UniSoft Ltd.)  ftok_L(LSB.os/ipc)

               then a call to ftok(path, id) returns -1 with errno set
               to ENOTDIR.

     Untestable aspects
          1    When path is a symbolic link and the resolution of path
               produces an intermediate result whose length exceeds
               {PATH_MAX}, then a call to ftok(path, id) returns -1
               and errno is set to ENAMETOOLONG.
               Reason for omission:  There is no known portable test
               method for this assertion.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 2                                       (printed 11/23/2000)

     msgctl(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.msgctl(XPG4.os/ipc)

     NAME
          XPG4.os/ipc/msgctl - control a message queue.

     DESCRIPTION
          Msgctl tests the msgctl() subroutine call interface for
          conformance to the XSI System Interfaces Page:msgctl()

     TESTS
     Compliance
          1    When the effective user ID matches the user ID of the
               message queue and the read permission is allowed for
               the owner of the queue, then a successful call to
               msgctl(msqid, IPC_STAT, buf) obtains the status of the
               message queue and returns 0.

          2    When the effective user ID matches the user ID of the
               creator of the message queue and the read permission is
               allowed for the owner of the queue, then a successful
               call to msgctl(msqid, IPC_STAT, buf) obtains the status
               of the message queue and returns 0.

          3    When the effective user ID does not match either the
               owner or the creator of the message queue and the
               effective group ID or one of the supplementary group
               IDs matches the group ID of the owner of the message
               queue and read permission is allowed for the group,
               then a call to msgctl(msqid, IPC_STAT, buf) obtains the
               status of the message queue and returns 0.

          4    When the effective user ID does not match either the
               owner or the creator of the message queue and the
               effective group ID or one of the supplementary group
               IDs matches the group ID of the creator of the message
               queue and read permission is allowed for the group,
               then a call to msgctl(msqid, IPC_STAT, buf) obtains the
               status of the message queue and returns 0.

          5    When the effective user ID does not match either the
               owner or the creator of the message queue and neither
               the effective group ID nor any of the supplementary
               group IDs match the group ID of the owner or creator of
               the message queue and read permission is allowed for
               others, then a call to msgctl(msqid, IPC_STAT, buf)
               obtains the status of the message queue.

          6    When the process has the appropriate privileges, then a
               call to msgctl(msqid, IPC_STAT, buf) obtains the status
               of the message queue.

          7    When the effective user ID matches the user ID of the
               message queue, then a call to msgctl(msqid, IPC_SET,
               buf) sets the user ID, group ID, mode and maximum

     Page 1                                       (printed 11/23/2000)

     msgctl(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.msgctl(XPG4.os/ipc)

               number of bytes allowed in the queue (where the request
               is to not increase this value).

          8    When the effective user ID matches the user ID of the
               creator of the message queue, then a call to
               msgctl(msqid, IPC_SET, buf) sets the user ID, group ID,
               mode and maximum number of bytes allowed in the queue
               (where the request is to not increase this value).

          9    When the process has appropriate privileges, then a
               call to msgctl(msqid, IPC_SET, buf) sets the user ID,
               group ID, mode and the maximum number of bytes allowed
               in the queue.

          10   When the effective user ID matches the user ID of the
               queue, then a call to msgctl(msqid, IPC_RMID, buf)
               removes the message queue.

          11   When the effective user ID matches the user ID of the
               creator of the queue, then a call to msgctl(msqid,
               IPC_RMID, buf) removes the message queue.

          12   When the the effective user ID has appropriate
               privileges, then a call to msgctl(msqid, IPC_RMID, buf)
               removes the message queue.

     Deviance
          13   EINVAL in errno and return -1 on a call to
               msgctl(msqid, IPC_STAT, buf) when the value of msqid is
               invalid

          14   EINVAL in errno and return -1 on a call to
               msgctl(msqid, IPC_STAT, buf) when the value of cmd is
               invalid

          15   EPERM in 'errno' and return -1 on a call to
               msgctl(msqid, IPC_SET, buf) when the effective user ID
               does not match the user ID of the creator, or the user
               ID of the owner of the message queue and the process
               does not have appropriate privileges.

          16   EPERM in 'errno' and return -1 on a call to
               msgctl(msqid, IPC_SET, buf) to increase the maximum
               number of bytes allowed on the queue when the process
               does not have appropriate privileges.

          17   EPERM in 'errno' and return -1 on a call to
               msgctl(msqid, IPC_RMID, buf) when the process does not
               have appropriate privileges and does not match the
               owner of the queue or the user ID of the creator of the
               queue.

     Page 2                                       (printed 11/23/2000)

     msgctl(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.msgctl(XPG4.os/ipc)

          18   EACCES in 'errno' and return -1 on a call to
               msgctl(msqid, IPC_STAT, buf) when the read permissions
               are not allowed for the user, group and others.

     RELEASE
          4.4.1 (06/09/97)

     Page 3                                       (printed 11/23/2000)

     msgget(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.msgget(XPG4.os/ipc)

     NAME
          XPG4.os/ipc/msgget - get message queue identifier.

     DESCRIPTION
          Msgget tests the msgget() subroutine call interface for
          conformance to the XSI System Interfaces Page:msgget()

     TESTS
     Compliance
          1    When key specifies an existing message queue, then a
               successful call to msgget(key,msgflg) returns the
               message queue identifier associated with key.

          2    When key is equal to IPC_PRIVATE, then a successful
               call to msgget(key,msgflg) creates a new message queue
               with
               a. msg_perm.cuid and msg_perm.uid set equal to the
               effective user ID of the calling process
               b. msg_perm.cgid and msg_perm.gid set equal to the
               effective group ID of the calling process
               c. the access permission bits in msg_perm.mode set
               equal to the access permissions specified in msgflg
               d. msg_qnum, msg_lspid, msg_lpid, msg_stime, and
               msg_rtime all set equal to 0
               e. msg_ctime set equal to the current time
               f. msg_qbytes set equal to the system limit.

          3    When key does not already have a message queue
               associated with it and msgflg & IPC_CREAT is true, then
               a successful call to msgget(key,msgflg) creates a new
               message queue with
               a. msg_perm.cuid and msg_perm.uid set equal to the
               effective user ID of the calling process
               b. msg_perm.cgid and msg_perm.gid set equal to the
               effective group ID of the calling process
               c. the access permission bits in msg_perm.mode set
               equal to the access permissions specified in msgflg
               d. msg_qnum, msg_lspid, msg_lpid, msg_stime, and
               msg_rtime set equal to 0
               e. msg_ctime set equal to the current time
               f. msg_qbytes set equal to the system limit.

          4    When key already has a message queue associated with it
               and msgflg has the IPC_CREAT flag set and the IPC_EXCL
               flag unset, then a successful call to
               msgget(key,msgflag) returns the message queue
               identifier associated with the existing message queue.

     Deviance
          5    EACCES in 'errno' and return -1 on a call to
               msgget(key,msgflg) when key specifies an existing
               message queue for which the caller does not have the

     Page 1                                       (printed 11/23/2000)

     msgget(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.msgget(XPG4.os/ipc)

               access permission as requested in msgflg.

          6    ENOENT in 'errno' and return -1 on a call to
               msgget(key,msgflg) when key specifies a non-existing
               message queue and IPC_CREAT is not set in msgflg.

          7    EEXIST in 'errno' and return -1 on a call to
               msgget(key,msgflg) when key specifies an existing
               message queue, with the IPC_CREAT bit set in msgflg and
               the the IPC_EXCL bit set in msgflg.

     Untestable Aspects
          1    ENOPSC in 'errno' and return -1 on a call to
               msgget(key,msgflg) when the number of message queues
               allowed by the system is exceeded.
               Reason: This system limit is not available from the
               system. It is unclear whether it can be provided as a
               parameter.

     PROBLEMS
          It is unclear what value will be assigned to msg_qbytes.  A
          possible partial test would be to create multiple queues and
          check that the value is the same each time.

     RELEASE
          4.4.1 (06/09/97)

     Page 2                                       (printed 11/23/2000)

     msgrcv(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.msgrcv(XPG4.os/ipc)

     NAME
          XPG4.os/ipc/msgrcv - receive message from message queue.

     DESCRIPTION
          Msgrcv tests the msgrcv() subroutine call interface for
          conformance to the XSI System Interfaces Page:msgrcv()

     TESTS
     Compliance
          1    When msgtp is equal to zero and messages are available
               for msqid then a successful call to msgrcv(msqid, msgp,
               msgsz, msgtp, msgflg) retrieves the first message from
               the queue, msqid, and returns the number of bytes
               placed in the mtext member of the message structure,
               msgp. The mtype member of the message structure is set
               to the type of the received message.

          2    When msgtp is greater than zero and messages of the
               same type are available for msqid then a successful
               call to msgrcv(msqid, msgp, msgsz, msgtp, msgflg)
               retrieves the first message of this type from the queue
               msqid, and returns the number of bytes placed in the
               mtext member of the message structure msgp. The mtype
               member of the message structure is set to the type of
               the received message.

          3    When msgtp is less than zero and messages with type
               less than or equal to the absolute value of msgtp are
               available for msqid, then a successful call to
               msgrcv(msqid, msgp, msgsz, msgtp, msgflg) retrieves the
               first such message of the lowest type from the queue
               and returns the number of bytes placed in the mtext
               member of the message structure msgp. The mtype member
               of the message structure is set to the type of the
               received message.

          4    When the IPC_NOWAIT bit is clear in msgflg and there
               are no messages of the requested type in the message
               queue msqid, then a call to msgrcv(msqid, msgp, msgsz,
               msgtp, msgflg) suspends execution of the calling
               process.

          5    When the calling process is suspended and a message of
               the desired type is placed on the queue, then a call to
               msgrcv(msqid, msgp, msgsz, msgtp, msgflg) retrieves the
               message and returns the number of bytes placed in the
               mtext field of the message structure.  When a message
               is retrieved from a call to msgrcv(msqid, msgp, msgsz,
               msgtp, msgflg) then it is read into the message buffer
               pointed to by msgp, msg_qnum is decremented by 1,
               msg_lrpid is set to the calling process's ID, and
               msg_rtime is set to the current time.

     Page 1                                       (printed 11/23/2000)

     msgrcv(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.msgrcv(XPG4.os/ipc)

          6    When a message with size larger than msgsz is retrieved
               from a call to msgrcv(msqid, msgp, msgsz, msgtp,
               msgflg) and the MSG_NOERROR flag is set in msgflg, then
               the retrieved message is truncated to msgsz.

     Deviance
          7    ENOMSG in errno and return -1 on a call to
               msgrcv(msqid, msgp, msgsz, msgtp, msgflg) when the
               IPC_NOWAIT bit is set in msgflg and there are no
               messages of the requested type in the message queue
               msqid.

          8    EIDRM in errno and return -1 on a call to msgrcv(msqid,
               msgp, msgsz, msgtp, msgflg) when the calling process is
               suspended and the message queue msqid is removed.

          9    EINTR in errno and return -1 on a call to msgrcv(msqid,
               msgp, msgsz, msgtp, msgflg) when the calling process is
               suspended and a signal is received.

          10   EINVAL in errno and return -1 on a call to
               msgrcv(msqid, msgp, msgsz, msgtp, msgflg) when msqid is
               not a valid message queue identifier.

          11   Not in use.

          12   EACCES in errno and return -1 on a call to
               msgrcv(msqid, msgp, msgsz, msgtp, msgflg) when an
               attempt is made to read a message and the calling
               process does not have read permission for the message
               queue.

          13   E2BIG in errno and return -1 on a call to msgrcv(msqid,
               msgp, msgsz, msgtp, msgflg) when the MSG_NOERROR bit is
               clear in msgflg and the message to be read is longer
               than the value specified in msgsz.

     RELEASE
          4.4.1 (06/09/97)

     Page 2                                       (printed 11/23/2000)

     msgsnd(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.msgsnd(XPG4.os/ipc)

     NAME
          XPG4.os/ipc/msgsnd - send message to message queue.

     DESCRIPTION
          Msgsnd tests the msgsnd() subroutine call interface for
          conformance to the XSI System Interfaces Page:msgsnd()

     TESTS
     Compliance
          1    When there is sufficient space in the queue and the
               system, then a successful call to
               msgsnd(msqid,msgp,msgsz,msgflg) sends the message
               pointed to by msgp of type mtype and size msgsz to the
               message queue specified by msqid, increments msg_qnum
               by 1, sets msg_lspid to the process ID of the calling
               process, sets msg_stime to the current time, and
               returns 0.

          2    When there is insufficient space in the queue or the
               system to send the message pointed to by msgp and the
               IPC_NO_WAIT flag is clear in msgflg, then a call to
               msgsnd(msqid,msgp,msgsz,msgflg) suspends the calling
               process.

          3    When the calling process is suspended during a call to
               msgsnd(msqid,msgp,msgsz,msgflg) and the condition
               responsible for the suspension no longer exists, then
               the message is sent, msg_qnum is incremented by 1,
               msg_lspid is set to the process ID of the calling
               process, msg_stime is set to the current time, and 0 is
               returned.

     Deviance
          4    EINTR in errno and return -1 on a call to
               msgsnd(msqid,msgp,msgsz,msgflg) when the calling
               process is interrupted by a signal.

          5    EIDRM in errno and return -1 on a call to
               msgsnd(msqid,msgp,msgsz,msgflg) when the message queue
               msqid is removed and the calling process is suspended.

          6    EAGAIN in errno and return -1 on a call to
               msgsnd(msqid,msgp,msgsz,msgflg) when there is
               insufficient space in the queue to send the message
               pointed to by msgp and the IPC_NO_WAIT flag is set in
               msgflg.

          7    EINVAL in errno and return -1 on a call to
               msgsnd(msqid,msgp,msgsz,msgflg) when the value of msqid
               is not a valid message queue identifier.

          8    EINVAL in errno and return -1 on a call to

     Page 1                                       (printed 11/23/2000)

     msgsnd(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.msgsnd(XPG4.os/ipc)

               msgsnd(msqid,msgp,msgsz,msgflg) when the value of the
               mtype field of the message is less than 1.

          9    EINVAL in errno and return -1 on a call to
               msgsnd(msqid,msgp,msgsz,msgflg) when the value of msgsz
               is less than 0.

          10   EACCES in errno and return -1 on a call to
               msgsnd(msqid, msgp, msgsz, msgflg) when an attempt is
               made to send a message and the calling process does not
               have write permission for the message queue.

     Untestable Aspects
          1    EAGAIN in errno and return -1 on a call to
               msgsnd(msqid,msgp,msgsz,msgflg) when there is
               insufficient space in the system to send the message
               pointed to by msgp and the IPC_NO_WAIT flag is set in
               msgflg.
               Reason: This requires knowledge of a system defined
               limit which cannot be obtained from the system. If this
               is static, it can be obtained from a parameter,
               otherwise this is untestable.

     RELEASE
          4.4.1 (06/09/97)

     Page 2                                       (printed 11/23/2000)

     semctl(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.semctl(XPG4.os/ipc)

     NAME
          XPG4.os/ipc/semctl - semaphore control operations.

     DESCRIPTION
          Semctl tests the semctl() subroutine call interface for
          conformance to the XSI System Interfaces Page:semctl()

     TESTS
     Compliance
          1    When the effective user ID matches the user ID of the
               semaphore set and read permission is allowed for the
               owner of the set, and read permission is required for
               the operation specified for cmd, then a call to
               semctl(semid, semnum, cmd, arg) does not indicate an
               EACCES error.

          2    When the effective user ID matches the user ID of the
               creator of the semaphore set and read permission is
               allowed for the owner of the set, and read permission
               is required for the operation specified for cmd, then a
               call to semctl(semid, semnum, cmd, arg) does not
               indicate an EACCES error.

          3    When the effective user ID does not match either the
               owner or the creator of the semaphore set and the
               effective group ID or one of the supplementary group
               IDs matches the group ID of the owner of the semaphore
               set and read permission is allowed for the group, and
               read permission is required for the operation specified
               for cmd, then a call to semctl(semid, semnum, cmd, arg)
               does not indicate an EACCES error.

          4    When the effective user ID does not match either the
               owner or the creator of the semaphore set and the
               effective group ID or one of the supplementary group
               IDs matches the group ID of the creator of the
               semaphore set and read permission is allowed for the
               group, and read permission is required for the
               operation specified for cmd, then a call to
               semctl(semid, semnum, cmd, arg) does not indicate an
               EACCES error.

          5    When the effective user ID does not match either the
               owner or the creator of the semaphore set and neither
               the effective group ID nor any of the supplementary
               group IDs match the group ID of the owner or creator of
               the semaphore set and read permission is allowed for
               others, and read permission is required for the
               operation specified for cmd then a call to
               semctl(semid, semnum, cmd, arg) does not indicate an
               EACCES error.

     Page 1                                       (printed 11/23/2000)

     semctl(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.semctl(XPG4.os/ipc)

          6    when the calling process has appropriate privileges,
               then a call to semctl(semid, semnum, cmd, arg) does not
               indicate an EACCES error.

          7    When the effective user ID matches the user ID of the
               semaphore set and alter permission is allowed for the
               owner of the set, and alter permission is required for
               the operation specified for cmd then a call to
               semctl(semid, semnum, cmd, arg) does not indicate an
               EACCES error.

          8    When the effective user ID matches the user ID of the
               creator of the semaphore set and alter permission is
               allowed for the owner of the set, and alter permission
               is required for the operation specified for cmd then a
               call to semctl(semid, semnum, cmd, arg) does not
               indicate an EACCES error.

          9    When the effective user ID does not match either the
               owner or the creator of the semaphore set and the
               effective group ID or one of the supplementary group
               IDs matches the group ID of the owner of the semaphore
               set and alter permission is allowed for the group, and
               alter permission is required for the operation
               specified for cmd then a call to semctl(semid, semnum,
               cmd, arg) does not indicate an EACCES error.

          10   When the effective user ID does not match either the
               owner or the creator of the semaphore set and the
               effective group ID or one of the supplementary group
               IDs matches the group ID of the creator of the
               semaphore set and alter permission is allowed for the
               group, and alter permission is required for the
               operation specified for cmd then a call to
               semctl(semid, semnum, cmd, arg) does not indicate an
               EACCES error.

          11   When the effective user ID does not match either the
               owner or the creator of the semaphore set and neither
               the effective group ID nor any of the supplementary
               group IDs match the group ID of the owner or creator of
               the semaphore set and alter permission is allowed for
               others, and alter permission is required for the
               operation specified for cmd then a call to
               semctl(semid, semnum, cmd, arg) does not indicate an
               EACCES error.

          12   When the process has alter permission, a call to
               semctl(semid,semnum,SETVAL,arg) sets the semval of the
               semaphore specified by semid and semnum to the value
               specified in arg and returns zero. The adjustment value
               semadj which adjusts the value of the semaphore when

     Page 2                                       (printed 11/23/2000)

     semctl(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.semctl(XPG4.os/ipc)

               the process exits shall be set to zero in all processes
               which are accessing the semaphore.

          13   When the process has read permission, a call to
               semctl(semid,semnum,GETVAL,arg) returns the value of
               semval of the semaphore specified by semid and semnum.

          14   When the process has alter permission, a call to
               semctl(semid,semnum,SETALL,arg) sets the value of each
               of the semaphores in the set specified by semid to the
               value specified in arg and returns zero. The adjustment
               value semadj which adjusts the value of a semaphore
               when the process exits shall be set to zero for each
               member of the set of semaphores in all processes which
               are accessing the semaphore set.

          15   When the process has read permission, a call to
               semctl(semid,semnum,GETALL,arg) provides the current
               semaphore values for each of the semaphores in the set
               referenced by semid in the array of unsigned shorts
               referenced by arg.

          16   When the process has read permission, a call to
               semctl(semid,semnum,GETPID,arg) returns the value of
               the process ID of the last process that performed a
               semaphore operation on the semaphore referenced by
               semid and semnum.

          17   When the process has read permission, a call to
               semctl(semid,semnum,GETNCNT,arg) returns the number of
               processes which are waiting for the value associated
               with the semaphore referenced by semid and semnum to
               increase from its current value.

          18   When the process has read permission, a call to
               semctl(semid,semnum,GETZCNT,arg) returns the number of
               processes which are waiting for the value associated
               with the semaphore referenced by semid and semnum to
               become zero.

          19   When the process has read permission, a call to
               semctl(semid,semnum,IPC_STAT,arg) places the contents
               of the data structure associated with semid into the
               data structure buf referenced by arg and returns zero.

          20   When the effective user ID of the calling process
               matches the owner of the set of semaphores semid, then
               a call to semctl(semid,semnum,IPC_RMID,arg) removes
               that set of semaphores and returns zero.

          21   When the effective user ID of the calling process
               matches the creator of the set of semaphores semid,

     Page 3                                       (printed 11/23/2000)

     semctl(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.semctl(XPG4.os/ipc)

               then a call to semctl(semid,semnum,IPC_RMID,arg)
               removes that set of semaphores and return zero.

          22   When the calling process has the appropriate
               privileges, then a call to
               semctl(semid,semnum,IPC_RMID,arg) removes the set of
               semaphores referenced by semid and returns zero.

          23   When the effective user ID of the calling process
               matches the owner of the set of semaphores semid, then
               a call to semctl(semid,semnum,IPC_SET,arg) changes the
               user ID, group ID and mode associated with the
               semaphore set referenced by semid to the values
               specified in the buf structure pointed to by arg and
               returns zero.

          24   When the effective user ID of the calling process
               matches the creator of the set of semaphores semid,
               then a call to semctl(semid,semnum,IPC_SET,arg) changes
               the user ID, group ID and mode associated with the
               semaphore set referenced by semid to the values
               specified in the buf structure pointed to by arg and
               return zero.

          25   When the calling process has the appropriate
               privileges, then a call to
               semctl(semid,semnum,IPC_SET,arg) changes the user ID,
               group ID and mode associated with the semaphore set
               referenced by semid to the values specified in the buf
               structure pointed to by arg and return zero.

     Deviance
          26   EINVAL in errno and return -1 on a call to
               semctl(semid,semnum,cmd,arg) when the value of semid is
               invalid.

          27   EINVAL in errno and return -1 on a call to
               semctl(semid,semnum,cmd,arg) when the value of semnum
               is less than zero.

          28   EINVAL in errno and return -1 on a call to
               semctl(semid,semnum,cmd,arg) when the value of semnum
               is greater than or equal to the number of semaphores in
               the set semid as specified by sem_nsems.

          29   EINVAL in errno and return -1 on a call to
               semctl(semid,semnum,cmd,arg) when the value of cmd does
               not refer to a valid command.

          30   EACCES in errno and return -1 on a call to
               semctl(semid,semnum,cmd,arg) when the required access
               permission associated with cmd is not available to the

     Page 4                                       (printed 11/23/2000)

     semctl(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.semctl(XPG4.os/ipc)

               calling process.

          31   EPERM in errno and return -1 on a call to
               semctl(semid,semnum,IPC_SET,arg) when the effective
               user ID of the calling process matches neither the
               owner nor the creator of the semaphore set and the
               process does not have appropriate privileges.

          32   EPERM in errno and return -1 on a call to
               semctl(semid,semnum,IPC_RMID,arg) when the effective
               user ID of the calling process matches neither the
               owner nor the creator of the semaphore set and the
               process does not have appropriate privileges.

     Untestable Aspects
          1    ERANGE in errno and return -1 on a call to
               semctl(semid,semnum,SETVAL,arg) when the value of
               semval is greater than the system imposed maximum.
               Reason: This requires knowledge of the system imposed
               maximum. This value is not available through XPG
               interfaces and may not be static.

          2    ERANGE in errno and return -1 on a call to
               semctl(semid,semnum,SETALL,arg) when value of semval is
               greater than the system imposed maximum.
               Reason: This requires knowledge of the system imposed
               maximum. This value is not available through XPG
               interfaces and may not be static.

     RELEASE
          4.4.1 (06/09/97)

     Page 5                                       (printed 11/23/2000)

     semget(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.semget(XPG4.os/ipc)

     NAME
          XPG4.os/ipc/semget - get set of semaphores.

     DESCRIPTION
          Semget tests the semget() subroutine call interface for
          conformance to the XSI System Interfaces Page:semget()

     TESTS
     Compliance
          1    When key specifies an existing semaphore set, then a
               successful call to semget(key,nsems,semflag) shall
               return the semaphore identifier associated with key.

          2    When key is equal to IPC_PRIVATE, then a successful
               call to semget(key,nsems,semflag) creates a new set of
               nsems semaphores with
               a. sem_perm.cuid and sem_perm.uid set equal to the
               effective user ID of the calling process
               b. sem_perm.cgid and sem_perm.gid set equal to the
               effective group ID of the calling process
               c. the access permission bits in sem_perm.mode set
               equal to the access permissions specified in semflag
               d. sem_nsems set equal to nsems
               e. sem_otime set to 0
               f. sem_ctime set equal to the current time.

          3    When key does not already have a semaphore associated
               with it and semflag & IPC_CREAT is true, then a
               successful call to semget(key,nsems,semflag) creates a
               new set of nsems semaphores with
               a. sem_perm.cuid and sem_perm.uid set equal to the
               effective user ID of the calling process
               b. sem_perm.cgid and sem_perm.gid set equal to the
               effective group ID of the calling process
               c. the access permission bits in sem_perm.mode set
               equal to the access permissions specified in semflag
               d. sem_nsems set equal to nsems
               e. sem_otime set to 0
               f. sem_ctime set equal to the current time.

          4    When key already has a semaphore associated with it and
               the IPC_CREAT bit is set in semflag and the IPC_EXCL
               bit is not set, then a successful call to
               semget(key,nsems,semflag) shall return the semaphore
               identifier associated with key.

     Deviance
          5    EACCES in errno and return -1 on a call to
               semget(key,nsems,semflag) on an existing semaphore when
               the caller does not have access permission for the
               operation specified in the low order 9 bits of semflg.

     Page 1                                       (printed 11/23/2000)

     semget(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.semget(XPG4.os/ipc)

          6    EINVAL in errno and return -1 on a call to
               semget(key,nsems,semflag) when nsems is less than or
               equal to 0.

          7    EINVAL in errno and return -1 on a call to
               semget(key,nsems,semflag) when a semaphore exists for
               key but the number of semaphores in the set associated
               with it is less than nsems.

          8    ENOENT in errno and return -1 on a call to
               semget(key,nsems,semflag) when the semaphore set does
               not currently exist and IPC_CREAT is not set in semflg.

          9    EEXIST in 'errno' and return -1 on a call to
               semget(key,nsems,semflag) when the semaphore set exists
               and both the IPC_CREAT  and IPC_EXCL bits are set in
               semflg.

     Untestable Aspects
          1    EINVAL in errno and return -1 on a call to
               semget(key,nsems,semflag) when nsems is greater than
               the system defined limit.
               Reason: This requires knowledge of a system defined
               limit which cannot be obtained from the system. If this
               is static, it can be obtained from a parameter,
               otherwise this is untestable.

          2    ENOPSC in errno and return -1 on a call to
               semget(key,nsems,semflag) when the number of semaphores
               allowed by the system is exceeded.
               Reason: This requires knowledge of a system defined
               limit which cannot be obtained from the system. If this
               is static, it can be obtained from a parameter,
               otherwise this is untestable.

     RELEASE
          4.4.1 (06/09/97)

     Page 2                                       (printed 11/23/2000)

     semop(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.) semop(XPG4.os/ipc)

     NAME
          XPG4.os/ipc/semop - semaphore operations

     DESCRIPTION
          Semop tests the semop() subroutine call interface for
          conformance to the XSI System Interfaces Page:semop()

     TESTS
     Compliance
          1    When the calling process has alter permission for the
               semaphore set, sem_op is negative and semval is greater
               than or equal to the absolute value of sem_op, then a
               call to semop(semid,sops,nsops) subtracts the absolute
               value of sem_op from the current semval associated with
               the specified sem_num and returns 0. The current semadj
               value associated with the semaphore which would alter
               the value of the semaphore when the calling process
               exits is not changed.

          2    When the calling process has alter permission for the
               semaphore set and sem_op is negative, semval is greater
               than or equal to the absolute value of sem_op, and the
               sem_flg has SEM_UNDO set, then a successful call to
               semop(semid,sops,nsops) subtracts the absolute value of
               sem_op from the current semval associated with the
               specified sem_num and returns 0. The current semadj
               value associated with the semaphore which would alter
               the value of the semaphore when the calling process
               exits is increased by the value of sem_op.

          3    When the calling process has alter permission for the
               semaphore set and sem_op is negative and semval is less
               than the absolute value of sem_op, and the IPC_NOWAIT
               flag is set in sem_flag then a call to
               semop(semid,sops,nsops) returns -1 and sets 'errno' to
               EAGAIN.

          4    When the calling process has alter permission for the
               semaphore set and sem_op is negative and semval is less
               than the absolute value of sem_op, and the IPC_NOWAIT
               flag is not set in sem_flag then a successful call to
               semop(semid,sops,nsops) increments the semncnt
               associated with the specified semaphore and suspends
               the calling process awaiting a change in the semval
               associated with the specified semaphore.

          5    When the process has been suspended awaiting an
               increase in a semaphore value and the value of the
               semaphore semval is changed such that it becomes
               greater than or equal to the absolute value of the
               sem_op associated with the call to
               semop(semid,sops,nsops) which caused the process to be

     Page 1                                       (printed 11/23/2000)

     semop(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.) semop(XPG4.os/ipc)

               suspended, then the value of semncnt associated with
               the semaphore is decremented and the absolute value of
               sem_op is subtracted from semval, and the absolute
               value of sem_op is added to the semadj value if the
               SEM_UNDO flag is set in sem_flg and the suspended call
               shall return zero.

          6    When the process has been suspended awaiting an
               increase in a semaphore value and the semaphore set
               associated with semid is removed from the system, then
               the call to semop(semid,sops,nsops) returns -1 and sets
               'errno' to EIDRM.

          7    When the process has been suspended awaiting an
               increase in a semaphore value and the calling process
               receives a signal that is to be caught, then the call
               to semop(semid,sops,nsops) decrements the semncnt value
               associated with the semaphore, returns -1 and sets
               'errno' to EINTR.

          8    When the calling process has alter permission for the
               semaphore set and sem_op is positive, then a call to
               semop(semid,sops,nsops) shall add the value of sem_op
               to semval and return 0.

          9    When the calling process has alter permission for the
               semaphore set and sem_op is positive and the SEM_UNDO
               flag is set in sem_flag, then a call to
               semop(semid,sops,nsops) adds the value of sem_op to
               semval, subtracts the value of sem_op from the calling
               process's semadj value for the specified semaphore and
               returns 0.

          10   When the calling process has read permission for the
               semaphore set and sem_op is zero and semval is zero,
               then a successful call to semop(semid,sops,nsops)
               returns 0.

          11   When the calling process has read permission for the
               semaphore set and sem_op is zero, semval is not zero
               and the IPC_NOWAIT flag is set in sem_flag then a call
               to semop(semid,sops,nsops) returns -1 and sets 'errno'
               to EAGAIN.

          12   When the calling process has read permission for the
               semaphore set and sem_op is zero and semval is not
               zero, and the IPC_NOWAIT flag is not set in sem_flag
               than a successful call to semop(semid,sops,nsops)
               increments the semzcnt associated with the specified
               semaphore and suspends the calling process awaiting a
               change in the semval associated with the specified
               semaphore.

     Page 2                                       (printed 11/23/2000)

     semop(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.) semop(XPG4.os/ipc)

          13   When the process has been suspended awaiting zeroing of
               a semaphore value and the value of the semaphore's
               semval is changed such that it becomes zero, then the
               value of semzcnt associated with the semaphore is
               decremented and the suspended call to
               semop(semid,sops,nsops) returns zero.

          14   When the process has been suspended awaiting zeroing of
               a semaphore value and the semaphore set associated with
               semid is removed from the system, then the call to
               semop(semid,sops,nsops) returns -1 and sets errno to
               EIDRM.

          15   When the process has been suspended awaiting zeroing of
               a semaphore value and the calling process receives a
               signal that is to be caught, then the call to
               semop(semid,sops,nsops) decrements the semzcnt value
               associated with the semaphore, returns -1 and sets
               errno to EINTR.

     Deviance
          16   EINVAL in 'errno' and return -1 on a call to
               semop(semid,sops,nsops) when semid is not a valid
               semaphore identifier.

          17   EFBIG in errno and return -1 on a call to
               semop(semid,sops,nsops) when the value of sem_num is
               less than 0.

          18   EFBIG in errno and return -1 on a call to
               semop(semid,sops,nsops) when the value of sem_num is
               greater than or equal to the number of semaphores
               associated with semid.

          19   EACCES in errno and return -1 on a call to
               semop(semid,sops,nsops) when the permission to perform
               the required operation is denied.

     Untestable Aspects
          1    EINVAL in errno and return -1 on a call to
               semop(semid,sops,nsops) when the number of sempahores
               for which the calling process is attempting a SEM_UNDO
               would exceed the limit.
               Reason:  This depends on a system imposed limit. This
               could be provided by a config parameter or could be
               untestable.

          2    E2BIG in errno and return -1 on a call to
               semop(semid,sops,nsops) when the value of nsops is
               greater than the system imposed maximum.
               Reason:  This depends on a system imposed limit. This
               could be provided by a config parameter or could be

     Page 3                                       (printed 11/23/2000)

     semop(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.) semop(XPG4.os/ipc)

               untestable.

          3    ENOSPC in errno and return -1 on a call to
               semop(semid,sops,nsops) when the limit on the number of
               processes requesting a SEM_UNDO would be exceeded.
               Reason:  This depends on a system imposed limit. This
               could be provided by a config parameter or could be
               untestable.

          4    ERANGE in errno and return -1 on a call to
               semop(semid,sops,nsops) is an operation would cause a
               semval value to exceed the system imposed limit.
               Reason:  This depends on a system imposed limit. This
               could be provided by a config parameter or could be
               untestable.

          5    ERANGE in errno and return -1 on a call to
               semop(semid,sops,nsops) is an operation would cause a
               semadj value to overflow the system imposed limit.
               Reason:  This depends on a system imposed limit. This
               could be provided by a config parameter or could be
               untestable.

     PROBLEMS
          The assertions in the compliance section are written as if
          there was only one semaphore being altered by the call. This
          is not the case, and there is no description in the XPG as
          to what happens in the various combinatorial cases.

     RELEASE
          4.4.1 (06/09/97)

     Page 4                                       (printed 11/23/2000)

     shmat(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.) shmat(XPG4.os/ipc)

     NAME
          XPG4.os/ipc/shmat - attach shared memory segment.

     DESCRIPTION
          Shmat tests the shmat() subroutine call interface for
          conformance to the XSI System Interfaces Page:shmat()

     TESTS
     Compliance
          1    When the calling process has read and write permission
               on the shared memory segment, then a call to
               shmat(shmid,0,shmflg) shall attach the segment for
               reading and writing at an address selected by the
               system and return the segment start address.

          2    When the calling process has read and write permission
               on the shared memory segment, the value of the SHM_RND
               bit is set in shmflg and the value of shmaddr is not
               zero, then a call to shmat(shmid,shmaddr,shmflg)
               attaches the segment for reading and writing at the
               address given by (shmaddr - (shmaddr modulus SHMLBA))
               and returns the segment start address.

          3    When the calling process has read and write permission
               on the shared memory segment, the value of the SHM_RND
               bit is not set in shmflg and the value of shmaddr is
               not zero, then a call to shmat(shmid,shmaddr,shmflg)
               attaches the segment for reading and writing at the
               address given by shmaddr and returns the segment start
               address.

          4    When the calling process has read permission on the
               shared memory segment, and the SHM_RDONLY bit is set in
               semflg then a call to shmat(shmid,shmaddr,shmflg)
               attaches the segment for reading at the address
               specified by shmaddr and returns the segment start
               address.

          5    When the SHM_RDONLY bit is not set in semflg then a
               call to shmat(shmid,shmaddr,shmflg) attaches a segment
               which is available for reading and writing to processes
               with appropriate permission.

     Deviance
          6    EACCES in errno and return -1 on a call to
               shmat(shmid,shmaddr,shmflg) when permission for the
               operation is denied to the calling process.

          7    EINVAL in errno and return -1 on a call to
               shmat(shmid,shmaddr,shmflg) when the shared memory
               identifier shmid is invalid.

     Page 1                                       (printed 11/23/2000)

     shmat(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.) shmat(XPG4.os/ipc)

          8    If _XOPEN_SHM is -1:
                   A call to shmat() returns (void *)-1 and sets errno
                   to ENOSYS.

     Untestable Aspects
          1    EMFILE in errno and return -1 on a call to
               shmat(shmid,shmaddr,shmflg) when an attempt is made to
               attach more than the system-imposed limit on the number
               of segments.
               Reason:  The system imposed limit is not available to
               the process through an XPG call. This could be passed
               as a config parameter if it is constant. Otherwise it
               is untestable.

          2    EINVAL in errno and return -1 on a call to
               shmat(shmid,shmaddr,shmflg) when shmaddr is not 0 and
               the value of (shmaddr - (shmaddr modulus SHMLBA)) is an
               illegal address.
               Reason:  The production of an illegal address is
               implementation specific. This could be provided by a
               parameter, otherwise, untestable.

          3    EINVAL in errno and return -1 on a call to
               shmat(shmid,shmaddr,shmflg) when shmaddr is not 0, the
               SHM_RND flag is not set in shmflg and the value of
               shmaddr is an illegal address.
               Reason:  The production of an illegal address is
               implementation specific. This could be provided by a
               parameter, otherwise, untestable.

          4    ENOMEM in errno and return -1 on a call to shmat() when
               the available data space is not large enough to
               accommodate the shared memory segment.
               Reason:  Reaching a situation where there is not enough
               memory available is implementation specific.

     RELEASE
          4.4.1 (06/09/97)

     Page 2                                       (printed 11/23/2000)

     shmctl(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.shmctl(XPG4.os/ipc)

     NAME
          XPG4.os/ipc/shmctl - shared memory control operations.

     DESCRIPTION
          Shmctl tests the shmctl() subroutine call interface for
          conformance to the XSI System Interfaces Page:shmctl()

     TESTS
     Compliance
          1    When the effective user ID of the caller matches the
               user ID of the owner of the shared memory segment
               associated with shmid and read permission is allowed
               for the owner, then a call to
               shmctl(shmid,IPC_STAT,buf) returns the status of the
               shared memory segment in the buffer buf and returns
               zero.

          2    When the effective user ID of the caller matches the
               user ID of the creator of the shared memory segment
               associated with shmid and read permission is allowed
               for the owner, then a call to
               shmctl(shmid,IPC_STAT,buf) returns the status of the
               shared memory segment in the buffer buf and returns
               zero.

          3    When the effective user ID does not match the owner or
               creator of the shared memory segment and the effective
               group ID or one of the supplementary group IDs of the
               caller matches the group ID of the owner of the shared
               memory segment associated with shmid and read
               permission is allowed for the group, then a call to
               shmctl(shmid,IPC_STAT,buf) returns the status of the
               shared memory segment in the buffer buf and returns
               zero.

          4    When the effective user ID does not match the owner or
               creator of the shared memory segment and the effective
               group ID or one of the supplementary group IDs of the
               caller matches the group ID of the creator of the
               shared memory segment associated with shmid and read
               permission is allowed for the group, then a call to
               shmctl(shmid,IPC_STAT,buf) returns the status of the
               shared memory segment in the buffer buf and returns
               zero.

          5    When the effective user ID does not match the owner or
               creator of the shared memory segment and neither the
               effective group ID nor any of the supplementary group
               IDs of the caller match the group ID of the owner or
               creator of the shared memory segment associated with
               shmid and read permission is allowed for others, then a
               call to shmctl(shmid,IPC_STAT,buf) returns the status

     Page 1                                       (printed 11/23/2000)

     shmctl(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.shmctl(XPG4.os/ipc)

               of the shared memory segment in the buffer buf and
               returns zero.

          6    When the calling process has appropriate privileges,
               then a call to shmctl(shmid,IPC_STAT,buf) returns the
               status of the shared memory segment in the buffer buf
               and returns zero.

          7    When the effective user ID of the caller matches the
               user ID of the owner of the shared memory segment
               associated with shmid, then a call to
               shmctl(shmid,IPC_SET,buf) sets the user ID, group ID,
               and mode of the shared memory segment referenced by
               shmid to the corresponding values from the buffer buf
               and returns zero.

          8    When the effective user ID of the caller matches the
               user ID of the creator of the shared memory segment
               associated with shmid, then a call to
               shmctl(shmid,IPC_SET,buf) sets the user ID, group ID,
               and mode of the shared memory segment referenced by
               shmid to the corresponding values from the buffer buf
               and returns zero.

          9    When the calling process has appropriate privileges,
               then a call to shmctl(shmid,IPC_SET,buf) sets the user
               ID, group ID, and mode of the shared memory segment
               referenced by shmid to the corresponding values from
               the buffer buf and returns zero.

          10   When the effective user ID of the caller matches the
               user ID of the owner of the shared memory segment, then
               a call to shmctl(shmid,IPC_RMID,buf) removes the shared
               memory identifier specified by shmid.

          11   When the effective user ID of the caller matches the
               user ID of the creator of the shared memory segment,
               then a call to shmctl(shmid,IPC_RMID,buf) removes the
               shared memory identifier specified by shmid.

          12   When the calling process has appropriate privileges,
               then a call to shmctl(shmid,IPC_RMID,buf) removes the
               shared memory identifier specified by shmid.

     Deviance
          13   EACCES in errno and return -1 on a call to
               shmctl(shmid,IPC_STAT,buf) when the calling process
               does not have read permission.

          14   EINVAL in errno and return -1 on a call to
               shmctl(shmid,IPC_STAT,buf) when the value of shmid is
               set to an invalid value.

     Page 2                                       (printed 11/23/2000)

     shmctl(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.shmctl(XPG4.os/ipc)

          15   EPERM in errno and return -1 on a call to
               shmctl(shmid,IPC_SET,buf) when the calling process does
               not have appropriate privileges and the effective user
               ID does not match the user ID of the owner or the
               creator of the shared memory segment associated with
               shmid.

          16   EPERM in 'errno' and return -1 on a call to
               shmctl(shmid,IPC_RMID,buf) when the calling process
               does not have appropriate privileges and the effective
               user ID does not match the user ID of the owner or the
               creator of the shared memory segment associated with
               shmid.

          17   If _XOPEN_SHM is -1:
                   A call to shmctl() returns -1 and sets errno to
                   ENOSYS.

     RELEASE
          4.4.1 (06/09/97)

     Page 3                                       (printed 11/23/2000)

     shmctl_L(LSB.os/ipc)Release 1.1 (UniSoft Ltd.shmctl_L(LSB.os/ipc)

     NAME
          LSB.os/ipc/shmctl_L - shared memory control operations test
          case

     DESCRIPTION
          This test case tests the shmctl() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:shmctl()

     TESTS
     Untestable aspects
          1    When cmd is IPC_STAT and a uid value associated with
               shmid is too large to be stored in the shmid_ds
               structure pointed to by buf, then a call to
               shmctl(shmid, cmd, buf) returns -1 with errno set to
               EOVERFLOW.
               Reason for omission: There is no known reliable test
               method for this assertion.  Since the shm_perm.uid and
               shm_perm.cuid members of the shmid_ds structure are of
               type uid_t, it is not clear how this condition could
               occur.

          2    When cmd is IPC_STAT and a gid value associated with
               shmid is too large to be stored in the shmid_ds
               structure pointed to by buf, then a call to
               shmctl(shmid, cmd, buf) returns -1 with errno set to
               EOVERFLOW.
               Reason for omission: There is no known reliable test
               method for this assertion.  Since the shm_perm.gid and
               shm_perm.cgid members of the shmid_ds structure are of
               type gid_t, it is not clear how this condition could
               occur.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 1                                       (printed 11/23/2000)

     shmdt(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.) shmdt(XPG4.os/ipc)

     NAME
          XPG4.os/ipc/shmdt - detach shared memory segment.

     DESCRIPTION
          Shmdt tests the shmdt() subroutine call interface for
          conformance to the XSI System Interfaces Page:shmdt()

     TESTS
     Compliance
          1    A successful call to shmdt(shmaddr) detaches the
               specified shared memory segment and returns 0.

     Deviance
          2    EINVAL in 'errno' and return -1 on a shmdt(shmaddr)
               when the address specified by shmaddr does not point to
               the beginning of a shared memory segment.

          3    If _XOPEN_SHM is -1:
                   A call to shmdt() returns -1 and sets errno to
                   ENOSYS.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     shmget(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.shmget(XPG4.os/ipc)

     NAME
          XPG4.os/ipc/shmget - get shared memory segment.

     DESCRIPTION
          Shmget tests the shmget() subroutine call interface for
          conformance to the XSI System Interfaces Page:shmget()

     TESTS
     Compliance
          1    When key specifies an existing shared memory segment,
               then a successful call to shmget(key,size,shmflg)
               returns the shared memory identifier associated with
               key.

          2    When key is equal to IPC_PRIVATE, then a successful
               call to shmget(key,size,shmflg) creates a new shared
               memory segment with
               a.  shm_segsz set equal to size
               b. shm_perm.cuid and shm_perm.uid set equal to the
               effective user ID of the calling process
               c. shm_perm.cgid and shm_perm.gid set equal to the
               effective group ID of the calling process
               d. the access permission bits in shm_perm.mode set
               equal to the access permissions specified in shmflg
               e. shm_lpid, shm_nattch, shm_atime, and shm_dtime set
               to 0
               f. shm_ctime set equal to the current time.

          3    When key does not already have a shared memory
               associated with it and the IPC_CREAT bit is set in
               shmflag, then a successful call to
               shmget(key,size,shmflg) creates a new shared memory
               segment with
               a.  shm_segsz set equal to size
               b. shm_perm.cuid and shm_perm.uid set equal to the
               effective user ID of the calling process
               c. shm_perm.cgid and shm_perm.gid set equal to the
               effective group ID of the calling process
               d. the access permission bits in shm_perm.mode set
               equal to the access permissions specified in shmflg
               e. shm_lpid, shm_nattch, shm_atime, and shm_dtime are
               set to 0
               f. shm_ctime set equal to the current time

          4    When key already has a shared memory segment associated
               with it, the IPC_CREAT bit is set and the IPC_EXCL bit
               is not set in shmflag, then a successful call to
               shmget(key,size,shmflg) returns the shared memory
               identifier associated with key.

     Deviance
          5    EINVAL in errno and return -1 on a call to

     Page 1                                       (printed 11/23/2000)

     shmget(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.shmget(XPG4.os/ipc)

               shmget(key,size,shmflg) when an identifier exists for
               key and the size of the corresponding memory segment is
               less than size and size is not equal to 0.

          6    EACCES in errno and return -1 on a call to
               shmget(key,size,shmflg) when key specifies an existing
               shared memory identifier for which the caller does not
               have access permission.

          7    ENOENT in errno and return -1 on a call to
               shmget(key,size,shmflg) when key does not specify an
               existing shared memory identifier and IPC_CREAT is not
               set in shmflg.

          8    EEXIST in errno and return -1 on a call to
               shmget(key,size,shmflg) when key specifies an existing
               shared memory identifier and the IPC_CREAT and IPC_EXCL
               bits are both set in shmflg.

          9    If _XOPEN_SHM is -1:
                   A call to shmget() returns -1 and sets errno to
                   ENOSYS.

     Untestable Aspects
          1    EINVAL in errno and return -1 on a call to
               shmget(key,size,shmflg) when size is less than the
               system imposed minimum.
               Reason:  This requires knowledge of a system imposed
               limit. Could be passed by a config parameter if not
               variable.

          2    EINVAL in errno and return -1 on a call to
               shmget(key,size,shmflg) when size is greater than the
               system imposed maximum.
               Reason:  This requires knowledge of a system imposed
               limit. Could be passed by a config parameter if not
               variable.

          3    ENOSPC in errno and return -1 on a call to
               shmget(key,size,shmflg) when the number of shared
               memory identifiers allowed by the system is exceeded.
               Reason:  This requires knowledge of a system imposed
               limit. Could be passed by a config parameter if not
               variable.

          4    ENOMEM in errno and return -1 on a call to
               shmget(key,size,shmflg) when a shared memory identifier
               and associated shared memory segment are to be created,
               but the amount of available physical memory is not
               sufficient to fill the request.
               Reason:  Reaching a situation where there is not enough
               memory available is implementation specific.

     Page 2                                       (printed 11/23/2000)

     shmget(XPG4.os/ipc)Release 4.4.1 (UniSoft Ltd.shmget(XPG4.os/ipc)

     RELEASE
          4.4.1 (06/09/97)

     Page 3                                       (printed 11/23/2000)

     getcontext(GABI.oRelease 1.3 (UniSoft Grogetcontext(GABI.os/jump)

     NAME
          GABI.os/jump/getcontext - get current user context.

     DESCRIPTION
          Getcontext tests the getcontext() subroutine call interface
          for conformance to the SVID3 definition.
          Page:getcontext(BA_OS)

     TESTS
     Compliance
          1    A successful call to getcontext(ucp) places the current
               user context of the calling process in the structure
               pointed to by ucp and returns 0.

          2    When the context returned from a call to
               getcontext(ucp) is passed to setcontext() as an
               argument, then program execution continues as if the
               corresponding getcontext(ucp) call had just returned.

     OUTPUTS
     Tests:
          1

     RELEASE
          1.10 (8/1/92)

     Page 1                                       (printed 11/23/2000)

     makeRelease(Copyrightu1990 UniSoft Corp.makecontext(GABI.os/jump)

     NAME
          GABI.os/jump/makecontext - make current user context.

     DESCRIPTION
          Makecontext tests the makecontext() subroutine call
          interface for conformance to the SVID3 definition.
          Page:makecontext(BA_LIB)

     TESTS
     Compliance
          ALL TESTS IN THIS TEST SET APPLY TO SVR4.2 ONLY.

          1    A successful call to makecontext(ucp, func, argc, ...)
               modifies the user context specified by ucp, which was
               initialized by a call to getcontext() and returns 0.

          2    When the context ucp, returned from a call to
               makecontext(ucp, func, argc, ...) is passed to
               setcontext() as an argument, then program execution
               continues by calling func, passing it the arguments
               that follow argc.

          3    When the context ucp, modified by a call to
               makecontext(ucp, func, argc, ...) returns, execution
               resumes at the point specified by the context structure
               pointed to by ucp->uc_link.

     Untestable Aspects
          1    ENOMEM in errno and a return value of -1 after a call
               to swapcontext(oucp, ucp) when ucp does not have enough
               stack left to complete the operation.

     OUTPUTS
     Tests:
          1-3  Pass/Fail indication only.

     PROBLEMS
          It is unclear from the definition in SVID3 what happens to
          the resumed context when the uc_link structure member is not
          initialized.

     RELEASE
          1.1 (05/13/93)

     Page 1                                       (printed 11/23/2000)

     setcontext(GABI.oRelease 1.3 (UniSoft Grosetcontext(GABI.os/jump)

     NAME
          GABI.os/jump/setcontext - set current user context.

     DESCRIPTION
          Setcontext tests the setcontext() subroutine call interface
          for conformance to the SVID3 definition.
          Page:getcontext(BA_OS)

     TESTS
     Compliance
          1    A successful call to setcontext(ucp) does not return
               and program execution resumes at the point specified by
               the context structure pointed to by ucp (see
               ucontext(BA_ENV)).

     OUTPUTS
     Tests:
          1

     RELEASE
          1.9 (8/1/92)

     Page 1                                       (printed 11/23/2000)

     dlclose(DYNL.os/libRelease 5.1.1 (UniSoft Ldlclose(DYNL.os/libdl)

     NAME
          DYNL.os/libdl/dlclose - Close a dlopen() object

     DESCRIPTION
          Dlclose tests the dlclose(), subroutine interface for
          compliance to the System Interfaces and Headers, Issue 5
          Volume 1 Page: dlclose()

     TESTS
     Compliance
          1    When handle refers to a dlopen() object, then a call to
               dlclose() returns zero.

          2    When handle refers to a shared object which references
               a shared object which is referenced by another shared
               object handle, then a call to dlclose() does not close
               the referenced shared object and returns zero.

     Untestable Aspects
          1    When handle does not refer to a dlopen() object handle,
               then a call to dlclose() returns non-zero and a
               subsequent call to dlerror() returns a string detailing
               the error.

     OUTPUTS
     Tests:
          1    Pass/Fail indication - failure information includes the
               expected and detected return value.

          2    Pass/Fail indication only.

     RELEASE
          5.1.1 (04/07/97)

     Page 1                                       (printed 11/23/2000)

     dlerror(DYNL.os/libRelease 5.1.1 (UniSoft Ldlerror(DYNL.os/libdl)

     NAME
          DYNL.os/libdl/dlerror - Get diagnostic information

     DESCRIPTION
          Dlerror tests the dlerror(), subroutine interface for
          compliance to the System Interfaces and Headers, Issue 5
          Volume 1 Page: dlerror()

     TESTS
     Compliance
          1    When an error has occurred in the processing of a call
               to dlclose() , dlopen() or dlsym() then a call to
               dlerror() returns a null terminated character string
               (without a trailing new-line character) describing the
               error.

          2    When no error has occured since the last call to
               dlerror() , then a call to dlerror returns NULL.

     Outputs
          1-2  Pass/Fail indication only.

     RELEASE
          5.1.1 (04/07/97)

     Page 1                                       (printed 11/23/2000)

     dlopen(DYNL.os/libdRelease 5.1.4 (UniSoft Ltdlopen(DYNL.os/libdl)

     NAME
          DYNL.os/libdl/dlopen - Gain access to an executable object
          file

     DESCRIPTION
          Dlopen tests the dlopen(), subroutine interface for
          compliance to the System Interfaces and Headers, Issue 5
          Volume 1 Page: dlopen()

     TESTS
     Compliance
          1    When pathname is a pathname containing one or more
               slash character which refers to an executable object,
               then a call to dlopen() makes the executable object
               file available to the running process and returns a
               handle that can be used to refer to the loaded
               executable object.

          2    If dependency objects are supported:
                    When the dynamic section of the file referenced by
                    pathname contains a DT_NEEDED entry which refers
                    to an executable object which is not currently
                    loaded, then dlopen() locates the executable
                    object using the dependency search rules and loads
                    the executable object into the program.

          3    When an executable object name in either pathname or in
               a dependency object contains one or more slash
               characters, then a call to dlopen() uses that string as
               a path name to locate the executable object.

          4    When the pathname argument is set to zero, then the
               handle returned from a call to dlopen() can be used by
               dlsym() to obtain the address of symbols contained in
               the original program image, symbols that are contained
               in objects that were loaded at program startup with the
               original program image and symbols contained in objects
               that were loaded with the RTLD_GLOBAL mode.

          5    If dependency objects are supported:
                    When the file referenced by pathname contains a
                    dependency entry which refers to an executable
                    object which is currently loaded, then dlopen()
                    does not load a second copy of the executable
                    object but makes use of the currently loaded copy
                    of the executable object.

          6    If dependency objects are supported:
                    When a dlopen() object contains a dependency entry
                    which refers to an executable object not currently
                    loaded, then dlopen() locates the executable
                    object using the dependency search rules specified

     Page 1                                       (printed 11/23/2000)

     dlopen(DYNL.os/libdRelease 5.1.4 (UniSoft Ltdlopen(DYNL.os/libdl)

                    in the executable and dynamically links in the
                    executable object.

          7    If dependency objects are supported:
                    When a dependency object contains a dependency
                    entry which refers to an executable object which
                    has already been loaded, then dlopen() ignores
                    this entry.

          8    When a call to dlopen() refers to an executable object
               which has already been loaded, then dlopen() does not
               load a second copy of the executable object but makes
               use of the currently loaded copy of the executable
               object, even if different pathnames were used.

          9    When the mode parameter is set to RTLD_LAZY, then a
               call to dlopen() performs relocations at some time
               between the call to dlopen() and the point at which
               they are called.

          10   When the mode parameter is set to RTLD_NOW, then a call
               to dlopen() performs relocations at the time at which
               the object is first loaded.

          11   When the RTLD_GLOBAL flag is set in the mode argument,
               then the exported symbols associated with executable
               objects loaded during this call to dlopen() are
               available to all other objects opened as a result of
               later call to dlopen().

          12   When symbols introduced by calls to dlopen() are
               resolved, then the first occurrence of the object found
               is used.  The search order for the object is:
                   First, the executable image itself.
                   Second, the executable image's list of needed
                   objects in the resolution order.
                   Third, the list of objects loaded from previous
                   calls to dlopen() with the RTLD_GLOBAL flag set in
                   the mode argument.

          13   When the mode argument has the RTLD_LOCAL flag set on a
               call to dlopen(), then the exported symbols associated
               with the executable objects loaded as a result of this
               call are only available to other objects loaded as a
               result of this call.

          14   If dependency objects are supported:
                    When the executable object referenced by pathname
                    contains a dependency entry which causes further
                    executable objects to be referenced and the
                    executable object referenced by pathname contains
                    a reference to a symbol not contained in that

     Page 2                                       (printed 11/23/2000)

     dlopen(DYNL.os/libdRelease 5.1.4 (UniSoft Ltdlopen(DYNL.os/libdl)

                    executable object but contained in a referenced
                    executable object, then a call to dlopen()
                    searches each of the referenced executable objects
                    in load order and resolves the symbol to the first
                    occurrence of found during this search.

     Deviance
          15   When pathname is not NULL and refers to a non-existent
               entity, then a call to dlopen() returns NULL and a
               subsequent call to dlerror() returns a string detailing
               the error.

          16   When pathname refers to a file which cannot be opened
               for reading, then a call to dlopen() returns NULL and a
               subsequent call to dlerror() returns a string detailing
               the error.

          17   When pathname refers to a file which is not a valid
               executable object, then a call to dlopen() returns NULL
               and a subsequent call to dlerror() returns a string
               detailing the error.

          18   When the mode is RTLD_NOW and an error occurs during
               the process of loading pathname because a reference
               cannot be resolved, then a call to dlopen() returns
               NULL and a subsequent call to dlerror() returns a
               string detailing the error.

     OUTPUTS
     Tests:
          1    Pass/Fail indication - failure information includes the
               expected and detected return value.

          2    Pass/Fail/Unsupported indication only.

          3-4  Pass/Fail indication - failure information includes the
               expected and detected executable object location.

          5-7  Pass/Fail/Unsupported indication only.

          8-10 Pass/Fail indication only.

          11-13
               Pass/Fail indication - failure information includes the
               expected and detected executable object location.

          14   Pass/Fail indication only.

          15-18
               Pass/Fail indication - failure information includes the
               expected and detected return values.

     Page 3                                       (printed 11/23/2000)

     dlopen(DYNL.os/libdRelease 5.1.4 (UniSoft Ltdlopen(DYNL.os/libdl)

     RELEASE
          5.1.4 (11/19/97)

     Page 4                                       (printed 11/23/2000)

     mmap(rt.os/VSRTe5.1.1 (Applied Testing and Techmmap(rt.os/mfiles)

     NAME
          rt.os/mfiles/mmap - map pages of memory testset

     DESCRIPTION
          Tests the mmap() function for conformance to System
          Interfaces and Headers, Issue 5 Page: mmap().
          These tests are supplemental to those defined for this
          function in VSU and in the mmap_P testset.  They deal with
          applying mmap() to shared memory objects.

     TESTS
     Compliance
          1    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A successful call to mmap() when fildes is associated
                 with a shared memory object, the MAP_SHARED flag is
                 set in flags, and the PROT_READ flag is set in prot
                 shall map len bytes at offset off in the file
                 associated with fildes into the address space of the
                 process, allow the mapped area to be read, and return
                 the location in the address space at which the
                 mapping is made.

          2    For UNIX98:
                   This assertion is mandatory
               For POSIX96:
                   This assertion is optional (the implementation may
                   not support MAP_PRIVATE and may return ENOTSUP).
               If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A successful call to mmap() when fildes is associated
                 with a shared memory object, the MAP_PRIVATE flag is
                 set in flags, and the PROT_READ flag is set in prot
                 shall map len bytes at offset off in the file
                 associated with fildes into the address space of the
                 process, allow the mapped area to be read, and return
                 the location in the address space at which the
                 mapping is made.

          3    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation supports the use of PROT_EXEC:
                 A successful call to mmap() when fildes is associated
                 with a shared memory object, the MAP_SHARED flag is
                 set in flags, and the PROT_EXEC flag is set in prot
                 shall map len bytes at offset off in the file
                 associated with fildes into the address space of the
                 process, allow the mapped area to be executed, and
                 return the location in the address space at which the

     Page 1                                       (printed 11/23/2000)

     mmap(rt.os/VSRTe5.1.1 (Applied Testing and Techmmap(rt.os/mfiles)

                 mapping is made.

          4    For UNIX98:
                   This assertion is mandatory
               For POSIX96:
                   This assertion is optional (the implementation may
                   not support MAP_PRIVATE and may return ENOTSUP).
               If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation supports the use of PROT_EXEC:
                 A successful call to mmap() when fildes is associated
                 with a shared memory object, the MAP_PRIVATE flag is
                 set in flags, and the PROT_EXEC flag is set in prot
                 shall map len bytes at offset off in the file
                 associated with fildes into the address space of the
                 process, allow the mapped area to be executed, and
                 return the location in the address space at which the
                 mapping is made.

          5    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A successful call to mmap() when fildes is associated
                 with a shared memory object, the MAP_SHARED flag is
                 set in flags, and the PROT_NONE flag is set in prot
                 shall map len bytes at offset off in the file
                 associated with fildes into the address space of the
                 process, not allow the mapped area to be accessed,
                 and return the location in the address space at which
                 the mapping is made.

          6    For UNIX98:
                   This assertion is mandatory
               For POSIX96:
                   This assertion is optional (the implementation may
                   not support MAP_PRIVATE and may return ENOTSUP).
               If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A successful call to mmap() when fildes is associated
                 with a shared memory object, the MAP_PRIVATE flag is
                 set in flags, and the PROT_NONE flag is set in prot
                 shall map len bytes at offset off in the file
                 associated with fildes into the address space of the
                 process, not allow the mapped area to be accessed,
                 and return the location in the address space at which
                 the mapping is made.

          7    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:

     Page 2                                       (printed 11/23/2000)

     mmap(rt.os/VSRTe5.1.1 (Applied Testing and Techmmap(rt.os/mfiles)

                 A successful call to mmap() when fildes is associated
                 with a shared memory object, the MAP_SHARED flag is
                 set in flags, and the PROT_WRITE flag is set in prot
                 shall map len bytes at offset off in the file
                 associated with fildes into the address space of the
                 process, allow the mapped area to be written such
                 that write references change the file, and return the
                 location in the address space at which the mapping is
                 made.

          8    For UNIX98:
                   This assertion is mandatory
               For POSIX96:
                   This assertion is optional (the implementation may
                   not support MAP_PRIVATE and may return ENOTSUP).
               If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A successful call to mmap() when fildes is associated
                 with a shared memory object, the MAP_PRIVATE flag is
                 set in flags, and the PROT_WRITE flag is set in prot
                 shall map len bytes at offset off in the file
                 associated with fildes into the address space of the
                 process, allow the mapped area to be written such
                 that write references do not change the file, and
                 return the location in the address space at which the
                 mapping is made.

          9    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A successful call to mmap() when fildes is associated
                 with a shared memory object, the MAP_SHARED flag is
                 set in flags, and the PROT_READ and PROT_WRITE flags
                 are set in prot shall map len bytes at offset off in
                 the file associated with fildes into the address
                 space of the process, allow the mapped area to be
                 read and written, and return the location in the
                 address space at which the mapping is made.

          10   For UNIX98:
                   This assertion is mandatory
               For POSIX96:
                   This assertion is optional (the implementation may
                   not support MAP_PRIVATE and may return ENOTSUP).
               If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A successful call to mmap() when fildes is associated
                 with a shared memory object, the MAP_PRIVATE flag is
                 set in flags, and the PROT_READ and PROT_WRITE flags
                 are set in prot shall map len bytes at offset off in

     Page 3                                       (printed 11/23/2000)

     mmap(rt.os/VSRTe5.1.1 (Applied Testing and Techmmap(rt.os/mfiles)

                 the file associated with fildes into the address
                 space of the process, allow the mapped area to be
                 read and written, and return the location in the
                 address space at which the mapping is made.

          11   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation supports MAP_FIXED:
                 A call to mmap() when fildes is associated with a
                 shared memory object and the MAP_FIXED flag is set in
                 flags shall cause the file associated with fildes to
                 be mapped at an address exactly matching addr.

          12   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A call to mmap() shall zero-fill any partial page at
                 the end of the shared memory object.

          13   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 The system shall not write out modified portions of
                 the last page of a shared memory object mapped by a
                 call to mmap() which are beyond the end of the shared
                 memory object.

          14   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 References to mapped pages beyond the page containing
                 the last byte of a shared memory object mapped by a
                 call to mmap() shall result in the delivery of a
                 SIGBUS signal.

          15   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 After a successful call to mmap() for a shared memory
                 object the mapping created shall be retained across a
                 fork.

          16   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 After a successful call to mmap() for a shared memory
                 object a subsequent close operation shall not affect
                 the mapping and changes made to the memory image
                 shall be reflected in the mapped portion of the
                 shared memory object when the changes would have been
                 performed in the absence of the close operation.

     Page 4                                       (printed 11/23/2000)

     mmap(rt.os/VSRTe5.1.1 (Applied Testing and Techmmap(rt.os/mfiles)

          17   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 After a call to mmap() when MAP_SHARED is set in
                 flags write references made to the memory region
                 shall be visible in all MAP_SHARED mappings of the
                 same portion of the shared memory object by any
                 process.

          18   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation supports MAP_PRIVATE:
                 After a call to mmap() with MAP_PRIVATE set in flags
                 write references to the memory region by the calling
                 process shall not be visible to any process in other
                 mappings of the same portion of the shared memory
                 object.

          19   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation supports MAP_PRIVATE:
                 A call to mmap() when MAP_PRIVATE is set in flags and
                 write references are made to the memory region shall
                 not change the shared memory object.

          20   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 The mapping established by a call to mmap() for a
                 shared memory object shall replace any previous
                 mappings for those whole pages containing any part of
                 the address space of the process starting at pa and
                 continuing for len bytes.

     Deviance
          21   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A call to mmap() when fildes is not a valid file
                 descriptor shall return MAP_FAILED and set errno to
                 EBADF.

          22   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A call to mmap() for a shared memory object when
                 fildes is not open for reading, regardless of the
                 protection specified, shall return MAP_FAILED and set
                 errno to EACCES.

     Page 5                                       (printed 11/23/2000)

     mmap(rt.os/VSRTe5.1.1 (Applied Testing and Techmmap(rt.os/mfiles)

          23   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A call to mmap() for a shared memory object when
                 fildes is not open for writing and PROT_WRITE is
                 specified for a MAP_SHARED operation shall return
                 MAP_FAILED and set errno to EACCES.

          24   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A call to mmap() for a shared memory object when
                 flags does not contain either MAP_PRIVATE or
                 MAP_SHARED shall return MAP_FAILED and set errno to
                 EINVAL.

          25   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation provides a file type for which mmap is
               not supported:
                 A call to mmap() when fildes refers to an object for
                 which mmap() is not supported shall return MAP_FAILED
                 and set errno to ENODEV.

          26   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation supports MAP_FIXED:
                 A call to mmap() for a shared memory object when
                 MAP_FIXED is not specified and there is insufficient
                 room in the address space to effect the mapping.

          27   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation does not support some of the possibly
               valid values for prot:
                 A call to mmap() for a shared memory object when the
                 implementation does not support the combination of
                 accesses requested in prot shall return MAP_FAILED
                 and set errno to ENOTSUP.

          28   For UNIX98:
                   This assertion is notinuse as MAP_FIXED must be
                   supported.
               If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation does not support MAP_FIXED:
                 A call to mmap() for a shared memory object when
                 MAP_FIXED is specified and the implementation does

     Page 6                                       (printed 11/23/2000)

     mmap(rt.os/VSRTe5.1.1 (Applied Testing and Techmmap(rt.os/mfiles)

                 not support this functionality shall return
                 MAP_FAILED and set errno to ENOTSUP.

          29   For UNIX98:
                   This assertion is notinuse as MAP_PRIVATE must be
                   supported.
               If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation does not support MAP_PRIVATE:
                 A call to mmap() for a shared memory object when
                 MAP_PRIVATE is specified and the implementation does
                 not support this functionality shall return
                 MAP_FAILED and set errno to ENOTSUP.

          30   If neither _POSIX_MAPPED_FILES nor
               _POSIX_SHARED_MEMORY_OBJECTS is defined and the
               implementation does not support the mmap() function as
               defined in System Interfaces and Headers, Issue 5:
                 A call to mmap() shall return MAP_FAILED and set
                 errno to ENOSYS.

          31   If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation supports MAP_FIXED:
                 A call to mmap() for a shared memory object when
                 MAP_FIXED is specified and the range [addr,addr+len]
                 exceeds that allowed for the address space of a
                 process shall return MAP_FAILED and set errno to
                 ENOMEM.

     Untestable Aspects
          1    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A call to mmap() for a shared memory object when addr
                 is not 0 shall cause the system to place the memory
                 object near addr and when addr is 0 the system shall
                 have freedom to place the object anywhere.
                 Reason for omission: Specification is inadequate for
                 testing.

          2    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 Updating of the st_ctime and st_mtime fields of a
                 file mapped by a call to mmap() for a shared memory
                 object with MAP_SHARED set in flags and PROT_WRITE
                 set in prot when a write reference occurs to a mapped
                 region and no call to msync is made.
                 Reason for omission: No portable way to induce this

     Page 7                                       (printed 11/23/2000)

     mmap(rt.os/VSRTe5.1.1 (Applied Testing and Techmmap(rt.os/mfiles)

                 condition.

          3    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A call to mmap() for a shared memory object when the
                 mapping could not be locked in memory, if required by
                 mlockall(), due to a lack of resources shall return
                 MAP_FAILED and set errno to EAGAIN.
                 Reason for omission: No portable test method for this
                 assertion.

          4    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation supports MAP_FIXED:
                 A call to mmap() for a shared memory object when addr
                 is not a multiple of the page size and MAP_FIXED is
                 specified shall return MAP_FAILED and set errno to
                 EINVAL.
                 Reason for omission: The specification is inadequate
                 for testing as it does not specify the conditions
                 under which this error will occur.

          5    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A call to mmap() for a shared memory object when off
                 is not a multiple of the page size shall return
                 MAP_FAILED and set errno to EINVAL.
                 Reason for omission: The specification is inadequate
                 for testing as it does not specify the conditions
                 under which this error will occur.

          6    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A call to mmap() for a shared memory object when
                 MAP_FIXED is not specified and there is insufficient
                 room in the address space of the process to effect
                 the mapping shall return MAP_FAILED and set errno to
                 ENOMEM.
                 Reason for omission: There is no portable test method
                 for this assertion.

          7    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A call to mmap() for a shared memory object when
                 addresses in the range [off, (off+len)] are invalid
                 for the object specified by fildes shall return
                 MAP_FAILED and set errno to ENXIO.

     Page 8                                       (printed 11/23/2000)

     mmap(rt.os/VSRTe5.1.1 (Applied Testing and Techmmap(rt.os/mfiles)

                 Reason for omission: There is no portable test method
                 for this assertion.

          8    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5 and the
               implementation supports MAP_FIXED:
                 A call to mmap() for a shared memory object when
                 MAP_FIXED is specified in flags and the combination
                 of addr, len and off are invalid for the object
                 specified by fildes shall return MAP_FAILED and set
                 errno to ENXIO.
                 Reason for omission: There is no portable test method
                 for this assertion.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 9                                       (printed 11/23/2000)

     mmap_P(rt.oVSRTi5.1.1 (Applied Testing and Temmap_P(rt.os/mfiles)

     NAME
          rt.os/mfiles/mmap_P - map pages of memory testset

     DESCRIPTION
          Tests the mmap() function for conformance to System
          Interfaces and Headers, Issue 5 Page: mmap().
          These tests overlap with those defined for this function in
          VSU for testing mmap() applied to regular files.  They are
          to be used in the POSIX mode of VSRT to allow standalone
          testing of just 1003.1b requirements.

     TESTS
     Compliance
          1    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A successful call to mmap() when fildes is associated
                 with a regular file, the MAP_SHARED flag is set in
                 flags, and the PROT_READ flag is set in prot shall
                 map len bytes at offset off in the file associated
                 with fildes into the address space of the process,
                 allow the mapped area to be read, and return the
                 location in the address space at which the mapping is
                 made.

          2    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               supports MAP_PRIVATE:
                 A successful call to mmap() when fildes is associated
                 with a regular file, the MAP_PRIVATE flag is set in
                 flags, and the PROT_READ flag is set in prot shall
                 map len bytes at offset off in the file associated
                 with fildes into the address space of the process,
                 allow the mapped area to be read, and return the
                 location in the address space at which the mapping is
                 made.

          3    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               supports the use of PROT_EXEC:
                 A successful call to mmap() when fildes is associated
                 with a regular file, the MAP_SHARED flag is set in
                 flags, and the PROT_EXEC flag is set in prot shall
                 map len bytes at offset off in the file associated
                 with fildes into the address space of the process,
                 allow the mapped area to be executed, and return the
                 location in the address space at which the mapping is
                 made.

          4    If _POSIX_MAPPED_FILES is defined or the implementation

     Page 1                                       (printed 11/23/2000)

     mmap_P(rt.oVSRTi5.1.1 (Applied Testing and Temmap_P(rt.os/mfiles)

               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               supports the use of PROT_EXEC and supports the use of
               MAP_PRIVATE:
                 A successful call to mmap() when fildes is associated
                 with a regular file, the MAP_PRIVATE flag is set in
                 flags, and the PROT_EXEC flag is set in prot shall
                 map len bytes at offset off in the file associated
                 with fildes into the address space of the process,
                 allow the mapped area to be executed, and return the
                 location in the address space at which the mapping is
                 made.

          5    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A successful call to mmap() when fildes is associated
                 with a regular file, the MAP_SHARED flag is set in
                 flags, and the PROT_NONE flag is set in prot shall
                 map len bytes at offset off in the file associated
                 with fildes into the address space of the process,
                 not allow the mapped area to be accessed, and return
                 the location in the address space at which the
                 mapping is made.

          6    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               supports MAP_PRIVATE:
                 A successful call to mmap() when fildes is associated
                 with a regular file, the MAP_PRIVATE flag is set in
                 flags, and the PROT_NONE flag is set in prot shall
                 map len bytes at offset off in the file associated
                 with fildes into the address space of the process,
                 not allow the mapped area to be accessed, and return
                 the location in the address space at which the
                 mapping is made.

          7    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A successful call to mmap() when fildes is associated
                 with a regular file, the MAP_SHARED flag is set in
                 flags, and the PROT_WRITE flag is set in prot shall
                 map len bytes at offset off in the file associated
                 with fildes into the address space of the process,
                 allow the mapped area to be written such that write
                 references change the file, and return the location
                 in the address space at which the mapping is made.

          8    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System

     Page 2                                       (printed 11/23/2000)

     mmap_P(rt.oVSRTi5.1.1 (Applied Testing and Temmap_P(rt.os/mfiles)

               Interfaces and Headers, Issue 5 and the implementation
               supports MAP_PRIVATE:
                 A successful call to mmap() when fildes is associated
                 with a regular file, the MAP_PRIVATE flag is set in
                 flags, and the PROT_WRITE flag is set in prot shall
                 map len bytes at offset off in the file associated
                 with fildes into the address space of the process,
                 allow the mapped area to be written such that write
                 references do not change the file, and return the
                 location in the address space at which the mapping is
                 made.

          9    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A successful call to mmap() when fildes is associated
                 with a regular file, the MAP_SHARED flag is set in
                 flags, and the PROT_READ and PROT_WRITE flags are set
                 in prot shall map len bytes at offset off in the file
                 associated with fildes into the address space of the
                 process, allow the mapped area to be read and
                 written, and return the location in the address space
                 at which the mapping is made.

          10   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               supports MAP_PRIVATE:
                 A successful call to mmap() when fildes is associated
                 with a regular file, the MAP_PRIVATE flag is set in
                 flags, and the PROT_READ and PROT_WRITE flags are set
                 in prot shall map len bytes at offset off in the file
                 associated with fildes into the address space of the
                 process, allow the mapped area to be read and
                 written, and return the location in the address space
                 at which the mapping is made.

          11   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               supports MAP_FIXED:
                 A call to mmap() when fildes is associated with a
                 regular file and the MAP_FIXED flag is set in flags
                 shall cause the file associated with fildes to be
                 mapped at an address exactly matching addr.

          12   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A call to mmap() shall zero-fill any partial page at
                 the end of the file.

     Page 3                                       (printed 11/23/2000)

     mmap_P(rt.oVSRTi5.1.1 (Applied Testing and Temmap_P(rt.os/mfiles)

          13   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 The system shall not write out modified portions of
                 the last page of a file mapped by a call to mmap()
                 which are beyond the end of the file.

          14   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 References to mapped pages beyond the page containing
                 the last byte of a file mapped by a call to mmap()
                 shall result in the delivery of a SIGBUS signal.

          15   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 After a successful call to mmap() the mapping created
                 shall be retained across a fork.

          16   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 After a successful call to mmap() a subsequent close
                 operation shall not affect the mapping and changes
                 made to the memory image shall be reflected in the
                 mapped portion of the file when the changes would
                 have been performed in the absence of the close
                 operation.

          17   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 After a call to mmap() when MAP_SHARED is set in
                 flags write references made to the memory region
                 shall be visible in all MAP_SHARED mappings of the
                 same portion of the file by any process.

          18   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               supports MAP_PRIVATE:
                 After a call to mmap() with MAP_PRIVATE set in flags
                 write references to the memory region by the calling
                 process shall not be visible to any process in other
                 mappings of the same portion of the file.

          19   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               supports MAP_PRIVATE:
                 A call to mmap() when MAP_PRIVATE is set in flags and

     Page 4                                       (printed 11/23/2000)

     mmap_P(rt.oVSRTi5.1.1 (Applied Testing and Temmap_P(rt.os/mfiles)

                 write references are made to the memory region shall
                 not change the file.

          20   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 The st_atime field of a file mapped by a call to
                 mmap() shall be marked for update on the first read
                 or write reference to a mapped region.

          21   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 The st_ctime field of a file mapped by a call to
                 mmap() with MAP_SHARED set in flags and PROT_WRITE
                 set in prot shall be marked for update between a
                 write reference to a mapped region and the next call
                 to msync with MS_ASYNC or MS_SYNC.

          22   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 The st_mtime field of a file mapped by a call to
                 mmap() with MAP_SHARED set in flags and PROT_WRITE
                 set in prot shall be marked for update between a
                 write reference to a mapped region and the next call
                 to msync with MS_ASYNC or MS_SYNC.

          23   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 The mapping established by a call to mmap() shall
                 replace any previous mappings for those whole pages
                 containing any part of the address space of the
                 process starting at pa and continuing for len bytes.

     Deviance
          24   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A call to mmap() when fildes is not a valid file
                 descriptor shall return MAP_FAILED and set errno to
                 EBADF.

          25   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A call to mmap() when fildes is not open for reading,
                 regardless of the protection specified, shall return
                 MAP_FAILED and set errno to EACCES.

          26   If _POSIX_MAPPED_FILES is defined or the implementation

     Page 5                                       (printed 11/23/2000)

     mmap_P(rt.oVSRTi5.1.1 (Applied Testing and Temmap_P(rt.os/mfiles)

               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A call to mmap() when fildes is not open for writing
                 and PROT_WRITE is specified for a MAP_SHARED
                 operation shall return MAP_FAILED and set errno to
                 EACCES.

          27   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A call to mmap() when flags does not contain either
                 MAP_PRIVATE or MAP_SHARED shall return MAP_FAILED and
                 set errno to EINVAL.

          28   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               provides a file type for which mmap is not supported:
                 A call to mmap() when fildes refers to an object for
                 which mmap() is not supported shall return MAP_FAILED
                 and set errno to ENODEV.

          29   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               supports MAP_FIXED:
                 A call to mmap() when MAP_FIXED is not specified and
                 there is insufficient room in the address space to
                 effect the mapping.

          30   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               does not support some of the possibly valid values for
               prot:
                 A call to mmap() when the implementation does not
                 support the combination of accesses requested in prot
                 shall return MAP_FAILED and set errno to ENOTSUP.

          31   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               does not support MAP_FIXED:
                 A call to mmap() when MAP_FIXED is specified and the
                 implementation does not support this functionality
                 shall return MAP_FAILED and set errno to ENOTSUP.

          32   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               does not support MAP_PRIVATE:
                 A call to mmap() when MAP_PRIVATE is specified and

     Page 6                                       (printed 11/23/2000)

     mmap_P(rt.oVSRTi5.1.1 (Applied Testing and Temmap_P(rt.os/mfiles)

                 the implementation does not support this
                 functionality shall return MAP_FAILED and set errno
                 to ENOTSUP.

          33   If _POSIX_MAPPED_FILES is not defined and the
               implementation does not support the mmap() function as
               defined in System Interfaces and Headers, Issue 5:
                 A call to mmap() shall return MAP_FAILED and set
                 errno to ENOSYS.

          34   If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               supports MAP_FIXED:
                 A call to mmap() when MAP_FIXED is specified and the
                 range [addr,addr+len] exceeds that allowed for the
                 address space of a process shall return MAP_FAILED
                 and set errno to ENOMEM.

     Untestable Aspects
          1    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A call to mmap() when addr is not 0 shall cause the
                 system to place the memory object near addr and when
                 addr is 0 the system shall have freedom to place the
                 object anywhere.
                 Reason for omission: Specification is inadequate for
                 testing.

          2    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 Updating of the st_ctime and st_mtime fields of a
                 file mapped by a call to mmap() with MAP_SHARED set
                 in flags and PROT_WRITE set in prot when a write
                 reference occurs to a mapped region and no call to
                 msync is made.
                 Reason for omission: No portable way to induce this
                 condition.

          3    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A call to mmap() when the mapping could not be locked
                 in memory, if required by mlockall(), due to a lack
                 of resources shall return MAP_FAILED and set errno to
                 EAGAIN.
                 Reason for omission: No portable test method for this
                 assertion.

          4    If _POSIX_MAPPED_FILES is defined or the implementation

     Page 7                                       (printed 11/23/2000)

     mmap_P(rt.oVSRTi5.1.1 (Applied Testing and Temmap_P(rt.os/mfiles)

               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               supports MAP_FIXED:
                 A call to mmap() when addr is not a multiple of the
                 page size and MAP_FIXED is specified shall return
                 MAP_FAILED and set errno to EINVAL.
                 Reason for omission: The specification is inadequate
                 for testing as it does not specify the conditions
                 under which this error will occur.

          5    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A call to mmap() when off is not a multiple of the
                 page size shall return MAP_FAILED and set errno to
                 EINVAL.
                 Reason for omission: The specification is inadequate
                 for testing as it does not specify the conditions
                 under which this error will occur.

          6    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A call to mmap() when MAP_FIXED is not specified and
                 there is insufficient room in the address space of
                 the process to effect the mapping shall return
                 MAP_FAILED and set errno to ENOMEM.
                 Reason for omission: There is no portable test method
                 for this assertion.

          7    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5:
                 A call to mmap() when addresses in the range [off,
                 (off+len)] are invalid for the object specified by
                 fildes shall return MAP_FAILED and set errno to
                 ENXIO.
                 Reason for omission: There is no portable test method
                 for this assertion.

          8    If _POSIX_MAPPED_FILES is defined or the implementation
               supports the mmap() function as defined in System
               Interfaces and Headers, Issue 5 and the implementation
               supports MAP_FIXED:
                 A call to mmap() when MAP_FIXED is specified in flags
                 and the combination of addr, len and off are invalid
                 for the object specified by fildes shall return
                 MAP_FAILED and set errno to ENXIO.
                 Reason for omission: There is no portable test method
                 for this assertion.

     RELEASE

     Page 8                                       (printed 11/23/2000)

     mmap_P(rt.oVSRTi5.1.1 (Applied Testing and Temmap_P(rt.os/mfiles)

          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 9                                       (printed 11/23/2000)

     mmap_X(rt.oVSRTi5.1.1 (Applied Testing and Temmap_X(rt.os/mfiles)

     NAME
          rt.os/mfiles/mmap_X - map pages of memory testset

     DESCRIPTION
          Tests the mmap() function for conformance to the X/Open
          extensions defined in System Interfaces and Headers, Issue 5
          Page: mmap().
          These tests are supplemental to those defined for this
          function in VSU and in the mmap and mmap_P testsets.  They
          deal with applying mmap() to shared memory objects.

     TESTS
     Compliance
          1    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A call to mmap() when fildes refers to a shared
                 memory object and addr is not a multiple of the page
                 size and MAP_FIXED is specified shall return
                 MAP_FAILED and set errno to EINVAL.

          2    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the mmap() function as defined
               in System Interfaces and Headers, Issue 5:
                 A call to mmap() when fildes refers to a shared
                 memory object and off is not a multiple of the page
                 size shall return MAP_FAILED and set errno to EINVAL.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 1                                       (printed 11/23/2000)

     msync(rt.osVSRTl5.1.1 (Applied Testing and Tecmsync(rt.os/mfiles)

     NAME
          rt.os/mfiles/msync - synchronize memory with physical
          storage testset

     DESCRIPTION
          Tests the msync() function for conformance to System
          Interfaces and Headers, Issue 5 Page: msync().
          These tests are supplemental to those defined for this
          function in VSU and in the msync_P testset.

     TESTS
     Compliance
          1    If _POSIX_MAPPED_FILES and _POSIX_SYNCHRONIZED_IO are
               defined, or the implementation supports the msync()
               function as defined in System Interfaces and Headers,
               Issue 5:
                 A call to msync() when some or all of the addresses
                 in the range [addr,addr+len] are locked and
                 MS_INVALIDATE is specified shall return -1 and set
                 errno to EBUSY.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 1                                       (printed 11/23/2000)

     msync_P(rt.VSRTf5.1.1 (Applied Testing and Tmsync_P(rt.os/mfiles)

     NAME
          rt.os/mfiles/msync_P - synchronize memory with physical
          storage testset

     DESCRIPTION
          Tests the msync() function for conformance to System
          Interfaces and Headers, Issue 5 Page: msync().
          These tests overlap with those defined for this function in
          VSU.  They are to be used in the POSIX mode of VSRT to allow
          standalone testing of just 1003.1b requirements.

     TESTS
     Compliance
          1    If _POSIX_MAPPED_FILES and _POSIX_SYNCHRONIZED_IO are
               defined, or the implementation supports the msync()
               function as defined in System Interfaces and Headers,
               Issue 5:
                 A successful call to msync() when flags contains the
                 flag MS_ASYNC shall write all modified copies of
                 pages in the range [addr,addr+len] to their permanent
                 storage locations using asynchronous writes and
                 return 0.

          2    If _POSIX_MAPPED_FILES and _POSIX_SYNCHRONIZED_IO are
               defined, or the implementation supports the msync()
               function as defined in System Interfaces and Headers,
               Issue 5:
                 A successful call to msync() when flags contains the
                 flag MS_SYNC shall write all modified copies of pages
                 in the range [addr,addr+len] to their permanent
                 storage locations using synchronous writes and return
                 0.

          3    If _POSIX_MAPPED_FILES and _POSIX_SYNCHRONIZED_IO are
               defined, or the implementation supports the msync()
               function as defined in System Interfaces and Headers,
               Issue 5:
                 A successful call to msync() when flags contains the
                 flag MS_INVALIDATE shall invalidate all cached copies
                 of all pages in the range [addr,addr+len] and return
                 0.

          4    If _POSIX_MAPPED_FILES and _POSIX_SYNCHRONIZED_IO are
               defined, or the implementation supports the msync()
               function as defined in System Interfaces and Headers,
               Issue 5:
                 A call to msync() when the mapped file is written to
                 shall mark the st_ctime field of the file for update.

          5    If _POSIX_MAPPED_FILES and _POSIX_SYNCHRONIZED_IO are
               defined, or the implementation supports the msync()
               function as defined in System Interfaces and Headers,

     Page 1                                       (printed 11/23/2000)

     msync_P(rt.VSRTf5.1.1 (Applied Testing and Tmsync_P(rt.os/mfiles)

               Issue 5:
                 A call to msync() when the mapped file is written to
                 shall mark the st_mtime field of the file for update.

     Deviance
          6    This asertion is not in use.

          7    If _POSIX_MAPPED_FILES and _POSIX_SYNCHRONIZED_IO are
               defined, or the implementation supports the msync()
               function as defined in System Interfaces and Headers,
               Issue 5:
                 A call to msync() when pages not mapped are specified
                 shall return -1 and set errno to ENOMEM.

          8    If _POSIX_MAPPED_FILES and _POSIX_SYNCHRONIZED_IO are
               defined, or the implementation supports the msync()
               function as defined in System Interfaces and Headers,
               Issue 5:
                 A call to msync() when flags is invalid shall return
                 -1 and set errno to EINVAL.

          9    If _POSIX_MAPPED_FILES or _POSIX_SYNCHRONIZED_IO are
               not defined, or the implementation does not support the
               msync() function as defined in System Interfaces and
               Headers, Issue 5:
                 A call to msync() shall return -1 and set errno to
                 ENOSYS.

     Untestable Aspects
          1    If _POSIX_MAPPED_FILES and _POSIX_SYNCHRONIZED_IO are
               defined, or the implementation supports the msync()
               function as defined in System Interfaces and Headers,
               Issue 5:
                 A call to msync() when some or all of the addresses
                 in the range [addr,addr+len] are invalid for the
                 address space of the process shall return -1 and set
                 errno to ENOMEM.
                 Reason for omission: There is no portable testmethod
                 for this assertion.

          2    If _POSIX_MAPPED_FILES and _POSIX_SYNCHRONIZED_IO are
               defined, or the implementation supports the msync()
               function as defined in System Interfaces and Headers,
               Issue 5:
                 A call to msync() when addr is not a multiple of the
                 page size may return -1 and set errno to EINVAL.
                 Reason for omission: The specification is inadequate
                 for testing as it does not specify the conditions
                 under which this error will occur.

          3    Use of synchronous or asynchronous writes and achieving
               data integrity file completion on calls to msync().

     Page 2                                       (printed 11/23/2000)

     msync_P(rt.VSRTf5.1.1 (Applied Testing and Tmsync_P(rt.os/mfiles)

               Reason for omission: It is not possible to determine
               whether data has been written to the file system, in a
               portable manner.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 3                                       (printed 11/23/2000)

     munmap(rt.oVSRTi5.1.1 (Applied Testing and Temunmap(rt.os/mfiles)

     NAME
          rt.os/mfiles/munmap - unmap previously mapped addresses
          testset

     DESCRIPTION
          Tests the munmap() function for conformance to System
          Interfaces and Headers, Issue 5 Page: munmap().
          These tests are supplemental to those defined for this
          function in VSU and in the munmap_P testset.

     TESTS
     Compliance
          1    If at least one of _POSIX_MAPPED_FILES and
               _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the munmap() function as
               defined in System Interfaces and Headers, Issue 5.
                 A call to munmap() shall remove any memory locks
                 associated with those entire pages containing any
                 part of the range [addr,addr+len] of the process'
                 address space.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 1                                       (printed 11/23/2000)

     munmap_P(rtVSRTm5.1.1)(Applied Testing and munmap_P(rt.os/mfiles)

     NAME
          rt.os/mfiles/munmap_P - unmap previously mapped addresses
          testset

     DESCRIPTION
          Tests the munmap() function for conformance to System
          Interfaces and Headers, Issue 5 Page: munmap().
          These tests overlap with those defined for this function in
          VSU.  They are to be used in the POSIX mode of VSRT to allow
          standalone testing of just 1003.1b requirements.

     TESTS
     Compliance
          1    If at least one of _POSIX_MAPPED_FILES or
               _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the munmap() function as
               defined in System Interfaces and Headers, Issue 5.
                 A successful call to munmap() shall remove the
                 mappings of the pages in the range [addr,addr+len]
                 established by a prior call to mmap() from the
                 address space of the process and return 0.

          2    If at least one of _POSIX_MAPPED_FILES or
               _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the munmap() function as
               defined in System Interfaces and Headers, Issue 5.
                 A successful call to int munmap(void *addr, size_t
                 len) shall round len up to the next multiple of the
                 page size.

          3    If at least one of _POSIX_MAPPED_FILES or
               _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the munmap() function as
               defined in System Interfaces and Headers, Issue 5.
                 References to unmapped pages after a successful call
                 to munmap() and before any subsequent mapping of the
                 unmapped pages shall result in the delivery of a
                 SIGSEGV signal to the process.

     Deviance
          4    If at least one of _POSIX_MAPPED_FILES or
               _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the munmap() function as
               defined in System Interfaces and Headers, Issue 5.
                 A call to munmap() when addresses in the range
                 [addr,addr+len] are outside the valid range for the
                 address space of the calling process shall return -1
                 and set errno to EINVAL.

          5    If at least one of _POSIX_MAPPED_FILES or
               _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the munmap() function as

     Page 1                                       (printed 11/23/2000)

     munmap_P(rtVSRTm5.1.1)(Applied Testing and munmap_P(rt.os/mfiles)

               defined in System Interfaces and Headers, Issue 5.
                 A call to munmap() when len is 0 shall return -1 and
                 set errno to EINVAL.

          6    If neither _POSIX_MAPPED_FILES nor
               _POSIX_SHARED_MEMORY_OBJECTS is defined and the
               implementation does not support the munmap() function
               as defined in System Interfaces and Headers, Issue 5.
                 A call to munmap() shall return -1 and set errno to
                 ENOSYS.

     Untestable Aspects
          1    If at least one of _POSIX_MAPPED_FILES or
               _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the munmap() function as
               defined in System Interfaces and Headers, Issue 5.
                 A call to munmap() when addr is not a multiple of the
                 page size may return -1 and set errno to EINVAL.
                 Reason for omission: The specification is inadequate
                 for testing as it does not specify the conditions
                 under which this error will occur.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     munmap_X(rtVSRTm5.1.1)(Applied Testing and munmap_X(rt.os/mfiles)

     NAME
          rt.os/mfiles/munmap_X - unmap previously mapped addresses
          testset

     DESCRIPTION
          Tests the munmap() function for conformance to System
          Interfaces and Headers, Issue 5 Page: munmap().
          These tests are supplemental to those defined for this
          function in VSU and in the munmap and munmap_P testsets.
          They deal with applying munmap() to shared memory objects.

     TESTS
     Compliance
          1    If _POSIX_SHARED_MEMORY_OBJECTS is defined or the
               implementation supports the munmap() function as
               defined in System Interfaces and Headers, Issue 5.
                 A call to munmap() when addr argument is not a
                 multiple of the page size shall return -1 and set
                 errno to EINVAL.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 1                                       (printed 11/23/2000)

     mprotect_P(VSRTs5.1.1t(Applied Testing mprotect_P(rt.os/mprotect)

     NAME
          rt.os/mprotect/mprotect_P - set protection of memory mapping
          testset

     DESCRIPTION
          Tests the mprotect() function for conformance to System
          Interfaces and Headers, Issue 5 Page: mprotect().
          These tests overlap with those defined for this function in
          VSU.  They are to be used in the POSIX mode of VSRT to allow
          standalone testing of just 1003.1b requirements.

     TESTS
     Compliance
          1    If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as
               described in System Interfaces and Headers, Issue 5:
                 A successful call to mprotect() when prot has the
                 PROT_READ flag set shall change the access
                 protections for the range [addr,addr+len] to allow
                 the page(s) to be read and return 0.

          2    If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as
               described in System Interfaces and Headers, Issue 5:
                 A successful call to mprotect() when prot has the
                 PROT_WRITE flag set shall change the access
                 protections for the range [addr,addr+len] to allow
                 the page(s) to be written and return 0.

          3    If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as
               described in System Interfaces and Headers, Issue 5:
                 A successful call to mprotect() when prot has the
                 PROT_READ and PROT_WRITE flags set shall change the
                 access protections for the range [addr,addr+len] to
                 allow the page(s) to be read and written and return
                 0.

          4    If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as
               described in System Interfaces and Headers, Issue 5 and
               the implementation supports use of PROT_EXEC:
                 A successful call to mprotect() when prot has the
                 PROT_EXEC flag set shall change the access
                 protections for the range [addr,addr+len] to allow
                 the page(s) to be executed and return 0.

          5    If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as
               described in System Interfaces and Headers, Issue 5:
                 A successful call to mprotect() when prot has the
                 PROT_NONE flag set shall change the access

     Page 1                                       (printed 11/23/2000)

     mprotect_P(VSRTs5.1.1t(Applied Testing mprotect_P(rt.os/mprotect)

                 protections for the range [addr,addr+len] to not
                 allow the page(s) to be accessed and return 0.

          6    If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as
               described in System Interfaces and Headers, Issue 5:
                 A successful call to int mprotect(void *addr, size_t
                 len, int prot) shall round len to the next multiple
                 of the page size.

     Deviance
          7    If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to mprotect() when the memory object was not
                 opened for write and PROT_WRITE was specified for a
                 MAP_SHARED type mapping shall return -1 and set errno
                 to EACCES.

          8    If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to mprotect() when addresses in the range
                 [addr,addr+len] are outside the range allowed for the
                 address space of a process shall return -1 and set
                 errno to ENOMEM.

          9    If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to mprotect() when addresses in the range
                 [addr,addr+len] specify one or more pages that are
                 not mapped shall return -1 and set errno to ENOMEM.

          10   If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as
               described in System Interfaces and Headers, Issue 5 and
               the implementation does not support some of the
               possibly valid values for prot:
                 A call to mprotect() when the implementation does not
                 support the combination of accesses requested in prot
                 shall return -1 and set errno to ENOTSUP.

          11   If _POSIX_MEMORY_PROTECTION is not defined and the
               implementation does not support the mprotect() function
               as described in System Interfaces and Headers, Issue 5:
                 A call to mprotect() shall return -1 and set errno to
                 ENOSYS.

     Untestable Aspects
          1    If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as

     Page 2                                       (printed 11/23/2000)

     mprotect_P(VSRTs5.1.1t(Applied Testing mprotect_P(rt.os/mprotect)

               described in System Interfaces and Headers, Issue 5:
                 A call to mprotect() when prot specifies PROT_WRITE
                 over a MAP_PRIVATE mapping and there are insufficient
                 memory resources to reserve for locking the private
                 pages, if required, shall return -1 and set errno to
                 EAGAIN.
                 Reason for omission: There is no known portable test
                 method for this assertion.

          2    If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to mprotect() when prot specifies PROT_WRITE
                 over a MAP_PRIVATE mapping and it would require more
                 space than the system is able to supply for locking
                 the private pages shall return -1 and set errno to
                 ENOMEM.
                 Reason for omission: There is no known portable test
                 method for this assertion.

          3    If _POSIX_MEMORY_PROTECTION is defined or the
               implementation supports the mprotect() function as
               described in System Interfaces and Headers, Issue 5:
                 A call to mprotect() when the value of addr is not a
                 multiple of the page size may return -1 and set errno
                 to ENOMEM.
                 Reason for omission: The specification is inadequate
                 for testing as it does not specify under what
                 circumstances this error may occur.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 3                                       (printed 11/23/2000)

     chroot(XOPEN.os/proRelease 4.4.1 (UniSoftchroot(XOPEN.os/procenv)

     NAME
          XOPEN.os/procenv/chroot - change root directory testset

     DESCRIPTION
          Chroot tests the chroot() system call interface for
          conformance to the XSI System Interfaces Page:chroot()

     TESTS
     Compliance
          1    The directory name pointed to by path becomes the
               starting point for path searches beginning with "/";

          2    There is no change in the user's working directory;

          3    the parent directory ("..") of the new root points
               (logically) to the root itself; access to files outside
               the subtree rooted at the root directory by processes
               using this root is denied;

          4    The root directory is inherited by all processes
               created via
               a. a fork() system call;
               b. an exec() system call;

     Deviance
          5    ENOTDIR in errno root not changed and -1 returned by
               chroot() if any component of the path name is not a
               directory;

          6    ENOENT in errno root not changed and -1 returned by
               chroot() if the named directory does not exist;

          7    If _POSIX_PATH_MAX <= {PATH_MAX} <= PCTS_PATH_MAX, then
               ENAMETOOLONG in errno root not changed and -1 returned
               by chroot() if path argument exceeds PATH_MAX
               characters;
                                      otherwise
               a call to chroot() when the length of the path argument
               equals PCTS_PATH_MAX does not give an ENAMETOOLONG
               error.

          8    For the XNFS specification:
                   Not in use.
               For the XSH specification:
                   If _POSIX_NO_TRUNC is in effect:
                       If _POSIX_NAME_MAX <= {NAME_MAX} <=
                       PCTS_NAME_MAX, then ENAMETOOLONG in errno root
                       not changed and -1 returned by chroot() if a
                       component of the path argument exceeds NAME_MAX
                       characters;
                                          otherwise
                       a call to chroot() when the length of a

     Page 1                                       (printed 11/23/2000)

     chroot(XOPEN.os/proRelease 4.4.1 (UniSoftchroot(XOPEN.os/procenv)

                       component of path equals PCTS_NAME_MAX does not
                       give an ENAMETOOLONG error.

          9    EPERM in errno root not changed and -1 returned by
               chroot() if the effective user ID is not super user;

          10   For the XNFS specification:
                   If {_POSIX_NO_TRUNC} is defined on the client and
                   {NAME_MAX} on the client is less than or equal to
                   PCTS_NAME_MAX:
                       When the length of a pathname component of path
                       is longer than {NAME_MAX} on the client, then a
                       call to chroot(path) returns a value of -1 and
                       sets errno to ENAMETOOLONG.
               For the XSH specification:
                   Not in use.

          11   For the XNFS specification:
                   If {_POSIX_NO_TRUNC} is defined on the server and
                   {NAME_MAX} on the server is less than or equal to
                   PCTS_NAME_MAX and {NAME_MAX} on the server is less
                   than NFS_MAXNAMLEN and {NAME_MAX} on the server is
                   less than {NAME_MAX} on the client:
                       When the length of a pathname component of path
                       is longer than {NAME_MAX} on the server, then a
                       call to chroot(path) returns a value of -1 and
                       sets errno to ENAMETOOLONG.
               For the XSH specification:
                   Not in use.

          12   For the XNFS specification:
                   If {_POSIX_NO_TRUNC} is defined on the client and
                   {NAME_MAX} on the client is greater than or equal
                   to NFS_MAXNAMLEN and {_POSIX_NO_TRUNC} is defined
                   on the server and {NAME_MAX} on the server is
                   greater than or equal to NFS_MAXNAMLEN:
                       When the length of a pathname component of path
                       is equal to NFS_MAXNAMLEN, then a call to
                       chroot(path) does not give an ENAMETOOLONG
                       error.
               For the XSH specification:
                   Not in use.

          13   For the XNFS specification:
                   If {_POSIX_NO_TRUNC} is defined on the client and
                   {NAME_MAX} on the client is greater than or equal
                   to NFS_MAXNAMLEN and {_POSIX_NO_TRUNC} is not
                   defined on the server:
                       When the length of a pathname component of path
                       is equal to NFS_MAXNAMLEN, then a call to
                       chroot(path) does not give an ENAMETOOLONG
                       error.

     Page 2                                       (printed 11/23/2000)

     chroot(XOPEN.os/proRelease 4.4.1 (UniSoftchroot(XOPEN.os/procenv)

               For the XSH specification:
                   Not in use.

          14   For the XNFS specification:
                   When chroot() attempts to change the root directory
                   to a directory on a remote file system and the
                   server maps the process's effective user ID and
                   search permission is denied for a component of the
                   new root directory's path prefix, then -1 is
                   returned, errno is set to EACCES and the root
                   directory is not changed.
               For the XSH specification:
                   Not in use.

     Untestable Aspects
          1    EACCES in errno root not changed and -1 returned by
               chroot() if search permission is denied for a component
               of path.
               Reason for omission: This can only occur on a system
               where appropriate privileges deny search permission
               while allowing a process to change its root directory.
               On other systems an EPERM condition would be expected.

     UNDEFINED ASPECTS
          1    what happens when the user's current working directory
               lies outside the new root subtree? No assumption made.

     SPECIAL CONDITIONS
          1    This testset should be run using a set-user-ID root
               file.

     OUTPUTS
     Tests:
          1    Pass/Fail/Unsupported indication - failure information
               includes expected and detected directories;

          2    Pass/Fail indication - failure information includes
               expected and detected directories;

          3    Pass/Fail indication only;

          4    Pass/Fail indication - failure information includes
               expected and detected values obtained from a stat()
               system call on the process's root directory;

          5-9  Pass/Fail indication - failure information includes
               detected errno and expected errno.

          10-14
               Pass/Fail/Unsupported indication - failure information
               includes detected errno and expected errno.

     Page 3                                       (printed 11/23/2000)

     chroot(XOPEN.os/proRelease 4.4.1 (UniSoftchroot(XOPEN.os/procenv)

     DELETIONS
          Test 9 will be deleted if the calling process has super-user
          privileges.

     PARAMETERS
          None

     RELEASE
          4.4.1 (06/09/97)

     Page 4                                       (printed 11/23/2000)

     cuserid(XOPEN.os/prRelease 4.4.1 (UniSofcuserid(XOPEN.os/procenv)

     NAME
          XOPEN.os/procenv/cuserid - get real or effective user name

     DESCRIPTION
          Tests the cuserid(), system call interface for conformance
          to the XSI System Interfaces Page:cuserid()

     TESTS
     Compliance
          1    A successful call to cuserid() when the argument is not
               a NULL pointer returns its argument which addresses a
               string containing the real or effective user name
               associated with the current process.
               In XPG3 mode a Warning result is given if the real user
               name is returned rather than the effective user name.

          2    A successful call to cuserid() when the argument is a
               NULL pointer returns a pointer to the real or effective
               user name associated with the current process.
               In XPG3 mode a Warning result is given if the real user
               name is returned rather than the effective user name.

          3    An unsuccessful call to cuserid() when the login name
               cannot be found and the argument is not a NULL pointer,
               returns the argument and places a NULL character at the
               address pointed to by the argument.

          4    An unsuccessful call to cuserid() when the login name
               cannot be found and the argument is a NULL pointer,
               returns a NULL pointer.

     OUTPUTS
     Tests:
          1-2  Pass/Fail/Warning indication - failure information
               includes expected and detected return values.

          3-4  Pass/Fail indication - failure information includes
               expected and detected return values.

     PARAMETERS
          1    VSX_TTYUSER : login name of the user running the tests.
               Used in tests 1-2.

          2    VSX_UNUSED_UID : A valid user ID which does not have an
               entry in the password database.  Used in tests 3-4.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     nice(XOPEN.os/proceRelease 4.4.1 (UniSoft Lnice(XOPEN.os/procenv)

     NAME
          XOPEN.os/procenv/nice - change priority of a process testset

     DESCRIPTION
          Nice tests the nice() system call interface for conformance
          to the XSI System Interfaces Page:nice()

     TESTS
     Compliance
          1    The current process's nice value is a positive number
               between 0 and 2*[NZERO]-1.

          2    The new nice value minus NZERO is returned to the
               process if call successfully completed.

          3    The nice value associated with a process is inherited
               across fork() system calls.

          4    The nice value associated with a process is inherited
               across exec() system calls.

          5    The nice value is correctly set when incr is a positive
               integer and that the resulting nice value stays below
               the maximium limit of 2*[NZERO]-1.

          6    The nice value is correctly set by super-user when incr
               is a negative integer and that the resulting nice value
               stays above the minimum limit of 0.

          7    The nice value is correctly set when incr is a positive
               integer and that the request would exceed the maximum
               limit of 2*[NZERO]-1.

          8    setting of the correct nice value by super-user when
               incr is a negative integer and that the request would
               be less than the minimum limit of 0.

     Deviance
          9    EPERM in errno, nice value unchanged and -1 returned by
               nice() if incr is negative or greater than 2*[NZERO]
               and the effective user ID of the calling process is not
               super-user.

     Untestable Aspects
          1    processes with lower nice values should have higher CPU
               priorities
               Reason for omission:  there is no method of measuring
               the variation in CPU priorities and the results could
               be very implementation dependent.

     SPECIAL CONDITIONS
          1    Super-user privileges required to run tests 3 and 5.

     Page 1                                       (printed 11/23/2000)

     nice(XOPEN.os/proceRelease 4.4.1 (UniSoft Lnice(XOPEN.os/procenv)

     OUTPUTS
     Tests:
          1-4  Pass/Fail indication - failure information includes
               expected and detected nice values.

          5    Pass/Fail indication - failure information includes
               expected and detected errno.

     DELETIONS
          Tests 6 and 8 will be deleted if the effective user-ID of
          the calling process is not super-user.

     PARAMETERS
          1    VSX_NICE : if defined, tests in the nice testset are
               performed.

     SEE ALSO
          exec(2), fork(os.knl/proc), exec(os.knl/proc).

     AUTHOR
          Manucher Ghezel-Ayagh, UniSoft Ltd.

     RELEASE
          4.4.1 (06/09/97)

     Page 2                                       (printed 11/23/2000)

     nice_X(rt.oVSRTo5.1.1 (Applied Testing and Tnice_X(rt.os/procenv)

     NAME
          rt.os/procenv/nice_X - change nice value of a process
          testset

     DESCRIPTION
          Tests the nice() function for conformance to the X/Open
          extensions defined in System Interfaces and Headers, Issue 5
          Page: nice().
          These tests are supplemental to those defined for this
          function in VSX and VSU, covering just requirements unique
          to the Realtime Feature Group.

     TESTS
          1    A call to nice() shall have no effect on the priority
               of processes or threads with policy SCHED_FIFO or
               SCHED_RR.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 1                                       (printed 11/23/2000)

     putenv(XOPEN.os/proRelease 4.4.4 (UniSoftputenv(XOPEN.os/procenv)

     NAME
          XOPEN.os/procenv/putenv - change or add value to environment
          testset

     DESCRIPTION
          Putenv tests the putenv() subroutine interface for
          conformance to the XSI System Interfaces Page:putenv()

     TESTS
     Compliance
          1    When str is of the form "var=value", and var exists in
               the environment, then putenv(str) alters the value of
               the environment variable var to equal value, in such as
               way that altering str will change the environment, and
               returns zero.

          2    When str is of the form "var=value", and var does not
               exist in the environment, then putenv(str) creates the
               environment variable var and sets it equal to value, in
               such as way that altering str will change the
               environment, and returns zero.

     Untestable Aspects
          1    putenv() returns a non-zero value when it is unable to
               obtain enough memory for an expanded environment.

     OUTPUTS
     Tests:
          1-2  Pass/Fail indication - failure information includes
               detected and expected return value;

     RELEASE
          4.4.4 (07/19/99)

     Page 1                                       (printed 11/23/2000)

     ulimit(XOPEN.os/proRelease 4.4.1 (UniSoftulimit(XOPEN.os/procenv)

     NAME
          XOPEN.os/procenv/ulimit - get and set user limits testset

     DESCRIPTION
          Ulimit tests the ulimit() system call interface for
          conformance to the XSI System Interfaces Page:ulimit()

     TESTS
     Compliance
          1    The file size limit of the process expressed in units
               of 512-byte blocks returned to the calling process,
               when cmd = UL_GETFSIZE.

          2    Files of any size may be read by any process, but only
               those with maximum size less than or equal to the value
               returned by ulimit() may be written.

          3    The file size limit of a non super user process is set
               to the value of newlimit , if cmd = UL_SETFSIZE and
               newlimit is less than the current file size limit.

          4    The file size limit of a process is increased or
               decreased to the value of newlimit, when cmd =
               UL_SETFSIZE and effective user ID of the process is
               super user.

     Deviance
          5    EPERM in errno, limits unchanged and -1 returned by
               ulimit() if a process with an effective user ID other
               than super user attempts to increase its file size
               limit.

          6    EINVAL in errno, limits unchanged and -1 returned by
               ulimit() when the command is not a valid value.

     Associated Tests
          1    see fork(os.knl/proc) and exec(os.knl/proc) test for
               the inheritance of file size limit across fork() and
               exec() sytem calls.

     UNDEFINED ASPECTS
          1    value of "errno" undefined, when an invalid value for
               cmd is specified. No assumption is made.

     SPECIAL CONDITIONS
          1    Super-user privileges are required to run test 4.

     OUTPUTS
     Tests:
          1-2  Pass/Fail indication only.

          3-4  Pass/Fail indication - failure information includes

     Page 1                                       (printed 11/23/2000)

     ulimit(XOPEN.os/proRelease 4.4.1 (UniSoftulimit(XOPEN.os/procenv)

               expected and detected file size limits.

          5-6  Pass/Fail indication - failure information includes
               detected and expected errno.

     DELETIONS
          Test 4 will be deleted if the effective user-ID of the
          calling process is not super-user.
          Test 5 will be deleted if the effective user-ID of the
          calling process is super-user.

     PARAMETERS
          1    VSX_ULIMIT_BLKS : contains  the smallest number of 512
               byte blocks for which a file size limit set with
               ulimit() will function correctly (-1 if not supported).

     RELEASE
          4.4.1 (06/09/97)

     Page 2                                       (printed 11/23/2000)

     execl(rt.osVSRTc5.1.1 (Applied Testing and Texecl(rt.os/procprim)

     NAME
          rt.os/procprim/execl - execute a file testset

     DESCRIPTION
          Tests the execl() function for conformance to System
          Interfaces and Headers, Issue 5 Page: exec().
          These tests are supplemental to those defined for this
          function in VSX and VSU, covering just requirements unique
          to the Realtime Feature Group.

     TESTS
     Compliance
          1    If _POSIX_SEMAPHORES is defined:
                 On a call to execl() all named semaphores that are
                 open in the calling process shall be closed as if by
                 a call to sem_close().

          2    If _POSIX_MAPPED_FILES or _POSIX_SHARED_MEMORY_OBJECTS
               is defined:
                 On a call to execl() memory mappings created in the
                 process shall be unmapped before the address space is
                 rebuilt for the new process image.

          3    If _POSIX_PRIORITY_SCHEDULING is defined:
                 On a call to execl(), for the SCHED_FIFO and SCHED_RR
                 scheduling policies, the scheduling policy and
                 priority settings shall not be changed.

          4    If _POSIX_TIMERS is defined:
                 On a call to execl(), per-process timers created by
                 the calling process shall be deleted before replacing
                 the current process image with the new process image.

          5    If _POSIX_MESSAGE_PASSING is defined:
                 On a call to execl(), all open message queue
                 descriptors in the calling process shall be closed,
                 as described in mq_close().

     Untestable Aspects
          1    If _POSIX_MEMLOCK is defined:
                 On a call to execl() memory locks established by the
                 calling process via calls to mlockall() or mlock()
                 shall be removed.
                 Reason for omission: There is no portable test method
                 for this assertion.

          2    If _POSIX_MEMLOCK is defined:
                 On a call to execl() if locked pages in the address
                 space of the calling process are also mapped into the
                 address space of other processes and are locked by
                 these processes, the locks established by those
                 processes shall not be affected.

     Page 1                                       (printed 11/23/2000)

     execl(rt.osVSRTc5.1.1 (Applied Testing and Texecl(rt.os/procprim)

                 Reason for omission: There is no portable test method
                 for this assertion.

          3    If _POSIX_ASYNCHRONOUS_IO is defined and the
               implementation does not cancel all outstanding
               asynchronous I/O operations when execl() is called:
                 When asynchronous I/O operations are outstanding when
                 execl() is called, operations which are not cancelled
                 shall complete as if the execl() call had not
                 occurred, but any associated signal notifications
                 shall be suppressed.
                 Reason for omission: There is no reliable test method
                 for this assertion.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     execle(rt.oVSRTo5.1.1)(Applied Testing and execle(rt.os/procprim)

     NAME
          rt.os/procprim/execle - execute a file testset

     DESCRIPTION
          Tests the execle() function for conformance to System
          Interfaces and Headers, Issue 5 Page: exec().
          These tests are supplemental to those defined for this
          function in VSX and VSU, covering just requirements unique
          to the Realtime Feature Group.

     TESTS
     Compliance
          1    If _POSIX_SEMAPHORES is defined:
                 On a call to execle() all named semaphores that are
                 open in the calling process shall be closed as if by
                 a call to sem_close().

          2    If _POSIX_MAPPED_FILES or _POSIX_SHARED_MEMORY_OBJECTS
               is defined:
                 On a call to execle() memory mappings created in the
                 process shall be unmapped before the address space is
                 rebuilt for the new process image.

          3    If _POSIX_PRIORITY_SCHEDULING is defined:
                 On a call to execle(), for the SCHED_FIFO and
                 SCHED_RR scheduling policies, the scheduling policy
                 and priority settings shall not be changed.

          4    If _POSIX_TIMERS is defined:
                 On a call to execle(), per-process timers created by
                 the calling process shall be deleted before replacing
                 the current process image with the new process image.

          5    If _POSIX_MESSAGE_PASSING is defined:
                 On a call to execle(), all open message queue
                 descriptors in the calling process shall be closed,
                 as described in mq_close().

     Untestable Aspects
          1    If _POSIX_MEMLOCK is defined:
                 On a call to execle() memory locks established by the
                 calling process via calls to mlockall() or mlock()
                 shall be removed.
                 Reason for omission: There is no portable test method
                 for this assertion.

          2    If _POSIX_MEMLOCK is defined:
                 On a call to execle() if locked pages in the address
                 space of the calling process are also mapped into the
                 address space of other processes and are locked by
                 these processes, the locks established by those
                 processes shall not be affected.

     Page 1                                       (printed 11/23/2000)

     execle(rt.oVSRTo5.1.1)(Applied Testing and execle(rt.os/procprim)

                 Reason for omission: There is no portable test method
                 for this assertion.

          3    If _POSIX_ASYNCHRONOUS_IO is defined and the
               implementation does not cancel all outstanding
               asynchronous I/O operations when execle() is called:
                 When asynchronous I/O operations are outstanding when
                 execle() is called, operations which are not
                 cancelled shall complete as if the execle() call had
                 not occurred, but any associated signal notifications
                 shall be suppressed.
                 Reason for omission: There is no reliable test method
                 for this assertion.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     execlp(rt.oVSRTo5.1.1)(Applied Testing and execlp(rt.os/procprim)

     NAME
          rt.os/procprim/execlp - execute a file testset

     DESCRIPTION
          Tests the execlp() function for conformance to System
          Interfaces and Headers, Issue 5 Page: exec().
          These tests are supplemental to those defined for this
          function in VSX and VSU, covering just requirements unique
          to the Realtime Feature Group.

     TESTS
     Compliance
          1    If _POSIX_SEMAPHORES is defined:
                 On a call to execlp() all named semaphores that are
                 open in the calling process shall be closed as if by
                 a call to sem_close().

          2    If _POSIX_MAPPED_FILES or _POSIX_SHARED_MEMORY_OBJECTS
               is defined:
                 On a call to execlp() memory mappings created in the
                 process shall be unmapped before the address space is
                 rebuilt for the new process image.

          3    If _POSIX_PRIORITY_SCHEDULING is defined:
                 On a call to execlp(), for the SCHED_FIFO and
                 SCHED_RR scheduling policies, the scheduling policy
                 and priority settings shall not be changed.

          4    If _POSIX_TIMERS is defined:
                 On a call to execlp(), per-process timers created by
                 the calling process shall be deleted before replacing
                 the current process image with the new process image.

          5    If _POSIX_MESSAGE_PASSING is defined:
                 On a call to execlp(), all open message queue
                 descriptors in the calling process shall be closed,
                 as described in mq_close().

     Untestable Aspects
          1    If _POSIX_MEMLOCK is defined:
                 On a call to execlp() memory locks established by the
                 calling process via calls to mlockall() or mlock()
                 shall be removed.
                 Reason for omission: There is no portable test method
                 for this assertion.

          2    If _POSIX_MEMLOCK is defined:
                 On a call to execlp() if locked pages in the address
                 space of the calling process are also mapped into the
                 address space of other processes and are locked by
                 these processes, the locks established by those
                 processes shall not be affected.

     Page 1                                       (printed 11/23/2000)

     execlp(rt.oVSRTo5.1.1)(Applied Testing and execlp(rt.os/procprim)

                 Reason for omission: There is no portable test method
                 for this assertion.

          3    If _POSIX_ASYNCHRONOUS_IO is defined and the
               implementation does not cancel all outstanding
               asynchronous I/O operations when execlp() is called:
                 When asynchronous I/O operations are outstanding when
                 execlp() is called, operations which are not
                 cancelled shall complete as if the execlp() call had
                 not occurred, but any associated signal notifications
                 shall be suppressed.
                 Reason for omission: There is no reliable test method
                 for this assertion.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     execv(rt.osVSRTc5.1.1 (Applied Testing and Texecv(rt.os/procprim)

     NAME
          rt.os/procprim/execv - execute a file testset

     DESCRIPTION
          Tests the execv() function for conformance to System
          Interfaces and Headers, Issue 5 Page: exec().
          These tests are supplemental to those defined for this
          function in VSX and VSU, covering just requirements unique
          to the Realtime Feature Group.

     TESTS
     Compliance
          1    If _POSIX_SEMAPHORES is defined:
                 On a call to execv() all named semaphores that are
                 open in the calling process shall be closed as if by
                 a call to sem_close().

          2    If _POSIX_MAPPED_FILES or _POSIX_SHARED_MEMORY_OBJECTS
               is defined:
                 On a call to execv() memory mappings created in the
                 process shall be unmapped before the address space is
                 rebuilt for the new process image.

          3    If _POSIX_PRIORITY_SCHEDULING is defined:
                 On a call to execv(), for the SCHED_FIFO and SCHED_RR
                 scheduling policies, the scheduling policy and
                 priority settings shall not be changed.

          4    If _POSIX_TIMERS is defined:
                 On a call to execv(), per-process timers created by
                 the calling process shall be deleted before replacing
                 the current process image with the new process image.

          5    If _POSIX_MESSAGE_PASSING is defined:
                 On a call to execv(), all open message queue
                 descriptors in the calling process shall be closed,
                 as described in mq_close().

     Untestable Aspects
          1    If _POSIX_MEMLOCK is defined:
                 On a call to execv() memory locks established by the
                 calling process via calls to mlockall() or mlock()
                 shall be removed.
                 Reason for omission: There is no portable test method
                 for this assertion.

          2    If _POSIX_MEMLOCK is defined:
                 On a call to execv() if locked pages in the address
                 space of the calling process are also mapped into the
                 address space of other processes and are locked by
                 these processes, the locks established by those
                 processes shall not be affected.

     Page 1                                       (printed 11/23/2000)

     execv(rt.osVSRTc5.1.1 (Applied Testing and Texecv(rt.os/procprim)

                 Reason for omission: There is no portable test method
                 for this assertion.

          3    If _POSIX_ASYNCHRONOUS_IO is defined and the
               implementation does not cancel all outstanding
               asynchronous I/O operations when execv() is called:
                 When asynchronous I/O operations are outstanding when
                 execv() is called, operations which are not cancelled
                 shall complete as if the execv() call had not
                 occurred, but any associated signal notifications
                 shall be suppressed.
                 Reason for omission: There is no reliable test method
                 for this assertion.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     execve(rt.oVSRTo5.1.1)(Applied Testing and execve(rt.os/procprim)

     NAME
          rt.os/procprim/execve - execute a file testset

     DESCRIPTION
          Tests the execve() function for conformance to System
          Interfaces and Headers, Issue 5 Page: exec().
          These tests are supplemental to those defined for this
          function in VSX and VSU, covering just requirements unique
          to the Realtime Feature Group.

     TESTS
     Compliance
          1    If _POSIX_SEMAPHORES is defined:
                 On a call to execve() all named semaphores that are
                 open in the calling process shall be closed as if by
                 a call to sem_close().

          2    If _POSIX_MAPPED_FILES or _POSIX_SHARED_MEMORY_OBJECTS
               is defined:
                 On a call to execve() memory mappings created in the
                 process shall be unmapped before the address space is
                 rebuilt for the new process image.

          3    If _POSIX_PRIORITY_SCHEDULING is defined:
                 On a call to execve(), for the SCHED_FIFO and
                 SCHED_RR scheduling policies, the scheduling policy
                 and priority settings shall not be changed.

          4    If _POSIX_TIMERS is defined:
                 On a call to execve(), per-process timers created by
                 the calling process shall be deleted before replacing
                 the current process image with the new process image.

          5    If _POSIX_MESSAGE_PASSING is defined:
                 On a call to execve(), all open message queue
                 descriptors in the calling process shall be closed,
                 as described in mq_close().

     Untestable Aspects
          1    If _POSIX_MEMLOCK is defined:
                 On a call to execve() memory locks established by the
                 calling process via calls to mlockall() or mlock()
                 shall be removed.
                 Reason for omission: There is no portable test method
                 for this assertion.

          2    If _POSIX_MEMLOCK is defined:
                 On a call to execve() if locked pages in the address
                 space of the calling process are also mapped into the
                 address space of other processes and are locked by
                 these processes, the locks established by those
                 processes shall not be affected.

     Page 1                                       (printed 11/23/2000)

     execve(rt.oVSRTo5.1.1)(Applied Testing and execve(rt.os/procprim)

                 Reason for omission: There is no portable test method
                 for this assertion.

          3    If _POSIX_ASYNCHRONOUS_IO is defined and the
               implementation does not cancel all outstanding
               asynchronous I/O operations when execve() is called:
                 When asynchronous I/O operations are outstanding when
                 execve() is called, operations which are not
                 cancelled shall complete as if the execve() call had
                 not occurred, but any associated signal notifications
                 shall be suppressed.
                 Reason for omission: There is no reliable test method
                 for this assertion.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     execvp(rt.oVSRTo5.1.1)(Applied Testing and execvp(rt.os/procprim)

     NAME
          rt.os/procprim/execvp - execute a file testset

     DESCRIPTION
          Tests the execvp() function for conformance to System
          Interfaces and Headers, Issue 5 Page: exec().
          These tests are supplemental to those defined for this
          function in VSX and VSU, covering just requirements unique
          to the Realtime Feature Group.

     TESTS
     Compliance
          1    If _POSIX_SEMAPHORES is defined:
                 On a call to execvp() all named semaphores that are
                 open in the calling process shall be closed as if by
                 a call to sem_close().

          2    If _POSIX_MAPPED_FILES or _POSIX_SHARED_MEMORY_OBJECTS
               is defined:
                 On a call to execvp() memory mappings created in the
                 process shall be unmapped before the address space is
                 rebuilt for the new process image.

          3    If _POSIX_PRIORITY_SCHEDULING is defined:
                 On a call to execvp(), for the SCHED_FIFO and
                 SCHED_RR scheduling policies, the scheduling policy
                 and priority settings shall not be changed.

          4    If _POSIX_TIMERS is defined:
                 On a call to execvp(), per-process timers created by
                 the calling process shall be deleted before replacing
                 the current process image with the new process image.

          5    If _POSIX_MESSAGE_PASSING is defined:
                 On a call to execvp(), all open message queue
                 descriptors in the calling process shall be closed,
                 as described in mq_close().

     Untestable Aspects
          1    If _POSIX_MEMLOCK is defined:
                 On a call to execvp() memory locks established by the
                 calling process via calls to mlockall() or mlock()
                 shall be removed.
                 Reason for omission: There is no portable test method
                 for this assertion.

          2    If _POSIX_MEMLOCK is defined:
                 On a call to execvp() if locked pages in the address
                 space of the calling process are also mapped into the
                 address space of other processes and are locked by
                 these processes, the locks established by those
                 processes shall not be affected.

     Page 1                                       (printed 11/23/2000)

     execvp(rt.oVSRTo5.1.1)(Applied Testing and execvp(rt.os/procprim)

                 Reason for omission: There is no portable test method
                 for this assertion.

          3    If _POSIX_ASYNCHRONOUS_IO is defined and the
               implementation does not cancel all outstanding
               asynchronous I/O operations when execvp() is called:
                 When asynchronous I/O operations are outstanding when
                 execvp() is called, operations which are not
                 cancelled shall complete as if the execvp() call had
                 not occurred, but any associated signal notifications
                 shall be suppressed.
                 Reason for omission: There is no reliable test method
                 for this assertion.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     execl_A(GABI.os/pRelease)1.3 (UniSoft Grexecl_A(GABI.os/procprim)

     NAME
          GABI.os/procprim/execl_A - execute a file.

     DESCRIPTION
          Execl_A tests the execl() subroutine call interface for
          conformance to the SVID3 extensions to the XSI System
          Interfaces.  Page:exec(BA_OS)

     TESTS
     Compliance
          1    On a successful call to execl(path, arg0, ...) the
               system resource limits (modifiable by setrlimit()) are
               inherited by the new process image.

     Page 1                                       (printed 11/23/2000)

     execle_A(GABI.os/Releasem1.3 (UniSoft Gexecle_A(GABI.os/procprim)

     NAME
          GABI.os/procprim/execle_A - execute a file.

     DESCRIPTION
          Execle_A tests the execle() subroutine call interface for
          conformance to the SVID3 extensions to the XSI System
          Interfaces.  Page:exec(BA_OS)

     TESTS
     Compliance
          1    On a successful call to execle(path, arg0, ...) the
               system resource limits (modifiable by setrlimit()) are
               inherited by the new process image.

     Page 1                                       (printed 11/23/2000)

     execlp_A(GABI.os/Releasem1.3 (UniSoft Gexeclp_A(GABI.os/procprim)

     NAME
          GABI.os/procprim/execlp_A - execute a file.

     DESCRIPTION
          Execlp_A tests the execlp() subroutine call interface for
          conformance to the SVID3 extensions to the XSI System
          Interfaces.  Page:exec(BA_OS)

     TESTS
     Compliance
          1    On a successful call to execlp(path, arg0, ...) the
               system resource limits (modifiable by setrlimit()) are
               inherited by the new process image.

     Page 1                                       (printed 11/23/2000)

     execv_A(GABI.os/pRelease)1.3 (UniSoft Grexecv_A(GABI.os/procprim)

     NAME
          GABI.os/procprim/execv_A - execute a file.

     DESCRIPTION
          Execv tests the execv() subroutine call interface for
          conformance to the SVID3 extensions to the XSI System
          Interfaces.  Page:exec(BA_OS)

     TESTS
     Compliance
          1    On a successful call to execv(path, argv) the system
               resource limits (modifiable by setrlimit()) are
               inherited by the new process image.

     Page 1                                       (printed 11/23/2000)

     execve(libsys)  Release 1.3 (UniSoft Group Ltd.)   execve(libsys)

     NAME
          libsys/execve - execute a file.

     DESCRIPTION
          Execve tests the execve() subroutine call interface for
          conformance to the SVID3 definition.  Page:exec(BA_OS)

     TESTS
     Compliance
          1    On a successful call to execve(path, argv, envp) the
               system resource limits (modifiable by setrlimit()) are
               inherited by the new process image.

     Page 1                                       (printed 11/23/2000)

     execvp_A(GABI.os/Releasem1.3 (UniSoft Gexecvp_A(GABI.os/procprim)

     NAME
          GABI.os/procprim/execvp_A - execute a file.

     DESCRIPTION
          Execvp tests the execvp() subroutine call interface for
          conformance to the SVID3 extensions to the XSI System
          Interfaces.  Page:exec(BA_OS)

     TESTS
     Compliance
          1    On a successful call to execvp(path, argv) the system
               resource limits (modifiable by setrlimit()) are
               inherited by the new process image.

     Page 1                                       (printed 11/23/2000)

     execl_L(LSB.os/procpRelease 1.1 (UniSoft execl_L(LSB.os/procprim)

     NAME
          LSB.os/procprim/execl_L - execute a file test case

     DESCRIPTION
          This test case tests the execl() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:exec()

     TESTS
          1    When a process has an alternate signal stack, then
               after a successful call to execl(), the stack is not
               preserved in the new process image.

          2    After a successful call to execl(), the SA_ONSTACK flag
               is cleared for all signals.

          3    When the set-user-ID bit of path is set and path
               resides on a file system for which the ST_NOSUID bit is
               set, then after a successful call to execl(path), the
               effective user ID and saved set-user-ID in the new
               process image are not changed.

          4    When the set-group-ID bit of path is set and path
               resides on a file system for which the ST_NOSUID bit is
               set, then after a successful call to execl(path), the
               effective group ID and saved set-group-ID in the new
               process image are not changed.

          5    When a process has a semadj value associated with a
               semaphore, then after a successful call to execl(), the
               semadj value is inherited by the new process image.

          6    When a process has a controlling terminal, then after a
               successful call to execl(), the controlling terminal is
               inherited by the new process image.

          7    After a successful call to execl(), the values of the
               ITIMER_REAL, ITIMER_VIRTUAL and ITIMER_PROF interval
               timers in the calling process are inherited by the new
               process image.

          8    When too many symbolic links are encountered while
               resolving path, then a call to execl(path) returns -1
               with errno set to ELOOP.

     Untestable aspects
          1    After a successful call to execl(), the saved resource
               limits in the new process image are set from those in
               the calling process image.
               Reason for omission:  There is no known reliable test
               method for this assertion.

     Page 1                                       (printed 11/23/2000)

     execl_L(LSB.os/procpRelease 1.1 (UniSoft execl_L(LSB.os/procprim)

          2    When path is a symbolic link and the resolution of path
               produces an intermediate result whose length exceeds
               {PATH_MAX}, then a call to execl(path) returns -1 and
               errno is set to ENAMETOOLONG.
               Reason for omission:  There is no known portable test
               method for this assertion.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 2                                       (printed 11/23/2000)

     execle_L(LSB.os/procRelease 1.1 (UniSoftexecle_L(LSB.os/procprim)

     NAME
          LSB.os/procprim/execle_L - execute a file test case

     DESCRIPTION
          This test case tests the execle() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:exec()

     TESTS
          1    When a process has an alternate signal stack, then
               after a successful call to execle(), the stack is not
               preserved in the new process image.

          2    After a successful call to execle(), the SA_ONSTACK
               flag is cleared for all signals.

          3    When the set-user-ID bit of path is set and path
               resides on a file system for which the ST_NOSUID bit is
               set, then after a successful call to execle(path), the
               effective user ID and saved set-user-ID in the new
               process image are not changed.

          4    When the set-group-ID bit of path is set and path
               resides on a file system for which the ST_NOSUID bit is
               set, then after a successful call to execle(path), the
               effective group ID and saved set-group-ID in the new
               process image are not changed.

          5    When a process has a semadj value associated with a
               semaphore, then after a successful call to execle(),
               the semadj value is inherited by the new process image.

          6    When a process has a controlling terminal, then after a
               successful call to execle(), the controlling terminal
               is inherited by the new process image.

          7    After a successful call to execle(), the values of the
               ITIMER_REAL, ITIMER_VIRTUAL and ITIMER_PROF interval
               timers in the calling process are inherited by the new
               process image.

          8    When too many symbolic links are encountered while
               resolving path, then a call to execle(path) returns -1
               with errno set to ELOOP.

     Untestable aspects
          1    After a successful call to execle(), the saved resource
               limits in the new process image are set from those in
               the calling process image.
               Reason for omission:  There is no known reliable test
               method for this assertion.

     Page 1                                       (printed 11/23/2000)

     execle_L(LSB.os/procRelease 1.1 (UniSoftexecle_L(LSB.os/procprim)

          2    When path is a symbolic link and the resolution of path
               produces an intermediate result whose length exceeds
               {PATH_MAX}, then a call to execle(path) returns -1 and
               errno is set to ENAMETOOLONG.
               Reason for omission:  There is no known portable test
               method for this assertion.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 2                                       (printed 11/23/2000)

     execlp_L(LSB.os/procRelease 1.1 (UniSoftexeclp_L(LSB.os/procprim)

     NAME
          LSB.os/procprim/execlp_L - execute a file test case

     DESCRIPTION
          This test case tests the execlp() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:exec()

     TESTS
          1    When a process has an alternate signal stack, then
               after a successful call to execlp(), the stack is not
               preserved in the new process image.

          2    After a successful call to execlp(), the SA_ONSTACK
               flag is cleared for all signals.

          3    When the set-user-ID bit of file is set and file
               resides on a file system for which the ST_NOSUID bit is
               set, then after a successful call to execlp(file), the
               effective user ID and saved set-user-ID in the new
               process image are not changed.

          4    When the set-group-ID bit of file is set and file
               resides on a file system for which the ST_NOSUID bit is
               set, then after a successful call to execlp(file), the
               effective group ID and saved set-group-ID in the new
               process image are not changed.

          5    When a process has a semadj value associated with a
               semaphore, then after a successful call to execlp(),
               the semadj value is inherited by the new process image.

          6    When a process has a controlling terminal, then after a
               successful call to execlp(), the controlling terminal
               is inherited by the new process image.

          7    After a successful call to execlp(), the values of the
               ITIMER_REAL, ITIMER_VIRTUAL and ITIMER_PROF interval
               timers in the calling process are inherited by the new
               process image.

          8    When too many symbolic links are encountered while
               resolving file, then a call to execlp(file) returns -1
               with errno set to ELOOP.

     Untestable aspects
          1    After a successful call to execlp(), the saved resource
               limits in the new process image are set from those in
               the calling process image.
               Reason for omission:  There is no known reliable test
               method for this assertion.

     Page 1                                       (printed 11/23/2000)

     execlp_L(LSB.os/procRelease 1.1 (UniSoftexeclp_L(LSB.os/procprim)

          2    When file is a symbolic link and the resolution of file
               produces an intermediate result whose length exceeds
               {PATH_MAX}, then a call to execlp(file) returns -1 and
               errno is set to ENAMETOOLONG.
               Reason for omission:  There is no known portable test
               method for this assertion.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 2                                       (printed 11/23/2000)

     execv_L(LSB.os/procpRelease 1.1 (UniSoft execv_L(LSB.os/procprim)

     NAME
          LSB.os/procprim/execv_L - execute a file test case

     DESCRIPTION
          This test case tests the execv() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:exec()

     TESTS
          1    When a process has an alternate signal stack, then
               after a successful call to execv(), the stack is not
               preserved in the new process image.

          2    After a successful call to execv(), the SA_ONSTACK flag
               is cleared for all signals.

          3    When the set-user-ID bit of path is set and path
               resides on a file system for which the ST_NOSUID bit is
               set, then after a successful call to execv(path), the
               effective user ID and saved set-user-ID in the new
               process image are not changed.

          4    When the set-group-ID bit of path is set and path
               resides on a file system for which the ST_NOSUID bit is
               set, then after a successful call to execv(path), the
               effective group ID and saved set-group-ID in the new
               process image are not changed.

          5    When a process has a semadj value associated with a
               semaphore, then after a successful call to execv(), the
               semadj value is inherited by the new process image.

          6    When a process has a controlling terminal, then after a
               successful call to execv(), the controlling terminal is
               inherited by the new process image.

          7    After a successful call to execv(), the values of the
               ITIMER_REAL, ITIMER_VIRTUAL and ITIMER_PROF interval
               timers in the calling process are inherited by the new
               process image.

          8    When too many symbolic links are encountered while
               resolving path, then a call to execv(path) returns -1
               with errno set to ELOOP.

     Untestable aspects
          1    After a successful call to execv(), the saved resource
               limits in the new process image are set from those in
               the calling process image.
               Reason for omission:  There is no known reliable test
               method for this assertion.

     Page 1                                       (printed 11/23/2000)

     execv_L(LSB.os/procpRelease 1.1 (UniSoft execv_L(LSB.os/procprim)

          2    When path is a symbolic link and the resolution of path
               produces an intermediate result whose length exceeds
               {PATH_MAX}, then a call to execv(path) returns -1 and
               errno is set to ENAMETOOLONG.
               Reason for omission:  There is no known portable test
               method for this assertion.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 2                                       (printed 11/23/2000)

     execve_L(LSB.os/procRelease 1.1 (UniSoftexecve_L(LSB.os/procprim)

     NAME
          LSB.os/procprim/execve_L - execute a file test case

     DESCRIPTION
          This test case tests the execve() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:exec()

     TESTS
          1    When a process has an alternate signal stack, then
               after a successful call to execve(), the stack is not
               preserved in the new process image.

          2    After a successful call to execve(), the SA_ONSTACK
               flag is cleared for all signals.

          3    When the set-user-ID bit of path is set and path
               resides on a file system for which the ST_NOSUID bit is
               set, then after a successful call to execve(path), the
               effective user ID and saved set-user-ID in the new
               process image are not changed.

          4    When the set-group-ID bit of path is set and path
               resides on a file system for which the ST_NOSUID bit is
               set, then after a successful call to execve(path), the
               effective group ID and saved set-group-ID in the new
               process image are not changed.

          5    When a process has a semadj value associated with a
               semaphore, then after a successful call to execve(),
               the semadj value is inherited by the new process image.

          6    When a process has a controlling terminal, then after a
               successful call to execve(), the controlling terminal
               is inherited by the new process image.

          7    After a successful call to execve(), the values of the
               ITIMER_REAL, ITIMER_VIRTUAL and ITIMER_PROF interval
               timers in the calling process are inherited by the new
               process image.

          8    When too many symbolic links are encountered while
               resolving path, then a call to execve(path) returns -1
               with errno set to ELOOP.

     Untestable aspects
          1    After a successful call to execve(), the saved resource
               limits in the new process image are set from those in
               the calling process image.
               Reason for omission:  There is no known reliable test
               method for this assertion.

     Page 1                                       (printed 11/23/2000)

     execve_L(LSB.os/procRelease 1.1 (UniSoftexecve_L(LSB.os/procprim)

          2    When path is a symbolic link and the resolution of path
               produces an intermediate result whose length exceeds
               {PATH_MAX}, then a call to execve(path) returns -1 and
               errno is set to ENAMETOOLONG.
               Reason for omission:  There is no known portable test
               method for this assertion.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 2                                       (printed 11/23/2000)

     execvp_L(LSB.os/procRelease 1.1 (UniSoftexecvp_L(LSB.os/procprim)

     NAME
          LSB.os/procprim/execvp_L - execute a file test case

     DESCRIPTION
          This test case tests the execvp() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:exec()

     TESTS
          1    When a process has an alternate signal stack, then
               after a successful call to execvp(), the stack is not
               preserved in the new process image.

          2    After a successful call to execvp(), the SA_ONSTACK
               flag is cleared for all signals.

          3    When the set-user-ID bit of file is set and file
               resides on a file system for which the ST_NOSUID bit is
               set, then after a successful call to execvp(file), the
               effective user ID and saved set-user-ID in the new
               process image are not changed.

          4    When the set-group-ID bit of file is set and file
               resides on a file system for which the ST_NOSUID bit is
               set, then after a successful call to execvp(file), the
               effective group ID and saved set-group-ID in the new
               process image are not changed.

          5    When a process has a semadj value associated with a
               semaphore, then after a successful call to execvp(),
               the semadj value is inherited by the new process image.

          6    When a process has a controlling terminal, then after a
               successful call to execvp(), the controlling terminal
               is inherited by the new process image.

          7    After a successful call to execvp(), the values of the
               ITIMER_REAL, ITIMER_VIRTUAL and ITIMER_PROF interval
               timers in the calling process are inherited by the new
               process image.

          8    When too many symbolic links are encountered while
               resolving file, then a call to execvp(file) returns -1
               with errno set to ELOOP.

     Untestable aspects
          1    After a successful call to execvp(), the saved resource
               limits in the new process image are set from those in
               the calling process image.
               Reason for omission:  There is no known reliable test
               method for this assertion.

     Page 1                                       (printed 11/23/2000)

     execvp_L(LSB.os/procRelease 1.1 (UniSoftexecvp_L(LSB.os/procprim)

          2    When file is a symbolic link and the resolution of file
               produces an intermediate result whose length exceeds
               {PATH_MAX}, then a call to execvp(file) returns -1 and
               errno is set to ENAMETOOLONG.
               Reason for omission:  There is no known portable test
               method for this assertion.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 2                                       (printed 11/23/2000)

     exec(SOL.os/procprimRelease 1.4 (UniSoft Ltdexec(SOL.os/procprim)

     NAME
          SOL.os/procprim/exec - execute a file

     DESCRIPTION
          Exec tests the exec() subroutine call interface for
          conformance to the Solaris ABI.

     TESTS
     Compliance
          1    The shared memory segments attached to the calling
               process will not be attached to the new process created
               by exec().

          2    Profiling is disabled for the new process created by
               exec().

          3    A new process created by exec() inherits the scheduler
               class from the calling process.

          4    A new process created by exec() inherits the trace flag
               from the calling process.

     Deviance
          5    When an argument is an illegal address, then exec
               returns -1 and sets errno to EFAULT.

     RELEASE
          1.4 (02/11/99)

     Page 1                                       (printed 11/23/2000)

     execl(SOL.os/procpriRelease 1.4 (UniSoft Ltexecl(SOL.os/procprim)

     NAME
          SOL.os/procprim/execl - execute a file

     DESCRIPTION
          Execl tests the execl() subroutine call interface for
          conformance to the Solaris ABI.

     TESTS
     Compliance
          1    The shared memory segments attached to the calling
               process will not be attached to the new process created
               by execl().

     Page 1                                       (printed 11/23/2000)

     execle(SOL.os/procprRelease 1.4 (UniSoft Lexecle(SOL.os/procprim)

     NAME
          SOL.os/procprim/execle - execute a file

     DESCRIPTION
          Execle tests the execle() subroutine call interface for
          conformance to the Solaris ABI.

     TESTS
     Compliance
          1    The shared memory segments attached to the calling
               process will not be attached to the new process created
               by execle().

     Page 1                                       (printed 11/23/2000)

     execlp(SOL.os/procprRelease 1.4 (UniSoft Lexeclp(SOL.os/procprim)

     NAME
          SOL.os/procprim/execlp - execute a file

     DESCRIPTION
          Execlp tests the execlp() subroutine call interface for
          conformance to the Solaris ABI.

     TESTS
     Compliance
          1    The shared memory segments attached to the calling
               process will not be attached to the new process created
               by execlp().

     Page 1                                       (printed 11/23/2000)

     execv(SOL.os/procpriRelease 1.4 (UniSoft Ltexecv(SOL.os/procprim)

     NAME
          SOL.os/procprim/execv - execute a file

     DESCRIPTION
          Execv tests the execv() subroutine call interface for
          conformance to the Solaris ABI.

     TESTS
     Compliance
          1    The shared memory segments attached to the calling
               process will not be attached to the new process created
               by execv().

     Page 1                                       (printed 11/23/2000)

     execve(SOL.os/procprRelease 1.4 (UniSoft Lexecve(SOL.os/procprim)

     NAME
          SOL.os/procprim/execve - execute a file

     DESCRIPTION
          Execve tests the execve() subroutine call interface for
          conformance to the Solaris ABI.

     TESTS
     Compliance
          1    The shared memory segments attached to the calling
               process will not be attached to the new process created
               by execve().

     Page 1                                       (printed 11/23/2000)

     execvp(SOL.os/procprRelease 1.4 (UniSoft Lexecvp(SOL.os/procprim)

     NAME
          SOL.os/procprim/execvp - execute a file

     DESCRIPTION
          Execvp tests the execvp() subroutine call interface for
          conformance to the Solaris ABI.

     TESTS
     Compliance
          1    The shared memory segments attached to the calling
               process will not be attached to the new process created
               by execvp().

     Page 1                                       (printed 11/23/2000)

     fork(rt.os/VSRTp5.1.1 (Applied Testing and Tefork(rt.os/procprim)

     NAME
          rt.os/procprim/fork - create a new process testset

     DESCRIPTION
          Tests the fork() function for conformance to System
          Interfaces and Headers, Issue 5 Page: fork().
          These tests are supplemental to those defined for this
          function in VSX and VSU, covering just requirements unique
          to the Realtime Feature Group.

     TESTS
     Compliance
          1    If _POSIX_SEMAPHORES is defined:
                 On a call to fork() all named semaphores that are
                 open in the calling process shall also be open in the
                 child process.

          2    If _POSIX_MEMLOCK is defined:
                 On a call to fork() the child process shall not
                 inherit any address space memory locks established by
                 the parent process via calls to mlockall() or
                 mlock().

          3    If _POSIX_MAPPED_FILES or _POSIX_SHARED_MEMORY_OBJECTS
               is defined:
                 On a call to fork() memory mappings created in the
                 parent process shall be retained in the child
                 process.

          4    If _POSIX_MAPPED_FILES or _POSIX_SHARED_MEMORY_OBJECTS
               is defined:
                 On a call to fork() MAP_PRIVATE mappings inherited
                 from the parent shall also be MAP_PRIVATE mappings in
                 the child.

          5    If _POSIX_MAPPED_FILES or _POSIX_SHARED_MEMORY_OBJECTS
               is defined:
                 Any modifications to MAP_PRIVATE mappings made by the
                 parent process prior to calling fork() shall be
                 visible to the child process.

          6    If _POSIX_MAPPED_FILES or _POSIX_SHARED_MEMORY_OBJECTS
               is defined:
                 Any modifications to MAP_PRIVATE mappings made by the
                 parent process after calling fork() shall not be
                 visible to the child process.

          7    If _POSIX_MAPPED_FILES or _POSIX_SHARED_MEMORY_OBJECTS
               is defined:
                 Any modifications to MAP_PRIVATE mappings made by the
                 child process after a call to fork() shall be visible
                 only to the child process.

     Page 1                                       (printed 11/23/2000)

     fork(rt.os/VSRTp5.1.1 (Applied Testing and Tefork(rt.os/procprim)

          8    If _POSIX_PRIORITY_SCHEDULING is defined:
                 On a call to fork(), for the SCHED_FIFO and SCHED_RR
                 scheduling policies, the child process shall inherit
                 the policy and priority settings of the parent
                 process.

          9    If _POSIX_TIMERS is defined:
                 On a call to fork(), per-process timers created by
                 the parent process shall be not be inherited by the
                 child process.

          10   If _POSIX_MESSAGE_PASSING is defined:
                 On a call to fork(), the child process shall have its
                 own copy of the message queue descriptors of the
                 parent process.  Each of the message queue
                 descriptors of the child shall refer to the same open
                 message queue description as the corresponding
                 message queue descriptor of the parent.

     Untestable Aspects
          1    If _POSIX_ASYNCHRONOUS_IO is defined:
                 On a call to fork() no asynchronous input or
                 asynchronous output operations shall be inherited by
                 the child.
                 Reason for omission: There is no reliable test method
                 for this assertion.

     RELEASE
          Release VSRT 5.1.1
          Copyright (c) 1997 X/Open Company Ltd., A member of The Open
          Group.
          All rights reserved

     Page 2                                       (printed 11/23/2000)

     fork(SCD.os/procprimRelease 1.2 (UniSoft Ltdfork(SCD.os/procprim)

     NAME
          SCD.os/procprim/fork - create a new process testset

     DESCRIPTION
          Tests the fork(), interface for conformance to the SPARC
          Compliance Definition 2.3 specification.  Page:libsys(8-18)

     TESTS
     Compliance
          1    All of the semadj values for semaphores inherited in
               the child process after a call to fork() are set to
               zero.

          2    The values for it_value and it_interval associated with
               ITIMER_REAL are reset.

     Page 1                                       (printed 11/23/2000)

     kill_X(POSIX.os/proRelease 4.4.1 (UniSofkill_X(POSIX.os/procprim)

     NAME
          POSIX.os/procprim/kill_X - send a signal to a process
          testset

     DESCRIPTION
          Kill_X tests the X/Open extensions to the kill(), system
          call interface for conformance to the XSI System Interfaces
          Page:kill()

     TESTS
     Compliance
          1    A call of kill(pid_t) -1, sig) from a process will send
               the signal sig to all non-system processes to which the
               calling process has permission to send signals.

     OUTPUTS
     Tests:
          1    Pass/Fail indication only.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     fgetpos(XPG4.os/strRelease 4.4.1 (UniSoffgetpos(XPG4.os/streamio)

     NAME
          XPG4.os/streamio/fgetpos - obtain position of  a file
          pointer within a stream testset

     DESCRIPTION
          Fgetpos tests the fgetpos() subroutine call interface for
          conformance to the XSI System Interfaces Page:fgetpos()

     TESTS
     Compliance
          1    fgetpos(stream,pos) stores the current value of the
               file position indicator for stream in to object pointed
               to by pos and returns a value of zero.

     Deviance
          2    Fgetpos() returns non-zero and EBADF in errno when
               stream is unopened.

          3    Fgetpos() returns non-zero and ESPIPE in errno when
               stream is associated with a pipe or FIFO.

     UNDEFINED ASPECTS
          None.

     OUTPUTS
     Tests:
          1    Pass/Fail indication only.

          2-3  Pass/Fail indication - failure information includes
               expected and detected return value.

     PROBLEMS/WARNINGS
          None.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     fgetpos(LFS.os/streRelease 5.1.1 (UniSoftfgetpos(LFS.os/streamio)

     NAME
          LFS.os/streamio/fgetpos - obtain position of  a file pointer
          within a stream testset

     DESCRIPTION
          Fgetpos tests the Large File Summit extensions to the
          fgetpos(), system call interface for conformance to the
          X/Open System Interfaces and Headers, Issue 5 Page:fgetpos()

     TESTS
     Deviance
          1    If the system is able to generate a file description
               with a file pointer that cannot be represented in an
               fpos_t:
                    When the current value of the file position cannot
                    be represented in an object of type fpos_t then a
                    call to fgetpos() returns non-zero and sets errno
                    to EOVERFLOW.

     OUTPUTS
     Tests:
          1    Pass/Fail/Unsupported indication - failure information
               includes expected and detected return value and errno.

     RELEASE
          5.1.1 (04/07/97)

     Page 1                                       (printed 11/23/2000)

     fsetpos(XPG4.os/strRelease 4.4.1 (UniSoffsetpos(XPG4.os/streamio)

     NAME
          XPG4.os/streamio/fsetpos - set position of  a file pointer
          within a stream testset

     DESCRIPTION
          Fsetpos tests the fsetpos() subroutine call interface for
          conformance to the XSI System Interfaces Page:fsetpos()

     TESTS
     Compliance
          1    A call to fsetpos(stream,pos) sets the file position
               indicator for stream according to the value of the
               object pointed to by pos, which is a value obtained
               from an earlier call to fgetpos on the same stream, and
               returns a value of zero.

          2    A successful call to fsetpos() clears the end-of-file
               indicator for the stream.

          3    A successful call to fsetpos() undoes any effects of a
               previous call to ungetc on the same stream.

          4    After a call to fsetpos(), the next operation on any
               update stream may be either input or output.

     Deviance
          5    Fsetpos() returns non-zero and EBADF in errno when
               stream is unopened.

          6    Fsetpos() returns non-zero and ESPIPE in errno when
               stream is associated with a pipe or FIFO.

     UNDEFINED ASPECTS
          None.

     OUTPUTS
     Tests:
          1-4  Pass/Fail indication only.

          5-6  Pass/Fail indication - failure information includes
               expected and detected return value.

     PROBLEMS/WARNINGS
          None.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     mblen(XPG4.os/strinRelease 4.4.1 (UniSoft Ltmblen(XPG4.os/string)

     NAME
          XPG4.os/string/mblen - compute length of multibyte character
          string.

     DESCRIPTION
          Mblen tests the mblen() subroutine call interface for
          conformance to the XSI System Interface Page:mblen()

     TESTS
     Compliance
          1    When s points to n or fewer bytes which form a valid
               multibyte character other than NULL, then a call to
               mblen(s,n) returns the number of bytes in that
               multibyte character.

          2    When s is a null pointer, and multibyte character
               encodings do not have state dependent encodings in the
               current locale, then a call to mblen(s,n) returns a
               value of zero.

          3    When s points to a null byte, then a call to mblen(s,n)
               returns a value of zero.

          4    When s is a null pointer, and the LC_CTYPE category of
               the current locale is set to the 'C' locale, then a
               call to mblen(s,n) returns a value of zero.

          5    When s points to a sequence of n bytes which do not
               form a valid multibyte character, then a call to
               mblen(s,n) returns -1.

     Untestable Aspects
          1    When s is a null pointer, and multibyte character
               encodings have state dependent encodings in the current
               locale, then a call to mblen(s,n) returns a value which
               is not zero.
               Reason for omission:
               The testing of state dependent encodings is outside the
               scope of VSX4.

     OUTPUTS
     Tests:
          1-5  Pass/Fail indication - failure information includes
               expected and actual return values.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     mblen_L(LSB.os/strinRelease 1.1 (UniSoft Ltmblen_L(LSB.os/string)

     NAME
          LSB.os/string/mblen_L - get number of bytes in a character
          test case

     DESCRIPTION
          This test case tests the mblen() system call interface for
          conformance to parts of The Open Group's CAE Specification:
          System Interfaces and Headers, page:mblen()

     TESTS
          1    If the implementation considers certain character
               sequences to be invalid:
                    When the implementation detects an invalid
                    character sequence, then a call to mblen(s, n)
                    returns -1 and sets errno to EILSEQ.

     RELEASE
          LSB-os 1.1 (00/11/23)

     Page 1                                       (printed 11/23/2000)

     mbstowcs(XPG4.os/stRelease 4.4.1 (UniSoftmbstowcs(XPG4.os/string)

     NAME
          XPG4.os/string/mbstowcs - convert multibyte character string
          to wide character string.

     DESCRIPTION
          Mbstowcs tests the mbstowcs() subroutine call interface for
          conformance to the XSI System Interface Page:mbstowcs()

     TESTS
     Compliance
          1    When s points to a string of valid multibyte
               characters, then a call to mbstowcs(pwcs,s,n) places
               the wide character values associated with each
               multibyte character in s into the wide character array
               pointed to by pwcs, stopping after either n wide
               characters have been stored or a wide character with
               value (wchar_t) 0 has been stored and returns the
               number of wide characters stored excluding the
               terminating (wchar_t) 0, if any.

          2    When pwcs is a null pointer, then a call to
               mbstowcs(pwcs,s,n) returns the number of wide
               characters required to store the converted string,
               excluding the terminating (wchar_t) 0.

          3    When s points to a sequence of n bytes which contain an
               invalid multibyte character, then a call to
               mbstowcs(pwcs,s,n) returns (size_t) -1.

          4    When s points to a null byte, then a call to
               mbstowcs(pwcs,s,n) places the value (wchar_t) 0 in the
               object pointed to by pwcs and returns a value of zero.

     OUTPUTS
     Tests:
          1-4  Pass/Fail indication - Failure information includes
               expected and actual return values

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     memmove(XPG4.os/strRelease 3.201 (UniSoft memmove(XPG4.os/string)

     NAME
          ANSI.os/string/memmove - memory copy testset

     DESCRIPTION
          Memmove tests the memmove() subroutine interface for
          conformance to the XSI System Interfaces Page:memmove().

     TESTS
     Compliance
          1    memmove() copies n bytes from the object pointed to by
               s2 to the object pointed to by s1 and returns s1.

          2    If the objects pointed to by s1 and s2 overlap,
               memmove(s1, s2,n) behaves as if n bytes are copied from
               the object pointed to by s2 to a temporary buffer which
               does not overlap either s1 or s2, and then copied to
               the object pointed to by s1.

     OUTPUTS
     Tests:
          1-2  Pass/Fail indication return value and buffer contents.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     wcstombs(XPG4.os/stRelease 4.4.1 (UniSoftwcstombs(XPG4.os/string)

     NAME
          XPG4.os/string/wcstombs - convert multibyte character string
          to wide character string.

     DESCRIPTION
          Wcstombs tests the wcstombs() subroutine call interface for
          conformance to the XSI System Interface Page:wcstombs()

     TESTS
     Compliance
          1    When s is not a null pointer, and pwcs is not a null
               pointer, then a call to wcstombs(s,pwcs,n) stores in
               the array pointed to by s the multibyte character
               representations of the sequence of codes in the array
               pointed to by pwcs stopping if either a null byte is
               stored or the representation of a code would cause more
               than n bytes to be stored, and returns the number of
               bytes stored in s excluding the terminating null byte,
               if any.

          2    When pwcs points to a value of (wchar_t)0, then a call
               to wcstombs(s,pwcs,n) places a null byte in the object
               pointed to by s and returns a value of zero.

          3    When s is a null pointer, then a call to
               wcstombs(s,pwcs,n) returns the number of bytes required
               to store the converted string, excluding the
               terminating null byte.

          4    If an invalid wchar_t value exists for the
               implementation:
                   When there is no valid multibyte character
                   representation for a code in the array pointed to
                   by pwcs which would otherwise be stored in the
                   array pointed to by s, then a call to
                   wcstombs(s,pwcs,n) returns (size_t) -1.

     OUTPUTS
     Tests:
          1-4  Pass/Fail indication - failure information includes
               expected and actual return values.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     wctomb(XPG4.os/striRelease 4.4.1 (UniSoft Lwctomb(XPG4.os/string)

     NAME
          XPG4.os/string/wctomb - convert wide character to multibyte
          character.

     DESCRIPTION
          Wctomb tests the wctomb() subroutine call interface for
          conformance to the XSI System Interface Page:wctomb()

     TESTS
     Compliance
          1    When s is not null and wchar corresponds to a multibyte
               character, then a call to wctomb(s,wchar) places the
               multibyte character in the array pointed to by s and
               returns the number of bytes in that multibyte
               character.

          2    When s is a null pointer, and multibyte character
               encodings do not have state dependent encodings in the
               current locale, then a call to wctomb(s,wchar) returns
               a value of zero.

          3    When s is a null pointer, and the LC_CTYPE category of
               the current locale is set to the 'C' locale, then a
               call to wctomb(s,wchar) returns a value of zero.

          4    If an invalid wchar_t value exists for the
               implementation:
                   When s is not null and wchar does not correspond to
                   a multibyte character, then a call to
                   wctomb(s,wchar) returns -1.

     Untestable Aspects
          1    When s is a null pointer, and multibyte character
               encodings have state dependent encodings in the current
               locale, then a call to wctomb(s,wchar) returns a value
               which is not zero.
               Reason for omission:
               The testing of state dependent encodings is beyond the
               scope of VSX4.

     OUTPUTS
     Tests:
          1-4  Pass/Fail indication - failure information includes
               expected and actual return values.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     clock(XOPEN.os/timeRelease 4.4.1 (UniSoft Ltdclock(XOPEN.os/time)

     NAME
          XOPEN.os/time/clock - report CPU time used testset

     DESCRIPTION
          Clock tests the clock() subroutine interface for conformance
          to the XSI System Interface Page:clock()

     TESTS
     Compliance
          1    If XPG3 mode:
                   A call to clock() returns the amount of CPU time
                   (in microseconds) used since the first call to
                   clock() in the calling process.
               Otherwise:
                   A call to clock() returns the amount of CPU time
                   (in microseconds) used since a time related to the
                   process invocation.

          2    The time reported by clock() is the sum of user and
               system times of the calling process and terminated
               child processes for which it has obtained the wait
               status.
               This test is executed in XPG3 mode only.

     OUTPUTS
     Tests:
          1-2  Pass/Fail indication only.

     PARAMETERS
          VSX_CLOCK_ERR : is needed to obtain the percentage of
          allowable error in the difference between the detected and
          expected return values.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     difftime(XPG4.os/tiRelease 4.4.1 (UniSoft Ldifftime(XPG4.os/time)

     NAME
          XPG4.os/time/difftime - compute difference in seconds
          between two calendar times.

     DESCRIPTION
          Difftime tests the difftime() subroutine call interface for
          conformance to the XSI System Interfaces Page:difftime()

     TESTS
     Compliance
          1    A call to difftime(time1,time2) returns the difference
               in seconds between the two calendar times time1 time2.

     UNDEFINED ASPECTS
          None.

     OUTPUTS
     Tests:
          1    Pass/Fail indication only.

     RELEASE
          4.4.1 (06/09/97)

     Page 1                                       (printed 11/23/2000)

     strptime(XPG4.os/tiRelease 4.4.1 (UniSoft Lstrptime(XPG4.os/time)

     NAME
          XPG4.os/time/strptime - conversion of date and time string
          to tm structure testset

     DESCRIPTION
          Strptime tests the strptime() subroutine interface for
          conformance to the XSI System Interfaces Page:strptime()

     TESTS
     Compliance
          1    If strptime() is supported:
                   When format contains a whitespace character, then
                   strptime() matches this by reading characters from
                   string upto, but not including, the first non-
                   whitespace character.
               Otherwise:
                   A call to strptime() returns NULL and sets errno to
                   ENOSYS.

          2    If strptime() is supported:
                   When format contains an ordinary character (other
                   than a conversion specification character preceded
                   by a %), then strptime() reads the next character
                   from string and the directive succeeds in the case
                   that the two characters match.
               Otherwise:
                   A call to strptime() returns NULL and sets errno to
                   ENOSYS.

          3    If strptime() is supported:
                   When format is a string made up of a series of the
                   following field descriptors :
                   a. d day of month  - 01 to 31 (with or without
                   leading zeros)
                   b. D date in %m/%d/%y format
                   c. H hour   - 00 to 23 (with or without leading
                   zeros)
                   d. I hour   - 01 to 12 (with or without leading
                   zeros)
                   e. j day of year - 001 to 366
                   f. M minute - 00 to 59 (with or without leading
                   zeros)
                   g. m month of year - 01 to 12 (with or without
                   leading zeros)
                   h. n any whitespace character sequence
                   i. r time in %I:%M:%S %p format
                   j. S second - 00 to 61 (with or without leading
                   zeros)
                   k. t any whitespace character sequence
                   l. T time in %H:%M:%S notation
                   m. U week number of year - 00 to 53 (Sunday as
                   first day of week) (with or without leading zeros)

     Page 1                                       (printed 11/23/2000)

     strptime(XPG4.os/tiRelease 4.4.1 (UniSoft Lstrptime(XPG4.os/time)

                   n. w day of week - 0 to 6 (Sunday = 0) (with or
                   without leading zeros)
                   o. W week number of year - 00 to 53 (Monday as
                   first day of week) (with or without leading zeros)
                   p. y last two digits of year - 00 to 99 (with or
                   without leading zeros)
                   q. Y four digit year including century
                   then a call to strptime() reads characters from
                   string and, in the case that these characters match
                   the format of the directive, translates these
                   characters into the appropriate member of the tm
                   structure.  Occurrences of "%%" in the format
                   string are matched against a single "%" and do not
                   affect the tm structure.
               Otherwise:
                   A call to strptime() returns NULL and sets errno to
                   ENOSYS.

          4    If strptime() is supported:
                   When format is a string containing the following
                   field descriptors :
                   a. R time in %H:%M format
                   then a call to strptime() reads characters from
                   string and, in the case that these characters match
                   the format of the directive, translates these
                   characters into the appropriate member of the tm
                   structure.
               Otherwise:
                   A call to strptime() returns NULL and sets errno to
                   ENOSYS.

          5    If strptime() is supported:
                   When format is a string containing the following
                   field descriptors :
                   a. a or A abbreviated or full weekday name - eg.
                   Sun to Sat or Sunday to Saturday
                   b. b, B or h abbreviated or full month name  - eg.
                   Jan to Dec or January to December
                   c. c appropriate date and time as specified in the
                   D_T_FMT string
                   d. p AM/PM string as specified in the AM_STR/PM_STR
                   e. x appropriate date as specified in the D_FMT
                   string
                   f. X appropriate time as specified in the T_FMT
                   string
                   then a call to strptime() reads characters from
                   string and, in the case that these characters match
                   the format of the directive, translates these
                   characters into the appropriate member of the tm
                   structure.
               Otherwise:
                   A call to strptime() returns NULL and sets errno to

     Page 2                                       (printed 11/23/2000)

     strptime(XPG4.os/tiRelease 4.4.1 (UniSoft Lstrptime(XPG4.os/time)

                   ENOSYS.

          6    If strptime() is supported:
                   When langinfo data is not supported for the current
                   locale and format is a not a null string, then
                   strptime() uses the locale information from the 'C'
                   locale to replace the missing information.
               Otherwise:
                   A call to strptime() returns NULL and sets errno to
                   ENOSYS.

          7    If strptime() is supported:
                   A successful call to strptime() returns a pointer
                   to the character in string which follows the last
                   character read in interpreting format .
               Otherwise:
                   A call to strptime() returns NULL and sets errno to
                   ENOSYS.

     Deviance
          8    If strptime() is supported:
                   An unsuccessful call to strptime() returns a null
                   pointer.
               Otherwise:
                   A call to strptime() returns NULL and sets errno to
                   ENOSYS.

     OUTPUTS
     Tests:
          1-6  Pass/Fail indication - failure information includes
               detected and expected date and time information.

          7-8  Pass/Fail indication - failure information includes
               detected and expected return values.

     RELEASE
          4.4.1 (06/09/97)

     Page 3                                       (printed 11/23/2000)

