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

VxWorks

开发平台:

C/C++

  1.      * this is a `regular' Unix file (and hence seekfn==__sseek).
  2.      * We must check __NBF first, because it is possible to have __NBF
  3.      * and __SOPT both set.
  4.      */
  5.     if (fp->_bf._base == NULL)
  6. __smakebuf (fp);
  7.     if (fp->_flags & (__SWR | __SRW | __SNBF | __SNPT))
  8. goto dumb;
  9.     doStat = ioctl (fp->_file, FIOFSTATGET, (int)&st);
  10.     if ((fp->_flags & __SOPT) == 0) 
  11. {
  12. if ((fp->_file < 0 || (doStat) ||
  13.     (st.st_mode & S_IFMT) != S_IFREG)) 
  14.     {
  15.     fp->_flags |= __SNPT;
  16.     goto dumb;
  17.     }
  18. fp->_blksize   = st.st_blksize;
  19. fp->_flags |= __SOPT;
  20. }
  21.     /*
  22.      * We are reading; we can try to optimise.
  23.      * Figure out where we are going and where we are now.
  24.      */
  25.     if (whence == SEEK_SET)
  26. target = offset;
  27.     else 
  28. {
  29. if (doStat)
  30.     goto dumb;
  31. target = st.st_size + offset;
  32. }
  33.     if (!havepos) 
  34. {
  35. if (fp->_flags & __SOFF)
  36.     curoff = fp->_offset;
  37. else 
  38.     {
  39.     curoff = __sseek (fp, 0L, SEEK_CUR);
  40.     if (curoff == POS_ERR)
  41. goto dumb;
  42.     }
  43. curoff -= fp->_r;
  44. if (HASUB(fp))
  45.     curoff -= fp->_ur;
  46. }
  47.     /*
  48.      * Compute the number of bytes in the input buffer (pretending
  49.      * that any ungetc() input has been discarded).  Adjust current
  50.      * offset backwards by this count so that it represents the
  51.      * file offset for the first byte in the current input buffer.
  52.      */
  53.     if (HASUB(fp)) 
  54. {
  55. n = fp->_up - fp->_bf._base;
  56. curoff -= n;
  57. n      += fp->_ur;
  58.     else 
  59. {
  60. n = fp->_p - fp->_bf._base;
  61. curoff -= n;
  62. n      += fp->_r;
  63. }
  64.     /*
  65.      * If the target offset is within the current buffer,
  66.      * simply adjust the pointers, clear EOF, undo ungetc(),
  67.      * and return.  (If the buffer was modified, we have to
  68.      * skip this; see fgetline.c.)
  69.      */
  70.     if (((fp->_flags & __SMOD) == 0) && 
  71. (target >= curoff) && 
  72. (target < (curoff + n))) 
  73. {
  74. FAST int o = target - curoff;
  75. fp->_p = fp->_bf._base + o;
  76. fp->_r = n - o;
  77. if (HASUB(fp))
  78.     FREEUB(fp);
  79. fp->_flags &= ~__SEOF;
  80. return (0);
  81. }
  82.     /*
  83.      * The place we want to get to is not within the current buffer,
  84.      * but we can still be kind to the kernel copyout mechanism.
  85.      * By aligning the file offset to a block boundary, we can let
  86.      * the kernel use the VM hardware to map pages instead of
  87.      * copying bytes laboriously.  Using a block boundary also
  88.      * ensures that we only read one block, rather than two.
  89.      */
  90.     curoff = target & ~(fp->_blksize - 1);
  91.     if (__sseek (fp, curoff, SEEK_SET) == POS_ERR)
  92. goto dumb;
  93.     fp->_r = 0;
  94.     if (HASUB(fp))
  95. FREEUB(fp);
  96.     fp->_flags &= ~__SEOF;
  97.     n = target - curoff;
  98.     if (n) 
  99. {
  100. if (__srefill (fp) || fp->_r < n)
  101.     goto dumb;
  102. fp->_p += n;
  103. fp->_r -= n;
  104. }
  105.     return (0);
  106.     /*
  107.      * We get here if we cannot optimise the seek ... just
  108.      * do it.  Allow the seek function to change fp->_bf._base.
  109.      */
  110. dumb:
  111.     if ((__sflush (fp)) || (__sseek (fp, offset, whence) == POS_ERR)) 
  112. return (EOF);
  113.     /* success: clear EOF indicator and discard ungetc() data */
  114.     if (HASUB(fp))
  115. FREEUB(fp);
  116.     fp->_p = fp->_bf._base;
  117.     fp->_r = 0;
  118.     /* fp->_w = 0; */ /* unnecessary (I think...) */
  119.     fp->_flags &= ~__SEOF;
  120.     return (0);
  121.     }
  122. /* fsetpos.c - set a position in a file. stdio.h */
  123. /* Copyright 1992-1993 Wind River Systems, Inc. */
  124. /*
  125. modification history
  126. --------------------
  127. 01c,05mar93,jdi  documentation cleanup for 5.1.
  128. 01b,20sep92,smb  documentation additions
  129. 01a,29jul92,smb  taken from UCB stdio
  130. */
  131. /*
  132. DESCRIPTION
  133.  * Copyright (c) 1990 The Regents of the University of California.
  134.  * All rights reserved.
  135.  *
  136.  * This code is derived from software contributed to Berkeley by
  137.  * Chris Torek.
  138.  *
  139.  * Redistribution and use in source and binary forms, with or without
  140.  * modification, are permitted provided that the following conditions
  141.  * are met:
  142.  * 1. Redistributions of source code must retain the above copyright
  143.  *    notice, this list of conditions and the following disclaimer.
  144.  * 2. Redistributions in binary form must reproduce the above copyright
  145.  *    notice, this list of conditions and the following disclaimer in the
  146.  *    documentation and/or other materials provided with the distribution.
  147.  * 3. All advertising materials mentioning features or use of this software
  148.  *    must display the following acknowledgement:
  149.  * This product includes software developed by the University of
  150.  * California, Berkeley and its contributors.
  151.  * 4. Neither the name of the University nor the names of its contributors
  152.  *    may be used to endorse or promote products derived from this software
  153.  *    without specific prior written permission.
  154.  *
  155.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  156.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  157.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  158.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  159.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  160.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  161.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  162.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  163.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  164.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  165.  * SUCH DAMAGE.
  166. INCLUDE FILE: stdio.h
  167. SEE ALSO: American National Standard X3.159-1989
  168. NOMANUAL
  169. */
  170. #include "vxWorks.h"
  171. #include "stdio.h"
  172. /******************************************************************************
  173. *
  174. * fsetpos - set the file position indicator for a stream (ANSI)
  175. *
  176. * This routine sets the file position indicator for a specified stream <iop>
  177. * according to the value of the object pointed to by <pos>, which is a value
  178. * obtained from an earlier call to fgetpos() on the same stream.
  179. *
  180. * A successful call to fsetpos() clears the end-of-file indicator for the
  181. * stream and undoes any effects of ungetc() on the same stream.  After an
  182. * fsetpos() call, the next operation on an update stream may be either input
  183. * or output.
  184. * INCLUDE FILES: stdio.h 
  185. *
  186. * RETURNS:
  187. * Zero, or non-zero if the call fails, with `errno' set to indicate the error.
  188. *
  189. * SEE ALSO: fgetpos()
  190. */
  191. int fsetpos 
  192.     (
  193.     FILE *     iop, /* stream */
  194.     const fpos_t *  pos /* position, obtained by fgetpos() */
  195.     )
  196.     {
  197.     return (fseek (iop, (long)*pos, SEEK_SET));
  198.     }
  199. /* ftell.c - remember a position in a file. stdio.h */
  200. /* Copyright 1992-1993 Wind River Systems, Inc. */
  201. /*
  202. modification history
  203. --------------------
  204. 01c,05mar93,jdi  documentation cleanup for 5.1.
  205. 01b,20sep92,smb  documentation additions
  206. 01a,29jul92,jcf  Added OBJ_VERIFY
  207.    +smb  taken from UCB stdio
  208. */
  209. /*
  210. DESCRIPTION
  211.  * Copyright (c) 1990 The Regents of the University of California.
  212.  * All rights reserved.
  213.  *
  214.  * This code is derived from software contributed to Berkeley by
  215.  * Chris Torek.
  216.  *
  217.  * Redistribution and use in source and binary forms, with or without
  218.  * modification, are permitted provided that the following conditions
  219.  * are met:
  220.  * 1. Redistributions of source code must retain the above copyright
  221.  *    notice, this list of conditions and the following disclaimer.
  222.  * 2. Redistributions in binary form must reproduce the above copyright
  223.  *    notice, this list of conditions and the following disclaimer in the
  224.  *    documentation and/or other materials provided with the distribution.
  225.  * 3. All advertising materials mentioning features or use of this software
  226.  *    must display the following acknowledgement:
  227.  * This product includes software developed by the University of
  228.  * California, Berkeley and its contributors.
  229.  * 4. Neither the name of the University nor the names of its contributors
  230.  *    may be used to endorse or promote products derived from this software
  231.  *    without specific prior written permission.
  232.  *
  233.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  234.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  235.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  236.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  237.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  238.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  239.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  240.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  241.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  242.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  243.  * SUCH DAMAGE.
  244. INCLUDE FILE: stdio.h, error.h
  245. SEE ALSO: American National Standard X3.159-1989
  246. NOMANUAL
  247. */
  248. #include "vxWorks.h"
  249. #include "stdio.h"
  250. #include "errno.h"
  251. #include "objLib.h"
  252. #include "private/stdioP.h"
  253. /******************************************************************************
  254. *
  255. * ftell - return the current value of the file position indicator for a stream (ANSI)
  256. *
  257. * This routine returns the current value of the file position indicator for
  258. * a specified stream.  For a binary stream, the value is the number of
  259. * characters from the beginning of the file.  For a text stream, the file
  260. * position indicator contains unspecified information, usable by fseek() for
  261. * returning the file position indicator to its position at the time of the
  262. * ftell() call; the difference between two such return values is not
  263. * necessary a meaningful measure of the number of characters written or read.
  264. * INCLUDE FILES: stdio.h 
  265. *
  266. * RETURNS:
  267. * The current value of the file position indicator,
  268. * or -1L if unsuccessful, with `errno' set to indicate the error.
  269. *
  270. * SEE ALSO: fseek()
  271. */
  272. long ftell
  273.     (
  274.     FAST FILE *  fp /* stream */
  275.     )
  276.     {
  277.     FAST fpos_t pos;
  278.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  279. return (ERROR);
  280.     /*
  281.      * Find offset of underlying I/O object, then
  282.      * adjust for buffered bytes.
  283.      */
  284.     if (fp->_flags & __SOFF)
  285. pos = fp->_offset;
  286.     else 
  287. {
  288. pos = __sseek (fp, (fpos_t)0, SEEK_CUR);
  289. if (pos == -1L)
  290.     return (pos);
  291. }
  292.     if (fp->_flags & __SRD) 
  293. {
  294. /*
  295.  * Reading.  Any unread characters (including
  296.  * those from ungetc) cause the position to be
  297.  * smaller than that in the underlying object.
  298.  */
  299. pos -= fp->_r;
  300. if (HASUB(fp))
  301.     pos -= fp->_ur;
  302.     else if (fp->_flags & __SWR && fp->_p != NULL) 
  303. {
  304. /*
  305.  * Writing.  Any buffered characters cause the
  306.  * position to be greater than that in the
  307.  * underlying object.
  308.  */
  309. pos += fp->_p - fp->_bf._base;
  310. }
  311.     return (pos);
  312.     }
  313. /* fwrite.c - write to a file. stdio.h */
  314. /* Copyright 1992-1993 Wind River Systems, Inc. */
  315. /*
  316. modification history
  317. --------------------
  318. 01c,05mar93,jdi  documentation cleanup for 5.1.
  319. 01b,20sep92,smb  documentation additions
  320. 01a,29jul92,jcf  Added OBJ_VERIFY
  321.    +smb  taken from UCB stdio
  322. */
  323. /*
  324. DESCRIPTION
  325.  * Copyright (c) 1990 The Regents of the University of California.
  326.  * All rights reserved.
  327.  *
  328.  * This code is derived from software contributed to Berkeley by
  329.  * Chris Torek.
  330.  *
  331.  * Redistribution and use in source and binary forms, with or without
  332.  * modification, are permitted provided that the following conditions
  333.  * are met:
  334.  * 1. Redistributions of source code must retain the above copyright
  335.  *    notice, this list of conditions and the following disclaimer.
  336.  * 2. Redistributions in binary form must reproduce the above copyright
  337.  *    notice, this list of conditions and the following disclaimer in the
  338.  *    documentation and/or other materials provided with the distribution.
  339.  * 3. All advertising materials mentioning features or use of this software
  340.  *    must display the following acknowledgement:
  341.  * This product includes software developed by the University of
  342.  * California, Berkeley and its contributors.
  343.  * 4. Neither the name of the University nor the names of its contributors
  344.  *    may be used to endorse or promote products derived from this software
  345.  *    without specific prior written permission.
  346.  *
  347.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  348.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  349.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  350.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  351.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  352.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  353.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  354.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  355.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  356.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  357.  * SUCH DAMAGE.
  358. INCLUDE FILE: stdio.h
  359. SEE ALSO: American National Standard X3.159-1989
  360. NOMANUAL
  361. */
  362. #include "vxWorks.h"
  363. #include "objLib.h"
  364. #include "private/stdioP.h"
  365. #include "private/fvwriteP.h"
  366. /******************************************************************************
  367. *
  368. * fwrite - write from a specified array (ANSI)
  369. *
  370. * This routine writes, from the array <buf>, up to <count> elements whose
  371. * size is <size>, to a specified stream.  The file position indicator for
  372. * the stream (if defined) is advanced by the number of characters
  373. * successfully written.  If an error occurs, the resulting value of the file
  374. * position indicator for the stream is indeterminate.
  375. * INCLUDE FILES: stdio.h 
  376. *
  377. * RETURNS:
  378. * The number of elements successfully written, which will be less than
  379. * <count> only if a write error is encountered.
  380. */
  381. int fwrite
  382.     (
  383.     const void *  buf, /* where to copy from */
  384.     size_t   size, /* element size */
  385.     size_t   count, /* no. of elements */
  386.     FILE *   fp /* stream to write to */
  387.     )
  388.     {
  389.     size_t n;
  390.     struct __suio uio;
  391.     struct __siov iov;
  392.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  393. return (0);
  394.     iov.iov_base = (void *)buf;
  395.     uio.uio_resid = iov.iov_len = n = (count * size);
  396.     uio.uio_iov = &iov;
  397.     uio.uio_iovcnt = 1;
  398.     /* The usual case is success (__sfvwrite returns 0);
  399.      * skip the divide if this happens, since divides are
  400.      * generally slow and since this occurs whenever size==0.
  401.      */
  402.     if (__sfvwrite(fp, &uio) == 0)
  403. return (count);
  404.     return ((n - uio.uio_resid) / size);
  405.     }
  406. /* getc.c - get a character from a file. stdio.h */
  407. /* Copyright 1992-1993 Wind River Systems, Inc. */
  408. /*
  409. modification history
  410. --------------------
  411. 01c,05mar93,jdi  documentation cleanup for 5.1.
  412. 01b,20sep92,smb  documentation additions
  413. 01a,29jul92,jcf  Added OBJ_VERIFY
  414.    +smb  taken from UCB stdio
  415. */
  416. /*
  417. DESCRIPTION
  418.  * Copyright (c) 1990 The Regents of the University of California.
  419.  * All rights reserved.
  420.  *
  421.  * This code is derived from software contributed to Berkeley by
  422.  * Chris Torek.
  423.  *
  424.  * Redistribution and use in source and binary forms, with or without
  425.  * modification, are permitted provided that the following conditions
  426.  * are met:
  427.  * 1. Redistributions of source code must retain the above copyright
  428.  *    notice, this list of conditions and the following disclaimer.
  429.  * 2. Redistributions in binary form must reproduce the above copyright
  430.  *    notice, this list of conditions and the following disclaimer in the
  431.  *    documentation and/or other materials provided with the distribution.
  432.  * 3. All advertising materials mentioning features or use of this software
  433.  *    must display the following acknowledgement:
  434.  * This product includes software developed by the University of
  435.  * California, Berkeley and its contributors.
  436.  * 4. Neither the name of the University nor the names of its contributors
  437.  *    may be used to endorse or promote products derived from this software
  438.  *    without specific prior written permission.
  439.  *
  440.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  441.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  442.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  443.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  444.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  445.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  446.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  447.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  448.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  449.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  450.  * SUCH DAMAGE.
  451. INCLUDE FILE: stdio.h
  452. SEE ALSO: American National Standard X3.159-1989
  453. NOMANUAL
  454. */
  455. #include "vxWorks.h"
  456. #include "stdio.h"
  457. #include "objLib.h"
  458. #include "private/stdioP.h"
  459. #undef getc
  460. /******************************************************************************
  461. *
  462. * getc - return the next character from a stream (ANSI)
  463. *
  464. * This routine is equivalent to fgetc(), except that if it is implemented as
  465. * a macro, it may evaluate <fp> more than once; thus the argument should
  466. * never be an expression with side effects.
  467. *
  468. * If the stream is at end-of-file, the end-of-file indicator for the stream is
  469. * set; if a read error occurs, the error indicator is set.
  470. * INCLUDE FILES: stdio.h 
  471. *
  472. * RETURNS:
  473. * The next character from the stream, or EOF if the stream is at end-of-file
  474. * or a read error occurs.
  475. *
  476. * SEE ALSO: fgetc()
  477. */
  478. int getc
  479.     (
  480.     FILE *  fp /* input stream */
  481.     )
  482.     {
  483.     int ch;
  484.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  485. return (EOF);
  486.     if ((ch = __sgetc(fp)) == EOF)
  487. fp->_flags |= __SEOF;
  488.     return (ch);
  489.     }
  490. /* getchar.c - get a character from a file. stdio.h */
  491. /* Copyright 1992-1993 Wind River Systems, Inc. */
  492. /*
  493. modification history
  494. --------------------
  495. 01c,05mar93,jdi  documentation cleanup for 5.1.
  496. 01b,20sep92,smb  documentation additions
  497. 01a,29jul92,smb  taken from UCB stdio
  498. */
  499. /*
  500. DESCRIPTION
  501.  * Copyright (c) 1990 The Regents of the University of California.
  502.  * All rights reserved.
  503.  *
  504.  * This code is derived from software contributed to Berkeley by
  505.  * Chris Torek.
  506.  *
  507.  * Redistribution and use in source and binary forms, with or without
  508.  * modification, are permitted provided that the following conditions
  509.  * are met:
  510.  * 1. Redistributions of source code must retain the above copyright
  511.  *    notice, this list of conditions and the following disclaimer.
  512.  * 2. Redistributions in binary form must reproduce the above copyright
  513.  *    notice, this list of conditions and the following disclaimer in the
  514.  *    documentation and/or other materials provided with the distribution.
  515.  * 3. All advertising materials mentioning features or use of this software
  516.  *    must display the following acknowledgement:
  517.  * This product includes software developed by the University of
  518.  * California, Berkeley and its contributors.
  519.  * 4. Neither the name of the University nor the names of its contributors
  520.  *    may be used to endorse or promote products derived from this software
  521.  *    without specific prior written permission.
  522.  *
  523.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  524.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  525.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  526.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  527.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  528.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  529.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  530.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  531.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  532.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  533.  * SUCH DAMAGE.
  534. INCLUDE FILE: stdio.h
  535. SEE ALSO: American National Standard X3.159-1989
  536. NOMANUAL
  537. */
  538. #include "vxWorks.h"
  539. #include "private/stdioP.h"
  540. #undef getchar
  541. /******************************************************************************
  542. *
  543. * getchar - return the next character from the standard input stream (ANSI)
  544. *
  545. * This routine returns the next character from the standard input stream 
  546. * and advances the file position indicator.
  547. *
  548. * It is equivalent to getc() with the stream argument `stdin'.
  549. *
  550. * If the stream is at end-of-file, the end-of-file indicator is
  551. * set; if a read error occurs, the error indicator is set.
  552. * INCLUDE FILES: stdio.h 
  553. *
  554. * RETURNS:
  555. * The next character from the standard input stream, or EOF if the stream is
  556. * at end-of-file or a read error occurs.
  557. *
  558. * SEE ALSO: getc(), fgetc()
  559. */
  560. int getchar (void)
  561.     {
  562.     return (getc (stdin));
  563.     }
  564. /* gets.c - get a string of characters from a file. stdio.h */
  565. /* Copyright 1992-1993 Wind River Systems, Inc. */
  566. /*
  567. modification history
  568. --------------------
  569. 01c,05mar93,jdi  documentation cleanup for 5.1.
  570. 01b,20sep92,smb  documentation additions
  571. 01a,29jul92,smb  taken from UCB stdio
  572. */
  573. /*
  574. DESCRIPTION
  575.  * Copyright (c) 1990 The Regents of the University of California.
  576.  * All rights reserved.
  577.  *
  578.  * This code is derived from software contributed to Berkeley by
  579.  * Chris Torek.
  580.  *
  581.  * Redistribution and use in source and binary forms, with or without
  582.  * modification, are permitted provided that the following conditions
  583.  * are met:
  584.  * 1. Redistributions of source code must retain the above copyright
  585.  *    notice, this list of conditions and the following disclaimer.
  586.  * 2. Redistributions in binary form must reproduce the above copyright
  587.  *    notice, this list of conditions and the following disclaimer in the
  588.  *    documentation and/or other materials provided with the distribution.
  589.  * 3. All advertising materials mentioning features or use of this software
  590.  *    must display the following acknowledgement:
  591.  * This product includes software developed by the University of
  592.  * California, Berkeley and its contributors.
  593.  * 4. Neither the name of the University nor the names of its contributors
  594.  *    may be used to endorse or promote products derived from this software
  595.  *    without specific prior written permission.
  596.  *
  597.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  598.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  599.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  600.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  601.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  602.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  603.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  604.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  605.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  606.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  607.  * SUCH DAMAGE.
  608. INCLUDE FILE: stdio.h, unistd.h
  609. SEE ALSO: American National Standard X3.159-1989
  610. NOMANUAL
  611. */
  612. #include "vxWorks.h"
  613. #include "unistd.h"
  614. #include "private/stdioP.h"
  615. /******************************************************************************
  616. *
  617. * gets - read characters from the standard input stream (ANSI)
  618. *
  619. * This routine reads characters from the standard input stream into the
  620. * array <buf> until end-of-file is encountered or a new-line is read.
  621. * Any new-line character is discarded, and a null character is written 
  622. * immediately after the last character read into the array.
  623. *
  624. * If end-of-file is encountered and no characters have been read,
  625. * the contents of the array remain unchanged.  If a read error
  626. * occurs, the array contents are indeterminate.
  627. * INCLUDE FILES: stdio.h 
  628. *
  629. * RETURNS:
  630. * A pointer to <buf>, or a null pointer if (1) end-of-file is encountered
  631. * and no characters have been read, or (2) there is a read error.
  632. */
  633. char * gets 
  634.     (
  635.     char * buf /* output array */
  636.     )
  637.     {
  638.     FAST int c;
  639.     FAST char * s;
  640.     for (s = buf; (c = getchar()) != 'n';)
  641. {
  642. if (c == EOF)
  643.     {
  644.     if (s == buf)
  645. return (NULL);
  646.     else
  647. break;
  648.     }
  649. else
  650.     *s++ = c;
  651. }
  652.     *s = EOS;
  653.     return (buf);
  654.     }
  655. /* getw.c     - get a word. stdio.h */
  656. /* Copyright 1992-1993 Wind River Systems, Inc. */
  657. /*
  658. modification history
  659. --------------------
  660. 01c,05mar93,jdi  documentation cleanup for 5.1.
  661. 01b,20sep92,smb  documentation additions
  662. 01a,29jul92,smb  written.
  663. */
  664. /*
  665. DESCRIPTION
  666. INCLUDE FILE: stdio.h, string.h
  667. SEE ALSO: American National Standard X3.159-1989
  668. NOMANUAL
  669. */
  670. #include "vxWorks.h"
  671. #include "stdio.h"
  672. /******************************************************************************
  673. *
  674. * getw - read the next word (32-bit integer) from a stream
  675. *
  676. * This routine reads the next 32-bit quantity from a specified stream.
  677. * It returns EOF on end-of-file or an error; however, this is also a
  678. * valid integer, thus feof() and ferror() must be used to check for
  679. * a true end-of-file.
  680. *
  681. * This routine is provided for compatibility with earlier VxWorks releases.
  682. *
  683. * INCLUDE FILES: stdio.h
  684. *
  685. * RETURN: A 32-bit number from the stream, or EOF on either end-of-file
  686. * or an error.
  687. *
  688. * SEE ALSO: putw()
  689. */
  690. int getw
  691.     (
  692.     FILE * fp /* stream to read from */
  693.     )
  694.     {
  695.     int x;
  696.     return (fread ((void *)&x, sizeof (x), 1, fp) == 1 ? x : EOF);
  697.     }
  698. /* perror.c - print error value. stdio.h */
  699. /* Copyright 1992-1993 Wind River Systems, Inc. */
  700. /* 
  701. modification history 
  702. -------------------- 
  703. 01c,05mar93,jdi  documentation cleanup for 5.1.
  704. 01b,20sep92,smb  documentation additions
  705. 01a,29jul92,smb  written.
  706. */ 
  707. /*
  708. DESCRIPTION
  709. INCLUDE FILE: stdio.h, error.h, string.h
  710. SEE ALSO: American National Standard X3.159-1989
  711. NOMANUAL
  712. */
  713. #include "vxWorks.h"
  714. #include "stdio.h"
  715. #include "string.h"
  716. #include "errno.h"
  717. /******************************************************************************
  718. *
  719. * perror - map an error number in `errno' to an error message (ANSI)
  720. *
  721. * This routine maps the error number in the integer expression `errno' to an
  722. * error message.  It writes a sequence of characters to the standard error
  723. * stream as follows:  first (if <__s> is not a null pointer and the character
  724. * pointed to by <__s> is not the null character), the string pointed to by
  725. * <__s> followed by a colon (:) and a space; then an appropriate error
  726. * message string followed by a new-line character.  The contents of the
  727. * error message strings are the same as those returned by strerror() with
  728. * the argument `errno'.
  729. * INCLUDE FILES: stdio.h 
  730. *
  731. * RETURNS: N/A
  732. *
  733. * SEE ALSO: strerror()
  734. */
  735. void perror 
  736.     (
  737.     const char *  __s /* error string */
  738.     )
  739.     {
  740.     if ((__s) && (*__s != EOS))
  741.      fprintf (stderr, "%s: ", __s);
  742.     fprintf (stderr, "%sn", strerror (errno));
  743.     }
  744. /* putc.c - put a character. stdio.h */
  745. /* Copyright 1992-1993 Wind River Systems, Inc. */
  746. /*
  747. modification history
  748. --------------------
  749. 01c,05mar93,jdi  documentation cleanup for 5.1.
  750. 01b,20sep92,smb  documentation additions
  751. 01a,29jul92,smb  taken from UCB stdio
  752. */
  753. /*
  754. DESCRIPTION
  755.  * Copyright (c) 1990 The Regents of the University of California.
  756.  * All rights reserved.
  757.  *
  758.  * This code is derived from software contributed to Berkeley by
  759.  * Chris Torek.
  760.  *
  761.  * Redistribution and use in source and binary forms, with or without
  762.  * modification, are permitted provided that the following conditions
  763.  * are met:
  764.  * 1. Redistributions of source code must retain the above copyright
  765.  *    notice, this list of conditions and the following disclaimer.
  766.  * 2. Redistributions in binary form must reproduce the above copyright
  767.  *    notice, this list of conditions and the following disclaimer in the
  768.  *    documentation and/or other materials provided with the distribution.
  769.  * 3. All advertising materials mentioning features or use of this software
  770.  *    must display the following acknowledgement:
  771.  * This product includes software developed by the University of
  772.  * California, Berkeley and its contributors.
  773.  * 4. Neither the name of the University nor the names of its contributors
  774.  *    may be used to endorse or promote products derived from this software
  775.  *    without specific prior written permission.
  776.  *
  777.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  778.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  779.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  780.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  781.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  782.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  783.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  784.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  785.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  786.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  787.  * SUCH DAMAGE.
  788. INCLUDE FILE: stdio.h
  789. SEE ALSO: American National Standard X3.159-1989
  790. NOMANUAL
  791. */
  792. #include "vxWorks.h"
  793. #include "stdio.h"
  794. #include "private/stdioP.h"
  795. #undef putc
  796. /******************************************************************************
  797. *
  798. * putc - write a character to a stream (ANSI)
  799. *
  800. * This routine writes a character <c> to a specified stream, at the
  801. * position indicated by the stream's file position indicator
  802. * (if defined), and advances the indicator appropriately.
  803. *
  804. * This routine is equivalent to fputc(), except that if it is implemented as
  805. * a macro, it may evaluate <fp> more than once; thus, the argument should
  806. * never be an expression with side effects.
  807. * INCLUDE FILES: stdio.h 
  808. *
  809. * RETURNS:
  810. * The character written, or EOF if a write error occurs, with the error
  811. * indicator set for the stream.
  812. *
  813. * SEE ALSO: fputc()
  814. */
  815. int putc
  816.     (
  817.     int  c, /* character to write */
  818.     FAST FILE *  fp /* stream to write to */
  819.     )
  820.     {
  821.     return (__sputc(c, fp));
  822.     }
  823. /* putchar.c - put a character to standard output. stdio.h */
  824. /* Copyright 1992-1993 Wind River Systems, Inc. */
  825. /*
  826. modification history
  827. --------------------
  828. 01c,05mar93,jdi  documentation cleanup for 5.1.
  829. 01b,20sep92,smb  documentation additions
  830. 01a,29jul92,smb  taken from UCB stdio
  831. */
  832. /*
  833. DESCRIPTION
  834.  * Copyright (c) 1990 The Regents of the University of California.
  835.  * All rights reserved.
  836.  *
  837.  * This code is derived from software contributed to Berkeley by
  838.  * Chris Torek.
  839.  *
  840.  * Redistribution and use in source and binary forms, with or without
  841.  * modification, are permitted provided that the following conditions
  842.  * are met:
  843.  * 1. Redistributions of source code must retain the above copyright
  844.  *    notice, this list of conditions and the following disclaimer.
  845.  * 2. Redistributions in binary form must reproduce the above copyright
  846.  *    notice, this list of conditions and the following disclaimer in the
  847.  *    documentation and/or other materials provided with the distribution.
  848.  * 3. All advertising materials mentioning features or use of this software
  849.  *    must display the following acknowledgement:
  850.  * This product includes software developed by the University of
  851.  * California, Berkeley and its contributors.
  852.  * 4. Neither the name of the University nor the names of its contributors
  853.  *    may be used to endorse or promote products derived from this software
  854.  *    without specific prior written permission.
  855.  *
  856.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  857.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  858.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  859.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  860.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  861.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  862.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  863.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  864.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  865.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  866.  * SUCH DAMAGE.
  867. INCLUDE FILE: stdio.h
  868. SEE ALSO: American National Standard X3.159-1989
  869. NOMANUAL
  870. */
  871. #include "vxWorks.h"
  872. #include "stdio.h"
  873. #include "private/stdioP.h"
  874. #undef putchar
  875. /******************************************************************************
  876. *
  877. * putchar - write a character to the standard output stream (ANSI)
  878. * This routine writes a character <c> to the standard output stream, at the
  879. * position indicated by the stream's file position indicator
  880. * (if defined), and advances the indicator appropriately.
  881. *
  882. * This routine is equivalent to putc() with a second argument of `stdout'.
  883. * INCLUDE FILES: stdio.h 
  884. *
  885. * RETURNS:
  886. * The character written, or EOF if a write error occurs, with the error
  887. * indicator set for the standard output stream.
  888. *
  889. * SEE ALSO: putc(), fputc()
  890. */
  891. int putchar
  892.     (
  893.     int c /* character to write */
  894.     )
  895.     {
  896.     return (__sputc(c, stdout));
  897.     }
  898. /* puts.c - put a string of characters. stdio.h */
  899. /* Copyright 1992-1993 Wind River Systems, Inc. */
  900. /*
  901. modification history
  902. --------------------
  903. 01c,05mar93,jdi  documentation cleanup for 5.1.
  904. 01b,20sep92,smb  documentation additions
  905. 01a,29jul92,smb  taken from UCB stdio
  906. */
  907. /*
  908. DESCRIPTION
  909.  * Copyright (c) 1990 The Regents of the University of California.
  910.  * All rights reserved.
  911.  *
  912.  * This code is derived from software contributed to Berkeley by
  913.  * Chris Torek.
  914.  *
  915.  * Redistribution and use in source and binary forms, with or without
  916.  * modification, are permitted provided that the following conditions
  917.  * are met:
  918.  * 1. Redistributions of source code must retain the above copyright
  919.  *    notice, this list of conditions and the following disclaimer.
  920.  * 2. Redistributions in binary form must reproduce the above copyright
  921.  *    notice, this list of conditions and the following disclaimer in the
  922.  *    documentation and/or other materials provided with the distribution.
  923.  * 3. All advertising materials mentioning features or use of this software
  924.  *    must display the following acknowledgement:
  925.  * This product includes software developed by the University of
  926.  * California, Berkeley and its contributors.
  927.  * 4. Neither the name of the University nor the names of its contributors
  928.  *    may be used to endorse or promote products derived from this software
  929.  *    without specific prior written permission.
  930.  *
  931.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  932.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  933.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  934.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  935.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  936.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  937.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  938.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  939.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  940.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  941.  * SUCH DAMAGE.
  942. INCLUDE FILE: stdio.h, string.h
  943. SEE ALSO: American National Standard X3.159-1989
  944. NOMANUAL
  945. */
  946. #include "vxWorks.h"
  947. #include "stdio.h"
  948. #include "string.h"
  949. #include "private/fvwriteP.h"
  950. /******************************************************************************
  951. *
  952. * puts - write a string to the standard output stream (ANSI)
  953. *
  954. * This routine writes to the standard output stream a specified string <s>,
  955. * minus the terminating null character, and appends a new-line character to
  956. * the output.
  957. *
  958. * INCLUDE FILES: stdio.h 
  959. *
  960. * RETURNS:
  961. * A non-negative value, or EOF if a write error occurs.
  962. *
  963. * SEE ALSO: fputs()
  964. */
  965. int puts
  966.     (
  967.     char const *  s /* string to write */
  968.     )
  969.     {
  970.     size_t c = strlen (s);
  971.     struct __suio uio;
  972.     struct __siov iov [2];
  973.     iov[0].iov_base = (void *)s;
  974.     iov[0].iov_len = c;
  975.     iov[1].iov_base = "n";
  976.     iov[1].iov_len = 1;
  977.     uio.uio_resid = c + 1;
  978.     uio.uio_iov = &iov [0];
  979.     uio.uio_iovcnt = 2;
  980.     return ((__sfvwrite (stdout, &uio)) ? (EOF) : ('n'));
  981.     }
  982. /* putw.c - put a word. stdio.h */ 
  983.  
  984. /* Copyright 1992-1993 Wind River Systems, Inc. */
  985.  
  986. /* 
  987. modification history 
  988. -------------------- 
  989. 01d,05mar93,jdi  documentation cleanup for 5.1.
  990. 01c,21sep92,smb  tweaks for mg
  991. 01b,20sep92,smb  documentation additions
  992. 01a,29jul92,smb  written.
  993. */ 
  994.  
  995. /* 
  996. DESCRIPTION 
  997.  
  998. INCLUDE FILE: stdio.h, string.h 
  999.  
  1000. SEE ALSO: American National Standard X3.159-1989 
  1001. NOMANUAL
  1002. */ 
  1003.  
  1004. #include "vxWorks.h" 
  1005. #include "stdio.h" 
  1006.  
  1007. /******************************************************************************
  1008. *
  1009. * putw - write a word (32-bit integer) to a stream
  1010. *
  1011. * This routine appends the 32-bit quantity <w> to a specified stream.
  1012. *
  1013. * This routine is provided for compatibility with earlier VxWorks releases.
  1014. * INCLUDE FILES: stdio.h 
  1015. *
  1016. * RETURNS: The value written.
  1017. */
  1018. int putw
  1019.     (
  1020.     int     w,  /* word (32-bit integer) */
  1021.     FILE *  fp /* output stream */
  1022.     )
  1023.     {
  1024.     return (fwrite ((void *) &w, sizeof (int), 1, fp) == 1 ? w : EOF);
  1025.     }
  1026. /* rewind.c - rewind a stream. stdio.h */
  1027. /* Copyright 1992-1993 Wind River Systems, Inc. */
  1028. /*
  1029. modification history
  1030. --------------------
  1031. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1032. 01b,20sep92,smb  documentation additions
  1033. 01a,29jul92,jcf  Added OBJ_VERIFY
  1034.    +smb  taken from UCB stdio
  1035. */
  1036. /*
  1037. DESCRIPTION
  1038.  * Copyright (c) 1990 The Regents of the University of California.
  1039.  * All rights reserved.
  1040.  *
  1041.  * This code is derived from software contributed to Berkeley by
  1042.  * Chris Torek.
  1043.  *
  1044.  * Redistribution and use in source and binary forms, with or without
  1045.  * modification, are permitted provided that the following conditions
  1046.  * are met:
  1047.  * 1. Redistributions of source code must retain the above copyright
  1048.  *    notice, this list of conditions and the following disclaimer.
  1049.  * 2. Redistributions in binary form must reproduce the above copyright
  1050.  *    notice, this list of conditions and the following disclaimer in the
  1051.  *    documentation and/or other materials provided with the distribution.
  1052.  * 3. All advertising materials mentioning features or use of this software
  1053.  *    must display the following acknowledgement:
  1054.  * This product includes software developed by the University of
  1055.  * California, Berkeley and its contributors.
  1056.  * 4. Neither the name of the University nor the names of its contributors
  1057.  *    may be used to endorse or promote products derived from this software
  1058.  *    without specific prior written permission.
  1059.  *
  1060.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1061.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1062.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1063.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1064.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1065.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1066.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1067.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1068.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1069.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1070.  * SUCH DAMAGE.
  1071. INCLUDE FILE: stdio.h, error.h
  1072. SEE ALSO: American National Standard X3.159-1989
  1073. NOMANUAL
  1074. */
  1075. #include "vxWorks.h"
  1076. #include "stdio.h"
  1077. #include "objLib.h"
  1078. #include "errno.h"
  1079. /******************************************************************************
  1080. *
  1081. * rewind - set the file position indicator to the beginning of a file (ANSI)
  1082. *
  1083. * This routine sets the file position indicator for a specified stream to
  1084. * the beginning of the file.
  1085. * It is equivalent to:
  1086. * .CS
  1087. *     (void) fseek (fp, 0L, SEEK_SET);
  1088. * .CE
  1089. * except that the error indicator for the stream is cleared.
  1090. * INCLUDE FILES: stdio.h 
  1091. *
  1092. * RETURNS: N/A
  1093. *
  1094. * SEE ALSO: fseek(), ftell()
  1095. */
  1096. void rewind
  1097.     (
  1098.     FILE *  fp /* stream */
  1099.     )
  1100.     {
  1101.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  1102. return;
  1103.     (void) fseek (fp, 0L, SEEK_SET);
  1104.     clearerr(fp);
  1105.     }
  1106. /* scanf.c - scan a file. stdio.h */
  1107. /* Copyright 1992-1993 Wind River Systems, Inc. */
  1108. /*
  1109. modification history
  1110. --------------------
  1111. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1112. 01b,20sep92,smb  documentation additions
  1113. 01a,29jul92,jcf  rewritten to usr fioScanV()
  1114.    +smb  taken from UCB stdio
  1115. */
  1116. /*
  1117. DESCRIPTION
  1118.  * Copyright (c) 1990 The Regents of the University of California.
  1119.  * All rights reserved.
  1120.  *
  1121.  * This code is derived from software contributed to Berkeley by
  1122.  * Chris Torek.
  1123.  *
  1124.  * Redistribution and use in source and binary forms, with or without
  1125.  * modification, are permitted provided that the following conditions
  1126.  * are met:
  1127.  * 1. Redistributions of source code must retain the above copyright
  1128.  *    notice, this list of conditions and the following disclaimer.
  1129.  * 2. Redistributions in binary form must reproduce the above copyright
  1130.  *    notice, this list of conditions and the following disclaimer in the
  1131.  *    documentation and/or other materials provided with the distribution.
  1132.  * 3. All advertising materials mentioning features or use of this software
  1133.  *    must display the following acknowledgement:
  1134.  * This product includes software developed by the University of
  1135.  * California, Berkeley and its contributors.
  1136.  * 4. Neither the name of the University nor the names of its contributors
  1137.  *    may be used to endorse or promote products derived from this software
  1138.  *    without specific prior written permission.
  1139.  *
  1140.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1141.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1142.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1143.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1144.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1145.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1146.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1147.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1148.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1149.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1150.  * SUCH DAMAGE.
  1151. INCLUDE FILE: stdio.h, stdarg.h
  1152. SEE ALSO: American National Standard X3.159-1989
  1153. NOMANUAL
  1154. */
  1155. #include "vxWorks.h"
  1156. #include "stdarg.h"
  1157. #include "fioLib.h"
  1158. #include "private/stdioP.h"
  1159. /******************************************************************************
  1160. *
  1161. * scanf - read and convert characters from the standard input stream (ANSI)
  1162. *
  1163. * This routine reads input from the standard input stream under the control
  1164. * of the string <fmt>.  It is equivalent to fscanf() with an <fp> argument
  1165. * of `stdin'.
  1166. *
  1167. * INCLUDE FILES: stdio.h 
  1168. *
  1169. * RETURNS:
  1170. * The number of input items assigned, which can be fewer than provided for,
  1171. * or even zero, in the event of an early matching failure; or EOF if an
  1172. * input failure occurs before any conversion.
  1173. *
  1174. * SEE ALSO: fscanf(), sscanf()
  1175. */
  1176. int scanf
  1177.     (
  1178.     char const *  fmt, /* format string */
  1179.     ... /* arguments to format string */
  1180.     )
  1181.     {
  1182.     int     nArgs;
  1183.     int     unget;
  1184.     va_list vaList; /* vararg list */
  1185.     va_start (vaList, fmt);
  1186.     nArgs = fioScanV (fmt, fgetc, (int) stdin, &unget, vaList);
  1187.     va_end (vaList);
  1188.     if (unget != -1)
  1189. ungetc (unget, stdin);
  1190.     return (nArgs);
  1191.     }
  1192. /* setbuf.c - set buffered mode. stdio.h */
  1193. /* Copyright 1992-1993 Wind River Systems, Inc. */
  1194. /*
  1195. modification history
  1196. --------------------
  1197. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1198. 01b,20sep92,smb  documentation additions
  1199. 01a,29jul92,jcf  Added OBJ_VERIFY
  1200.    +smb  taken from UCB stdio
  1201. */
  1202. /*
  1203. DESCRIPTION
  1204.  * Copyright (c) 1990 The Regents of the University of California.
  1205.  * All rights reserved.
  1206.  *
  1207.  * This code is derived from software contributed to Berkeley by
  1208.  * Chris Torek.
  1209.  *
  1210.  * Redistribution and use in source and binary forms, with or without
  1211.  * modification, are permitted provided that the following conditions
  1212.  * are met:
  1213.  * 1. Redistributions of source code must retain the above copyright
  1214.  *    notice, this list of conditions and the following disclaimer.
  1215.  * 2. Redistributions in binary form must reproduce the above copyright
  1216.  *    notice, this list of conditions and the following disclaimer in the
  1217.  *    documentation and/or other materials provided with the distribution.
  1218.  * 3. All advertising materials mentioning features or use of this software
  1219.  *    must display the following acknowledgement:
  1220.  * This product includes software developed by the University of
  1221.  * California, Berkeley and its contributors.
  1222.  * 4. Neither the name of the University nor the names of its contributors
  1223.  *    may be used to endorse or promote products derived from this software
  1224.  *    without specific prior written permission.
  1225.  *
  1226.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1227.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1228.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1229.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1230.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1231.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1232.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1233.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1234.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1235.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1236.  * SUCH DAMAGE.
  1237. INCLUDE FILE: stdio.h
  1238. SEE ALSO: American National Standard X3.159-1989
  1239. NOMANUAL
  1240. */
  1241. #include "vxWorks.h"
  1242. #include "stdio.h"
  1243. #include "objLib.h"
  1244. #include "private/stdioP.h"
  1245. /******************************************************************************
  1246. *
  1247. * setbuf - specify the buffering for a stream (ANSI)
  1248. *
  1249. * Except that it returns no value, this routine is equivalent to setvbuf()
  1250. * invoked with the <mode> _IOFBF (full buffering) and <size> BUFSIZ, or (if
  1251. * <buf> is a null pointer), with the <mode> _IONBF (no buffering).
  1252. * INCLUDE FILES: stdio.h 
  1253. *
  1254. * RETURNS: N/A
  1255. *
  1256. * SEE ALSO: setvbuf()
  1257. */
  1258. void setbuf
  1259.     (
  1260.     FILE *  fp,  /* stream to set buffering for */
  1261.     char *  buf  /* buffer to use */
  1262.     )
  1263.     {
  1264.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  1265. return;
  1266.     (void) setvbuf (fp, buf, ((buf) ? (_IOFBF) : (_IONBF)), BUFSIZ);
  1267.     }
  1268. /* setbuffer.c- file for stdio.h */
  1269. /* Copyright 1992-1993 Wind River Systems, Inc. */
  1270. /*
  1271. modification history
  1272. --------------------
  1273. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1274. 01b,20sep92,smb  documentation additions
  1275. 01a,29jul92,jcf  Added OBJ_VERIFY
  1276.    +smb  taken from UCB stdio
  1277. */
  1278. /*
  1279. DESCRIPTION
  1280.  * Copyright (c) 1990 The Regents of the University of California.
  1281.  * All rights reserved.
  1282.  *
  1283.  * This code is derived from software contributed to Berkeley by
  1284.  * Chris Torek.
  1285.  *
  1286.  * Redistribution and use in source and binary forms, with or without
  1287.  * modification, are permitted provided that the following conditions
  1288.  * are met:
  1289.  * 1. Redistributions of source code must retain the above copyright
  1290.  *    notice, this list of conditions and the following disclaimer.
  1291.  * 2. Redistributions in binary form must reproduce the above copyright
  1292.  *    notice, this list of conditions and the following disclaimer in the
  1293.  *    documentation and/or other materials provided with the distribution.
  1294.  * 3. All advertising materials mentioning features or use of this software
  1295.  *    must display the following acknowledgement:
  1296.  * This product includes software developed by the University of
  1297.  * California, Berkeley and its contributors.
  1298.  * 4. Neither the name of the University nor the names of its contributors
  1299.  *    may be used to endorse or promote products derived from this software
  1300.  *    without specific prior written permission.
  1301.  *
  1302.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1303.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1304.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1305.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1306.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1307.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1308.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1309.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1310.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1311.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1312.  * SUCH DAMAGE.
  1313. INCLUDE FILE: stdio.h
  1314. SEE ALSO: American National Standard X3.159-1989
  1315. NOMANUAL
  1316. */
  1317. #include "vxWorks.h"
  1318. #include "objLib.h"
  1319. #include "private/stdioP.h"
  1320. /******************************************************************************
  1321. *
  1322. * setbuffer - specify buffering for a stream
  1323. *
  1324. * This routine specifies a buffer <buf> to be used for a stream in place of the
  1325. * automatically allocated buffer.  If <buf> is NULL, the stream is unbuffered.
  1326. * This routine should be called only after the stream has been associated with
  1327. * an open file and before any other operation is performed on the stream.
  1328. *
  1329. * This routine is provided for compatibility with earlier VxWorks releases.
  1330. * INCLUDE FILES: stdio.h 
  1331. *
  1332. * RETURNS: N/A
  1333. *
  1334. * SEE ALSO: setvbuf()
  1335. */
  1336. void setbuffer
  1337.     (
  1338.     FAST FILE *  fp, /* stream to set buffering for */
  1339.     char *  buf, /* buffer to use */
  1340.     int  size /* buffer size */
  1341.     )
  1342.     {
  1343.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  1344. return;
  1345.     (void) setvbuf (fp, buf, ((buf) ? (_IOFBF) : (_IONBF)), size);
  1346.     }
  1347. /******************************************************************************
  1348. *
  1349. * setlinebuf - set line buffering for standard output or standard error
  1350. *
  1351. * This routine changes `stdout' or `stderr' streams from block-buffered or
  1352. * unbuffered to line-buffered.  Unlike setbuf(), setbuffer(), or setvbuf(), it
  1353. * can be used at any time the stream is active.
  1354. * A stream can be changed from unbuffered or line-buffered to fully buffered
  1355. * using freopen().  A stream can be changed from fully buffered or
  1356. * line-buffered to unbuffered using freopen() followed by setbuf() with a
  1357. * buffer argument of NULL.
  1358. * This routine is provided for compatibility with earlier VxWorks releases.
  1359. * INCLUDE: stdio.h 
  1360. *
  1361. * RETURNS: OK, or ERROR if <fp> is not a valid stream.
  1362. */
  1363. int setlinebuf
  1364.     (
  1365.     FILE *  fp /* stream - stdout or stderr */
  1366.     )
  1367.     {
  1368.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  1369. return (ERROR);
  1370.     (void) setvbuf (fp, (char *)NULL, _IOLBF, (size_t)0);
  1371.     return (OK); /* ??? */
  1372.     }
  1373. /* setvbuf.c - set buffered mode. stdio.h */
  1374. /* Copyright 1992-1993 Wind River Systems, Inc. */
  1375. /*
  1376. modification history
  1377. --------------------
  1378. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1379. 01b,20sep92,smb  documentation additions
  1380. 01a,29jul92,jcf  Added OBJ_VERIFY
  1381.    +smb  taken from UCB stdio
  1382. */
  1383. /*
  1384. DESCRIPTION
  1385.  * Copyright (c) 1990 The Regents of the University of California.
  1386.  * All rights reserved.
  1387.  *
  1388.  * This code is derived from software contributed to Berkeley by
  1389.  * Chris Torek.
  1390.  *
  1391.  * Redistribution and use in source and binary forms, with or without
  1392.  * modification, are permitted provided that the following conditions
  1393.  * are met:
  1394.  * 1. Redistributions of source code must retain the above copyright
  1395.  *    notice, this list of conditions and the following disclaimer.
  1396.  * 2. Redistributions in binary form must reproduce the above copyright
  1397.  *    notice, this list of conditions and the following disclaimer in the
  1398.  *    documentation and/or other materials provided with the distribution.
  1399.  * 3. All advertising materials mentioning features or use of this software
  1400.  *    must display the following acknowledgement:
  1401.  * This product includes software developed by the University of
  1402.  * California, Berkeley and its contributors.
  1403.  * 4. Neither the name of the University nor the names of its contributors
  1404.  *    may be used to endorse or promote products derived from this software
  1405.  *    without specific prior written permission.
  1406.  *
  1407.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1408.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1409.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1410.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1411.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1412.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1413.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1414.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1415.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1416.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1417.  * SUCH DAMAGE.
  1418. INCLUDE FILE: stdio.h, stdlib.h
  1419. SEE ALSO: American National Standard X3.159-1989
  1420. NOMANUAL
  1421. */
  1422. #include "vxWorks.h"
  1423. #include "stdio.h"
  1424. #include "stdlib.h"
  1425. #include "objLib.h"
  1426. #include "private/stdioP.h"
  1427. /******************************************************************************
  1428. *
  1429. * setvbuf - specify buffering for a stream (ANSI)
  1430. *
  1431. * This routine sets the buffer size and buffering mode for a specified
  1432. * stream.  It should be called only after the stream has been associated
  1433. * with an open file and before any other operation is performed on the
  1434. * stream.  The argument <mode> determines how the stream will be buffered,
  1435. * as follows:
  1436. * .iP _IOFBF 12
  1437. * input/output is to be fully buffered.
  1438. * .iP _IOLBF
  1439. * input/output is to be line buffered.
  1440. * .iP _IONBF
  1441. * input/output is to be unbuffered. 
  1442. * .LP
  1443. *
  1444. * If <buf> is not a null pointer, the array it points to may be used instead
  1445. * of a buffer allocated by setvbuf().  The argument <size> specifies
  1446. * the size of the array.  The contents of the array at any time are 
  1447. * indeterminate.
  1448. * INCLUDE FILES: stdio.h 
  1449. *
  1450. * RETURNS:
  1451. * Zero, or non-zero if <mode> is invalid or the request cannot be honored.
  1452. */
  1453. int setvbuf
  1454.     (
  1455.     FAST FILE *  fp, /* stream to set buffering for */
  1456.     char *  buf, /* buffer to use (optional) */
  1457.     FAST int  mode, /* _IOFBF = fully buffered */
  1458. /* _IOLBF = line buffered */
  1459. /* _IONBF = unbuffered */
  1460.     FAST size_t  size /* buffer size */
  1461.     )
  1462.     {
  1463.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  1464. return (ERROR);
  1465.     /*
  1466.      * Verify arguments.  The `int' limit on `size' is due to this
  1467.      * particular implementation.
  1468.      */
  1469.     if (((mode != _IOFBF) && (mode != _IOLBF) && (mode != _IONBF)) ||
  1470. ((int)size < 0))
  1471. return (EOF);
  1472.     /*
  1473.      * Write current buffer, if any; drop read count, if any.
  1474.      * Make sure putc() will not think fp is line buffered.
  1475.      * Free old buffer if it was from malloc().  Clear line and
  1476.      * non buffer flags, and clear malloc flag.
  1477.      */
  1478.     (void) __sflush (fp);
  1479.     fp->_r  = 0;
  1480.     fp->_lbfsize = 0;
  1481.     if (fp->_flags & __SMBF)
  1482. free ((void *)fp->_bf._base);
  1483.     fp->_flags &= ~(__SLBF | __SNBF | __SMBF);
  1484.     /*
  1485.      * Now put back whichever flag is needed, and fix _lbfsize
  1486.      * if line buffered.  Ensure output flush on exit if the
  1487.      * stream will be buffered at all.
  1488.      */
  1489.     switch (mode) 
  1490. {
  1491. case _IONBF:
  1492. fp->_flags |= __SNBF;
  1493. fp->_bf._base  = fp->_p = fp->_nbuf;
  1494. fp->_bf._size  = 1;
  1495. break;
  1496. case _IOLBF:
  1497. fp->_flags  |= __SLBF;
  1498. fp->_lbfsize  = -size;
  1499. /* FALLTHROUGH */
  1500. case _IOFBF:
  1501. /* no flag */
  1502. fp->_bf._base = fp->_p = (unsigned char *)buf;
  1503. fp->_bf._size = size;
  1504. break;
  1505. default:
  1506. break;
  1507. }
  1508.     /*
  1509.      * Patch up write count if necessary.
  1510.      */
  1511.     if (fp->_flags & __SWR)
  1512. fp->_w = (fp->_flags & (__SLBF | __SNBF)) ? (0) : (size);
  1513.     return (0);
  1514.     }
  1515. /* stdioLib.c - standard I/O library */
  1516. /* Copyright 1984-1995 Wind River Systems, Inc. */
  1517. #include "copyright_wrs.h"
  1518. /*
  1519. modification history
  1520. --------------------
  1521. 02i,11feb95,jdi  doc tweak.
  1522. 02h,05mar93,jdi  documentation cleanup for 5.1.
  1523. 02g,13nov92,dnw  added __std{in,out,err} (SPR #1770)
  1524.  made stdInitStd() be LOCAL.
  1525.  changed stdioFp() create FILE if it doesn't already exist.
  1526. 02f,20sep92,smb  documentation additions
  1527. 02e,29jul92,smb  added stdioFp().
  1528.  Modified the documentation for the new stdio library.
  1529. 02d,29jul92,jcf  taken from stdioLib.c 
  1530. 02c,26may92,rrr  the tree shuffle
  1531. 02b,02apr92,jmm  added free() of memory if bad options passed to fdopen()
  1532.  SPR # 1396
  1533. 02a,27mar92,jmm  changed fopen() to free memory if the open() fails, SPR #1115
  1534. 01z,25nov91,rrr  cleanup of some ansi warnings.
  1535. 01y,12nov91,rrr  removed VARARG_OK, no longer needed with ansi c.
  1536. 01x,07oct91,rrr  junk for r3000 braindamage.
  1537. 01w,04oct91,rrr  passed through the ansification filter
  1538.                   -changed functions to ansi style
  1539.   -changed includes to have absolute path from h/
  1540.   -fixed #else and #endif
  1541.   -changed VOID to void
  1542.   -changed copyright notice
  1543. 01v,18may91,gae  fixed varargs for 960 with conditional VARARG_OK,
  1544.  namely: fscanf, fprintf, and scanf.
  1545. 01u,04apr91,jdi  documentation cleanup; doc review by dnw.
  1546. 01t,10aug90,dnw  added forward declaration of stdioExitStd ().
  1547. 01s,08aug90,dnw  changed incorrect forward declaration for stdioCreateHook().
  1548. 01r,10jun90,dnw  changed to call fioFormatV and fioScanV directly with
  1549.    appropriate handling of varargs (removed doscan and doprnt)
  1550.  moved all routine implementations of stdio macros to end of
  1551.    module so that macros would be used in rest of code
  1552.  spr 640: fprintf returns number of chars printed instead of OK
  1553.  spr 754: vararg routines no longer limited to 16 args
  1554.  fixed coercions to allow void to be defined as void one day.
  1555. 01q,26jun90,jcf  lint.
  1556. 01p,12mar90,jcf  changed std{in,out,err} to macros to fps in tcbx.
  1557. 01o,16feb90,dab  fixed bug in doscan() that wouldn't match characters between
  1558.  the input stream and the format specification.
  1559. 01n,03aug89,dab  removed call to creat() in fopen().
  1560. 01m,08apr89,dnw  changed stdioInit() to call taskVarInit().
  1561. 01l,23mar89,dab  changed numerical constants to appropriate defines.
  1562.  fixed fseek() to return only OK or ERROR.
  1563. 01k,15nov88,dnw  documentation touchup.
  1564. 01j,23sep88,gae  documentation touchup.
  1565. 01i,13sep88,gae  removed ifdef'd sprintf which got into documentation.
  1566. 01h,06sep88,gae  adjusted some argument declarations to please f2cgen.
  1567. 01g,20aug88,gae  documentation.
  1568. 01f,07jul88,jcf  changed malloc to match new declaration.
  1569. 01e,29jun88,gae  documentation.  Added error messages in stioInit().
  1570. 01d,22jun88,dnw  name tweaks.
  1571. 01c,30may88,dnw  changed to v4 names.
  1572. 01b,28may88,dnw  removed routines that had been excluded with "#if FALSE".
  1573.  made stdioFlushBuf LOCAL.
  1574.  cleaned up stdio{Init,Exit}Task; improved error msgs.
  1575. 01a,28mar88,gae  created.
  1576. */
  1577. /*
  1578. DESCRIPTION
  1579. This library provides a complete UNIX compatible standard I/O buffering
  1580. scheme.  It is beyond the scope of this manual entry to describe all aspects
  1581. of the buffering -- see the
  1582. .I "VxWorks Programmer's Guide:  I/O System"
  1583. and the Kernighan & Ritchie C manual.  This manual entry primarily highlights
  1584. the differences between the UNIX and VxWorks standard I/O.
  1585. FILE POINTERS
  1586. The routine fopen() creates a file pointer.  Use of the file pointer follows
  1587. conventional UNIX usage.  In a shared address space, however, and perhaps more
  1588. critically, with the VxWorks system symbol table, tasks may not use each
  1589. others' file pointers, at least not without some interlocking mechanism.  If it
  1590. is necessary to use the same name for a file pointer but have incarnations for
  1591. each task, then use task variables; see the manual entry for taskVarLib.
  1592. FIOLIB
  1593. Several routines normally considered part of standard I/O -- printf(),
  1594. sscanf(), and sprintf() -- are not implemented in stdio; they are
  1595. instead implemented in fioLib.  They do not use the standard I/O buffering
  1596. scheme.  They are self-contained, formatted, but unbuffered I/O
  1597. functions.  This allows a limited amount of formatted I/O to be achieved
  1598. without the overhead of the stdio library.
  1599. TASK TERMINATION
  1600. When a task exits, unlike in UNIX, it is the responsibility of the task to
  1601. fclose() its file pointers, except `stdin', `stdout', and `stderr'.  If a
  1602. task is to be terminated asynchronously, use kill() and arrange for a
  1603. signal handler to clean up.
  1604. INCLUDE FILES
  1605. stdio.h, taskLib.h
  1606. All the macros defined in stdio.h are also implemented as real functions so
  1607. that they are available from the VxWorks shell.
  1608. SEE ALSO
  1609. fioLib, ioLib, taskVarLib, sigLib, Kernighan & Ritchie C manual,
  1610. .pG "I/O System"
  1611. */
  1612. #include "vxWorks.h"
  1613. #include "stdio.h"
  1614. #include "sys/types.h"
  1615. #include "ctype.h"
  1616. #include "ioLib.h"
  1617. #include "stdlib.h"
  1618. #include "taskLib.h"
  1619. #include "taskHookLib.h"
  1620. #include "stdarg.h"
  1621. #include "logLib.h"
  1622. #include "fcntl.h"
  1623. #include "unistd.h"
  1624. #include "errnoLib.h"
  1625. #include "string.h"
  1626. #include "fioLib.h"
  1627. #include "classLib.h"
  1628. #include "private/objLibP.h"
  1629. #include "private/stdioP.h"
  1630. #include "private/funcBindP.h"
  1631. /* locals */
  1632. LOCAL OBJ_CLASS fpClass; /* file object class */
  1633. LOCAL BOOL stdioInitialized = FALSE;
  1634. /* global variables */
  1635. CLASS_ID fpClassId = &fpClass; /* file class id */
  1636. /*******************************************************************************
  1637. *
  1638. * stdioInit - initialize standard I/O support
  1639. *
  1640. * This routine installs standard I/O support.  It must be called before
  1641. * using `stdio' buffering.  If INCLUDE_STDIO is defined in configAll.h, it
  1642. * is called automatically by the root task usrRoot() in usrConfig.c.
  1643. *
  1644. * RETURNS:
  1645. * OK, or ERROR if the standard I/O facilities cannot be installed.
  1646. */
  1647. STATUS stdioInit (void)
  1648.     {
  1649.     if ((!stdioInitialized) &&
  1650. (classInit (fpClassId, sizeof (FILE), OFFSET (FILE, objCore),
  1651.     (FUNCPTR) NULL, (FUNCPTR) NULL, (FUNCPTR) NULL) == OK))
  1652. {
  1653. _func_fclose  = fclose; /* attach fclose vfunc to taskLib */
  1654. stdioInitialized = TRUE; /* we've finished the initialization */
  1655. }
  1656.     return (OK);
  1657.     }
  1658. /*******************************************************************************
  1659. *
  1660. * stdioFpCreate - allocate a new FILE structure
  1661. *
  1662. * RETURNS:
  1663. * The pointer to newly created file, or NULL if out of memory.
  1664. *
  1665. * NOMANUAL
  1666. */
  1667. FILE *stdioFpCreate (void)
  1668.     {
  1669.     FAST FILE *fp = NULL;
  1670.     if ((stdioInit () == OK) &&
  1671.         ((fp = (FILE *)objAlloc (fpClassId)) != NULL))
  1672. {
  1673. fp->_p = NULL; /* no current pointer */
  1674. fp->_r = 0;
  1675. fp->_w = 0; /* nothing to read or write */
  1676. fp->_flags = 1; /* caller sets real flags */
  1677. fp->_file = -1; /* no file */
  1678. fp->_bf._base = NULL; /* no buffer */
  1679. fp->_bf._size = 0;
  1680. fp->_lbfsize = 0; /* not line buffered */
  1681. fp->_ub._base = NULL; /* no ungetc buffer */
  1682. fp->_ub._size = 0;
  1683. fp->_lb._base = NULL; /* no line buffer */
  1684. fp->_lb._size = 0;
  1685. fp->_blksize = 0;
  1686. fp->_offset = 0;
  1687. fp->taskId = (int) taskIdCurrent; /* task id might be useful */
  1688. objCoreInit (&fp->objCore, fpClassId); /* validate file object */
  1689. }
  1690.     return (fp);
  1691.     }
  1692. /*******************************************************************************
  1693. *
  1694. * stdioFpDestroy - destroy and reclaim resources of specified file pointer
  1695. *
  1696. * RETURNS:
  1697. * OK, or ERROR if file pointer could not be destroyed.
  1698. *
  1699. * NOMANUAL
  1700. */
  1701. STATUS stdioFpDestroy
  1702.     (
  1703.     FILE *fp
  1704.     )
  1705.     {
  1706.     /* fclose() deallocates any buffers associated with the file pointer */
  1707.     objCoreTerminate (&fp->objCore); /* invalidate file pointer */
  1708.     return (objFree (fpClassId, (char *) fp)); /* deallocate file pointer */
  1709.     }
  1710. /*******************************************************************************
  1711. *
  1712. * stdioInitStd - initialize use of a standard file
  1713. */
  1714. LOCAL STATUS stdioInitStd
  1715.     (
  1716.     int stdFd /* standard file descriptor to initialize (0,1,2) */
  1717.     )
  1718.     {
  1719.     FILE *fp;
  1720.     if ((fp = stdioFpCreate ()) == NULL)
  1721. return (ERROR);
  1722.     switch (stdFd)
  1723. {
  1724. case STD_IN:  fp->_flags = __SRD;    break; /* read only */
  1725. case STD_OUT: fp->_flags = __SWR;    break; /* write only */
  1726. case STD_ERR: fp->_flags = __SWRNBF; break; /* write only unbuf'd */
  1727. }
  1728.     fp->_file = stdFd; /* standard fd */
  1729.     taskIdCurrent->taskStdFp[stdFd] = fp; /* init private file pointer */
  1730.     return (OK);
  1731.     }
  1732. /******************************************************************************
  1733. *
  1734. * stdioFp - return the standard input/output/error FILE of the current task
  1735. * This routine returns the specified standard FILE structure address of the
  1736. * current task.  It is provided primarily to give access to standard input,
  1737. * standard output, and standard error from the shell, where the usual
  1738. * `stdin', `stdout', `stderr' macros cannot be used.
  1739. *
  1740. * INCLUDE FILES: stdio.h 
  1741. *
  1742. * RETURNS: The standard FILE structure address of the specified file
  1743. * descriptor, for the current task.
  1744. */
  1745. FILE * stdioFp 
  1746.     (
  1747.     int stdFd /* fd of standard FILE to return (0,1,2) */
  1748.     )
  1749.     {
  1750.     if (taskIdCurrent->taskStdFp [stdFd] == NULL)
  1751. stdioInitStd (stdFd);
  1752.     return (taskIdCurrent->taskStdFp [stdFd]);
  1753.     }
  1754. /*******************************************************************************
  1755. *
  1756. * __stdin - get pointer to current task's stdin
  1757. *
  1758. * This function returns a pointer to the current task's stdin.  If the
  1759. * current task does not have a stdin then one is created.
  1760. *
  1761. * NOMANUAL
  1762. */
  1763. FILE ** __stdin (void)
  1764.     {
  1765.     if (taskIdCurrent->taskStdFp [STD_IN] == NULL)
  1766. stdioInitStd (STD_IN);
  1767.     return (&taskIdCurrent->taskStdFp [STD_IN]);
  1768.     }
  1769. /*******************************************************************************
  1770. *
  1771. * __stdout - get pointer to current task's stdout
  1772. *
  1773. * This function returns a pointer to the current task's stdout.  If the
  1774. * current task does not have a stdout then one is created.
  1775. *
  1776. * NOMANUAL
  1777. */
  1778. FILE ** __stdout (void)
  1779.     {
  1780.     if (taskIdCurrent->taskStdFp [STD_OUT] == NULL)
  1781. stdioInitStd (STD_OUT);
  1782.     return (&taskIdCurrent->taskStdFp [STD_OUT]);
  1783.     }
  1784. /*******************************************************************************
  1785. *
  1786. * __stderr - get pointer to current task's stderr
  1787. *
  1788. * This function returns a pointer to the current task's stderr.  If the
  1789. * current task does not have a stderr then one is created.
  1790. *
  1791. * NOMANUAL
  1792. */
  1793. FILE ** __stderr (void)
  1794.     {
  1795.     if (taskIdCurrent->taskStdFp [STD_ERR] == NULL)
  1796. stdioInitStd (STD_ERR);
  1797.     return (&taskIdCurrent->taskStdFp [STD_ERR]);
  1798.     }
  1799. /* stdioShow.c - standard I/O show library */
  1800. /* Copyright 1984-1993 Wind River Systems, Inc. */
  1801. #include "copyright_wrs.h"
  1802. /*
  1803. modification history
  1804. --------------------
  1805. 01f,17mar99,jdi  doc: updated w/ info about proj facility (SPR 25727).
  1806. 01e,16sep93,jmm  cleaned up warnings about printf args
  1807. 01d,15sep93,kdl  fixed man page for stdioShowInit() (SPR #2244).
  1808. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1809. 01b,20sep92,smb  documentation additions
  1810. 01a,29jul92,jcf  created.
  1811. */
  1812. /*
  1813. DESCRIPTION
  1814. This library provides a show routine for file pointers.
  1815. NOMANUAL
  1816. */
  1817. #include "vxWorks.h"
  1818. #include "stdio.h"
  1819. #include "sys/types.h"
  1820. #include "stdlib.h"
  1821. #include "taskLib.h"
  1822. #include "fioLib.h"
  1823. #include "classLib.h"
  1824. #include "errnoLib.h"
  1825. #include "private/objLibP.h"
  1826. #include "private/stdioP.h"
  1827. /******************************************************************************
  1828. *
  1829. * stdioShowInit - initialize the standard I/O show facility
  1830. *
  1831. * This routine links the file pointer show routine into the VxWorks system.
  1832. * It is called automatically when this show facility is
  1833. * configured into VxWorks using either of the following methods:
  1834. * .iP
  1835. * If you use the configuration header files, define
  1836. * INCLUDE_SHOW_ROUTINES in config.h.
  1837. * .iP
  1838. * If you use the Tornado project facility, select INCLUDE_STDIO_SHOW.
  1839. *
  1840. * RETURNS: OK, or ERROR if an error occurs installing the file pointer show
  1841. * routine.
  1842. */
  1843. STATUS stdioShowInit (void)
  1844.     {
  1845.     classShowConnect (fpClassId, (FUNCPTR)stdioShow);
  1846.     return (OK);
  1847.     }
  1848. /*******************************************************************************
  1849. *
  1850. * stdioShow - display file pointer internals
  1851. *
  1852. * This routine displays information about a specified stream.
  1853. *
  1854. * RETURNS: OK, or ERROR if the file pointer is invalid.
  1855. */
  1856. STATUS stdioShow
  1857.     (
  1858.     FAST FILE * fp, /* stream */
  1859.     int level /* level */
  1860.     )
  1861.     {
  1862.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  1863. return (ERROR); /* invalid file pointer */
  1864.     printf ("%-20s: %#-10xn", "Owning Task", fp->taskId);
  1865.     printf ("%-20s: %-10hdn", "File Descriptor", fp->_file);
  1866.     printf ("%-20s: %#-10xn", "Current Position", (unsigned int) fp->_p);
  1867.     printf ("%-20s: %#-10xn", "Read Space Left", fp->_r);
  1868.     printf ("%-20s: %#-10xn", "Write Space Left", fp->_w);
  1869.     printf ("%-20s: %#-10xn", "Buffer Base", (unsigned int) fp->_bf._base);
  1870.     printf ("%-20s: %#-10xn", "Buffer Size", fp->_bf._size);
  1871.     printf ("%-20s: %#-10xn", "Ungetc Buffer Base",
  1872.     (unsigned int) fp->_ub._base);
  1873.     printf ("%-20s: %#-10xn", "Ungetc Buffer Size", fp->_ub._size);
  1874.     printf ("%-20s: %#-10xn", "Line Buffer Base", (unsigned int) fp->_lb._base);
  1875.     printf ("%-20s: %#-10xn", "Line Buffer Size", fp->_lb._size);
  1876.     printf ("%-20s: %#-10xn", "stat.st_blksize", fp->_blksize);
  1877.     printf ("%-20s: %#-10xn", "lseek Offset", fp->_offset);
  1878.     printf ("%-20s: %#-10hxn", "Flags", fp->_flags);
  1879.     /* someday display the buffer contents with level >= 1 */
  1880.     return (OK);
  1881.     }
  1882. /* tmpfile.c - creat a temporary file. stdio.h */
  1883. /* Copyright 1992-1993 Wind River Systems, Inc. */
  1884. /* 
  1885. modification history 
  1886. -------------------- 
  1887. 01d,05mar93,jdi  documentation cleanup for 5.1.
  1888. 01c,21sep92,smb  tweaks for mg.
  1889. 01b,20sep92,smb  documentation additions
  1890. 01a,29jul92,smb  written.
  1891. */ 
  1892. /* 
  1893. DESCRIPTION 
  1894.  
  1895. INCLUDE FILE: stdio.h, string.h 
  1896.  
  1897. SEE ALSO: American National Standard X3.159-1989 
  1898. NOMANUAL
  1899. */ 
  1900. #include "vxWorks.h"
  1901. #include "stdio.h"
  1902. /*******************************************************************************
  1903. *
  1904. * tmpfile - create a temporary binary file (Unimplemented) (ANSI)
  1905. *
  1906. * This routine is not be implemented
  1907. * because VxWorks does not close all open files at task exit.
  1908. * INCLUDE FILES: stdio.h 
  1909. *
  1910. * RETURNS: NULL 
  1911. */
  1912. FILE * tmpfile (void)
  1913.     {
  1914.     return (NULL);
  1915.     }
  1916. /* tmpnam.c - devise a temporary name. stdio.h */
  1917. /* Copyright 1992-1993 Wind River Systems, Inc. */
  1918. /* 
  1919. modification history 
  1920. --------------------
  1921. 01d,23sep93,jmm  made tmpnam()'s buffer static (spr 2525)
  1922. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1923. 01b,20sep92,smb  documentation additions
  1924. 01a,29jul92,smb  written.
  1925. */ 
  1926. /*
  1927. DESCRIPTION
  1928. INCLUDE FILE: stdio.h, string.h
  1929. SEE ALSO: American National Standard X3.159-1989
  1930. NOMANUAL
  1931. */
  1932. #include "vxWorks.h"
  1933. #include "stdio.h"
  1934. #include "string.h"
  1935. /******************************************************************************
  1936. *
  1937. * tmpnam - generate a temporary file name (ANSI)
  1938. *
  1939. * This routine generates a string that is a valid file name and not the same
  1940. * as the name of an existing file.  It generates a different string each
  1941. * time it is called, up to TMP_MAX times.
  1942. *
  1943. * If the argument is a null pointer, tmpnam() leaves its
  1944. * result in an internal static object and returns a pointer to that
  1945. * object.  Subsequent calls to tmpnam() may modify the same
  1946. * object.  If the argument is not a null pointer, it is assumed to
  1947. * point to an array of at least L_tmpnam chars; tmpnam() writes
  1948. * its result in that array and returns the argument as its value.
  1949. *
  1950. * INCLUDE FILES: stdio.h 
  1951. *
  1952. * RETURNS: A pointer to the file name.
  1953. */
  1954. char * tmpnam
  1955.     (
  1956.     char *  s /* name buffer */
  1957.     )
  1958.     {
  1959.     int             index;
  1960.     char *          pos;
  1961.     ushort_t        t;
  1962.     static char     buf [L_tmpnam]; /* internal buffer for name */
  1963.     static ushort_t seed = 0; /* used to generate unique name */
  1964.     /* if parameter is NULL use internal buffer */
  1965.     if (s == NULL)
  1966.      s = buf;
  1967.     /* generate unique name */
  1968.     strcpy (s, "tmp");
  1969.     /* fill up the name buffer from the last position */
  1970.     index = 5;
  1971.     pos = s + strlen (s) + index;
  1972.     *pos = '';
  1973.     seed++;
  1974.     for (t = seed; 0 <= --index; t >>= 3)
  1975.      *--pos = '0' + (t & 07);
  1976.     /* return name buffer */
  1977.     return (s);
  1978.     }
  1979. /* ungetc.c - return a character to a stream. stdio.h */
  1980. /* Copyright 1992-1993 Wind River Systems, Inc. */
  1981. /*
  1982. modification history
  1983. --------------------
  1984. 01c,05mar93,jdi  documentation cleanup for 5.1.
  1985. 01b,20sep92,smb  documentation additions
  1986. 01a,29jul92,jcf  Added OBJ_VERIFY
  1987.    +smb  taken from UCB stdio
  1988. */
  1989. /*
  1990. DESCRIPTION
  1991.  * Copyright (c) 1990 The Regents of the University of California.
  1992.  * All rights reserved.
  1993.  *
  1994.  * This code is derived from software contributed to Berkeley by
  1995.  * Chris Torek.
  1996.  *
  1997.  * Redistribution and use in source and binary forms, with or without
  1998.  * modification, are permitted provided that the following conditions
  1999.  * are met:
  2000.  * 1. Redistributions of source code must retain the above copyright
  2001.  *    notice, this list of conditions and the following disclaimer.
  2002.  * 2. Redistributions in binary form must reproduce the above copyright
  2003.  *    notice, this list of conditions and the following disclaimer in the
  2004.  *    documentation and/or other materials provided with the distribution.
  2005.  * 3. All advertising materials mentioning features or use of this software
  2006.  *    must display the following acknowledgement:
  2007.  * This product includes software developed by the University of
  2008.  * California, Berkeley and its contributors.
  2009.  * 4. Neither the name of the University nor the names of its contributors
  2010.  *    may be used to endorse or promote products derived from this software
  2011.  *    without specific prior written permission.
  2012.  *
  2013.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  2014.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  2015.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  2016.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  2017.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  2018.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  2019.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  2020.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  2021.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  2022.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  2023.  * SUCH DAMAGE.
  2024. INCLUDE FILE: stdio.h, stdlib.h, string.h
  2025. SEE ALSO: American National Standard X3.159-1989
  2026. NOMANUAL
  2027. */
  2028. #include "vxWorks.h"
  2029. #include "stdio.h"
  2030. #include "stdlib.h"
  2031. #include "string.h"
  2032. #include "objLib.h"
  2033. #include "private/stdioP.h"
  2034. /******************************************************************************
  2035. *
  2036. * __submore - internal routine
  2037. *
  2038. * Expand the ungetc buffer `in place'.  That is, adjust fp->_p when
  2039. * the buffer moves, so that it points the same distance from the end,
  2040. * and move the bytes in the buffer around as necessary so that they
  2041. * are all at the end (stack-style).
  2042. * INCLUDE FILES: stdio.h 
  2043. *
  2044. * RETURNS: 
  2045. * NOMANUAL
  2046. */
  2047. static int __submore
  2048.     (
  2049.     FAST FILE *fp
  2050.     )
  2051.     {
  2052.     FAST int       i;
  2053.     FAST uchar_t * p;
  2054.     if (fp->_ub._base == fp->_ubuf) 
  2055. {
  2056. /* Get a new buffer (rather than expanding the old one) */
  2057. if ((p = malloc ((size_t)BUFSIZ)) == NULL)
  2058.     return (EOF);
  2059. fp->_ub._base = p;
  2060. fp->_ub._size = BUFSIZ;
  2061. p += BUFSIZ - sizeof(fp->_ubuf);
  2062. for (i = sizeof(fp->_ubuf); --i >= 0;)
  2063.     p[i] = fp->_ubuf[i];
  2064. fp->_p = p;
  2065. return (0);
  2066. }
  2067.     i = fp->_ub._size;
  2068.     p = realloc (fp->_ub._base, i << 1);
  2069.     if (p == NULL)
  2070. return (EOF);
  2071.     (void) bcopy ((void *)p, (void *)(p + i), (size_t)i);
  2072.     fp->_p   = p + i;
  2073.     fp->_ub._base = p;
  2074.     fp->_ub._size = i << 1;
  2075.     return (0);
  2076.     }
  2077. /******************************************************************************
  2078. *
  2079. * ungetc - push a character back into an input stream (ANSI)
  2080. *
  2081. * This routine pushes a character <c> (converted to an `unsigned char') back
  2082. * into the specified input stream.  The pushed-back characters will be
  2083. * returned by subsequent reads on that stream in the reverse order of their
  2084. * pushing.  A successful intervening call on the stream to a file
  2085. * positioning function (fseek(), fsetpos(), or rewind()) discards any
  2086. * pushed-back characters for the stream.  The external storage corresponding
  2087. * to the stream is unchanged.
  2088. *
  2089. * One character of push-back is guaranteed.  If ungetc() is called too many
  2090. * times on the same stream without an intervening read or file positioning
  2091. * operation, the operation may fail.
  2092. *
  2093. * If the value of <c> equals EOF, the operation fails and the 
  2094. * input stream is unchanged.
  2095. *
  2096. * A successful call to ungetc() clears the end-of-file indicator for the
  2097. * stream.  The value of the file position indicator for the stream after
  2098. * reading or discarding all pushed-back characters is the same as it was
  2099. * before the character were pushed back.  For a text stream, the value of
  2100. * its file position indicator after a successful call to ungetc() is
  2101. * unspecified until all pushed-back characters are read or discarded.
  2102. * For a binary stream, the file position indicator is decremented by each
  2103. * successful call to ungetc(); if its value was zero before a call, it is
  2104. * indeterminate after the call.
  2105. * INCLUDE: stdio.h 
  2106. *
  2107. * RETURNS:
  2108. * The pushed-back character after conversion, or EOF if the operation fails.
  2109. *
  2110. * SEE ALSO: getc(), fgetc()
  2111. */
  2112. int ungetc
  2113.     (
  2114.     int  c, /* character to push */
  2115.     FAST FILE *  fp /* input stream */
  2116.     )
  2117.     {
  2118.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  2119. return (EOF);
  2120.     if (c == EOF)
  2121. return (EOF);
  2122.     if ((fp->_flags & __SRD) == 0) 
  2123. {
  2124. /*
  2125.  * Not already reading: no good unless reading-and-writing.
  2126.  * Otherwise, flush any current write stuff.
  2127.  */
  2128. if ((fp->_flags & __SRW) == 0)
  2129.     return (EOF);
  2130. if (fp->_flags & __SWR) 
  2131.     {
  2132.     if (__sflush(fp))
  2133. return (EOF);
  2134.     fp->_flags  &= ~__SWR;
  2135.     fp->_w  = 0;
  2136.     fp->_lbfsize = 0;
  2137.     }
  2138. fp->_flags |= __SRD;
  2139. }
  2140.     c = (uchar_t) c;
  2141.     /*
  2142.      * If we are in the middle of ungetc'ing, just continue.
  2143.      * This may require expanding the current ungetc buffer.
  2144.      */
  2145.     if (HASUB(fp)) 
  2146. {
  2147. if (fp->_r >= fp->_ub._size && __submore(fp))
  2148.     return (EOF);
  2149. *--fp->_p = c;
  2150. fp->_r++;
  2151. return (c);
  2152. }
  2153.     /*
  2154.      * If we can handle this by simply backing up, do so,
  2155.      * but never replace the original character.
  2156.      * (This makes sscanf() work when scanning `const' data.)
  2157.      */
  2158.     if ((fp->_bf._base != NULL) && 
  2159. (fp->_p > fp->_bf._base) &&
  2160. (fp->_p[-1] == c)) 
  2161. {
  2162. fp->_p--;
  2163. fp->_r++;
  2164. return (c);
  2165. }
  2166.     /*
  2167.      * Create an ungetc buffer.
  2168.      * Initially, we will use the `reserve' buffer.
  2169.      */
  2170.     fp->_ur = fp->_r;
  2171.     fp->_up = fp->_p;
  2172.     fp->_ub._base = fp->_ubuf;
  2173.     fp->_ub._size = sizeof(fp->_ubuf);
  2174.     fp->_ubuf[sizeof(fp->_ubuf) - 1] = c;
  2175.     fp->_p = &fp->_ubuf[sizeof(fp->_ubuf) - 1];
  2176.     fp->_r = 1;
  2177.     return (c);
  2178.     }
  2179. /* vfprintf.c - print to a file. stdio.h */
  2180. /* Copyright 1992-1993 Wind River Systems, Inc. */
  2181. /*
  2182. modification history
  2183. --------------------
  2184. 01c,05mar93,jdi  documentation cleanup for 5.1.
  2185. 01b,20sep92,smb  documentation additions
  2186. 01a,29jul92,jcf  Added OBJ_VERIFY, use fioFormatV()
  2187.    +smb  taken from UCB stdio
  2188. */
  2189. /*
  2190. DESCRIPTION
  2191.  * Copyright (c) 1990 The Regents of the University of California.
  2192.  * All rights reserved.
  2193.  *
  2194.  * This code is derived from software contributed to Berkeley by
  2195.  * Chris Torek.
  2196.  *
  2197.  * Redistribution and use in source and binary forms, with or without
  2198.  * modification, are permitted provided that the following conditions
  2199.  * are met:
  2200.  * 1. Redistributions of source code must retain the above copyright
  2201.  *    notice, this list of conditions and the following disclaimer.
  2202.  * 2. Redistributions in binary form must reproduce the above copyright
  2203.  *    notice, this list of conditions and the following disclaimer in the
  2204.  *    documentation and/or other materials provided with the distribution.
  2205.  * 3. All advertising materials mentioning features or use of this software
  2206.  *    must display the following acknowledgement:
  2207.  * This product includes software developed by the University of
  2208.  * California, Berkeley and its contributors.
  2209.  * 4. Neither the name of the University nor the names of its contributors
  2210.  *    may be used to endorse or promote products derived from this software
  2211.  *    without specific prior written permission.
  2212.  *
  2213.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  2214.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  2215.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  2216.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  2217.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  2218.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  2219.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  2220.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  2221.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  2222.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  2223.  * SUCH DAMAGE.
  2224. INCLUDE FILE: stdio.h, stdarg.h
  2225. SEE ALSO: American National Standard X3.159-1989
  2226. NOMANUAL
  2227. */
  2228. #include "vxWorks.h"
  2229. #include "stdarg.h"
  2230. #include "fioLib.h"
  2231. #include "objLib.h"
  2232. #include "private/stdioP.h"
  2233. /* forward declarations */
  2234. LOCAL STATUS putbuf (char *buffer, int nbytes, FILE *fp);
  2235. /*******************************************************************************
  2236. *
  2237. * vfprintf - write a formatted string to a stream (ANSI)
  2238. *
  2239. * This routine is equivalent to fprintf(), except that it takes the variable
  2240. * arguments to be formatted from a list <vaList> of type `va_list' rather
  2241. * than from in-line arguments.
  2242. *
  2243. * INCLUDE FILES: stdio.h 
  2244. *
  2245. * RETURNS:
  2246. * The number of characters written, or a negative value if an
  2247. * output error occurs.
  2248. *
  2249. * SEE ALSO: fprintf()
  2250. */
  2251. int vfprintf
  2252.     (
  2253.     FILE *   fp, /* stream to write to */
  2254.     const char *  fmt, /* format string */
  2255.     va_list       vaList /* arguments to format string */
  2256.     )
  2257.     {
  2258.     uchar_t localbuf[BUFSIZE];
  2259.     int     ret;
  2260.     FILE    fake;
  2261.     if (OBJ_VERIFY (fp, fpClassId) != OK)
  2262. return (EOF);
  2263.     if (cantwrite (fp))
  2264. return (EOF);
  2265.     if ((fp->_flags & (__SNBF|__SWR|__SRW)) == (__SNBF|__SWR) && fp->_file >= 0)
  2266. {
  2267. /* 
  2268.  * This optimizes an fprintf to unbuffered unix file by creating a
  2269.  * temporary buffer.  This avoids worries about ungetc buffers and
  2270.  * so forth.  It is particularly useful for stderr.
  2271.  */
  2272. fake._flags  = fp->_flags & ~__SNBF; /* turn on buffering */
  2273. fake._file   = fp->_file; /* store fd */
  2274. fake._bf._base = fake._p = localbuf; /* set up the buffer */
  2275. fake._bf._size = fake._w = sizeof(localbuf); /* initialize size */
  2276. fake._lbfsize = 0; /* init to be safe */
  2277. fake._r = 0; /* init to be safe */
  2278. fake._ub._base = NULL; /* init to be safe */
  2279. fake._ub._size = 0; /* init to be safe */
  2280. fake._lb._base = NULL; /* init to be safe */
  2281. fake._lb._size = 0; /* init to be safe */
  2282. objCoreInit (&fake.objCore, fpClassId); /* validate fake fp */
  2283.         ret = fioFormatV (fmt, vaList, putbuf, (int) &fake);
  2284. if ((ret >= 0) && fflush (&fake))
  2285.     ret = EOF;
  2286. if (fake._flags & __SERR)
  2287.     fp->_flags |= __SERR;
  2288. objCoreTerminate (&fake.objCore); /* invalidate fp */
  2289. }
  2290.     else
  2291. {
  2292. ret = fioFormatV (fmt, vaList, putbuf, (int) fp);
  2293.      ret = (ferror (fp)) ? EOF : ret;
  2294.         }
  2295.     return (ret);
  2296.     }
  2297. /*******************************************************************************
  2298. *
  2299. * putbuf - put a buffer on an output stream
  2300. * NOMANUAL
  2301. */
  2302. LOCAL STATUS putbuf
  2303.     (
  2304.     char * buffer,       /* source */
  2305.     int    nbytes,       /* number of bytes in source */
  2306.     FILE * fp            /* stream */
  2307.     )
  2308.     {
  2309.     FAST int ix;
  2310.     for (ix = 0; ix < nbytes; ix++)
  2311. putc (buffer [ix], fp);
  2312.     return (OK);
  2313.     }