1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #include <stdio.h> 7 #include <io.h> 8 #include <errno.h> 9 fseeko64(FILE * stream,_off64_t offset,int whence)10int fseeko64 (FILE* stream, _off64_t offset, int whence) 11 { 12 fpos_t pos; 13 if (whence == SEEK_CUR) 14 { 15 /* If stream is invalid, fgetpos sets errno. */ 16 if (fgetpos (stream, &pos)) 17 return (-1); 18 pos += (fpos_t) offset; 19 } 20 else if (whence == SEEK_END) 21 { 22 /* If writing, we need to flush before getting file length. */ 23 fflush (stream); 24 pos = (fpos_t) (_filelengthi64 (_fileno (stream)) + offset); 25 } 26 else if (whence == SEEK_SET) 27 pos = (fpos_t) offset; 28 else 29 { 30 errno = EINVAL; 31 return (-1); 32 } 33 return fsetpos (stream, &pos); 34 } 35