aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/stdio/fseek.c
Commit message (Collapse)AuthorAgeFilesLines
* General further adoption of SPDX licensing ID tags.Pedro F. Giffuni2017-11-201-0/+2
| | | | | | | | | | | | | | | | | Mainly focus on files that use BSD 3-Clause license. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Special thanks to Wind River for providing access to "The Duke of Highlander" tool: an older (2014) run over FreeBSD tree was useful as a starting point. Notes: svn path=/head/; revision=326025
* Make stdio deferred cancel-safe.Konstantin Belousov2017-06-291-4/+4
| | | | | | | | | | | | | | | | | | | | | | | If used with fopen(3)/fdopen(3)-ed FILEs, stdio accurately uses non-cancellable internal versions of the functions, i.e. it seems to be fine with regard to cancellation. But if the funopen(3) and f{r,w}open(3) functions were used to open the FILE, and corresponding user functions create cancellation points (they typically have no other choice), then stdio code at least leaks FILE' lock. The change installs cleanup handler which unlocks FILE. Some minimal restructuring of the code was required to make it use common return place to satisfy hand-rolled pthread_cleanup_pop() requirements. Noted by: eugen Reviewed by: eugen, vangyzen Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D11246 Notes: svn path=/head/; revision=320472
* Convert libc/stdio from K&R to ANSI CEd Maste2013-04-231-13/+3
| | | | | | | And add '__restrict' where it appeared in the header prototypes Notes: svn path=/head/; revision=249810
* Renumber clauses to reduce diffs to other versionsEd Maste2013-04-231-1/+1
| | | | | | | | | | NetBSD, OpenBSD, and Android's Bionic all number the clauses 1 through 3, so follow suit to make comparison easier. Acked-by: imp@ Notes: svn path=/head/; revision=249808
* Next stage of stdio cleanup: Retire __sFILEX and merge the fields back intoJohn Baldwin2008-04-171-4/+4
| | | | | | | | | | | | | | | | | | | | | | __sFILE. This was supposed to be done in 6.0. Some notes: - Where possible I restored the various lines to their pre-__sFILEX state. - Retire INITEXTRA() and just initialize the wchar bits (orientation and mbstate) explicitly instead. The various places that used INITEXTRA didn't need the locking fields or _up initialized. (Some places needed _up to exist and not be off the end of a NULL or garbage pointer, but they didn't require it to be initialized to a specific value.) - For now, stdio.h "knows" that pthread_t is a 'struct pthread *' to avoid namespace pollution of including all the pthread types in stdio.h. Once we remove all the inlines and make __sFILE private it can go back to using pthread_t, etc. - This does not remove any of the inlines currently and does not change any of the public ABI of 'FILE'. MFC after: 1 month Reviewed by: peter Notes: svn path=/head/; revision=178287
* Add mbstate clear missed in one of the cases.Andrey A. Chernov2007-06-181-5/+6
| | | | | | | Move overflow check for fseek as early as needed. Notes: svn path=/head/; revision=170907
* Per Regents of the University of Calfornia letter, remove advertisingWarner Losh2007-01-091-4/+0
| | | | | | | | | clause. # If I've done so improperly on a file, please let me know. Notes: svn path=/head/; revision=165903
* Associate a multibyte conversion state object with each stream. Reset itTim J. Robbins2004-05-221-0/+2
| | | | | | | | | | | | to the initial state when a stream is opened or seeked upon. Use the stream's conversion state object instead of a freshly-zeroed one in fgetwc(), fputwc() and ungetwc(). This is only a performance improvement for now, but it would also be required in order to support state-dependent encodings. Notes: svn path=/head/; revision=129583
* Fix the style of the SCM ID's.David E. O'Brien2002-03-221-4/+2
| | | | | | | I believe have made all of libc .c's as consistent as possible. Notes: svn path=/head/; revision=92986
* Remove __P() usage.David E. O'Brien2002-03-211-1/+1
| | | | Notes: svn path=/head/; revision=92905
* Remove 'register' keyword.David E. O'Brien2002-03-211-2/+2
| | | | Notes: svn path=/head/; revision=92889
* In > LONG_MAX test use sseek return value and not _offset which can be notAndrey A. Chernov2001-10-251-3/+4
| | | | | | | active. Notes: svn path=/head/; revision=85513
* Help to recover from bad seek (i.e. negative or too big) happens beyondAndrey A. Chernov2001-10-241-5/+5
| | | | | | | | our pre-check control. Do the same way as refill.c does when it set __SERR, i.e. clear read and ungetc buffers. Clear EOF flag too. Notes: svn path=/head/; revision=85418
* Back out read buffer invalidating via __SMOD.Andrey A. Chernov2001-10-231-2/+2
| | | | | | | | It was correct, but not needed because internal buffer cleared on each seek outside of it. Notes: svn path=/head/; revision=85396
* Change comment explaining another usage of __SMODAndrey A. Chernov2001-10-231-2/+2
| | | | Notes: svn path=/head/; revision=85394
* Re-arrange my funopen(3) fix to minimize differences with original stdio code,Andrey A. Chernov2001-09-031-39/+0
| | | | | | | | | no functional changes. Add fp->_offset optimization in _SAPP+_SOPT case Notes: svn path=/head/; revision=82838
* Internal seeks are overoptimized. They should remember fp->_offset only forAndrey A. Chernov2001-09-021-1/+1
| | | | | | | | | | plain regular files, i.e. files with __SOPT flag set. Fix it, so ftell(stdout) always returns the same as lseek(1, 0, 1) now. NOTE: this bug was in original stdio code Notes: svn path=/head/; revision=82827
* Move all stdio internal flags processing and setting out of __sread(),Andrey A. Chernov2001-09-021-3/+41
| | | | | | | | | | | | | __swrite() and __sseek() to higher level. According to funopen(3) they all are just wrappers to something like standard read(2), write(2) and lseek(2), i.e. must not touch stdio internals because they are replaceable with any other functions knows nothing about stdio internals. See example of funopen(3) usage in sendmail sources f.e. NOTE: this is original stdio bug, not result of my range checkin added. Notes: svn path=/head/; revision=82807
* Save errno before function call and restore it on success (because manyAndrey A. Chernov2001-09-011-0/+6
| | | | | | | | | internal functions there may fail and set (i.e. overwrite) errno in normal (not error) situation). In original variant errno testing after call (as POSIX suggest) is wrong when errno overwrite happens. Notes: svn path=/head/; revision=82743
* Remove even more unneded checks, original code can't overflows in that placeAndrey A. Chernov2001-09-011-5/+1
| | | | Notes: svn path=/head/; revision=82742
* Remove two checks unneeded now (can't happens)Andrey A. Chernov2001-09-011-4/+0
| | | | Notes: svn path=/head/; revision=82741
* Make fseek(... SEEK_CUR) fails if current file-position is unspecified.Andrey A. Chernov2001-09-011-2/+6
| | | | Notes: svn path=/head/; revision=82740
* If lseek to wrong value sucessfully happens despite all pre-checks, set __SERRAndrey A. Chernov2001-09-011-0/+1
| | | | | | | to indicate that stream becomes inconsistent. Notes: svn path=/head/; revision=82735
* Back out disabling ungetc() at 0, use different solution:Andrey A. Chernov2001-09-011-10/+19
| | | | | | | | keep negative offset internally, but return 0 externally in ftell*() I.e. use 0 now as 'unspecified value' per POSIX ungetc() description. Notes: svn path=/head/; revision=82709
* The same big piece of ftell code repeated in 3 places. Simplify things movingAndrey A. Chernov2001-08-311-84/+7
| | | | | | | | it into one subfunction instead. Try to use real offset in strange cases. Notes: svn path=/head/; revision=82668
* If file offset is smaller than internal buffer character left count, just dropAndrey A. Chernov2001-08-311-9/+21
| | | | | | | internal buffer and trust offset, not return error. Notes: svn path=/head/; revision=82659
* Try to discard some ungetc data in saved internal buffer checks too,Andrey A. Chernov2001-08-301-4/+16
| | | | | | | if offset tends to be negative. Notes: svn path=/head/; revision=82591
* goto dumb; if can't obtain curoff for whence != SEEK_CUR cases, as supposedAndrey A. Chernov2001-08-301-8/+4
| | | | Notes: svn path=/head/; revision=82590
* Add more EOVERFLOW checks.Andrey A. Chernov2001-08-301-24/+61
| | | | | | | | | | | | | | | When file offset tends to be negative due to internal and ungetc buffers additions counted, try to discard some ungetc data first, then return EBADF. Later one can happens if lseek(fileno(fd),...) called f.e. POSIX says that ungetc beyond beginning of the file results are undefined, so we can just discard some of ungetc data in that case. Don't rely on gcc cast when checking for overflow, use OFF_MAX. Cosmetique. Notes: svn path=/head/; revision=82588
* Cosmetique fixes from bdeAndrey A. Chernov2001-08-261-2/+0
| | | | Notes: svn path=/head/; revision=82348
* Cosmetique: correct English in commentsAndrey A. Chernov2001-08-231-2/+2
| | | | Notes: svn path=/head/; revision=82197
* Simplify overflow calculations a bitAndrey A. Chernov2001-08-171-4/+2
| | | | Notes: svn path=/head/; revision=81822
* Add more overflow checks in case of fseek()Andrey A. Chernov2001-08-171-0/+8
| | | | Notes: svn path=/head/; revision=81819
* Don't clear "we have offset" flag even if long is overflow for fseek(),Andrey A. Chernov2001-08-171-1/+0
| | | | | | | there is no harm to have it, it will reduce next call efforts. Notes: svn path=/head/; revision=81818
* fseek.c:Andrey A. Chernov2001-08-171-5/+23
| | | | | | | | | | | | | | | Resulting fseek() offset must fit in long, required by POSIX (pointed by bde), so add LONG_MAX and final tests for it. rewind.c: 1) add missing __sinit() as in fseek() it pretends to be. 2) use clearerr_unlocked() since we already lock stream before _fseeko() 3) don't zero errno at the end, it explicitely required by POSIX as the only one method to test rewind() error condition. 4) don't clearerr() if error happens in _fseeko() Notes: svn path=/head/; revision=81817
* Use smarter overflow testsAndrey A. Chernov2001-08-151-3/+6
| | | | | | | Suggested by: bde Notes: svn path=/head/; revision=81730
* 1) Disallow negative seek as POSIX require for fseek{o} (but not for lseek):Andrey A. Chernov2001-08-151-0/+23
| | | | | | | | | | | | | | | "[EINVAL] ... The resulting file-position indicator would be set to a negative value." Moreover, in real life negative seek in stdio cause EOF indicator cleared and not set again forever even if EOF returned. 2) Catch few possible off_t overflows. Reviewed by: arch discussion Notes: svn path=/head/; revision=81666
* Fix the current libc breakage in current:Warner Losh2001-02-161-1/+1
| | | | | | | | | | | | | | | | o Back out the __std* stuff. Can't figure out how to do this right now, so we'll save it for late. o use _up as a pointer for extra fields that we need to access. o back out the libc major version bump. Submitted by: green reviewed by: peter, imp, green, obrien (to varying degrees). We'll fix the "how do we stop encoding sizeof(FILE) in binaries" part later. Notes: svn path=/head/; revision=72529
* Remove _THREAD_SAFE and make libc thread-safe by default byDaniel Eischen2001-01-241-21/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | adding (weak definitions to) stubs for some of the pthread functions. If the threads library is linked in, the real pthread functions will pulled in. Use the following convention for system calls wrapped by the threads library: __sys_foo - actual system call _foo - weak definition to __sys_foo foo - weak definition to __sys_foo Change all libc uses of system calls wrapped by the threads library from foo to _foo. In order to define the prototypes for _foo(), we introduce namespace.h and un-namespace.h (suggested by bde). All files that need to reference these system calls, should include namespace.h before any standard includes, then include un-namespace.h after the standard includes and before any local includes. <db.h> is an exception and shouldn't be included in between namespace.h and un-namespace.h namespace.h will define foo to _foo, and un-namespace.h will undefine foo. Try to eliminate some of the recursive calls to MT-safe functions in libc/stdio in preparation for adding a mutex to FILE. We have recursive mutexes, but would like to avoid using them if possible. Remove uneeded includes of <errno.h> from a few files. Add $FreeBSD$ to a few files in order to pass commitprep. Approved by: -arch Notes: svn path=/head/; revision=71579
* $Id$ -> $FreeBSD$Peter Wemm1999-08-281-1/+1
| | | | Notes: svn path=/head/; revision=50476
* Added functions fseeko() and ftello() (from susv2).Dmitrij Tejblum1999-02-081-3/+12
| | | | | | | | | | Fixed fgetpos() and fsetpos() for offsets > 2GB. PR: 8637 Submitted by: Dan Nelson <dnelson@emsphone.com> (adjusted by me a little) Notes: svn path=/head/; revision=43782
* Add FILE locking stubs for libc.John Birrell1998-04-111-26/+10
| | | | | | | | | | | Change the FILE locking to support kernel threads when linked with libpthread (which you haven't see yet). This requires that libc become thread-safe and thread-aware, testing __isthreaded before attempting to do lock/unlock calls. The impact on non-threaded programs is minor. This change works with libc_r, so it's the best compromise. Notes: svn path=/head/; revision=35129
* Revert $FreeBSD$ to $Id$Peter Wemm1997-02-221-1/+1
| | | | Notes: svn path=/head/; revision=22993
* Make the long-awaited change from $Id$ to $FreeBSD$Jordan K. Hubbard1997-01-141-1/+1
| | | | | | | | | | | This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long. Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise. Notes: svn path=/head/; revision=21673
* Suggested by: Bruce Evans, Jeffrey Hsu, Gary PalmerJames Raynard1996-06-221-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | Added $Id$'s to files that were lacking them (gpalmer), made some cosmetic changes to conform to style guidelines (bde) and checked against NetBSD and Lite2 to remove unnecessary divergences (hsu, bde) One last code cleanup:- Removed spurious casts in fseek.c and stdio.c. Added missing function argument in fwalk.c. Added missing header include in flags.c and rget.c. Put in casts where int's were being passed as size_t's. Put in missing prototypes for static functions. Changed second args of __sflags() inflags.c and writehook() in vasprintf.c from char * to const char * to conform to prototypes. This directory now compiles with no warnings with -Wall under gcc-2.6.3 and with considerably less warnings than before with the ultra-pedantic script I used for testing. (Most of the remaining ones are due to const poisoning). Notes: svn path=/head/; revision=16586
* Reviewed by: julian and (hsu?)Julian Elischer1996-01-221-1/+27
| | | | | | | | | Submitted by: John Birrel(L?) changes for threadsafe operations Notes: svn path=/head/; revision=13545
* Date: Wed, 26 Oct 1994 15:44:49 -0600Nate Williams1994-11-051-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | From: Chris Torek <torek@bsdi.com> Here is a semi-official patch (apply to /usr/src/lib/libc/stdio/fseek.c, rebuild libc, install). The current code fails when the seek: - is optimized, and - is to just past the end of the block currently in the buffer, and - is followed by another seek with no intervening read operation, and - the destination of subsequent seek is within the block left in the buffer (seeking to the beginning of a block does not force a read, so the buffer still contains the previous block) so it is indeed rather obscure. I may have a different `final' fix, as this one `loses' the buffer contents on a seek that goes just past the end of the current block. [Footnote: seeks are optimized only on read-only opens of regular files that are buffered by the file's optimal I/O size. This is what you get with fopen(path, "r") and no call to setvbuf().] Obtained from: [ BSDI mailing list ] Notes: svn path=/head/; revision=4169
* BSD 4.4 Lite Lib SourcesRodney W. Grimes1994-05-271-0/+245
Notes: svn path=/cvs2svn/branches/unlabeled-1.1.1/; revision=1573