summaryrefslogtreecommitdiff
path: root/usr/src/boot/lib/libstand/open.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/boot/lib/libstand/open.c')
-rw-r--r--usr/src/boot/lib/libstand/open.c164
1 files changed, 81 insertions, 83 deletions
diff --git a/usr/src/boot/lib/libstand/open.c b/usr/src/boot/lib/libstand/open.c
index 0d90433800..5fd6c2a5fb 100644
--- a/usr/src/boot/lib/libstand/open.c
+++ b/usr/src/boot/lib/libstand/open.c
@@ -1,6 +1,6 @@
/* $NetBSD: open.c,v 1.16 1997/01/28 09:41:03 pk Exp $ */
-/*-
+/*
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
*
@@ -15,7 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -32,36 +32,35 @@
* SUCH DAMAGE.
*
* @(#)open.c 8.1 (Berkeley) 6/11/93
- *
+ *
*
* Copyright (c) 1989, 1990, 1991 Carnegie Mellon University
* All Rights Reserved.
*
* Author: Alessandro Forin
- *
+ *
* Permission to use, copy, modify and distribute this software and its
* documentation is hereby granted, provided that both the copyright
* notice and this permission notice appear in all copies of the
* software, derivative works or modified versions, and any portions
* thereof, and that both notices appear in supporting documentation.
- *
+ *
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
+ *
* Carnegie Mellon requests users of this software to return to
- *
+ *
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
* School of Computer Science
* Carnegie Mellon University
* Pittsburgh PA 15213-3890
- *
+ *
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
#include "stand.h"
@@ -70,90 +69,89 @@ struct fs_ops *exclusive_file_system;
struct open_file files[SOPEN_MAX];
static int
-o_gethandle(void)
+o_gethandle(void)
{
- int fd;
-
- for (fd = 0; fd < SOPEN_MAX; fd++)
- if (files[fd].f_flags == 0)
- return(fd);
- return(-1);
+ int fd;
+
+ for (fd = 0; fd < SOPEN_MAX; fd++)
+ if (files[fd].f_flags == 0)
+ return (fd);
+ return (-1);
}
static void
o_rainit(struct open_file *f)
{
- f->f_rabuf = malloc(SOPEN_RASIZE);
- f->f_ralen = 0;
- f->f_raoffset = 0;
+ f->f_rabuf = malloc(SOPEN_RASIZE);
+ f->f_ralen = 0;
+ f->f_raoffset = 0;
}
int
open(const char *fname, int mode)
{
- struct fs_ops *fs;
- struct open_file *f;
- int fd, i, error, besterror;
- const char *file;
-
- if ((fd = o_gethandle()) == -1) {
- errno = EMFILE;
- return(-1);
- }
-
- f = &files[fd];
- f->f_flags = mode + 1;
- f->f_dev = (struct devsw *)0;
- f->f_ops = (struct fs_ops *)0;
- f->f_offset = 0;
- f->f_devdata = NULL;
- file = (char *)0;
-
- if (exclusive_file_system != NULL) {
- fs = exclusive_file_system;
- error = (fs->fo_open)(fname, f);
- if (error == 0)
- goto ok;
- goto fail;
- }
-
- error = devopen(f, fname, &file);
- if (error ||
- (((f->f_flags & F_NODEV) == 0) && f->f_dev == (struct devsw *)0))
- goto err;
-
- /* see if we opened a raw device; otherwise, 'file' is the file name. */
- if (file == (char *)0 || *file == '\0') {
- f->f_flags |= F_RAW;
- f->f_rabuf = NULL;
+ struct fs_ops *fs;
+ struct open_file *f;
+ int fd, i, error, besterror;
+ const char *file;
+
+ if ((fd = o_gethandle()) == -1) {
+ errno = EMFILE;
+ return (-1);
+ }
+
+ f = &files[fd];
+ f->f_flags = mode + 1;
+ f->f_dev = NULL;
+ f->f_ops = NULL;
+ f->f_offset = 0;
+ f->f_devdata = NULL;
+ file = NULL;
+
+ if (exclusive_file_system != NULL) {
+ fs = exclusive_file_system;
+ error = (fs->fo_open)(fname, f);
+ if (error == 0)
+ goto ok;
+ goto err;
+ }
+
+ error = devopen(f, fname, &file);
+ if (error ||
+ (((f->f_flags & F_NODEV) == 0) && f->f_dev == NULL))
+ goto err;
+
+ /* see if we opened a raw device; otherwise, 'file' is the file name. */
+ if (file == NULL || *file == '\0') {
+ f->f_flags |= F_RAW;
+ 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);
- }
-
- /* 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;
-
- fail:
- 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);
}