Cygwin: mmap: allow remapping part of an existing anonymous mapping
[newlib-cygwin.git] / newlib / libc / stdio64 / stdio64.c
blob95cb25288f5746aaa18fe62b96ec8ac88958dccc
1 /* No user fns here. Pesch 15apr92. */
3 /*
4 * Copyright (c) 1990 The Regents of the University of California.
5 * All rights reserved.
7 * Redistribution and use in source and binary forms are permitted
8 * provided that the above copyright notice and this paragraph are
9 * duplicated in all such forms and that any documentation,
10 * and/or other materials related to such
11 * distribution and use acknowledge that the software was developed
12 * by the University of California, Berkeley. The name of the
13 * University may not be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20 #include <stdio.h>
21 #include <sys/types.h>
22 #include <fcntl.h>
23 #include <sys/unistd.h>
24 #include <errno.h>
25 #include "local.h"
27 #ifdef __LARGE64_FILES
28 _fpos64_t
29 __sseek64 (struct _reent *ptr,
30 void *cookie,
31 _fpos64_t offset,
32 int whence)
34 register FILE *fp = (FILE *) cookie;
35 register _off64_t ret;
37 ret = _lseek64_r (ptr, fp->_file, (_off64_t) offset, whence);
38 if (ret == (_fpos64_t)-1L)
39 fp->_flags &= ~__SOFF;
40 else
42 fp->_flags |= __SOFF;
43 fp->_offset = ret;
45 return ret;
48 _READ_WRITE_RETURN_TYPE
49 __swrite64 (struct _reent *ptr,
50 void *cookie,
51 char const *buf,
52 _READ_WRITE_BUFSIZE_TYPE n)
54 register FILE *fp = (FILE *) cookie;
55 _READ_WRITE_RETURN_TYPE w;
56 #ifdef __SCLE
57 int oldmode=0;
58 #endif
60 if (fp->_flags & __SAPP)
61 (void) _lseek64_r (ptr, fp->_file, (_off64_t)0, SEEK_END);
62 fp->_flags &= ~__SOFF; /* in case O_APPEND mode is set */
64 #ifdef __SCLE
65 if (fp->_flags & __SCLE)
66 oldmode = setmode(fp->_file, O_BINARY);
67 #endif
69 w = _write_r (ptr, fp->_file, buf, n);
71 #ifdef __SCLE
72 if (oldmode)
73 setmode(fp->_file, oldmode);
74 #endif
76 return w;
79 #endif /* __LARGE64_FILES */