~ubuntu-branches/ubuntu/trusty/musl/trusty-proposed

« back to all changes in this revision

Viewing changes to src/stdio/fseek.c

  • Committer: Package Import Robot
  • Author(s): Kevin Bortis
  • Date: 2013-09-20 20:54:14 UTC
  • Revision ID: package-import@ubuntu.com-20130920205414-5b61trtmma18w58o
Tags: upstream-0.9.13
ImportĀ upstreamĀ versionĀ 0.9.13

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "stdio_impl.h"
 
2
 
 
3
int __fseeko_unlocked(FILE *f, off_t off, int whence)
 
4
{
 
5
        /* Adjust relative offset for unread data in buffer, if any. */
 
6
        if (whence == SEEK_CUR) off -= f->rend - f->rpos;
 
7
 
 
8
        /* Flush write buffer, and report error on failure. */
 
9
        if (f->wpos > f->wbase) {
 
10
                f->write(f, 0, 0);
 
11
                if (!f->wpos) return -1;
 
12
        }
 
13
 
 
14
        /* Leave writing mode */
 
15
        f->wpos = f->wbase = f->wend = 0;
 
16
 
 
17
        /* Perform the underlying seek. */
 
18
        if (f->seek(f, off, whence) < 0) return -1;
 
19
 
 
20
        /* If seek succeeded, file is seekable and we discard read buffer. */
 
21
        f->rpos = f->rend = 0;
 
22
        f->flags &= ~F_EOF;
 
23
        
 
24
        return 0;
 
25
}
 
26
 
 
27
int __fseeko(FILE *f, off_t off, int whence)
 
28
{
 
29
        int result;
 
30
        FLOCK(f);
 
31
        result = __fseeko_unlocked(f, off, whence);
 
32
        FUNLOCK(f);
 
33
        return result;
 
34
}
 
35
 
 
36
int fseek(FILE *f, long off, int whence)
 
37
{
 
38
        return __fseeko(f, off, whence);
 
39
}
 
40
 
 
41
weak_alias(__fseeko, fseeko);
 
42
 
 
43
LFS64(fseeko);