libsa: cstyle cleanup for open/close/read/write sources
This commit is contained in:
parent
19668eb2bf
commit
f03b083204
@ -32,30 +32,30 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)close.c 8.1 (Berkeley) 6/11/93
|
* @(#)close.c 8.1 (Berkeley) 6/11/93
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Copyright (c) 1989, 1990, 1991 Carnegie Mellon University
|
* Copyright (c) 1989, 1990, 1991 Carnegie Mellon University
|
||||||
* All Rights Reserved.
|
* All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Author: Alessandro Forin
|
* Author: Alessandro Forin
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify and distribute this software and its
|
* Permission to use, copy, modify and distribute this software and its
|
||||||
* documentation is hereby granted, provided that both the copyright
|
* documentation is hereby granted, provided that both the copyright
|
||||||
* notice and this permission notice appear in all copies of the
|
* notice and this permission notice appear in all copies of the
|
||||||
* software, derivative works or modified versions, and any portions
|
* software, derivative works or modified versions, and any portions
|
||||||
* thereof, and that both notices appear in supporting documentation.
|
* thereof, and that both notices appear in supporting documentation.
|
||||||
*
|
*
|
||||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
||||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||||
*
|
*
|
||||||
* Carnegie Mellon requests users of this software to return to
|
* Carnegie Mellon requests users of this software to return to
|
||||||
*
|
*
|
||||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||||
* School of Computer Science
|
* School of Computer Science
|
||||||
* Carnegie Mellon University
|
* Carnegie Mellon University
|
||||||
* Pittsburgh PA 15213-3890
|
* Pittsburgh PA 15213-3890
|
||||||
*
|
*
|
||||||
* any improvements or extensions that they make and grant Carnegie the
|
* any improvements or extensions that they make and grant Carnegie the
|
||||||
* rights to redistribute these changes.
|
* rights to redistribute these changes.
|
||||||
*/
|
*/
|
||||||
@ -68,31 +68,31 @@ __FBSDID("$FreeBSD$");
|
|||||||
int
|
int
|
||||||
close(int fd)
|
close(int fd)
|
||||||
{
|
{
|
||||||
struct open_file *f = &files[fd];
|
struct open_file *f = &files[fd];
|
||||||
int err1 = 0, err2 = 0;
|
int err1 = 0, err2 = 0;
|
||||||
|
|
||||||
if ((unsigned)fd >= SOPEN_MAX || f->f_flags == 0) {
|
if ((unsigned)fd >= SOPEN_MAX || f->f_flags == 0) {
|
||||||
errno = EBADF;
|
errno = EBADF;
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
if (f->f_rabuf != NULL) {
|
if (f->f_rabuf != NULL) {
|
||||||
free(f->f_rabuf);
|
free(f->f_rabuf);
|
||||||
f->f_rabuf = NULL;
|
f->f_rabuf = NULL;
|
||||||
}
|
}
|
||||||
if (!(f->f_flags & F_RAW) && f->f_ops)
|
if (!(f->f_flags & F_RAW) && f->f_ops)
|
||||||
err1 = (f->f_ops->fo_close)(f);
|
err1 = (f->f_ops->fo_close)(f);
|
||||||
if (!(f->f_flags & F_NODEV) && f->f_dev)
|
if (!(f->f_flags & F_NODEV) && f->f_dev)
|
||||||
err2 = (f->f_dev->dv_close)(f);
|
err2 = (f->f_dev->dv_close)(f);
|
||||||
if (f->f_devdata != NULL)
|
if (f->f_devdata != NULL)
|
||||||
devclose(f);
|
devclose(f);
|
||||||
f->f_flags = 0;
|
f->f_flags = 0;
|
||||||
if (err1) {
|
if (err1) {
|
||||||
errno = err1;
|
errno = err1;
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
if (err2) {
|
if (err2) {
|
||||||
errno = err2;
|
errno = err2;
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -32,30 +32,30 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)open.c 8.1 (Berkeley) 6/11/93
|
* @(#)open.c 8.1 (Berkeley) 6/11/93
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Copyright (c) 1989, 1990, 1991 Carnegie Mellon University
|
* Copyright (c) 1989, 1990, 1991 Carnegie Mellon University
|
||||||
* All Rights Reserved.
|
* All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Author: Alessandro Forin
|
* Author: Alessandro Forin
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify and distribute this software and its
|
* Permission to use, copy, modify and distribute this software and its
|
||||||
* documentation is hereby granted, provided that both the copyright
|
* documentation is hereby granted, provided that both the copyright
|
||||||
* notice and this permission notice appear in all copies of the
|
* notice and this permission notice appear in all copies of the
|
||||||
* software, derivative works or modified versions, and any portions
|
* software, derivative works or modified versions, and any portions
|
||||||
* thereof, and that both notices appear in supporting documentation.
|
* thereof, and that both notices appear in supporting documentation.
|
||||||
*
|
*
|
||||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
||||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||||
*
|
*
|
||||||
* Carnegie Mellon requests users of this software to return to
|
* Carnegie Mellon requests users of this software to return to
|
||||||
*
|
*
|
||||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||||
* School of Computer Science
|
* School of Computer Science
|
||||||
* Carnegie Mellon University
|
* Carnegie Mellon University
|
||||||
* Pittsburgh PA 15213-3890
|
* Pittsburgh PA 15213-3890
|
||||||
*
|
*
|
||||||
* any improvements or extensions that they make and grant Carnegie the
|
* any improvements or extensions that they make and grant Carnegie the
|
||||||
* rights to redistribute these changes.
|
* rights to redistribute these changes.
|
||||||
*/
|
*/
|
||||||
@ -70,89 +70,89 @@ struct fs_ops *exclusive_file_system;
|
|||||||
struct open_file files[SOPEN_MAX];
|
struct open_file files[SOPEN_MAX];
|
||||||
|
|
||||||
static int
|
static int
|
||||||
o_gethandle(void)
|
o_gethandle(void)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
for (fd = 0; fd < SOPEN_MAX; fd++)
|
for (fd = 0; fd < SOPEN_MAX; fd++)
|
||||||
if (files[fd].f_flags == 0)
|
if (files[fd].f_flags == 0)
|
||||||
return(fd);
|
return (fd);
|
||||||
return(-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
o_rainit(struct open_file *f)
|
o_rainit(struct open_file *f)
|
||||||
{
|
{
|
||||||
f->f_rabuf = malloc(SOPEN_RASIZE);
|
f->f_rabuf = malloc(SOPEN_RASIZE);
|
||||||
f->f_ralen = 0;
|
f->f_ralen = 0;
|
||||||
f->f_raoffset = 0;
|
f->f_raoffset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
open(const char *fname, int mode)
|
open(const char *fname, int mode)
|
||||||
{
|
{
|
||||||
struct fs_ops *fs;
|
struct fs_ops *fs;
|
||||||
struct open_file *f;
|
struct open_file *f;
|
||||||
int fd, i, error, besterror;
|
int fd, i, error, besterror;
|
||||||
const char *file;
|
const char *file;
|
||||||
|
|
||||||
if ((fd = o_gethandle()) == -1) {
|
if ((fd = o_gethandle()) == -1) {
|
||||||
errno = EMFILE;
|
errno = EMFILE;
|
||||||
return(-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
f = &files[fd];
|
f = &files[fd];
|
||||||
f->f_flags = mode + 1;
|
f->f_flags = mode + 1;
|
||||||
f->f_dev = (struct devsw *)0;
|
f->f_dev = (struct devsw *)0;
|
||||||
f->f_ops = (struct fs_ops *)0;
|
f->f_ops = (struct fs_ops *)0;
|
||||||
f->f_offset = 0;
|
f->f_offset = 0;
|
||||||
f->f_devdata = NULL;
|
f->f_devdata = NULL;
|
||||||
file = (char *)0;
|
file = (char *)0;
|
||||||
|
|
||||||
if (exclusive_file_system != NULL) {
|
if (exclusive_file_system != NULL) {
|
||||||
fs = exclusive_file_system;
|
fs = exclusive_file_system;
|
||||||
error = (fs->fo_open)(fname, f);
|
error = (fs->fo_open)(fname, f);
|
||||||
if (error == 0)
|
if (error == 0)
|
||||||
goto ok;
|
goto ok;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = devopen(f, fname, &file);
|
error = devopen(f, fname, &file);
|
||||||
if (error ||
|
if (error ||
|
||||||
(((f->f_flags & F_NODEV) == 0) && f->f_dev == (struct devsw *)0))
|
(((f->f_flags & F_NODEV) == 0) && f->f_dev == (struct devsw *)0))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/* see if we opened a raw device; otherwise, 'file' is the file name. */
|
/* see if we opened a raw device; otherwise, 'file' is the file name. */
|
||||||
if (file == (char *)0 || *file == '\0') {
|
if (file == (char *)0 || *file == '\0') {
|
||||||
f->f_flags |= F_RAW;
|
f->f_flags |= F_RAW;
|
||||||
f->f_rabuf = NULL;
|
f->f_rabuf = NULL;
|
||||||
|
return (fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* pass file name to the different filesystem open routines */
|
||||||
|
besterror = ENOENT;
|
||||||
|
for (i = 0; file_system[i] != NULL; i++) {
|
||||||
|
fs = file_system[i];
|
||||||
|
error = (fs->fo_open)(file, f);
|
||||||
|
if (error == 0)
|
||||||
|
goto ok;
|
||||||
|
if (error != EINVAL)
|
||||||
|
besterror = error;
|
||||||
|
}
|
||||||
|
error = besterror;
|
||||||
|
|
||||||
|
if ((f->f_flags & F_NODEV) == 0 && f->f_dev != NULL)
|
||||||
|
f->f_dev->dv_close(f);
|
||||||
|
if (error)
|
||||||
|
devclose(f);
|
||||||
|
|
||||||
|
err:
|
||||||
|
f->f_flags = 0;
|
||||||
|
errno = error;
|
||||||
|
return (-1);
|
||||||
|
|
||||||
|
ok:
|
||||||
|
f->f_ops = fs;
|
||||||
|
o_rainit(f);
|
||||||
return (fd);
|
return (fd);
|
||||||
}
|
|
||||||
|
|
||||||
/* pass file name to the different filesystem open routines */
|
|
||||||
besterror = ENOENT;
|
|
||||||
for (i = 0; file_system[i] != NULL; i++) {
|
|
||||||
fs = file_system[i];
|
|
||||||
error = (fs->fo_open)(file, f);
|
|
||||||
if (error == 0)
|
|
||||||
goto ok;
|
|
||||||
if (error != EINVAL)
|
|
||||||
besterror = error;
|
|
||||||
}
|
|
||||||
error = besterror;
|
|
||||||
|
|
||||||
if ((f->f_flags & F_NODEV) == 0 && f->f_dev != NULL)
|
|
||||||
f->f_dev->dv_close(f);
|
|
||||||
if (error)
|
|
||||||
devclose(f);
|
|
||||||
|
|
||||||
err:
|
|
||||||
f->f_flags = 0;
|
|
||||||
errno = error;
|
|
||||||
return (-1);
|
|
||||||
|
|
||||||
ok:
|
|
||||||
f->f_ops = fs;
|
|
||||||
o_rainit(f);
|
|
||||||
return (fd);
|
|
||||||
}
|
}
|
||||||
|
@ -32,30 +32,30 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)read.c 8.1 (Berkeley) 6/11/93
|
* @(#)read.c 8.1 (Berkeley) 6/11/93
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Copyright (c) 1989, 1990, 1991 Carnegie Mellon University
|
* Copyright (c) 1989, 1990, 1991 Carnegie Mellon University
|
||||||
* All Rights Reserved.
|
* All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Author: Alessandro Forin
|
* Author: Alessandro Forin
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify and distribute this software and its
|
* Permission to use, copy, modify and distribute this software and its
|
||||||
* documentation is hereby granted, provided that both the copyright
|
* documentation is hereby granted, provided that both the copyright
|
||||||
* notice and this permission notice appear in all copies of the
|
* notice and this permission notice appear in all copies of the
|
||||||
* software, derivative works or modified versions, and any portions
|
* software, derivative works or modified versions, and any portions
|
||||||
* thereof, and that both notices appear in supporting documentation.
|
* thereof, and that both notices appear in supporting documentation.
|
||||||
*
|
*
|
||||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
||||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||||
*
|
*
|
||||||
* Carnegie Mellon requests users of this software to return to
|
* Carnegie Mellon requests users of this software to return to
|
||||||
*
|
*
|
||||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||||
* School of Computer Science
|
* School of Computer Science
|
||||||
* Carnegie Mellon University
|
* Carnegie Mellon University
|
||||||
* Pittsburgh PA 15213-3890
|
* Pittsburgh PA 15213-3890
|
||||||
*
|
*
|
||||||
* any improvements or extensions that they make and grant Carnegie the
|
* any improvements or extensions that they make and grant Carnegie the
|
||||||
* rights to redistribute these changes.
|
* rights to redistribute these changes.
|
||||||
*/
|
*/
|
||||||
@ -69,59 +69,65 @@ __FBSDID("$FreeBSD$");
|
|||||||
ssize_t
|
ssize_t
|
||||||
read(int fd, void *dest, size_t bcount)
|
read(int fd, void *dest, size_t bcount)
|
||||||
{
|
{
|
||||||
struct open_file *f = &files[fd];
|
struct open_file *f = &files[fd];
|
||||||
size_t resid;
|
size_t resid;
|
||||||
|
|
||||||
if ((unsigned)fd >= SOPEN_MAX || !(f->f_flags & F_READ)) {
|
if ((unsigned)fd >= SOPEN_MAX || !(f->f_flags & F_READ)) {
|
||||||
errno = EBADF;
|
errno = EBADF;
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
if (f->f_flags & F_RAW) {
|
if (f->f_flags & F_RAW) {
|
||||||
twiddle(4);
|
twiddle(4);
|
||||||
errno = (f->f_dev->dv_strategy)(f->f_devdata, F_READ,
|
errno = (f->f_dev->dv_strategy)(f->f_devdata, F_READ,
|
||||||
btodb(f->f_offset), bcount, dest, &resid);
|
btodb(f->f_offset), bcount, dest, &resid);
|
||||||
if (errno)
|
if (errno)
|
||||||
return (-1);
|
return (-1);
|
||||||
f->f_offset += resid;
|
f->f_offset += resid;
|
||||||
return (resid);
|
return (resid);
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Optimise reads from regular files using a readahead buffer.
|
|
||||||
* If the request can't be satisfied from the current buffer contents,
|
|
||||||
* check to see if it should be bypassed, or refill the buffer and complete
|
|
||||||
* the request.
|
|
||||||
*/
|
|
||||||
resid = bcount;
|
|
||||||
for (;;) {
|
|
||||||
size_t ccount, cresid;
|
|
||||||
/* how much can we supply? */
|
|
||||||
ccount = imin(f->f_ralen, resid);
|
|
||||||
if (ccount > 0) {
|
|
||||||
bcopy(f->f_rabuf + f->f_raoffset, dest, ccount);
|
|
||||||
f->f_raoffset += ccount;
|
|
||||||
f->f_ralen -= ccount;
|
|
||||||
resid -= ccount;
|
|
||||||
if (resid == 0)
|
|
||||||
return(bcount);
|
|
||||||
dest = (char *)dest + ccount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* will filling the readahead buffer again not help? */
|
/*
|
||||||
if (resid >= SOPEN_RASIZE) {
|
* Optimise reads from regular files using a readahead buffer.
|
||||||
/* bypass the rest of the request and leave the buffer empty */
|
* If the request can't be satisfied from the current buffer contents,
|
||||||
if ((errno = (f->f_ops->fo_read)(f, dest, resid, &cresid)))
|
* check to see if it should be bypassed, or refill the buffer and
|
||||||
return (-1);
|
* complete the request.
|
||||||
return(bcount - cresid);
|
*/
|
||||||
}
|
resid = bcount;
|
||||||
|
for (;;) {
|
||||||
|
size_t ccount, cresid;
|
||||||
|
/* how much can we supply? */
|
||||||
|
ccount = imin(f->f_ralen, resid);
|
||||||
|
if (ccount > 0) {
|
||||||
|
bcopy(f->f_rabuf + f->f_raoffset, dest, ccount);
|
||||||
|
f->f_raoffset += ccount;
|
||||||
|
f->f_ralen -= ccount;
|
||||||
|
resid -= ccount;
|
||||||
|
if (resid == 0)
|
||||||
|
return (bcount);
|
||||||
|
dest = (char *)dest + ccount;
|
||||||
|
}
|
||||||
|
|
||||||
/* fetch more data */
|
/* will filling the readahead buffer again not help? */
|
||||||
if ((errno = (f->f_ops->fo_read)(f, f->f_rabuf, SOPEN_RASIZE, &cresid)))
|
if (resid >= SOPEN_RASIZE) {
|
||||||
return (-1);
|
/*
|
||||||
f->f_raoffset = 0;
|
* bypass the rest of the request and leave the
|
||||||
f->f_ralen = SOPEN_RASIZE - cresid;
|
* buffer empty
|
||||||
/* no more data, return what we had */
|
*/
|
||||||
if (f->f_ralen == 0)
|
errno = (f->f_ops->fo_read)(f, dest, resid, &cresid);
|
||||||
return(bcount - resid);
|
if (errno != 0)
|
||||||
}
|
return (-1);
|
||||||
|
return (bcount - cresid);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fetch more data */
|
||||||
|
errno = (f->f_ops->fo_read)(f, f->f_rabuf, SOPEN_RASIZE,
|
||||||
|
&cresid);
|
||||||
|
if (errno != 0)
|
||||||
|
return (-1);
|
||||||
|
f->f_raoffset = 0;
|
||||||
|
f->f_ralen = SOPEN_RASIZE - cresid;
|
||||||
|
/* no more data, return what we had */
|
||||||
|
if (f->f_ralen == 0)
|
||||||
|
return (bcount - resid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,30 +32,30 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)write.c 8.1 (Berkeley) 6/11/93
|
* @(#)write.c 8.1 (Berkeley) 6/11/93
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Copyright (c) 1989, 1990, 1991 Carnegie Mellon University
|
* Copyright (c) 1989, 1990, 1991 Carnegie Mellon University
|
||||||
* All Rights Reserved.
|
* All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Author: Alessandro Forin
|
* Author: Alessandro Forin
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify and distribute this software and its
|
* Permission to use, copy, modify and distribute this software and its
|
||||||
* documentation is hereby granted, provided that both the copyright
|
* documentation is hereby granted, provided that both the copyright
|
||||||
* notice and this permission notice appear in all copies of the
|
* notice and this permission notice appear in all copies of the
|
||||||
* software, derivative works or modified versions, and any portions
|
* software, derivative works or modified versions, and any portions
|
||||||
* thereof, and that both notices appear in supporting documentation.
|
* thereof, and that both notices appear in supporting documentation.
|
||||||
*
|
*
|
||||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
||||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||||
*
|
*
|
||||||
* Carnegie Mellon requests users of this software to return to
|
* Carnegie Mellon requests users of this software to return to
|
||||||
*
|
*
|
||||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||||
* School of Computer Science
|
* School of Computer Science
|
||||||
* Carnegie Mellon University
|
* Carnegie Mellon University
|
||||||
* Pittsburgh PA 15213-3890
|
* Pittsburgh PA 15213-3890
|
||||||
*
|
*
|
||||||
* any improvements or extensions that they make and grant Carnegie the
|
* any improvements or extensions that they make and grant Carnegie the
|
||||||
* rights to redistribute these changes.
|
* rights to redistribute these changes.
|
||||||
*/
|
*/
|
||||||
@ -67,10 +67,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include "stand.h"
|
#include "stand.h"
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
write(fd, dest, bcount)
|
write(int fd, const void *dest, size_t bcount)
|
||||||
int fd;
|
|
||||||
const void *dest;
|
|
||||||
size_t bcount;
|
|
||||||
{
|
{
|
||||||
struct open_file *f = &files[fd];
|
struct open_file *f = &files[fd];
|
||||||
size_t resid;
|
size_t resid;
|
||||||
@ -82,8 +79,8 @@ write(fd, dest, bcount)
|
|||||||
if (f->f_flags & F_RAW) {
|
if (f->f_flags & F_RAW) {
|
||||||
twiddle(4);
|
twiddle(4);
|
||||||
errno = (f->f_dev->dv_strategy)(f->f_devdata, F_WRITE,
|
errno = (f->f_dev->dv_strategy)(f->f_devdata, F_WRITE,
|
||||||
btodb(f->f_offset), bcount, __DECONST(void *, dest),
|
btodb(f->f_offset), bcount, __DECONST(void *, dest),
|
||||||
&resid);
|
&resid);
|
||||||
if (errno)
|
if (errno)
|
||||||
return (-1);
|
return (-1);
|
||||||
f->f_offset += resid;
|
f->f_offset += resid;
|
||||||
|
Loading…
Reference in New Issue
Block a user