Implement sys_open() with sys_openat() (XCC)
[akaros.git] / kern / include / ns.h
index 6561bcb..8e7a29e 100644 (file)
@@ -416,7 +416,6 @@ struct cname {
 };
 
 struct dev {
-       int dc;
        char *name;
 
        void (*reset) (void);
@@ -669,7 +668,7 @@ void cursordisable(void);
 int cursoron(int);
 void cursoroff(int);
 void cwrite(struct chan *, uint8_t * unused_uint8_p_t, int unused_int, int64_t);
-struct chan *devattach(int unused_int, char *unused_char_p_t);
+struct chan *devattach(const char *name, char *spec);
 struct block *devbread(struct chan *, long, uint32_t);
 long devbwrite(struct chan *, struct block *, uint32_t);
 struct chan *devclone(struct chan *);
@@ -679,7 +678,7 @@ void devdir(struct chan *, struct qid, char *, int64_t, char *, long,
 long devdirread(struct chan *, char *, long, struct dirtab *, int, Devgen *);
 Devgen devgen;
 void devinit(void);
-int devno(int unused_int, int);
+int devno(const char *name, int user);
 void devpower(int);
 struct dev *devbyname(char *unused_char_p_t);
 struct chan *devopen(struct chan *, int unused_int,
@@ -756,6 +755,8 @@ uint64_t ms2fastticks(uint32_t);
 void mul64fract(uint64_t *, uint64_t, uint64_t);
 void muxclose(struct mnt *);
 struct chan *namec(char *unused_char_p_t, int unused_int, int, uint32_t);
+struct chan *namec_from(struct chan *c, char *name, int amode, int omode,
+                        uint32_t perm);
 struct chan *newchan(void);
 struct egrp *newegrp(void);
 struct mount *newmount(struct mhead *, struct chan *, int unused_int,
@@ -867,7 +868,7 @@ void userinit(void);
 uint32_t userpc(void);
 void validname(char *, int);
 void validwstatname(char *);
-int walk(struct chan **, char **unused_char_pp_t, int unused_int, int, int *);
+int walk(struct chan **, char **unused_char_pp_t, int unused_int, bool, int *);
 void *xalloc(uint32_t);
 void *xallocz(uint32_t, int);
 void xfree(void *);
@@ -887,18 +888,13 @@ uint32_t nhgetl(void *);
 uint16_t nhgets(void *);
 
 /* error messages, from inferno emu error.h */
-extern char Enoerror[];                        /* no error */
 extern char Emount[];                  /* inconsistent mount */
 extern char Eunmount[];                        /* not mounted */
 extern char Eunion[];                  /* not in union */
 extern char Emountrpc[];               /* mount rpc error */
-extern char Eshutdown[];               /* mounted device shut down */
-extern char Eowner[];                  /* not owner */
-extern char Eunknown[];                        /* unknown user or group id */
 extern char Enocreate[];               /* mounted directory forbids creation */
 extern char Enonexist[];               /* file does not exist */
 extern char Eexist[];                  /* file already exists */
-extern char Ebadsharp[];               /* unknown device in # filename */
 extern char Enotdir[];                 /* not a directory */
 extern char Eisdir[];                  /* file is a directory */
 extern char Ebadchar[];                        /* bad character in file name */
@@ -910,46 +906,28 @@ extern char Einuse[];                     /* device or object already in use */
 extern char Eio[];                             /* i/o error */
 extern char Etoobig[];                 /* read or write too large */
 extern char Etoosmall[];               /* read or write too small */
-extern char Enetaddr[];                        /* bad network address */
-extern char Emsgsize[];                        /* message is too big for protocol */
-extern char Enetbusy[];                        /* network device is busy or allocated */
-extern char Enoproto[];                        /* network protocol not supported */
-extern char Enoport[];                 /* network port not available */
 extern char Enoifc[];                  /* bad interface or no free interface slots */
-extern char Enolisten[];               /* not announced */
 extern char Ehungup[];                 /* i/o on hungup channel */
 extern char Ebadctl[];                 /* bad process or channel control request */
 extern char Enodev[];                  /* no free devices */
-extern char Enoenv[];                  /* no free environment resources */
-extern char Ethread[];                 /* thread exited */
 extern char Enochild[];                        /* no living children */
-extern char Eioload[];                 /* i/o error in demand load */
 extern char Enovmem[];                 /* out of memory: virtual memory */
-extern char Ebadld[];                  /* illegal line discipline */
-extern char Ebadfd[];                  /* fd out of range or not open */
 extern char Eisstream[];               /* seek on a stream */
-extern char Ebadexec[];                        /* exec header invalid */
 extern char Etimedout[];               /* connection timed out */
 extern char Econrefused[];             /* connection refused */
 extern char Econinuse[];               /* connection in use */
-extern char Enetunreach[];             /* network unreachable */
 extern char Eintr[];                   /* interrupted */
 extern char Enomem[];                  /* out of memory: kernel */
-extern char Esfnotcached[];            /* subfont not cached */
-extern char Esoverlap[];               /* segments overlap */
-extern char Emouseset[];               /* mouse type already set */
 extern char Eshort[];                  /* i/o count too small */
 extern char Enobitstore[];             /* out of screen memory */
 extern char Egreg[];                   /* jim'll fix it */
 extern char Ebadspec[];                        /* bad attach specifier */
-extern char Estopped[];                        /* thread must be stopped */
 extern char Enoattach[];               /* mount/attach disallowed */
 extern char Eshortstat[];              /* stat buffer too small */
 extern char Enegoff[];                 /* negative i/o offset */
 extern char Ebadstat[];                        /* malformed stat buffer */
 extern char Ecmdargs[];                        /* wrong #args in control message */
 extern char Enofd[];                   /* no free file descriptors */
-extern char Enoctl[];                  /* unknown control request */
 extern char Eprocdied[];               /* process died */
 
 char *get_cur_genbuf(void);
@@ -993,7 +971,8 @@ long bindmount(struct chan *c, char *old, int flag, char *spec);
 int sysbind(char *new, char *old, int flags);
 int sysmount(int fd, int afd, char *old, int flags, char *spec);
 int sysunmount(char *old, char *new);
-int sysopen(char *path, int mode);
+int sysopenat(int dirfd, char *path, int vfs_flags);
+int sysopen(char *path, int vfs_flags);
 long unionread(struct chan *c, void *va, long n);
 void read_exactly_n(struct chan *c, void *vp, long n);
 long sysread(int fd, void *va, long n);