Added FileSeekPos

This commit is contained in:
Yuriy Glukhov
2016-11-10 13:33:53 +02:00
parent 7f03fd3f65
commit feba5acc98
2 changed files with 11 additions and 3 deletions

View File

@@ -2595,6 +2595,14 @@ else:
if x < 0: -x else: x
{.pop.}
type
FileSeekPos* = enum ## Position relative to which seek should happen
# The values are ordered so that they match with stdio
# SEEK_SET, SEEK_CUR and SEEK_END respectively.
fspSet ## Seek to absolute value
fspCur ## Seek relative to current position
fspEnd ## Seek relative to end
when not defined(JS): #and not defined(nimscript):
{.push stack_trace: off, profiler:off.}
@@ -2858,7 +2866,7 @@ when not defined(JS): #and not defined(nimscript):
## file `f`. Returns the number of actual written bytes, which may be less
## than `len` in case of an error.
proc setFilePos*(f: File, pos: int64) {.benign.}
proc setFilePos*(f: File, pos: int64, relativeTo: FileSeekPos = fspSet) {.benign.}
## sets the position of the file pointer that is used for read/write
## operations. The file's first byte has the index zero.

View File

@@ -336,8 +336,8 @@ proc open(f: var File, filehandle: FileHandle, mode: FileMode): bool =
f = c_fdopen(filehandle, FormatOpen[mode])
result = f != nil
proc setFilePos(f: File, pos: int64) =
if c_fseek(f, clong(pos), 0) != 0:
proc setFilePos(f: File, pos: int64, relativeTo: FileSeekPos = fspSet) =
if c_fseek(f, clong(pos), cint(relativeTo)) != 0:
raiseEIO("cannot set file position")
proc getFilePos(f: File): int64 =