* Copyright (c) 1982, 1988 The Regents of the University of California.
* %sccs.include.proprietary.c%
* @(#)read.c 7.2 (Berkeley) %G%
register struct iob
*file
;
if (fdesc
>= 0 && fdesc
<= 2) {
} while (--i
&& *buf
++ != '\n');
if (fdesc
< 0 || fdesc
>= SOPEN_MAX
||
((file
= &iob
[fdesc
])->i_flgs
&F_ALLOC
) == 0) {
if ((file
->i_flgs
&F_READ
) == 0) {
if ((file
->i_flgs
& F_FILE
) == 0) {
file
->i_bn
= file
->i_boff
+ (file
->i_offset
/ DEV_BSIZE
);
if (file
->i_offset
+count
> file
->i_ino
.di_size
)
count
= file
->i_ino
.di_size
- file
->i_offset
;
* While reading full blocks, do I/O into user buffer.
* Anything else uses getc().
off
= blkoff(fs
, file
->i_offset
);
lbn
= lblkno(fs
, file
->i_offset
);
size
= dblksize(fs
, &file
->i_ino
, lbn
);
if (off
== 0 && size
<= i
) {
file
->i_bn
= fsbtodb(fs
, bmap(file
, lbn
)) +
int c
, lbn
, off
, size
, diff
;
if (fdesc
>= 0 && fdesc
<= 2)
if (fdesc
< 0 || fdesc
>= SOPEN_MAX
||
((io
= &iob
[fdesc
])->i_flgs
&F_ALLOC
) == 0) {
if ((io
->i_flgs
& F_FILE
) != 0) {
diff
= io
->i_ino
.di_size
- io
->i_offset
;
lbn
= lblkno(fs
, io
->i_offset
);
io
->i_bn
= fsbtodb(fs
, bmap(io
, lbn
)) + io
->i_boff
;
off
= blkoff(fs
, io
->i_offset
);
size
= dblksize(fs
, &io
->i_ino
, lbn
);
io
->i_bn
= io
->i_offset
/ DEV_BSIZE
+ io
->i_boff
;
if ((io
->i_flgs
& F_FILE
) != 0) {
if (io
->i_offset
- off
+ size
>= io
->i_ino
.di_size
)