ansiStdio.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:177k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* ansiStdio.c - ANSI `stdio' documentation */
  2. /* Copyright 1984-2002 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01j,21jan02,jkf  SPR#72774, fread is checking for NULL on wrong arg
  8. 01i,12dec01,jkf  fixing SPR#72128, fread should check for NULL before bcopy.
  9. 01h,11nov01,jkf  SPR#70967, fread() returns wrong value when 3rd arg == 0
  10. 01g,17mar99,jdi  doc: updated w/ info about proj facility (SPR 25727).
  11. 01f,04feb99,dgp  document errno values
  12. 01e,10feb95,jdi  doc format tweak in fopen() and update for rhp changes in 01d.
  13. 01d,24jan95,rhp  doc: avoid 'L' in fprintf() and fscanf(), no long doubles 
  14.                  in VxWorks (see SPR#3886)
  15. 01c,19jul94,dvs  doc tweak (SPR #2512)
  16. 01b,05mar93,jdi  documentation cleanup for 5.1.
  17. 01a,24oct92,smb  created.
  18. */
  19. /*
  20. DESCRIPTION
  21. The header stdio.h declares three types, several macros, and many functions
  22. for performing input and output.
  23. .SS Types
  24. The types declared are `size_t' and:
  25. .iP `FILE' 12
  26. object type capable of recording all the information needed to
  27. control a stream, including its file position indicator, a pointer to its
  28. associated buffer (if any), an error indicator that records whether a
  29. read/write error has occurred, and an end-of-file indicator that records
  30. whether the end of the file has been reached.
  31. .iP `fpos_t'
  32. object type capable of recording all the information needed to
  33. specify uniquely every position within a file.
  34. .SS Macros
  35. The macros are NULL and:
  36. .iP "_IOFBF, _IOLBF, _IONBF" 12 3
  37. expand to integral constant expressions with distinct values, suitable
  38. for use as the third argument to setvbuf().
  39. .iP BUFSIZ
  40. expands to an integral constant expression that is the size of the
  41. buffer used by setbuf().
  42. .iP EOF
  43. expands to a negative integral constant expression that is returned by
  44. several functions to indicate `end-of-file', that is, no more input from a
  45. stream.
  46. .iP FOPEN_MAX
  47. expands to an integral constant expression that is the minimum number of
  48. the files that the system guarantees can be open simultaneously.
  49. .iP FILENAME_MAX
  50. expands to an integral constant expression that is the size needed for an
  51. array of `char' large enough to hold the longest file name string that
  52. can be used.
  53. .iP L_tmpnam
  54. expands to an integral constant expression that is the size needed for
  55. an array of `char' large enough to hold a temporary file name string
  56. generated by tmpnam().
  57. .iP "SEEK_CUR, SEEK_END, SEEK_SET"
  58. expand to integral constant expressions with distinct values suitable
  59. for use as the third argument to fseek().
  60. .iP TMP_MAX
  61. expands to an integral constant expression that is the minimum number of
  62. file names generated by tmpnam() that will be unique.
  63. .iP "`stderr', `stdin', `stdout'"
  64. expressions of type "pointer to FILE" that point to the FILE objects
  65. associated, respectively, with the standard error, input, and output streams.
  66. STREAMS
  67. Input and output, whether to or from physical devices such as terminals and
  68. tape drives, or whether to or from files supported on structured storage
  69. devices, are mapped into logical data streams, whose properties are more
  70. uniform than their various inputs and outputs. Two forms of mapping are
  71. supported: for text streams and for binary streams.
  72. A text stream is an ordered sequence of characters composed into lines,
  73. each line consisting of zero or more characters plus a terminating new-line
  74. character.  Characters may have to be added, altered, or deleted
  75. on input and output to conform to differing conventions for representing
  76. text in the host environment.  Thus, there is no need for a one-to-one
  77. correspondence between the characters in a stream and those in the external
  78. representation.  Data read in from a text stream will necessarily compare
  79. equal to the data that were earlier written out to that stream only if:
  80. the data consists only of printable characters and the control characters
  81. horizontal tab and new-line; no new-line character is immediately preceded
  82. by space characters; and the last character is a new-line character.
  83. Space characters are written out immediately before a new-line character
  84. appears.
  85. A binary stream is an ordered sequence of characters that can transparently
  86. record internal data.  Data read in from a binary stream should compare
  87. equal to the data that was earlier written out to that stream, under the
  88. same implementation.  However, such a stream may have a
  89. number of null characters appended to the end of the stream.
  90. .SS "Environmental Limits"
  91. VxWorks supports text files with lines containing at least 254 characters,
  92. including the terminating new-line character.  The value of the macro
  93. BUFSIZ is 1024.
  94. FILES
  95. A stream is associated with an external file (which may be a physical
  96. device) by opening a file, which may involve creating a new file.
  97. Creating an existing file causes its former contents to be discarded, if
  98. necessary.  If a file can support positioning requests (such as a disk
  99. file, as opposed to a terminal), then a file position indicator associated
  100. with the stream is positioned at the start (character number zero) of the
  101. file.  The file position indicator is maintained by subsequent reads,
  102. writes, and positioning requests, to facilitate an orderly progression
  103. through the file.  All input takes place as if characters were read by
  104. successive calls to fgetc(); all output takes place as if characters were
  105. written by successive calls to fputc().
  106. Binary files are not truncated, except as defined in fopen() documentation.
  107. When a stream is unbuffered, characters are intended to appear from the
  108. source or at the destination as soon as possible.  Otherwise characters
  109. may be accumulated and transmitted to or from the host environment as a
  110. block.  When a stream is fully buffered, characters are intended to be
  111. transmitted to or from the host environment as a block when the buffer is
  112. filled.  When a stream is line buffered, characters are intended to be
  113. transmitted to or from the host environment as a block when a new-line
  114. character is encountered.  Furthermore, characters are intended to be
  115. transmitted as a block to the host environment when a buffer is filled,
  116. when input is requested on an unbuffered stream, or when input is requested on
  117. a line-buffered stream that requires the transmission of characters from
  118. the host environment.  VxWorks supports these characteristics via the
  119. setbuf() and setvbuf() functions.
  120. A file may be disassociated from a controlling stream by closing the file.
  121. Output streams are flushed (any unwritten buffer contents are transmitted
  122. to the host environment) before the stream is disassociated from the file.
  123. The value of a pointer to a FILE object is indeterminate after the associated
  124. file is closed (including the standard text streams).
  125. The file may be subsequently reopened, by the same or another program
  126. execution, and its contents reclaimed or modified (if it can be repositioned
  127. at its start).
  128. TASK TERMINATION
  129. ANSI specifies that if the main function returns to its original caller or
  130. if exit() is called, all open files are closed (and hence all output
  131. streams are flushed) before program termination.  This does f3notfP
  132. happen in VxWorks.  The exit() function does not close all files opened
  133. for that task.  A file opened by one task may be used and closed by another.
  134. Unlike in UNIX, when a VxWorks task exits, it is the responsibility of the
  135. task to fclose() its file pointers, except `stdin', `stdout', and
  136. `stderr'.  If a task is to be terminated asynchronously, use kill() and
  137. arrange for a signal handler to clean up.
  138. The address of the FILE object used to control a stream may be significant;
  139. a copy of a FILE object may not necessarily serve in place of the original.
  140. At program startup, three text streams are predefined and need not be opened
  141. explicitly:  standard input (for reading conventional input), standard output
  142. (for writing conventional output), and standard error (for writing diagnostic
  143. output).  When opened, the standard error stream is not fully buffered; the
  144. standard input and standard output streams are fully buffered if and only if
  145. the stream can be determined not to refer to an interactive device.
  146. Functions that open additional (non-temporary) files require a file name,
  147. which is a string.  VxWorks allows the same file to be open multiple times
  148. simultaneously.  It is up to the user to maintain synchronization between
  149. different tasks accessing the same file.
  150. FIOLIB
  151. Several routines normally considered part of standard I/O -- printf(),
  152. sprintf(), vprintf(), vsprintf(), and sscanf() -- are not implemented as part
  153. of the buffered standard I/O library; they are
  154. instead implemented in fioLib.  They do not use the standard I/O buffering
  155. scheme.  They are self-contained, formatted, but unbuffered I/O
  156. functions.  This allows a limited amount of formatted I/O to be achieved
  157. without the overhead of the standard I/O library.
  158. SEE ALSO:
  159. fioLib,
  160. .I "American National Standard for Information Systems -"
  161. .I "Programming Language - C, ANSI X3.159-1989: Input/Output (stdio.h)
  162. INTERNAL
  163. This documentation module is built by appending the following files:
  164.     clearerr.c
  165.     fclose.c
  166.     fdopen.c
  167.     feof.c
  168.     ferror.c
  169.     fflush.c
  170.     fgetc.c
  171.     fgetpos.c
  172.     fgets.c
  173.     fileno.c
  174.     fopen.c
  175.     fprintf.c
  176.     fputc.c
  177.     fputs.c
  178.     fread.c
  179.     freopen.c
  180.     fscanf.c
  181.     fseek.c
  182.     fsetpos.c
  183.     ftell.c
  184.     fwrite.c
  185.     getc.c
  186.     getchar.c
  187.     gets.c
  188.     getw.c
  189.     perror.c
  190.     putc.c
  191.     putchar.c
  192.     puts.c
  193.     putw.c
  194.     rewind.c
  195.     scanf.c
  196.     setbuf.c
  197.     setbuffer.c
  198.     setvbuf.c
  199.     stdioLib.c
  200.     stdioShow.c
  201.     tmpfile.c
  202.     tmpnam.c
  203.     ungetc.c
  204.     vfprintf.c
  205. */
  206. /* clearerr.c - clear error file for stdio.h */
  207. /* Copyright 1992-1993 Wind River Systems, Inc. */
  208. /* 
  209. modification history 
  210. -------------------- 
  211. 01d,05mar93,jdi  documentation cleanup for 5.1.
  212. 01c,21sep92,smb  corrected first line of file.
  213. 01b,20sep92,smb  documentation additions
  214. 01a,29jul92,smb  taken from UCB stdio
  215. */ 
  216.  
  217. /*
  218. DESCRIPTION
  219. * Copyright (c) 1990 The Regents of the University of California.
  220. * All rights reserved.
  221. *
  222. * This code is derived from software contributed to Berkeley by
  223. * Chris Torek.
  224. *
  225. * Redistribution and use in source and binary forms, with or without
  226. * modification, are permitted provided that the following conditions
  227. * are met:
  228. * 1. Redistributions of source code must retain the above copyright
  229. *    notice, this list of conditions and the following disclaimer.
  230. * 2. Redistributions in binary form must reproduce the above copyright
  231. *    notice, this list of conditions and the following disclaimer in the
  232. *    documentation and/or other materials provided with the distribution.
  233. * 3. All advertising materials mentioning features or use of this software
  234. *    must display the following acknowledgement:
  235. * This product includes software developed by the University of
  236. * California, Berkeley and its contributors.
  237. * 4. Neither the name of the University nor the names of its contributors
  238. *    may be used to endorse or promote products derived from this software
  239. *    without specific prior written permission.
  240. *
  241. * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  242. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  243. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  244. * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  245. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  246. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  247. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  248. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  249. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  250. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  251. * SUCH DAMAGE.
  252. *
  253. NOMANUAL
  254. */
  255. #include "vxWorks.h"
  256. #include "stdio.h"
  257. #undef clearerr
  258. /******************************************************************************
  259. *
  260. * clearerr - clear end-of-file and error flags for a stream (ANSI)
  261. * This routine clears the end-of-file and error flags for a specified stream.
  262. *
  263. * INCLUDE FILES: stdio.h 
  264. *
  265. * RETURNS: N/A
  266. *
  267. * SEE ALSO: feof(), ferror()
  268. */
  269. void clearerr
  270.     (
  271.     FILE * fp /* stream to clear EOF and ERROR flags for */
  272.     )
  273.     {
  274.     __sclearerr(fp);
  275.     }
  276. /* fclose.c - close file  stdio.h */
  277. /* Copyright 1992-1993 Wind River Systems, Inc. */
  278. /*
  279. modification history
  280. --------------------
  281. 01c,05mar93,jdi  documentation cleanup for 5.1.
  282. 01b,20sep92,smb  documentation additions
  283. 01a,29jul92,jcf  added OBJ_VERIFY and memory reclaimation.
  284.    +smb  taken from UCB stdio
  285. */
  286. /*
  287. DESCRIPTION
  288.  *
  289.  * Copyright (c) 1990 The Regents of the University of California.
  290.  * All rights reserved.
  291.  *
  292.  * This code is derived from software contributed to Berkeley by
  293.  * Chris Torek.
  294.  *
  295.  * Redistribution and use in source and binary forms, with or without
  296.  * modification, are permitted provided that the following conditions
  297.  * are met:
  298.  * 1. Redistributions of source code must retain the above copyright
  299.  *    notice, this list of conditions and the following disclaimer.
  300.  * 2. Redistributions in binary form must reproduce the above copyright
  301.  *    notice, this list of conditions and the following disclaimer in the
  302.  *    documentation and/or other materials provided with the distribution.
  303.  * 3. All advertising materials mentioning features or use of this software
  304.  *    must display the following acknowledgement:
  305.  * This product includes software developed by the University of
  306.  * California, Berkeley and its contributors.
  307.  * 4. Neither the name of the University nor the names of its contributors
  308.  *    may be used to endorse or promote products derived from this software
  309.  *    without specific prior written permission.
  310.  *
  311.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  312.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  313.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  314.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  315.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  316.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  317.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  318.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  319.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  320.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  321.  * SUCH DAMAGE.
  322. INCLUDE FILE: stdio.h, stdlib.h, error.h
  323. SEE ALSO: American National Standard X3.159-1989
  324. NOMANUAL
  325. */
  326. #include "vxWorks.h"
  327. #include "stdio.h"
  328. #include "errno.h"
  329. #include "stdlib.h"
  330. #include "objLib.h"
  331. #include "private/stdioP.h"
  332. /******************************************************************************
  333. *
  334. * fclose - close a stream (ANSI)
  335. *
  336. * This routine flushes a specified stream and closes the associated file.
  337. * Any unwritten buffered data is delivered to the host environment to be
  338. * written to the file; any unread buffered data is discarded.  The stream
  339. * is disassociated from the file.  If the associated buffer was allocated
  340. * automatically, it is deallocated.
  341. * INCLUDE FILES: stdio.h 
  342. *
  343. * RETURNS:
  344. * Zero if the stream is closed successfully, or EOF if errors occur.
  345. *
  346. * ERRNO: EBADF
  347. *
  348. * SEE ALSO: fflush()
  349. */
  350. int fclose
  351.     (
  352.     FAST FILE * fp /* stream to close */
  353.     )
  354.     {
  355.     FAST int r;
  356.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  357. return (EOF);
  358.     if (fp->_flags == 0) /* not open! */
  359. {
  360. errno = EBADF;
  361. return (EOF);
  362. }
  363.     r = (fp->_flags & __SWR) ? (__sflush(fp)) : (0);
  364.     if (__sclose (fp) < 0)
  365. r = EOF;
  366.     if (fp->_flags & __SMBF)
  367. free ((char *)fp->_bf._base);
  368.     if (HASUB(fp)) /* ungetc buffer? */
  369. FREEUB(fp);
  370.     if (HASLB(fp)) /* fgetline buffer? */
  371. FREELB(fp);
  372.     fp->_flags = 0; /* release this FILE for reuse */
  373.     stdioFpDestroy (fp); /* destroy the file pointer */
  374.     return (r);
  375.     }
  376. /* fdopen.c - open file. stdio.h */
  377. /* Copyright 1992-1993 Wind River Systems, Inc. */
  378. /*
  379. modification history
  380. --------------------
  381. 01d,07jul93,jmm  fixed fdopen to validate the fd (spr 2197)
  382. 01c,05mar93,jdi  documentation cleanup for 5.1.
  383. 01b,20sep92,smb  documentation additions
  384. 01a,29jul92,smb  taken from UCB stdio
  385. */
  386. /*
  387. DESCRIPTION
  388.  *
  389.  * Copyright (c) 1990 The Regents of the University of California.
  390.  * All rights reserved.
  391.  *
  392.  * This code is derived from software contributed to Berkeley by
  393.  * Chris Torek.
  394.  *
  395.  * Redistribution and use in source and binary forms, with or without
  396.  * modification, are permitted provided that the following conditions
  397.  * are met:
  398.  * 1. Redistributions of source code must retain the above copyright
  399.  *    notice, this list of conditions and the following disclaimer.
  400.  * 2. Redistributions in binary form must reproduce the above copyright
  401.  *    notice, this list of conditions and the following disclaimer in the
  402.  *    documentation and/or other materials provided with the distribution.
  403.  * 3. All advertising materials mentioning features or use of this software
  404.  *    must display the following acknowledgement:
  405.  * This product includes software developed by the University of
  406.  * California, Berkeley and its contributors.
  407.  * 4. Neither the name of the University nor the names of its contributors
  408.  *    may be used to endorse or promote products derived from this software
  409.  *    without specific prior written permission.
  410.  *
  411.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  412.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  413.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  414.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  415.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  416.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  417.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  418.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  419.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  420.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  421.  * SUCH DAMAGE.
  422. INCLUDE FILE: sys/types.h, fcntl.h, unistd.h, stdio.h, errno.h
  423. SEE ALSO: American National Standard X3.159-1989
  424. NOMANUAL
  425. */
  426. #include "vxWorks.h"
  427. #include "stdio.h"
  428. #include "sys/types.h"
  429. #include "fcntl.h"
  430. #include "unistd.h"
  431. #include "errno.h"
  432. #include "objLib.h"
  433. #include "iosLib.h"
  434. #include "private/stdioP.h"
  435. /*******************************************************************************
  436. *
  437. * fdopen - open a file specified by a file descriptor (POSIX)
  438. *
  439. * This routine opens the file specified by the file descriptor <fd> and
  440. * associates a stream with it.
  441. * The <mode> argument is used just as in the fopen() function.
  442. *
  443. * INCLUDE FILES: stdio.h 
  444. *
  445. * RETURNS: A pointer to a stream, or a null pointer if an error occurs,
  446. * with `errno' set to indicate the error.
  447. *
  448. * ERRNO: EINVAL
  449. *
  450. * SEE ALSO: fopen(), freopen(),
  451. * .br
  452. * .I "Information Technology - POSIX - Part 1:"
  453. * .I "System API [C Language], IEEE Std 1003.1"
  454. */
  455. FILE * fdopen
  456.     (
  457.     int  fd, /* file descriptor */
  458.     const char * mode /* mode to open with */
  459.     )
  460.     {
  461.     FAST FILE * fp;
  462.     int flags;
  463.     int  oflags;
  464.     /* validate the file descriptor */
  465.     if (iosFdValue (fd) == ERROR)
  466.         return (NULL);
  467.     
  468.     if ((flags = __sflags(mode, &oflags)) == 0)
  469.     return (NULL);
  470.     /* Make sure the mode the user wants is a subset of the actual mode. */
  471. #if FALSE  /*  XXX */
  472.     if ((fdflags = fcntl(fd, F_GETFL, 0)) < 0)
  473. return (NULL);
  474.     tmp = fdflags & O_ACCMODE;
  475.     if (tmp != O_RDWR && (tmp != (oflags & O_ACCMODE))) 
  476. {
  477. errno = EINVAL;
  478. return (NULL);
  479. }
  480. #endif
  481.     if ((fp = stdioFpCreate()) == NULL)
  482. return (NULL);
  483.     fp->_flags = flags;
  484.     /*
  485.      * If opened for appending, but underlying descriptor does not have
  486.      * O_APPEND bit set, assert __SAPP so that __swrite() will lseek to
  487.      * end before each write.
  488.      */
  489.     if ((oflags & O_APPEND) /* XXX && !(fdflags & O_APPEND) */ )
  490. fp->_flags |= __SAPP;
  491.     fp->_file = fd;
  492.     return (fp);
  493.     }
  494. /* feof.c - end of file indicator function. stdio.h */
  495. /* Copyright 1992-1993 Wind River Systems, Inc. */
  496. /*
  497. modification history
  498. --------------------
  499. 01d,05mar93,jdi  documentation cleanup for 5.1.
  500. 01c,21sep92,smb  tweaks for mg
  501. 01b,20sep92,smb  documentation additions
  502. 01a,29jul92,smb  taken from UCB stdio
  503. */
  504. /*
  505. DESCRIPTION 
  506.  * 
  507.  * Copyright (c) 1990 The Regents of the University of California.
  508.  * All rights reserved.
  509.  *
  510.  * This code is derived from software contributed to Berkeley by
  511.  * Chris Torek.
  512.  *
  513.  * Redistribution and use in source and binary forms, with or without
  514.  * modification, are permitted provided that the following conditions
  515.  * are met:
  516.  * 1. Redistributions of source code must retain the above copyright
  517.  *    notice, this list of conditions and the following disclaimer.
  518.  * 2. Redistributions in binary form must reproduce the above copyright
  519.  *    notice, this list of conditions and the following disclaimer in the
  520.  *    documentation and/or other materials provided with the distribution.
  521.  * 3. All advertising materials mentioning features or use of this software
  522.  *    must display the following acknowledgement:
  523.  * This product includes software developed by the University of
  524.  * California, Berkeley and its contributors.
  525.  * 4. Neither the name of the University nor the names of its contributors
  526.  *    may be used to endorse or promote products derived from this software
  527.  *    without specific prior written permission.
  528.  *
  529.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  530.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  531.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  532.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  533.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  534.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  535.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  536.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  537.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  538.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  539.  * SUCH DAMAGE.
  540. NOMANUAL
  541. */ 
  542. #include "vxWorks.h"
  543. #include "stdio.h"
  544. #undef feof
  545. /******************************************************************************
  546. * feof - test the end-of-file indicator for a stream (ANSI)
  547. *
  548. * This routine tests the end-of-file indicator for a specified stream. 
  549. *
  550. * INCLUDE FILES: stdio.h 
  551. *
  552. * RETURNS:
  553. * Non-zero if the end-of-file indicator is set for <fp>.
  554. *
  555. * SEE ALSO: clearerr()
  556. */
  557. int feof
  558.     (
  559.     FILE * fp /* stream to test */
  560.     )
  561.     {
  562.     return (__sfeof(fp));
  563.     }
  564. /* ferror.c - file error indicator function for stdio.h */
  565. /* Copyright 1992-1993 Wind River Systems, Inc. */
  566.  
  567. /*
  568. modification history
  569. --------------------
  570. 01c,05mar93,jdi  documentation cleanup for 5.1.
  571. 01b,20sep92,smb  documentation additions
  572. 01a,29jul92,smb  taken from UCB stdio
  573. */
  574.   
  575. /*
  576. DESCRIPTION
  577.  *
  578.  * Copyright (c) 1990 The Regents of the University of California.
  579.  * All rights reserved.
  580.  *
  581.  * This code is derived from software contributed to Berkeley by
  582.  * Chris Torek.
  583.  *
  584.  * Redistribution and use in source and binary forms, with or without
  585.  * modification, are permitted provided that the following conditions
  586.  * are met:
  587.  * 1. Redistributions of source code must retain the above copyright
  588.  *    notice, this list of conditions and the following disclaimer.
  589.  * 2. Redistributions in binary form must reproduce the above copyright
  590.  *    notice, this list of conditions and the following disclaimer in the
  591.  *    documentation and/or other materials provided with the distribution.
  592.  * 3. All advertising materials mentioning features or use of this software
  593.  *    must display the following acknowledgement:
  594.  * This product includes software developed by the University of
  595.  * California, Berkeley and its contributors.
  596.  * 4. Neither the name of the University nor the names of its contributors
  597.  *    may be used to endorse or promote products derived from this software
  598.  *    without specific prior written permission.
  599.  *
  600.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  601.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  602.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  603.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  604.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  605.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  606.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  607.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  608.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  609.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  610.  * SUCH DAMAGE.
  611. NOMANUAL
  612. */ 
  613. #include "vxWorks.h"
  614. #include "stdio.h"
  615. #undef ferror
  616. /******************************************************************************
  617. *
  618. * ferror - test the error indicator for a file pointer (ANSI)
  619. * This routine tests the error indicator for the stream pointed to by <fp>.
  620. * INCLUDE FILES: stdio.h 
  621. *
  622. * RETURNS: Non-zero if the error indicator is set for <fp>.
  623. *
  624. * SEE ALSO: clearerr()
  625. */
  626. int ferror
  627.     (
  628.     FILE * fp /* stream to test */
  629.     )
  630.     {
  631.     return (__sferror(fp));
  632.     }
  633. /* fflush.c - flush file stdio.h */
  634. /* Copyright 1992-1995 Wind River Systems, Inc. */
  635.  
  636. /*
  637. modification history
  638. --------------------
  639. 01e,20jan95,ism  changed FIOFLUSH to FIOSYNC
  640. 01d,03oct94,ism  added FIOFLUSH ioctl to __sflush() as per SPR#2548
  641. 01c,05mar93,jdi  documentation cleanup for 5.1.
  642. 01b,20sep92,smb  documentation additions
  643. 01a,29jul92,jcf Added OBJ_VERIFY
  644.     smb taken from UCB stdio
  645. */
  646.  
  647. /*
  648. DESCRIPTION
  649.  *
  650.  * Copyright (c) 1990 The Regents of the University of California.
  651.  * All rights reserved.
  652.  *
  653.  * This code is derived from software contributed to Berkeley by
  654.  * Chris Torek.
  655.  *
  656.  * Redistribution and use in source and binary forms, with or without
  657.  * modification, are permitted provided that the following conditions
  658.  * are met:
  659.  * 1. Redistributions of source code must retain the above copyright
  660.  *    notice, this list of conditions and the following disclaimer.
  661.  * 2. Redistributions in binary form must reproduce the above copyright
  662.  *    notice, this list of conditions and the following disclaimer in the
  663.  *    documentation and/or other materials provided with the distribution.
  664.  * 3. All advertising materials mentioning features or use of this software
  665.  *    must display the following acknowledgement:
  666.  * This product includes software developed by the University of
  667.  * California, Berkeley and its contributors.
  668.  * 4. Neither the name of the University nor the names of its contributors
  669.  *    may be used to endorse or promote products derived from this software
  670.  *    without specific prior written permission.
  671.  *
  672.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  673.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  674.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  675.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  676.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  677.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  678.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  679.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  680.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  681.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  682.  * SUCH DAMAGE.
  683. INCLUDE FILE: stdio.h, error.h
  684. SEE ALSO: American National Standard X3.159-1989
  685. NOMANUAL
  686. */
  687. #include "vxWorks.h"
  688. #include "stdio.h"
  689. #include "errno.h"
  690. #include "objLib.h"
  691. #include "private/stdioP.h"
  692. #include "sys/ioctl.h"
  693. #include "ioLib.h"
  694. /******************************************************************************
  695. *
  696. * fflush - flush a stream (ANSI)
  697. *
  698. * This routine writes to the file any unwritten data for a specified output
  699. * or update stream for which the most recent operation was not input; for an
  700. * input stream the behavior is undefined.
  701. *
  702. * CAVEAT
  703. * ANSI specifies that if <fp> is a null pointer, fflush() performs the
  704. * flushing action on all streams for which the behavior is defined; however,
  705. * this is not implemented in VxWorks.
  706. * INCLUDE FILES: stdio.h 
  707. *
  708. * RETURNS: Zero, or EOF if a write error occurs.
  709. *
  710. * ERRNO: EBADF
  711. *
  712. * SEE ALSO: fclose()
  713. */
  714. int fflush
  715.     (
  716.     FAST FILE * fp /* stream to flush */
  717.     )
  718.     {
  719.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  720. return (EOF);
  721.     /* ANSI specifies that fflush (NULL) will flush all task's file pointers.
  722.      * The problem is that we don't keep such a list today so we return EOF
  723.      * for now.
  724.      */
  725.     if ((fp == NULL) ||
  726.         ((fp->_flags & __SWR) == 0))
  727. {
  728. errno = EBADF;
  729. return (EOF);
  730. }
  731.     return (__sflush(fp));
  732.     }
  733. /******************************************************************************
  734. *
  735. * __sflush - flush stream pointed to by fp.
  736. * INCLUDE: stdio.h 
  737. *
  738. * RETURNS: ZERO or EOF
  739. * NOMANUAL
  740. */
  741. int __sflush
  742.     (
  743.     FAST FILE *fp
  744.     )
  745.     {
  746.     FAST unsigned char *p;
  747.     FAST int n;
  748.     FAST int t;
  749.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  750. return (EOF);
  751.     t = fp->_flags;
  752.     if ((t & __SWR) == 0)
  753. return (0);
  754.     if ((p = fp->_bf._base) == NULL)
  755. return (0);
  756.     n = fp->_p - p; /* write this much */
  757.     /* Set these immediately to avoid problems with longjmp and to allow
  758.      * exchange buffering (via setvbuf) in user write function.
  759.      */
  760.     fp->_p = p;
  761.     fp->_w = (t & (__SLBF|__SNBF)) ? (0) : (fp->_bf._size);
  762.     for (; n > 0; n -= t, p += t) 
  763. {
  764. t = __swrite (fp, (char *)p, n);
  765. if (t <= 0) 
  766.     {
  767.     fp->_flags |= __SERR;
  768.     return (EOF);
  769.     }
  770. }
  771. (void)ioctl(fileno(fp), FIOSYNC, 0);
  772.     return (0);
  773.     }
  774. /* fgetc.c - get character from file -- stdio.h */
  775. /* Copyright 1992-1993 Wind River Systems, Inc. */
  776.  
  777. /*
  778. modification history
  779. -------------------
  780. 01d,05mar93,jdi  documentation cleanup for 5.1.
  781. 01c,13oct92,jdi  mangen fixes.
  782. 01b,20sep92,smb  documentation additions
  783. 01a,29jul92,smb  taken from UCB stdio
  784. */
  785.   
  786. /*
  787. DESCRIPTION
  788.  *
  789.  * Copyright (c) 1990 The Regents of the University of California.
  790.  * All rights reserved.
  791.  *
  792.  * This code is derived from software contributed to Berkeley by
  793.  * Chris Torek.
  794.  *
  795.  * Redistribution and use in source and binary forms, with or without
  796.  * modification, are permitted provided that the following conditions
  797.  * are met:
  798.  * 1. Redistributions of source code must retain the above copyright
  799.  *    notice, this list of conditions and the following disclaimer.
  800.  * 2. Redistributions in binary form must reproduce the above copyright
  801.  *    notice, this list of conditions and the following disclaimer in the
  802.  *    documentation and/or other materials provided with the distribution.
  803.  * 3. All advertising materials mentioning features or use of this software
  804.  *    must display the following acknowledgement:
  805.  * This product includes software developed by the University of
  806.  * California, Berkeley and its contributors.
  807.  * 4. Neither the name of the University nor the names of its contributors
  808.  *    may be used to endorse or promote products derived from this software
  809.  *    without specific prior written permission.
  810.  *
  811.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  812.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  813.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  814.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  815.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  816.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  817.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  818.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  819.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  820.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  821.  * SUCH DAMAGE.
  822. INCLUDE FILE: stdio.h
  823. SEE ALSO: American National Standard X3.159-1989
  824. NOMANUAL
  825. */
  826. #include "vxWorks.h"
  827. #include "private/stdioP.h"
  828. /******************************************************************************
  829. *
  830. * fgetc - return the next character from a stream (ANSI)
  831. *
  832. * This routine returns the next character (converted to an `int') from the
  833. * specified stream, and advances the file position indicator for the stream.
  834. *
  835. * If the stream is at end-of-file, the end-of-file indicator for the stream is
  836. * set; if a read error occurs, the error indicator is set.
  837. * INCLUDE FILES: stdio.h 
  838. *
  839. * RETURNS:
  840. * The next character from the stream, or EOF if the stream is at end-of-file
  841. * or a read error occurs.
  842. *
  843. * SEE ALSO: fgets(), getc()
  844. */
  845. int fgetc
  846.     (
  847.     FILE *  fp /* stream to read from */
  848.     )
  849.     {
  850.     return (getc(fp));
  851.     }
  852. /* fgetpos.c - get position in file. stdio.h */
  853. /* Copyright 1992-1993 Wind River Systems, Inc. */
  854.  
  855. /*
  856. modification history
  857. --------------------
  858. 01c,05mar93,jdi  documentation cleanup for 5.1.
  859. 01b,20sep92,smb  documentation additions
  860. 01a,29jul92,jcf  Added OBJ_VERIFY
  861.     smb  written.
  862. */
  863.   
  864. /*
  865. DESCRIPTION
  866. INCLUDE FILE: stdio.h
  867. SEE ALSO: American National Standard X3.159-1989
  868. NOMANUAL
  869. */
  870. #include "vxWorks.h"
  871. #include "stdio.h"
  872. #include "objLib.h"
  873. /******************************************************************************
  874. *
  875. * fgetpos - store the current value of the file position indicator for a stream (ANSI)
  876. *
  877. * This routine stores the current value of the file position indicator for a
  878. * specified stream <fp> in the object pointed to by <pos>.  The value stored
  879. * contains unspecified information usable by fsetpos() for repositioning
  880. * the stream to its position at the time fgetpos() was called.
  881. * INCLUDE FILES: stdio.h 
  882. *
  883. * RETURNS:
  884. * Zero, or non-zero if unsuccessful, with `errno' set to indicate the error.
  885. *
  886. * SEE ALSO: fsetpos()
  887. */
  888. int fgetpos
  889.     (
  890.     FILE * fp, /* stream */
  891.     fpos_t * pos /* where to store position */
  892.     )
  893.     {
  894.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  895. return (ERROR);
  896.     return (!((*pos = ftell (fp)) != (fpos_t) -1));
  897.     }
  898. /* fgets.c - Read lines of text from a stream. stdio.h */
  899. /* Copyright 1992-1993 Wind River Systems, Inc. */
  900.  
  901. /*
  902. modification history
  903. --------------------
  904. 01c,05mar93,jdi  documentation cleanup for 5.1.
  905. 01b,20sep92,smb  documentation additions
  906. 01a,29jul92,jcf  Added OBJ_VERIFY
  907.     smb  taken from UCB stdio
  908. */
  909.  
  910. /*
  911. DESCRIPTION
  912.  *
  913.  * Copyright (c) 1990 The Regents of the University of California.
  914.  * All rights reserved.
  915.  *
  916.  * This code is derived from software contributed to Berkeley by
  917.  * Chris Torek.
  918.  *
  919.  * Redistribution and use in source and binary forms, with or without
  920.  * modification, are permitted provided that the following conditions
  921.  * are met:
  922.  * 1. Redistributions of source code must retain the above copyright
  923.  *    notice, this list of conditions and the following disclaimer.
  924.  * 2. Redistributions in binary form must reproduce the above copyright
  925.  *    notice, this list of conditions and the following disclaimer in the
  926.  *    documentation and/or other materials provided with the distribution.
  927.  * 3. All advertising materials mentioning features or use of this software
  928.  *    must display the following acknowledgement:
  929.  * This product includes software developed by the University of
  930.  * California, Berkeley and its contributors.
  931.  * 4. Neither the name of the University nor the names of its contributors
  932.  *    may be used to endorse or promote products derived from this software
  933.  *    without specific prior written permission.
  934.  *
  935.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  936.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  937.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  938.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  939.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  940.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  941.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  942.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  943.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  944.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  945.  * SUCH DAMAGE.
  946. INCLUDE FILE: stdio.h, string.h
  947. SEE ALSO: American National Standard X3.159-1989
  948. NOMANUAL
  949. */
  950. #include "vxWorks.h"
  951. #include "stdio.h"
  952. #include "string.h"
  953. #include "objLib.h"
  954. #include "private/stdioP.h"
  955. /******************************************************************************
  956. *
  957. * fgets - read a specified number of characters from a stream (ANSI)
  958. *
  959. * This routine stores in the array <buf> up to <n>-1 characters from a
  960. * specified stream.  No additional characters are read after a new-line or
  961. * end-of-line.  A null character is written immediately after the last
  962. * character read into the array.
  963. *
  964. * If end-of-file is encountered and no characters have been read, the
  965. * contents of the array remain unchanged.  If a read error occurs, the array
  966. * contents are indeterminate.
  967. *
  968. * INCLUDE FILES: stdio.h 
  969. *
  970. * RETURNS:
  971. * A pointer to <buf>, or a null pointer if an error occurs or end-of-file is
  972. * encountered and no characters have been read.
  973. *
  974. * SEE ALSO: fread(), fgetc()
  975. */
  976. char * fgets
  977.     (
  978.     char * buf, /* where to store characters */
  979.     FAST size_t n, /* no. of bytes to read + 1 */
  980.     FAST FILE * fp /* stream to read from */
  981.     )
  982.     {
  983.     FAST size_t len;
  984.     FAST char * s;
  985.     FAST uchar_t *      p;
  986.     FAST uchar_t *      t;
  987.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  988. return (NULL);
  989.     if (n < 2) /* sanity check */
  990. return (NULL);
  991.     s = buf;
  992.     n--; /* leave space for NULL */
  993.     do 
  994. {
  995. if ((len = fp->_r) <= 0) /* If the buffer is empty, refill it */
  996.     {
  997.     if (__srefill(fp)) /* EOF/error: partial or no line */
  998. {
  999. if (s == buf)
  1000.     return (NULL);
  1001. break;
  1002. }
  1003.     len = fp->_r;
  1004.     }
  1005. p = fp->_p;
  1006. /*
  1007.  * Scan through at most n bytes of the current buffer,
  1008.  * looking for 'n'.  If found, copy up to and including
  1009.  * newline, and stop.  Otherwise, copy entire chunk
  1010.  * and loop.
  1011.  */
  1012. if (len > n)
  1013.     len = n;
  1014. t = memchr ((void *)p, 'n', len);
  1015. if (t != NULL) 
  1016.     {
  1017.     len = ++t - p;
  1018.     fp->_r -= len;
  1019.     fp->_p = t;
  1020.     (void) bcopy ((void *)p, (void *)s, len);
  1021.     s[len] = 0;
  1022.     return (buf);
  1023.     }
  1024. fp->_r -= len;
  1025. fp->_p += len;
  1026. (void) bcopy ((void *)p, (void *)s, len);
  1027. s += len;
  1028. } while ((n -= len) != 0);
  1029.     *s = 0;
  1030.     return (buf);
  1031.     }
  1032. /* fileno.c - determine file number for stdio.h */
  1033. /* Copyright 1992-1993 Wind River Systems, Inc. */
  1034.  
  1035. /*
  1036. modification history
  1037. --------------------
  1038. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1039. 01b,20sep92,smb  documentation additions
  1040. 01a,29jul92,jcf  Added OBJ_VERIFY
  1041.     smb  taken from UCB stdio
  1042. */
  1043.  
  1044. /*
  1045. DESCRIPTION
  1046.  *
  1047.  * Copyright (c) 1990 The Regents of the University of California.
  1048.  * All rights reserved.
  1049.  *
  1050.  * This code is derived from software contributed to Berkeley by
  1051.  * Chris Torek.
  1052.  *
  1053.  * Redistribution and use in source and binary forms, with or without
  1054.  * modification, are permitted provided that the following conditions
  1055.  * are met:
  1056.  * 1. Redistributions of source code must retain the above copyright
  1057.  *    notice, this list of conditions and the following disclaimer.
  1058.  * 2. Redistributions in binary form must reproduce the above copyright
  1059.  *    notice, this list of conditions and the following disclaimer in the
  1060.  *    documentation and/or other materials provided with the distribution.
  1061.  * 3. All advertising materials mentioning features or use of this software
  1062.  *    must display the following acknowledgement:
  1063.  * This product includes software developed by the University of
  1064.  * California, Berkeley and its contributors.
  1065.  * 4. Neither the name of the University nor the names of its contributors
  1066.  *    may be used to endorse or promote products derived from this software
  1067.  *    without specific prior written permission.
  1068.  *
  1069.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1070.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1071.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1072.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1073.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1074.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1075.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1076.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1077.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1078.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1079.  * SUCH DAMAGE.
  1080. INCLUDE FILE: stdio.h
  1081. SEE ALSO: American National Standard X3.159-1989
  1082. NOMANUAL
  1083. */
  1084. #include "vxWorks.h"
  1085. #include "objLib.h"
  1086. #include "private/stdioP.h"
  1087. #undef fileno
  1088. /******************************************************************************
  1089. *
  1090. * fileno - return the file descriptor for a stream (POSIX)
  1091. * This routine returns the file descriptor associated with a specified
  1092. * stream.
  1093. *
  1094. * INCLUDE FILES: stdio.h 
  1095. *
  1096. * RETURNS:
  1097. * The file descriptor, or -1 if an error occurs, with `errno' set to indicate
  1098. * the error.
  1099. *
  1100. * SEE ALSO:
  1101. * .br
  1102. * .I "Information Technology - POSIX - Part 1:"
  1103. * .I "System API [C Language], IEEE Std 1003.1"
  1104. */
  1105. int fileno
  1106.     (
  1107.     FILE * fp /* stream */
  1108.     )
  1109.     {
  1110.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  1111. return (ERROR);
  1112.     return (__sfileno(fp));
  1113.     }
  1114. /* fopen.c - open a file. stdio.h */
  1115. /* Copyright 1992-1995 Wind River Systems, Inc. */
  1116. /*
  1117. modification history
  1118. --------------------
  1119. 01d,10feb95,jdi  doc format tweak.
  1120. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1121. 01b,20sep92,smb  documentation additions
  1122. 01a,29jul92,jcf  modified to use stdioFpCreate and close memory leaks.
  1123.     smb  taken from UCB stdio.
  1124. */
  1125. /*
  1126. DESCRIPTION
  1127.  * Copyright (c) 1990 The Regents of the University of California.
  1128.  * All rights reserved.
  1129.  *
  1130.  * This code is derived from software contributed to Berkeley by
  1131.  * Chris Torek.
  1132.  *
  1133.  * Redistribution and use in source and binary forms, with or without
  1134.  * modification, are permitted provided that the following conditions
  1135.  * are met:
  1136.  * 1. Redistributions of source code must retain the above copyright
  1137.  *    notice, this list of conditions and the following disclaimer.
  1138.  * 2. Redistributions in binary form must reproduce the above copyright
  1139.  *    notice, this list of conditions and the following disclaimer in the
  1140.  *    documentation and/or other materials provided with the distribution.
  1141.  * 3. All advertising materials mentioning features or use of this software
  1142.  *    must display the following acknowledgement:
  1143.  * This product includes software developed by the University of
  1144.  * California, Berkeley and its contributors.
  1145.  * 4. Neither the name of the University nor the names of its contributors
  1146.  *    may be used to endorse or promote products derived from this software
  1147.  *    without specific prior written permission.
  1148.  *
  1149.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1150.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1151.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1152.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1153.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1154.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1155.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1156.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1157.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1158.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1159.  * SUCH DAMAGE.
  1160. INCLUDE FILE: stdio.h, error.h
  1161. SEE ALSO: American National Standard X3.159-1989
  1162. NOMANUAL
  1163. */ 
  1164. #include "vxWorks.h"
  1165. #include "stdio.h"
  1166. #include "sys/types.h"
  1167. #include "sys/stat.h"
  1168. #include "ioLib.h"
  1169. #include "fcntl.h"
  1170. #include "errno.h"
  1171. #include "private/stdioP.h"
  1172. /******************************************************************************
  1173. *
  1174. * fopen - open a file specified by name (ANSI)
  1175. *
  1176. * This routine opens a file whose name is the string pointed to by <file>
  1177. * and associates a stream with it.
  1178. * The argument <mode> points to a string beginning with one of the following 
  1179. * sequences:
  1180. * .iP r "" 3
  1181. * open text file for reading
  1182. * .iP w
  1183. * truncate to zero length or create text file for writing
  1184. * .iP a
  1185. * append; open or create text file for writing at end-of-file
  1186. * .iP rb
  1187. * open binary file for reading
  1188. * .iP wb
  1189. * truncate to zero length or create binary file for writing
  1190. * .iP ab
  1191. * append; open or create binary file for writing at end-of-file
  1192. * .iP r+
  1193. * open text file for update (reading and writing)
  1194. * .iP w+
  1195. * truncate to zero length or create text file for update.
  1196. * .iP a+
  1197. * append; open or create text file for update, writing at end-of-file
  1198. * .iP "r+b / rb+"
  1199. * open binary file for update (reading and writing)
  1200. * .iP "w+b / wb+"
  1201. * truncate to zero length or create binary file for update
  1202. * .iP "a+b / ab+"
  1203. * append; open or create binary file for update, writing at end-of-file
  1204. * .LP
  1205. *
  1206. * Opening a file with read mode (`r' as the first character in the <mode>
  1207. * argument) fails if the file does not exist or cannot be read.
  1208. *
  1209. * Opening a file with append mode (`a' as the first character in the <mode>
  1210. * argument) causes all subsequent writes to the file to be forced to the
  1211. * then current end-of-file, regardless of intervening calls to fseek().  In
  1212. * some implementations, opening a binary file with append mode (`b' as the
  1213. * second or third character in the <mode> argument) may initially position
  1214. * the file position indicator for the stream beyond the last data written,
  1215. * because of null character padding.  In VxWorks, whether append mode is
  1216. * supported is device-specific.
  1217. *
  1218. * When a file is opened with update mode (`+' as the second or third
  1219. * character in the <mode> argument), both input and output may be performed
  1220. * on the associated stream.  However, output may not be directly followed by
  1221. * input without an intervening call to fflush() or to a file positioning
  1222. * function (fseek(), fsetpos(), or rewind()), and input may not be directly
  1223. * followed by output without an intervening call to a file positioning
  1224. * function, unless the input operation encounters end-of-file.  Opening (or
  1225. * creating) a text file with update mode may instead open (or create) a
  1226. * binary stream in some implementations.
  1227. *
  1228. * When opened, a stream is fully buffered if and only if it can be determined
  1229. * not to refer to an interactive device.  The error and end-of-file
  1230. * indicators for the stream are cleared.
  1231. * INCLUDE FILES: stdio.h 
  1232. *
  1233. * RETURNS:
  1234. * A pointer to the object controlling the stream, or a null pointer if the
  1235. * operation fails.
  1236. *
  1237. * SEE ALSO: fdopen(), freopen()
  1238. */
  1239. FILE * fopen
  1240.     (
  1241.     const char * file, /* name of file */
  1242.     const char * mode /* mode */
  1243.     )
  1244.     {
  1245.     FAST FILE * fp;
  1246.     FAST int f;
  1247.     int flags;
  1248.     int oflags;
  1249.     if ((flags = __sflags (mode, &oflags)) == 0)
  1250. return (NULL);
  1251.     if ((fp = stdioFpCreate ()) == NULL)
  1252. return (NULL);
  1253.     if ((f = open (file, oflags, DEFFILEMODE )) < 0) 
  1254. fp->_flags = 0x0; /* release */
  1255.         stdioFpDestroy (fp); /* destroy file pointer */
  1256. return (NULL);
  1257. }
  1258.     fp->_file = f;
  1259.     fp->_flags = flags;
  1260.     /*
  1261.      * When opening in append mode, even though we use O_APPEND,
  1262.      * we need to seek to the end so that ftell() gets the right
  1263.      * answer.  If the user then alters the seek pointer, or
  1264.      * the file extends, this will fail, but there is not much
  1265.      * we can do about this.  (We could set __SAPP and check in
  1266.      * fseek and ftell.)
  1267.      */
  1268.     if (oflags & O_APPEND)
  1269. (void) __sseek ((void *)fp, (fpos_t)0, SEEK_END);
  1270.     return (fp);
  1271.     }
  1272. /* fprintf.c - print to a file. stdio.h */
  1273. /* Copyright 1992-1995 Wind River Systems, Inc. */
  1274. /*
  1275. modification history
  1276. --------------------
  1277. 01e,24jan95,rhp  doc: avoid 'L' in fprintf(), no long doubles 
  1278.                  in VxWorks (see SPR#3886)
  1279. 01d,19jul94,dvs  doc tweak (SPR #2512).
  1280. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1281. 01b,20sep92,smb  documentation additions
  1282. 01a,29jul92,jcf  Added OBJ_VERIFY
  1283.     smb  taken from UCB stdio
  1284. */
  1285. /*
  1286. DESCRIPTION
  1287.  * Copyright (c) 1990 The Regents of the University of California.
  1288.  * All rights reserved.
  1289.  *
  1290.  * This code is derived from software contributed to Berkeley by
  1291.  * Chris Torek.
  1292.  *
  1293.  * Redistribution and use in source and binary forms, with or without
  1294.  * modification, are permitted provided that the following conditions
  1295.  * are met:
  1296.  * 1. Redistributions of source code must retain the above copyright
  1297.  *    notice, this list of conditions and the following disclaimer.
  1298.  * 2. Redistributions in binary form must reproduce the above copyright
  1299.  *    notice, this list of conditions and the following disclaimer in the
  1300.  *    documentation and/or other materials provided with the distribution.
  1301.  * 3. All advertising materials mentioning features or use of this software
  1302.  *    must display the following acknowledgement:
  1303.  * This product includes software developed by the University of
  1304.  * California, Berkeley and its contributors.
  1305.  * 4. Neither the name of the University nor the names of its contributors
  1306.  *    may be used to endorse or promote products derived from this software
  1307.  *    without specific prior written permission.
  1308.  *
  1309.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1310.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1311.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1312.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1313.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1314.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1315.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1316.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1317.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1318.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1319.  * SUCH DAMAGE.
  1320. INCLUDE FILE: stdio.h, stdarg.h
  1321. SEE ALSO: American National Standard X3.159-1989
  1322. NOMANUAL
  1323. */
  1324. #include "vxWorks.h"
  1325. #include "stdarg.h"
  1326. #include "fioLib.h"
  1327. #include "objLib.h"
  1328. #include "private/stdioP.h"
  1329. /******************************************************************************
  1330. *
  1331. * fprintf - write a formatted string to a stream (ANSI)
  1332. *
  1333. * This routine writes output to a specified stream under control of the string
  1334. * <fmt>. The string <fmt> contains ordinary characters, which are written
  1335. * unchanged, plus conversion specifications, which cause the arguments that
  1336. * follow <fmt> to be converted and printed as part of the formatted string.
  1337. *
  1338. * The number of arguments for the format is arbitrary, but they must
  1339. * correspond to the conversion specifications in <fmt>.  If there are
  1340. * insufficient arguments, the behavior is undefined.  If the format is
  1341. * exhausted while arguments remain, the excess arguments are evaluated but
  1342. * otherwise ignored.  The routine returns when the end of the format string
  1343. * is encountered.
  1344. *
  1345. * The format is a multibyte character sequence, beginning and ending in its
  1346. * initial shift state.  The format is composed of zero or more directives:
  1347. * ordinary multibyte characters (not `%') that are copied unchanged to the
  1348. * output stream; and conversion specification, each of which results in
  1349. * fetching zero or more subsequent arguments.  Each conversion specification
  1350. * is introduced by the `%' character.  After the `%', the following appear in
  1351. * sequence:
  1352. * .iP "" 4
  1353. * Zero or more flags (in any order) that modify the meaning of the 
  1354. * conversion specification.
  1355. * .iP
  1356. * An optional minimum field width.  If the converted value has fewer
  1357. * characters than the field width, it will be padded with spaces (by
  1358. * default) on the left (or right, if the left adjustment flag, 
  1359. * described later, has been given) to the field width. The field
  1360. * width takes the form of an asterisk (`*') (described later) or a decimal
  1361. * integer.
  1362. * .iP
  1363. * An optional precision that gives the minimum number of digits to
  1364. * appear for the `d', `i', `o', `u', `x', and `X' conversions, the number of 
  1365. * digits to appear after the decimal-point character for `e', `E', and `f'
  1366. * conversions, the maximum number of significant digits for the `g' and
  1367. * `G' conversions, or the maximum number of characters to be written 
  1368. * from a string in the `s' conversion.  The precision takes the form of a 
  1369. * period (`.') followed either by an asterisk (`*') (described later) or by
  1370. * an optional decimal integer; if only the period is specified, the 
  1371. * precision is taken as zero.  If a precision appears with any other
  1372. * conversion specifier, the behavior is undefined.
  1373. * .iP
  1374. * An optional `h' specifying that a following `d', `i', `o', `u', `x', and
  1375. * `X' conversion specifier applies to a `short int' or `unsigned short int'
  1376. * argument (the argument will have been promoted according to the integral
  1377. * promotions, and its value converted to `short int' or
  1378. * `unsigned short int' before printing); an optional `h' specifying that a
  1379. * following `n' conversion specifier applies to a pointer to a `short int'
  1380. * argument; an optional `l' (el) specifying that a following `d', `i', `o',
  1381. * `u', `x', and `X' conversion specifier applies to a `long int' or
  1382. * `unsigned long int' argument; or an optional `l' specifying that a following
  1383. * `n' conversion specifier applies to a pointer to a `long int'
  1384. * argument.  If an `h' or `l' appears with any other conversion
  1385. * specifier, the behavior is undefined.
  1386. *
  1387. * &WARNING: ANSI C also specifies an optional `L' in some of the same
  1388. * contexts as `l' above, corresponding to a `long double' argument.
  1389. * However, the current release of the VxWorks libraries does not support 
  1390. * `long double' data; using the optional `L' gives unpredictable results.
  1391. * .iP
  1392. * A character that specifies the type of conversion to be applied.
  1393. * .LP
  1394. *
  1395. * As noted above, a field width, or precision, or both, can be indicated by
  1396. * an asterisk (`*').  In this case, an `int' argument supplies the field width
  1397. * or precision.  The arguments specifying field width, or precision, or both,
  1398. * should appear (in that order) before the argument (if any) to be converted.
  1399. * A negative field width argument is taken as a `-' flag followed by a positive
  1400. * field width.  A negative precision argument is taken as if the precision
  1401. * were omitted.
  1402. *
  1403. * The flag characters and their meanings are:
  1404. * .iP `-'
  1405. * The result of the conversion will be left-justified within the field.
  1406. * (it will be right-justified if this flag is not specified.)
  1407. * .iP `+'
  1408. * The result of a signed conversion will always begin with a plus or 
  1409. * minus sign.  (It will begin with a sign only when a negative value
  1410. * is converted if this flag is not specified.)
  1411. * .iP `space'
  1412. * If the first character of a signed conversion is not a sign, or 
  1413. * if a signed conversion results in no characters, a space will be 
  1414. * prefixed to the result.  If the `space' and `+' flags both appear, the
  1415. * `space' flag will be ignored.
  1416. * .iP `#'
  1417. * The result is to be converted to an "alternate form."  For `o' conversion
  1418. * it increases the precision to force the first digit of the result to be a
  1419. * zero.  For `x' (or `X') conversion, a non-zero result will have "0x" (or
  1420. * "0X") prefixed to it.  For `e', `E', `f', `g', and `G' conversions, the
  1421. * result will always contain a decimal-point character, even if no digits
  1422. * follow it.  (Normally, a decimal-point character appears in the result of
  1423. * these conversions only if no digit follows it).  For `g' and `G'
  1424. * conversions, trailing zeros will not be removed from the result.  For
  1425. * other conversions, the behavior is undefined.
  1426. * .iP `0'
  1427. * For `d', `i', `o', `u', `x', `X', `e', `E', `f', `g', and `G' conversions,
  1428. * leading zeros (following any indication of sign or base) are used to pad
  1429. * to the field width; no space padding is performed.  If the `0' and `-'
  1430. * flags both appear, the `0' flag will be ignored.  For `d', `i', `o', `u',
  1431. * `x', and `X' conversions, if a precision is specified, the `0' flag will
  1432. * be ignored.  For other conversions, the behavior is undefined.
  1433. * .LP
  1434. *
  1435. * The conversion specifiers and their meanings are:
  1436. * .iP "`d', `i'"
  1437. * The `int' argument is converted to signed decimal in the style
  1438. * `[-]dddd'.  The precision specifies the minimum number of digits 
  1439. * to appear; if the value being converted can be represented in
  1440. * fewer digits, it will be expanded with leading zeros.  The
  1441. * default precision is 1.  The result of converting a zero value
  1442. * with a precision of zero is no characters.
  1443. * .iP "`o', `u', `x', `X'"
  1444. * The `unsigned int' argument is converted to unsigned octal (`o'),
  1445. * unsigned decimal (`u'), or unsigned hexadecimal notation (`x' or `X')
  1446. * in the style `dddd'; the letters abcdef are used for `x' conversion
  1447. * and the letters ABCDEF for `X' conversion.  The precision specifies
  1448. * the minimum number of digits to appear; if the value being 
  1449. * converted can be represented in fewer digits, it will be 
  1450. * expanded with leading zeros.  The default precision is 1.  The
  1451. * result of converting a zero value with a precision of zero is 
  1452. * no characters.
  1453. * .iP `f'
  1454. * The `double' argument is converted to decimal notation in the 
  1455. * style `[-]ddd.ddd', where the number of digits after the decimal
  1456. * point character is equal to the precision specification.  If the
  1457. * precision is missing, it is taken as 6; if the precision is zero
  1458. * and the `#' flag is not specified, no decimal-point character
  1459. * appears.  If a decimal-point character appears, at least one 
  1460. * digit appears before it.  The value is rounded to the appropriate
  1461. * number of digits.
  1462. * .iP "`e', `E'"
  1463. * The `double' argument is converted in the style `[-]d.ddde+/-dd',
  1464. * where there is one digit before the decimal-point character 
  1465. * (which is non-zero if the argument is non-zero) and the number
  1466. * of digits after it is equal to the precision; if the precision
  1467. * is missing, it is taken as 6; if the precision is zero and the 
  1468. * `#' flag is not specified, no decimal-point character appears.  The
  1469. * value is rounded to the appropriate number of digits.  The `E'
  1470. * conversion specifier will produce a number with `E' instead of `e'
  1471. * introducing the exponent.  The exponent always contains at least
  1472. * two digits.  If the value is zero, the exponent is zero.
  1473. * .iP "`g', `G'"
  1474. * The `double' argument is converted in style `f' or `e' (or in style 
  1475. * `E' in the case of a `G' conversion specifier), with the precision
  1476. * specifying the number of significant digits.  If the precision
  1477. * is zero, it is taken as 1.  The style used depends on the 
  1478. * value converted; style `e' (or `E') will be used only if the 
  1479. * exponent resulting from such a conversion is less than -4 or 
  1480. * greater than or equal to the precision.  Trailing zeros are
  1481. * removed from the fractional portion of the result; a decimal-point
  1482. * character appears only if it is followed by a digit.
  1483. * .iP `c'
  1484. * The `int' argument is converted to an `unsigned char', and the 
  1485. * resulting character is written.
  1486. * .iP `s'
  1487. * The argument should be a pointer to an array of character type.
  1488. * Characters from the array are written up to (but not including)
  1489. * a terminating null character; if the precision is specified,
  1490. * no more than that many characters are written.  If the precision
  1491. * is not specified or is greater than the size of the array, the
  1492. * array will contain a null character.
  1493. * .iP `p'
  1494. * The argument should be a pointer to `void'.  The value of the 
  1495. * pointer is converted to a sequence of printable characters,
  1496. * in hexadecimal representation (prefixed with "0x").
  1497. * .iP `n'
  1498. * The argument should be a pointer to an integer into which
  1499. * the number of characters written to the output stream
  1500. * so far by this call to fprintf() is written.  No argument is converted.
  1501. * .iP `%'
  1502. * A `%' is written.  No argument is converted.  The complete
  1503. * conversion specification is %%.
  1504. * .LP
  1505. *
  1506. * If a conversion specification is invalid, the behavior is undefined.
  1507. *
  1508. * If any argument is, or points to, a union or an aggregate (except for an 
  1509. * array of character type using `s' conversion, or a pointer using `p' 
  1510. * conversion), the behavior is undefined.
  1511. *
  1512. * In no case does a non-existent or small field width cause truncation of a
  1513. * field if the result of a conversion is wider than the field width, the
  1514. * field is expanded to contain the conversion result.
  1515. *
  1516. * INCLUDE FILES: stdio.h 
  1517. *
  1518. * RETURNS:
  1519. * The number of characters written, or a negative value if an
  1520. * output error occurs.
  1521. *
  1522. * SEE ALSO: printf()
  1523. */
  1524. int fprintf
  1525.     (
  1526.     FILE *   fp, /* stream to write to */
  1527.     const char *  fmt, /* format string */
  1528.     ... /* optional arguments to format string */
  1529.     )
  1530.     {
  1531.     int   ret;
  1532.     va_list   vaList;
  1533.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  1534. return (ERROR);
  1535.     va_start (vaList, fmt);
  1536.     ret = vfprintf (fp, fmt, vaList);
  1537.     va_end (vaList);
  1538.     return (ret);
  1539.     }
  1540. /* fputc.c - put a character to a file. stdio.h */
  1541. /* Copyright 1992-1993 Wind River Systems, Inc. */
  1542. /*
  1543. modification history
  1544. --------------------
  1545. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1546. 01b,20sep92,smb  documentation additions
  1547. 01a,29jul92,smb  taken from UCB stdio
  1548. */
  1549. /*
  1550. DESCRIPTION
  1551.  * Copyright (c) 1990 The Regents of the University of California.
  1552.  * All rights reserved.
  1553.  *
  1554.  * This code is derived from software contributed to Berkeley by
  1555.  * Chris Torek.
  1556.  *
  1557.  * Redistribution and use in source and binary forms, with or without
  1558.  * modification, are permitted provided that the following conditions
  1559.  * are met:
  1560.  * 1. Redistributions of source code must retain the above copyright
  1561.  *    notice, this list of conditions and the following disclaimer.
  1562.  * 2. Redistributions in binary form must reproduce the above copyright
  1563.  *    notice, this list of conditions and the following disclaimer in the
  1564.  *    documentation and/or other materials provided with the distribution.
  1565.  * 3. All advertising materials mentioning features or use of this software
  1566.  *    must display the following acknowledgement:
  1567.  * This product includes software developed by the University of
  1568.  * California, Berkeley and its contributors.
  1569.  * 4. Neither the name of the University nor the names of its contributors
  1570.  *    may be used to endorse or promote products derived from this software
  1571.  *    without specific prior written permission.
  1572.  *
  1573.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1574.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1575.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1576.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1577.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1578.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1579.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1580.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1581.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1582.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1583.  * SUCH DAMAGE.
  1584. INCLUDE FILE: stdio.h
  1585. SEE ALSO: American National Standard X3.159-1989
  1586. NOMANUAL
  1587. */
  1588. #include "vxWorks.h"
  1589. #include "private/stdioP.h"
  1590. /******************************************************************************
  1591. *
  1592. * fputc - write a character to a stream (ANSI)
  1593. *
  1594. * This routine writes a character <c> to a specified stream, at the
  1595. * position indicated by the stream's file position indicator
  1596. * (if defined), and advances the indicator appropriately.
  1597. *
  1598. * If the file cannot support positioning requests, or if the stream was opened 
  1599. * in append mode, the character is appended to the output stream.
  1600. * INCLUDE FILES: stdio.h 
  1601. *
  1602. * RETURNS:
  1603. * The character written, or EOF if a write error occurs, with the error
  1604. * indicator set for the stream.
  1605. *
  1606. * SEE ALSO: fputs(), putc()
  1607. */
  1608. int fputc
  1609.     (
  1610.     int c, /* character to write */
  1611.     FAST FILE * fp /* stream to write to */
  1612.     )
  1613.     {
  1614.     return (putc (c, fp));
  1615.     }
  1616. /* fputs.c - put a string of characters to a file. stdio.h */
  1617. /* Copyright 1992-1993 Wind River Systems, Inc. */
  1618. /*
  1619. modification history
  1620. --------------------
  1621. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1622. 01b,20sep92,smb  documentation additions
  1623. 01a,29jul92,jcf  Added OBJ_VERIFY
  1624.     smb  taken from UCB stdio
  1625. */
  1626. /*
  1627. DESCRIPTION
  1628.  * Copyright (c) 1990 The Regents of the University of California.
  1629.  * All rights reserved.
  1630.  *
  1631.  * This code is derived from software contributed to Berkeley by
  1632.  * Chris Torek.
  1633.  *
  1634.  * Redistribution and use in source and binary forms, with or without
  1635.  * modification, are permitted provided that the following conditions
  1636.  * are met:
  1637.  * 1. Redistributions of source code must retain the above copyright
  1638.  *    notice, this list of conditions and the following disclaimer.
  1639.  * 2. Redistributions in binary form must reproduce the above copyright
  1640.  *    notice, this list of conditions and the following disclaimer in the
  1641.  *    documentation and/or other materials provided with the distribution.
  1642.  * 3. All advertising materials mentioning features or use of this software
  1643.  *    must display the following acknowledgement:
  1644.  * This product includes software developed by the University of
  1645.  * California, Berkeley and its contributors.
  1646.  * 4. Neither the name of the University nor the names of its contributors
  1647.  *    may be used to endorse or promote products derived from this software
  1648.  *    without specific prior written permission.
  1649.  *
  1650.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1651.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1652.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1653.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1654.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1655.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1656.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1657.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1658.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1659.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1660.  * SUCH DAMAGE.
  1661. INCLUDE FILE: stdio.h, string.h
  1662. SEE ALSO: American National Standard X3.159-1989
  1663. NOMANUAL
  1664. */
  1665. #include "vxWorks.h"
  1666. #include "stdio.h"
  1667. #include "string.h"
  1668. #include "objLib.h"
  1669. #include "private/fvwriteP.h"
  1670. /******************************************************************************
  1671. *
  1672. * fputs - write a string to a stream (ANSI)
  1673. *
  1674. * This routine writes the string <s>, minus the terminating NULL character,
  1675. * to a specified stream. 
  1676. * INCLUDE FILES: stdio.h 
  1677. *
  1678. * RETURNS:
  1679. * A non-negative value, or EOF if a write error occurs.
  1680. *
  1681. * SEE ALSO: fputc()
  1682. */
  1683. int fputs
  1684.     (
  1685.     const char *  s, /* string */
  1686.     FILE *   fp /* stream to write to */
  1687.     )
  1688.     {
  1689.     struct __suio uio;
  1690.     struct __siov iov;
  1691.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  1692. return (EOF);
  1693.     iov.iov_base = (void *)s;
  1694.     iov.iov_len = uio.uio_resid = strlen (s);
  1695.     uio.uio_iov = &iov;
  1696.     uio.uio_iovcnt = 1;
  1697.     return (__sfvwrite (fp, &uio));
  1698.     }
  1699. /* fread.c - read a file. stdio.h */
  1700. /* Copyright 1992-2002 Wind River Systems, Inc. */
  1701. /*
  1702. modification history
  1703. --------------------
  1704. 01f,21jan02,jkf  SPR#72774, fread is checking for NULL on wrong arg
  1705. 01e,12dec01,jkf  fixing SPR#72128, fread should check for NULL before bcopy
  1706. 01d,10nov01,jkf  SPR#70967, fread returns wrong value when 3rd arg == 0
  1707. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1708. 01b,20sep92,smb  documentation additions
  1709. 01a,29jul92,jcf  Added OBJ_VERIFY
  1710.     smb  taken from UCB stdio
  1711. */
  1712. /*
  1713. DESCRIPTION
  1714.  * Copyright (c) 1990 The Regents of the University of California.
  1715.  * All rights reserved.
  1716.  *
  1717.  * This code is derived from software contributed to Berkeley by
  1718.  * Chris Torek.
  1719.  *
  1720.  * Redistribution and use in source and binary forms, with or without
  1721.  * modification, are permitted provided that the following conditions
  1722.  * are met:
  1723.  * 1. Redistributions of source code must retain the above copyright
  1724.  *    notice, this list of conditions and the following disclaimer.
  1725.  * 2. Redistributions in binary form must reproduce the above copyright
  1726.  *    notice, this list of conditions and the following disclaimer in the
  1727.  *    documentation and/or other materials provided with the distribution.
  1728.  * 3. All advertising materials mentioning features or use of this software
  1729.  *    must display the following acknowledgement:
  1730.  * This product includes software developed by the University of
  1731.  * California, Berkeley and its contributors.
  1732.  * 4. Neither the name of the University nor the names of its contributors
  1733.  *    may be used to endorse or promote products derived from this software
  1734.  *    without specific prior written permission.
  1735.  *
  1736.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1737.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1738.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1739.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1740.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1741.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1742.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1743.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1744.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1745.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1746.  * SUCH DAMAGE.
  1747. INCLUDE FILE: stdio.h, string.h
  1748. SEE ALSO: American National Standard X3.159-1989
  1749. NOMANUAL
  1750. */
  1751. #include "vxWorks.h"
  1752. #include "stdio.h"
  1753. #include "string.h"
  1754. #include "objLib.h"
  1755. #include "private/stdioP.h"
  1756. /******************************************************************************
  1757. *
  1758. * fread - read data into an array (ANSI)
  1759. *
  1760. * This routine reads, into the array <buf>, up to <count> elements of size
  1761. * <size>, from a specified stream <fp>.  The file position indicator for the
  1762. * stream (if defined) is advanced by the number of characters successfully
  1763. * read.  If an error occurs, the resulting value of the file position
  1764. * indicator for the stream is indeterminate.  If a partial element is read,
  1765. * its value is indeterminate.
  1766. * INCLUDE FILES: stdio.h 
  1767. *
  1768. * RETURNS:
  1769. * The number of elements successfully read, which may be less than <count>
  1770. * if a read error or end-of-file is encountered; or zero if <size> or
  1771. * <count> is zero, with the contents of the array and the state of the
  1772. * stream remaining unchanged.
  1773. */
  1774. int fread
  1775.     (
  1776.     void * buf, /* where to copy data */
  1777.     size_t size,  /* element size */
  1778.     size_t count, /* no. of elements */
  1779.     FAST FILE * fp /* stream to read from */
  1780.     )
  1781.     {
  1782.     FAST size_t resid;
  1783.     FAST char * p;
  1784.     FAST int r;
  1785.     size_t total;
  1786.     /* SPR#72128, check for NULL args before bcopy */
  1787.     if ((NULL == fp) || (NULL == buf))
  1788. {
  1789.         return (0);
  1790. }
  1791.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  1792. return (0);
  1793.     /* 
  1794.      * SPR#70967: fread returns wrong value when 3rd arg == 0 
  1795.      *
  1796.      * ANSI specification declares fread() returns zero if size 
  1797.      * _or_ count is zero.  But the vxWorks implementation returned 
  1798.      * non-zero given the following input case:
  1799.      *
  1800.      * fread ( buf , 0 ,1 ,fp );
  1801.      *
  1802.      * Old (broken) code:
  1803.      *
  1804.      * if ((resid = (count * size)) == 0)
  1805.      *     return (count);     
  1806.      *
  1807.      * New (fixed) code:
  1808.      *
  1809.      * if (0 == (resid = (count * size)))
  1810.      *     return (0);     
  1811.      */
  1812.     if (0 == (resid = (count * size)))
  1813. return (0);
  1814.     if (fp->_r < 0)
  1815. fp->_r = 0;
  1816.     total = resid;
  1817.     p   = buf;
  1818.     while (resid > (r = fp->_r)) 
  1819. {
  1820. (void) bcopy ((void *)fp->_p, (void *)p, (size_t)r);
  1821. fp->_p += r;
  1822. p += r;
  1823. resid -= r;
  1824. if (__srefill (fp)) /* fp->_r = 0 is done */
  1825. return ((total - resid) / size); /* partial result */
  1826. }
  1827.     (void) bcopy ((void *)fp->_p, (void *)p, resid);
  1828.     fp->_r -= resid;
  1829.     fp->_p += resid;
  1830.     return (count);
  1831.     }
  1832. /* freopen.c - reopen a file. stdio.h */
  1833. /* Copyright 1992-1993 Wind River Systems, Inc. */
  1834. /*
  1835. modification history
  1836. --------------------
  1837. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1838. 01b,20sep92,smb  documentation additions
  1839. 01a,29jul92,jcf  added memory reclaimation.
  1840.    +smb  taken from UCB stdio
  1841. */
  1842. /*
  1843. DESCRIPTION
  1844.  * Copyright (c) 1990 The Regents of the University of California.
  1845.  * All rights reserved.
  1846.  *
  1847.  * This code is derived from software contributed to Berkeley by
  1848.  * Chris Torek.
  1849.  *
  1850.  * Redistribution and use in source and binary forms, with or without
  1851.  * modification, are permitted provided that the following conditions
  1852.  * are met:
  1853.  * 1. Redistributions of source code must retain the above copyright
  1854.  *    notice, this list of conditions and the following disclaimer.
  1855.  * 2. Redistributions in binary form must reproduce the above copyright
  1856.  *    notice, this list of conditions and the following disclaimer in the
  1857.  *    documentation and/or other materials provided with the distribution.
  1858.  * 3. All advertising materials mentioning features or use of this software
  1859.  *    must display the following acknowledgement:
  1860.  * This product includes software developed by the University of
  1861.  * California, Berkeley and its contributors.
  1862.  * 4. Neither the name of the University nor the names of its contributors
  1863.  *    may be used to endorse or promote products derived from this software
  1864.  *    without specific prior written permission.
  1865.  *
  1866.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1867.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1868.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1869.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1870.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1871.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1872.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1873.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1874.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1875.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1876.  * SUCH DAMAGE.
  1877. INCLUDE FILE: stdio.h, sys/types.h, sys/stat.h, fcntl.h, error.h, unistd.h, 
  1878.       stdlib.h
  1879. SEE ALSO: American National Standard X3.159-1989
  1880. NOMANUAL
  1881. */
  1882. #include "vxWorks.h"
  1883. #include "stdio.h"
  1884. #include "ioLib.h"
  1885. #include "sys/types.h"
  1886. #include "sys/stat.h"
  1887. #include "fcntl.h"
  1888. #include "errno.h"
  1889. #include "unistd.h"
  1890. #include "stdlib.h"
  1891. #include "objLib.h"
  1892. #include "private/stdioP.h"
  1893. /******************************************************************************
  1894. *
  1895. * freopen - open a file specified by name (ANSI)
  1896. *
  1897. * This routine opens a file whose name is the string pointed to by <file>
  1898. * and associates it with a specified stream <fp>.
  1899. * The <mode> argument is used just as in the fopen() function.
  1900. *
  1901. * This routine first attempts to close any file that is associated
  1902. * with the specified stream.  Failure to close the file successfully is
  1903. * ignored. The error and end-of-file indicators for the stream are cleared.
  1904. *
  1905. * Typically, freopen() is used to attach the already-open streams
  1906. * `stdin', `stdout', and `stderr' to other files.
  1907. * INCLUDE FILES: stdio.h 
  1908. *
  1909. * RETURNS:
  1910. * The value of <fp>, or a null pointer if the open operation fails.
  1911. *
  1912. * SEE ALSO: fopen()
  1913. */
  1914. FILE * freopen
  1915.     (
  1916.     const char *  file, /* name of file */
  1917.     const char *  mode, /* mode */
  1918.     FAST FILE *   fp /* stream */
  1919.     )
  1920.     {
  1921.     FAST int f;
  1922.     int flags;
  1923.     int oflags;
  1924.     int sverrno;
  1925.     BOOL isopen = TRUE; /* its already open */
  1926.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  1927. return (NULL);
  1928.     if ((flags = __sflags (mode, &oflags)) == 0) 
  1929. {
  1930. (void) fclose (fp);
  1931. return (NULL);
  1932. }
  1933.     /*
  1934.      * There are actually programs that depend on being able to "freopen"
  1935.      * descriptors that weren't originally open.  Keep this from breaking.
  1936.      * Remember whether the stream was open to begin with, and which file
  1937.      * descriptor (if any) was associated with it.  If it was attached to
  1938.      * a descriptor, defer closing it; freopen("/dev/stdin", "r", stdin)
  1939.      * should work.  This is unnecessary if it was not a Unix file.
  1940.      */
  1941.     if (fp->_flags & __SWR) /* flush the stream though */
  1942. (void) __sflush(fp);  /* ANSI doesn't require this */
  1943.     if (fp->_file < 0) /* need to close the fp? */
  1944. {
  1945. (void) __sclose (fp);
  1946. isopen = FALSE;
  1947. }
  1948.     /* Get a new descriptor to refer to the new file. */
  1949.     f = open (file, oflags, DEFFILEMODE);
  1950.     if ((f < 0) && isopen)
  1951. {
  1952. /* If out of fd's close the old one and try again. */
  1953. if ((errno == ENFILE) || (errno == EMFILE))
  1954.     {
  1955.     (void) __sclose (fp);
  1956.     isopen = FALSE;
  1957.     f = open (file, oflags, DEFFILEMODE);
  1958.     }
  1959. }
  1960.     sverrno = errno;
  1961.     /*
  1962.      * Finish closing fp.  Even if the open succeeded above, we cannot
  1963.      * keep fp->_base: it may be the wrong size.  This loses the effect
  1964.      * of any setbuffer calls, but stdio has always done this before.
  1965.      */
  1966.     if (isopen)
  1967. (void) __sclose (fp);
  1968.     if (fp->_flags & __SMBF)
  1969. free ((char *)fp->_bf._base);
  1970.     fp->_w = 0;
  1971.     fp->_r = 0;
  1972.     fp->_p = NULL;
  1973.     fp->_bf._base = NULL;
  1974.     fp->_bf._size = 0;
  1975.     fp->_lbfsize = 0;
  1976.     if (HASUB(fp))
  1977. FREEUB(fp);
  1978.     fp->_ub._size = 0;
  1979.     if (HASLB(fp))
  1980. FREELB(fp);
  1981.     fp->_lb._size = 0;
  1982.     if ((f < 0) && (fp->_flags != 0))
  1983. { /* did not get it after all */
  1984. fp->_flags = 0; /* set it free */
  1985. stdioFpDestroy (fp); /* destroy file pointer */
  1986. errno = sverrno; /* restore in case _close clobbered */
  1987. return (NULL);
  1988. }
  1989.     fp->_flags = flags;
  1990.     fp->_file = f;
  1991.     return (fp);
  1992.     }
  1993. /* fscanf.c - scan a file. stdio.h */
  1994. /* Copyright 1992-1995 Wind River Systems, Inc. */
  1995. /*
  1996. modification history
  1997. --------------------
  1998. 01d,24jan95,rhp  doc: avoid 'L' in fscanf(), no long doubles 
  1999.                  in VxWorks (see SPR#3886)
  2000. 01c,05mar93,jdi  documentation cleanup for 5.1.
  2001. 01b,20sep92,smb  documentation additions
  2002. 01a,29jul92,jcf  Added OBJ_VERIFY
  2003.    +smb  taken from UCB stdio
  2004. */
  2005. /*
  2006. DESCRIPTION
  2007.  * Copyright (c) 1990 The Regents of the University of California.
  2008.  * All rights reserved.
  2009.  *
  2010.  * This code is derived from software contributed to Berkeley by
  2011.  * Chris Torek.
  2012.  *
  2013.  * Redistribution and use in source and binary forms, with or without
  2014.  * modification, are permitted provided that the following conditions
  2015.  * are met:
  2016.  * 1. Redistributions of source code must retain the above copyright
  2017.  *    notice, this list of conditions and the following disclaimer.
  2018.  * 2. Redistributions in binary form must reproduce the above copyright
  2019.  *    notice, this list of conditions and the following disclaimer in the
  2020.  *    documentation and/or other materials provided with the distribution.
  2021.  * 3. All advertising materials mentioning features or use of this software
  2022.  *    must display the following acknowledgement:
  2023.  * This product includes software developed by the University of
  2024.  * California, Berkeley and its contributors.
  2025.  * 4. Neither the name of the University nor the names of its contributors
  2026.  *    may be used to endorse or promote products derived from this software
  2027.  *    without specific prior written permission.
  2028.  *
  2029.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  2030.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  2031.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  2032.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  2033.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  2034.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  2035.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  2036.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  2037.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  2038.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  2039.  * SUCH DAMAGE.
  2040. INCLUDE FILE: stdio.h, stdarg.h
  2041. SEE ALSO: American National Standard X3.159-1989
  2042. NOMANUAL
  2043. */
  2044. #include "vxWorks.h"
  2045. #include "fioLib.h"
  2046. #include "stdarg.h"
  2047. #include "objLib.h"
  2048. #include "private/stdioP.h"
  2049. /******************************************************************************
  2050. *
  2051. * fscanf - read and convert characters from a stream (ANSI)
  2052. * This routine reads characters from a specified stream, and interprets them
  2053. * according to format specifications in the string <fmt>, which specifies
  2054. * the admissible input sequences and how they are to be converted for
  2055. * assignment, using subsequent arguments as pointers to the objects to
  2056. * receive the converted input.
  2057. *
  2058. * If there are insufficient arguments for the format, the behavior is
  2059. * undefined.  If the format is exhausted while arguments remain, the excess
  2060. * arguments are evaluated but are otherwise ignored.
  2061. *
  2062. * The format is a multibyte character sequence, beginning and ending in
  2063. * its initial shift state.  The format is composed of zero or more directives:
  2064. * one or more white-space characters; an ordinary multibyte character (neither
  2065. * `%' nor a white-space character); or a conversion specification.  Each
  2066. * conversion specification is introduced by the `%' character.  After the `%',
  2067. * the following appear in sequence:
  2068. *
  2069. * .iP "" 4
  2070. * An optional assignment-suppressing character `*'.
  2071. * .iP
  2072. * An optional non-zero decimal integer that specifies the maximum field 
  2073. * width.
  2074. * .iP
  2075. * An optional `h' or `l' (el) indicating the size of the receiving 
  2076. * object.  The conversion specifiers `d', `i', and `n' should be preceded by
  2077. * `h' if the corresponding argument is a pointer to `short int' rather
  2078. * than a pointer to `int', or by `l' if it is a pointer to `long int'.
  2079. * Similarly, the conversion specifiers `o', `u', and `x' shall be preceded
  2080. * by `h' if the corresponding argument is a pointer to `unsigned short int'
  2081. * rather than a pointer to `unsigned int', or by `l' if it is a pointer to
  2082. * `unsigned long int'.  Finally, the conversion specifiers `e', `f', and `g' 
  2083. * shall be preceded by `l' if the corresponding argument is a pointer to
  2084. * `double' rather than a pointer to `float'.  If an `h' or `l' appears
  2085. * with any other conversion specifier, the behavior is undefined.
  2086. *
  2087. * &WARNING: ANSI C also specifies an optional `L' in some of the same
  2088. * contexts as `l' above, corresponding to a `long double *' argument.
  2089. * However, the current release of the VxWorks libraries does not support 
  2090. * `long double' data; using the optional `L' gives unpredictable results.
  2091. * .iP
  2092. * A character that specifies the type of conversion to be applied.  The
  2093. * valid conversion specifiers are described below.
  2094. * .LP
  2095. *
  2096. * The fscanf() routine executes each directive of the format in turn.  If a 
  2097. * directive fails, as detailed below, fscanf() returns.  Failures
  2098. * are described as input failures (due to the unavailability of input
  2099. * characters), or matching failures (due to inappropriate input).
  2100. * A directive composed of white-space character(s) is executed by reading
  2101. * input up to the first non-white-space character (which remains unread),
  2102. * or until no more characters can be read.
  2103. *
  2104. * A directive that is an ordinary multibyte character is executed by reading
  2105. * the next characters of the stream.  If one of the characters differs from
  2106. * one comprising the directive, the directive fails, and the differing and
  2107. * subsequent characters remain unread.
  2108. *
  2109. * A directive that is a conversion specification defines a set of matching
  2110. * input sequences, as described below for each specifier.  A conversion
  2111. * specification is executed in the following steps:
  2112. *
  2113. * Input white-space characters (as specified by the isspace() function) are 
  2114. * skipped, unless the specification includes a `[', `c', or `n' specifier.
  2115. *
  2116. * An input item is read from the stream, unless the specification includes
  2117. * an `n' specifier.  An input item is defined as the longest matching
  2118. * sequence of input characters, unless that exceeds a specified field width,
  2119. * in which case it is the initial subsequence of that length in the
  2120. * sequence.  The first character, if any, after the input item remains
  2121. * unread.  If the length of the input item is zero, the execution of the
  2122. * directive fails:  this condition is a matching failure, unless an error
  2123. * prevented input from the stream, in which case it is an input failure.
  2124. *
  2125. * Except in the case of a `%' specifier, the input item is converted to a
  2126. * type appropriate to the conversion specifier.  If the input item is not a
  2127. * matching sequence, the execution of the directive fails:  this condition
  2128. * is a matching failure.  Unless assignment suppression was indicated by a
  2129. * `*', the result of the conversion is placed in the object pointed to by
  2130. * the first argument following the <fmt> argument that has not already
  2131. * received a conversion result.  If this object does not have an appropriate
  2132. * type, or if the result of the conversion cannot be represented in the
  2133. * space provided, the behavior is undefined.
  2134. *
  2135. * The following conversion specifiers are valid:
  2136. *
  2137. * .iP `d'
  2138. * Matches an optionally signed decimal integer whose format is
  2139. * the same as expected for the subject sequence of the strtol()
  2140. * function with the value 10 for the <base> argument.  The 
  2141. * corresponding argument should be a pointer to `int'.
  2142. * .iP `i'
  2143. * Matches an optionally signed integer, whose format is the
  2144. * same as expected for the subject sequence of the strtol()
  2145. * function with the value 0 for the <base> argument.  The 
  2146. * corresponding argument should be a pointer to `int'.
  2147. * .iP `o'
  2148. * Matches an optionally signed octal integer, whose format is the
  2149. * same as expected for the subject sequence of the strtoul()
  2150. * function with the value 8 for the <base> argument.  The
  2151. * corresponding argument should be a pointer to `unsigned int'.
  2152. * .iP `u'
  2153. * Matches an optionally signed decimal integer, whose format is 
  2154. * the same as expected for the subject sequence of the strtoul()
  2155. * function with the value 10 for the <base> argument.  The
  2156. * corresponding argument should be a pointer to `unsigned int'.
  2157. * .iP `x'
  2158. * Matches an optionally signed hexadecimal integer, whose format is
  2159. * the same as expected for the subject sequence of the strtoul()
  2160. * function with the value 16 for the <base> argument.  The
  2161. * corresponding argument should be a pointer to `unsigned int'.
  2162. * .iP "`e', `f', `g'"
  2163. * Match an optionally signed floating-point number, whose format
  2164. * is the same as expected for the subject string of the strtod()
  2165. * function.  The corresponding argument should be a pointer to `float'.
  2166. * .iP `s'
  2167. * Matches a sequence of non-white-space characters.  The 
  2168. * corresponding argument should be a pointer to the initial
  2169. * character of an array large enough to accept the sequence
  2170. * and a terminating null character, which will be added 
  2171. * automatically.
  2172. * .iP `['
  2173. * Matches a non-empty sequence of characters from a set of 
  2174. * expected characters (the `scanset').  The corresponding argument
  2175. * should be a pointer to the initial character of an array large
  2176. * enough to accept the sequence and a terminating null character,
  2177. * which is added automatically.  The conversion specifier
  2178. * includes all subsequent character in the format string, up to
  2179. * and including the matching right bracket (`]').  The characters
  2180. * between the brackets (the `scanlist') comprise the scanset,
  2181. * unless the character after the left bracket is a circumflex (`^')
  2182. * in which case the scanset contains all characters that do not
  2183. * appear in the scanlist between the circumflex and the right
  2184. * bracket.  If the conversion specifier begins with "[]" or "[^]", the
  2185. * right bracket character is in the scanlist and the next 
  2186. * right bracket character is the matching right bracket that ends
  2187. * the specification; otherwise the first right bracket character
  2188. * is the one that ends the specification.
  2189. * .iP `c'
  2190. * Matches a sequence of characters of the number specified by the
  2191. * field width (1 if no field width is present in the directive).
  2192. * The corresponding argument should be a pointer to the initial 
  2193. * character of an array large enough to accept the sequence.
  2194. * No null character is added.
  2195. * .iP `p'
  2196. * Matches an implementation-defined set of sequences, which should be
  2197. * the same as the set of sequences that may be produced by the %p
  2198. * conversion of the fprintf() function.  The corresponding argument
  2199. * should be a pointer to a pointer to `void'.  VxWorks defines its
  2200. * pointer input field to be consistent with pointers written by the
  2201. * fprintf() function ("0x" hexadecimal notation).  If the input item is
  2202. * a value converted earlier during the same program execution, the
  2203. * pointer that results should compare equal to that value; otherwise
  2204. * the behavior of the %p conversion is undefined.
  2205. * .iP `n'
  2206. * No input is consumed.  The corresponding argument should be a pointer to
  2207. * `int' into which the number of characters read from the input stream so
  2208. * far by this call to fscanf() is written.  Execution of a %n directive does
  2209. * not increment the assignment count returned when fscanf() completes
  2210. * execution.
  2211. * .iP `%'
  2212. * Matches a single `%'; no conversion or assignment occurs.  The
  2213. * complete conversion specification is %%.
  2214. * .LP
  2215. *
  2216. * If a conversion specification is invalid, the behavior is undefined.
  2217. *
  2218. * The conversion specifiers `E', `G', and `X' are also valid and behave the
  2219. * same as `e', `g', and `x', respectively.
  2220. *
  2221. * If end-of-file is encountered during input, conversion is terminated.  If 
  2222. * end-of-file occurs before any characters matching the current directive
  2223. * have been read (other than leading white space, where permitted), execution
  2224. * of the current directive terminates with an input failure; otherwise, unless
  2225. * execution of the current directive is terminated with a matching failure,
  2226. * execution of the following directive (if any) is terminated with an input
  2227. * failure.
  2228. *
  2229. * If conversion terminates on a conflicting input character, the offending
  2230. * input character is left unread in the input stream.  Trailing white space
  2231. * (including new-line characters) is left unread unless matched by a
  2232. * directive.  The success of literal matches and suppressed assignments is
  2233. * not directly determinable other than via the %n directive.
  2234. *
  2235. * INCLUDE FILES: stdio.h 
  2236. *
  2237. * RETURNS:
  2238. * The number of input items assigned, which can be fewer than provided for,
  2239. * or even zero, in the event of an early matching failure; or EOF if an
  2240. * input failure occurs before any conversion.
  2241. *
  2242. * SEE ALSO: scanf(), sscanf()
  2243. */
  2244. int fscanf
  2245.     (
  2246.     FILE *   fp, /* stream to read from */
  2247.     char const *  fmt, /* format string */
  2248.     ... /* arguments to format string */
  2249.     ) 
  2250.     {
  2251.     int     nArgs;
  2252.     int     unget;
  2253.     va_list vaList; /* vararg list */
  2254.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  2255. return (EOF);
  2256.     va_start (vaList, fmt);
  2257.     nArgs = fioScanV (fmt, fgetc, (int) fp, &unget, vaList);
  2258.     va_end (vaList);
  2259.     if (unget != -1)
  2260. ungetc (unget, fp);
  2261.     return (nArgs);
  2262.     }
  2263. /* fseek.c - seek a position in a file. stdio.h */
  2264. /* Copyright 1992-1993 Wind River Systems, Inc. */
  2265. /*
  2266. modification history
  2267. --------------------
  2268. 01c,05mar93,jdi  documentation cleanup for 5.1.
  2269. 01b,20sep92,smb  documentation additions
  2270. 01a,29jul92,jcf  Added OBJ_VERIFY
  2271.    +smb  taken from UCB stdio, removed fstat().
  2272. */
  2273. /*
  2274. DESCRIPTION
  2275.  * Copyright (c) 1990 The Regents of the University of California.
  2276.  * All rights reserved.
  2277.  *
  2278.  * This code is derived from software contributed to Berkeley by
  2279.  * Chris Torek.
  2280.  *
  2281.  * Redistribution and use in source and binary forms, with or without
  2282.  * modification, are permitted provided that the following conditions
  2283.  * are met:
  2284.  * 1. Redistributions of source code must retain the above copyright
  2285.  *    notice, this list of conditions and the following disclaimer.
  2286.  * 2. Redistributions in binary form must reproduce the above copyright
  2287.  *    notice, this list of conditions and the following disclaimer in the
  2288.  *    documentation and/or other materials provided with the distribution.
  2289.  * 3. All advertising materials mentioning features or use of this software
  2290.  *    must display the following acknowledgement:
  2291.  * This product includes software developed by the University of
  2292.  * California, Berkeley and its contributors.
  2293.  * 4. Neither the name of the University nor the names of its contributors
  2294.  *    may be used to endorse or promote products derived from this software
  2295.  *    without specific prior written permission.
  2296.  *
  2297.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  2298.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  2299.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  2300.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  2301.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  2302.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  2303.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  2304.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  2305.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  2306.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  2307.  * SUCH DAMAGE.
  2308. INCLUDE FILE: stdio.h, sys/types.h, sys/stat.h, fcntl.h, stdlib.h, errno.h
  2309. SEE ALSO: American National Standard X3.159-1989
  2310. NOMANUAL
  2311. */
  2312. #include "vxWorks.h"
  2313. #include "stdio.h"
  2314. #include "ioLib.h"
  2315. #include "sys/types.h"
  2316. #include "sys/stat.h"
  2317. #include "fcntl.h"
  2318. #include "stdlib.h"
  2319. #include "errno.h"
  2320. #include "objLib.h"
  2321. #include "private/stdioP.h"
  2322. #define POS_ERR (-(fpos_t)1)
  2323. /******************************************************************************
  2324. *
  2325. * fseek - set the file position indicator for a stream (ANSI)
  2326. *
  2327. * This routine sets the file position indicator for a specified stream.
  2328. * For a binary stream, the new position, measured in characters from the 
  2329. * beginning of the file, is obtained by adding <offset> to the position 
  2330. * specified by <whence>, whose possible values are:
  2331. * .iP SEEK_SET 16
  2332. * the beginning of the file.
  2333. * .iP SEEK_CUR
  2334. * the current value of the file position indicator.
  2335. * .iP SEEK_END
  2336. * the end of the file.
  2337. * .LP
  2338. * A binary stream does not meaningfully
  2339. * support fseek() calls with a <whence> value of SEEK_END.
  2340. *
  2341. * For a text stream, either <offset> is zero, or <offset> is a value
  2342. * returned by an earlier call to ftell() on the stream, in which case
  2343. * <whence> should be SEEK_SET.
  2344. *
  2345. * A successful call to fseek() clears the end-of-file indicator for the
  2346. * stream and undoes any effects of ungetc() on the same stream.  After an
  2347. * fseek() call, the next operation on an update stream can be either input
  2348. * or output.
  2349. * INCLUDE FILES: stdio.h 
  2350. *
  2351. * RETURNS: Non-zero only for a request that cannot be satisfied.
  2352. *
  2353. * ERRNO: EINVAL
  2354. *
  2355. * SEE ALSO: ftell()
  2356. */
  2357. int fseek
  2358.     (
  2359.     FAST FILE * fp, /* stream */
  2360.     long offset, /* offset from <whence> */
  2361.     int whence /* position to offset from: */
  2362. /* SEEK_SET = beginning */
  2363. /* SEEK_CUR = current position */
  2364. /* SEEK_END = end-of-file */
  2365.     )
  2366.     {
  2367.     fpos_t target;
  2368.     fpos_t curoff;
  2369.     size_t n;
  2370.     struct stat st;
  2371.     int havepos;
  2372.     BOOL doStat;
  2373.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  2374. return (ERROR);
  2375.     /*
  2376.      * Change any SEEK_CUR to SEEK_SET, and check `whence' argument.
  2377.      * After this, whence is either SEEK_SET or SEEK_END.
  2378.      */
  2379.     switch (whence) 
  2380. {
  2381. case SEEK_CUR:
  2382. /*
  2383.  * In order to seek relative to the current stream offset,
  2384.  * we have to first find the current stream offset a la
  2385.  * ftell (see ftell for details).
  2386.  */
  2387. if (fp->_flags & __SOFF)
  2388.     curoff = fp->_offset;
  2389. else 
  2390.     {
  2391.     curoff = __sseek (fp, (fpos_t)0, SEEK_CUR);
  2392.     if (curoff == -1L)
  2393. return (EOF);
  2394.     }
  2395. if (fp->_flags & __SRD) 
  2396.     {
  2397.     curoff -= fp->_r;
  2398.     if (HASUB(fp))
  2399. curoff -= fp->_ur;
  2400.     }
  2401. else if (fp->_flags & __SWR && fp->_p != NULL)
  2402.     curoff += fp->_p - fp->_bf._base;
  2403. offset += curoff;
  2404. whence = SEEK_SET;
  2405. havepos = 1;
  2406. break;
  2407. case SEEK_SET:
  2408. case SEEK_END:
  2409. curoff = 0; /* XXX just to keep gcc quiet */
  2410. havepos = 0;
  2411. break;
  2412. default:
  2413. errno = EINVAL;
  2414. return (EOF);
  2415. }
  2416.     /*
  2417.      * Can only optimise if:
  2418.      * reading (and not reading-and-writing);
  2419.      * not unbuffered; and