Deleted Added
full compact
stdio.c (82735) stdio.c (82807)
1/*-
2 * Copyright (c) 1990, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Chris Torek.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 25 unchanged lines hidden (view full) ---

34 * SUCH DAMAGE.
35 */
36
37#if defined(LIBC_SCCS) && !defined(lint)
38#if 0
39static char sccsid[] = "@(#)stdio.c 8.1 (Berkeley) 6/4/93";
40#endif
41static const char rcsid[] =
1/*-
2 * Copyright (c) 1990, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Chris Torek.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 25 unchanged lines hidden (view full) ---

34 * SUCH DAMAGE.
35 */
36
37#if defined(LIBC_SCCS) && !defined(lint)
38#if 0
39static char sccsid[] = "@(#)stdio.c 8.1 (Berkeley) 6/4/93";
40#endif
41static const char rcsid[] =
42 "$FreeBSD: head/lib/libc/stdio/stdio.c 82735 2001-09-01 11:21:28Z ache $";
42 "$FreeBSD: head/lib/libc/stdio/stdio.c 82807 2001-09-02 19:10:10Z ache $";
43#endif /* LIBC_SCCS and not lint */
44
45#include "namespace.h"
46#include <errno.h>
47#include <fcntl.h>
43#endif /* LIBC_SCCS and not lint */
44
45#include "namespace.h"
46#include <errno.h>
47#include <fcntl.h>
48#include <limits.h>
49#include <stdio.h>
50#include <unistd.h>
51#include "un-namespace.h"
52#include "local.h"
53
54/*
55 * Small standard I/O/seek/close functions.
48#include <stdio.h>
49#include <unistd.h>
50#include "un-namespace.h"
51#include "local.h"
52
53/*
54 * Small standard I/O/seek/close functions.
56 * These maintain the `known seek offset' for seek optimisation.
57 */
58int
59__sread(cookie, buf, n)
60 void *cookie;
61 char *buf;
62 int n;
63{
64 register FILE *fp = cookie;
55 */
56int
57__sread(cookie, buf, n)
58 void *cookie;
59 char *buf;
60 int n;
61{
62 register FILE *fp = cookie;
65 register int ret;
66
63
67 ret = _read(fp->_file, buf, (size_t)n);
68 /* if the read succeeded, update the current offset */
69 if (ret >= 0) {
70 if (fp->_flags & __SOFF) {
71 if (fp->_offset > OFF_MAX - ret) {
72 errno = EOVERFLOW;
73 ret = -1;
74 } else {
75 fp->_offset += ret;
76 return (ret);
77 }
78 } else
79 return (ret);
80 }
81 fp->_flags &= ~__SOFF;
82 return (ret);
64 return(_read(fp->_file, buf, (size_t)n));
83}
84
85int
86__swrite(cookie, buf, n)
87 void *cookie;
88 char const *buf;
89 int n;
90{
91 register FILE *fp = cookie;
92
65}
66
67int
68__swrite(cookie, buf, n)
69 void *cookie;
70 char const *buf;
71 int n;
72{
73 register FILE *fp = cookie;
74
93 if (fp->_flags & __SAPP)
94 (void) lseek(fp->_file, (off_t)0, SEEK_END);
95 fp->_flags &= ~__SOFF; /* in case FAPPEND mode is set */
96 return (_write(fp->_file, buf, (size_t)n));
97}
98
99fpos_t
100__sseek(cookie, offset, whence)
101 void *cookie;
102 fpos_t offset;
103 int whence;
104{
105 register FILE *fp = cookie;
75 return (_write(fp->_file, buf, (size_t)n));
76}
77
78fpos_t
79__sseek(cookie, offset, whence)
80 void *cookie;
81 fpos_t offset;
82 int whence;
83{
84 register FILE *fp = cookie;
106 register off_t ret;
107 int serrno, errret;
108
85
109 serrno = errno;
110 errno = 0;
111 ret = lseek(fp->_file, (off_t)offset, whence);
112 errret = errno;
113 if (errno == 0)
114 errno = serrno;
115 /*
116 * Disallow negative seeks per POSIX.
117 * It is needed here to help upper level caller
118 * (fseek) in the cases it can't detect.
119 */
120 if (ret < 0) {
121 if (errret == 0) {
122 fp->_flags |= __SERR;
123 errno = EINVAL;
124 }
125 fp->_flags &= ~__SOFF;
126 ret = -1;
127 } else {
128 fp->_flags |= __SOFF;
129 fp->_offset = ret;
130 }
131 return (ret);
86 return (lseek(fp->_file, (off_t)offset, whence));
132}
133
134int
135__sclose(cookie)
136 void *cookie;
137{
138
139 return (_close(((FILE *)cookie)->_file));
140}
87}
88
89int
90__sclose(cookie)
91 void *cookie;
92{
93
94 return (_close(((FILE *)cookie)->_file));
95}