L4Re/OLD/libc_newlib

libc/stdio/fsetpos.c

20:a7df90620ba7
2019-10-18 Paul Boddie Added an initial sbrk implementation. Updated the Makefile to compile all l4re source files.
     1 /*     2  * Copyright (c) 1990 The Regents of the University of California.     3  * All rights reserved.     4  *     5  * Redistribution and use in source and binary forms are permitted     6  * provided that the above copyright notice and this paragraph are     7  * duplicated in all such forms and that any documentation,     8  * advertising materials, and other materials related to such     9  * distribution and use acknowledge that the software was developed    10  * by the University of California, Berkeley.  The name of the    11  * University may not be used to endorse or promote products derived    12  * from this software without specific prior written permission.    13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR    14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED    15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.    16  */    17     18 /*    19 FUNCTION    20 <<fsetpos>>---restore position of a stream or file    21     22 INDEX    23 	fsetpos    24 INDEX    25 	_fsetpos_r    26     27 SYNOPSIS    28 	#include <stdio.h>    29 	int fsetpos(FILE *<[fp]>, const fpos_t *<[pos]>);    30 	int _fsetpos_r(struct _reent *<[ptr]>, FILE *<[fp]>,    31 	               const fpos_t *<[pos]>);    32     33 DESCRIPTION    34 Objects of type <<FILE>> can have a ``position'' that records how much    35 of the file your program has already read.  Many of the <<stdio>> functions    36 depend on this position, and many change it as a side effect.    37     38 You can use <<fsetpos>> to return the file identified by <[fp]> to a previous    39 position <<*<[pos]>>> (after first recording it with <<fgetpos>>).    40     41 See <<fseek>> for a similar facility.    42     43 RETURNS    44 <<fgetpos>> returns <<0>> when successful.  If <<fgetpos>> fails, the    45 result is <<1>>.  The reason for failure is indicated in <<errno>>:    46 either <<ESPIPE>> (the stream identified by <[fp]> doesn't support    47 repositioning) or <<EINVAL>> (invalid file position).    48     49 PORTABILITY    50 ANSI C requires <<fsetpos>>, but does not specify the nature of    51 <<*<[pos]>>> beyond identifying it as written by <<fgetpos>>.    52     53 Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>,    54 <<lseek>>, <<read>>, <<sbrk>>, <<write>>.    55 */    56     57 #include <_ansi.h>    58 #include <reent.h>    59 #include <stdio.h>    60     61 int    62 _fsetpos_r (struct _reent * ptr,    63        FILE * iop,    64        const _fpos_t * pos)    65 {    66   int x = _fseek_r (ptr, iop, *pos, SEEK_SET);    67     68   if (x != 0)    69     return 1;    70   return 0;    71 }    72     73 #ifndef _REENT_ONLY    74     75 int    76 fsetpos (FILE * iop,    77        const _fpos_t * pos)    78 {    79   return _fsetpos_r (_REENT, iop, pos);    80 }    81     82 #endif /* !_REENT_ONLY */