libsa: cstyle cleanup for open/close/read/write sources

This commit is contained in:
Toomas Soome 2018-06-14 08:58:10 +00:00
parent 19668eb2bf
commit f03b083204
4 changed files with 178 additions and 175 deletions

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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);
}
} }

View File

@ -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;