home *** CD-ROM | disk | FTP | other *** search
- static char sccs_id[] = "@(#) open.c 1.4 " __DATE__ " HJR";
-
- /* open.c (c) Copyright 1990 H.Rogers */
-
- #include <stdarg.h>
- #include <errno.h>
-
- #include "fcntl.h"
-
- #include "sys/unix.h"
- #include "sys/dev.h"
-
- struct sfile __sfile[] =
- {
- {"tty", makedev (DEV_TTY, 0)},
- {"console", makedev (DEV_TTY, 0)},
- {"rs423", makedev (DEV_TTY, 0)},
- {"null", makedev (DEV_NULL, 0)},
- {0, makedev (DEV_RISCOS, 0)}}; /* table terminator */
-
- char *
- ttyname (void)
- {
- return ("/dev/tty");
- }
-
- int
- open (register char *file, int oflag,...)
- {
- register struct file *f;
- va_list ap;
- register int mode;
- int fd;
- dev_t dev;
-
- /* __uname() is called by __fsopen() */
-
- if (oflag & O_CREAT)
- {
- va_start (ap, oflag);
- mode = va_arg (ap, int);
- va_end (ap);
- }
- else
- mode = 0777;
-
- if ((fd = __fdalloc ()) < 0)
- return (-1);
-
- f = __u->file + fd;
- f->oflag = oflag;
-
- if (file[0] == '/' && file[1] == 'd' && file[2] == 'e' &&
- file[3] == 'v' && file[4] == '/')
- {
- register struct sfile *s = __sfile;
- register char *s1, *s2;
-
- while (s1 = s->name)
- {
- s2 = file + 5;
-
- while (*s1 && *s2 && *s1 == *s2)
- s1++, s2++;
- if (*s1 == *s2)
- break;
- s++;
- }
- dev = s->dev;
- }
- else
- dev = makedev (DEV_RISCOS, 0);
-
- {
- register int i;
-
- if ((i = (*(__dev[major (dev)].open)) (file, mode, f)) < 0)
- return (-1);
- f->dev = makedev (major (dev), i);
- }
-
- f->dup = f;
- f->pid = __u->pid;
-
- return (fd);
- }
-