From: Thomas Veerman Date: Thu, 28 Feb 2013 14:44:23 +0000 (+0000) Subject: Spring cleanup X-Git-Tag: v3.3.0~1111 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/zlib_tech.html?a=commitdiff_plain;h=refs%2Fchanges%2F78%2F378%2F2;p=minix.git Spring cleanup Remove old versions of system calls and system calls that don't have a libc api interface anymore (dup, dup2, creat). VFS still contains support for old system call numbers for the new stat system calls (i.e., 65, 66, 67) to keep supporting old binaries built for MINIX 3.2.1 (prior to the release). Change-Id: I721779b58a50c7eeae20669de24658d55d69b25b --- diff --git a/include/minix/callnr.h b/include/minix/callnr.h index 7df56e02e..aedf3d3df 100644 --- a/include/minix/callnr.h +++ b/include/minix/callnr.h @@ -8,7 +8,6 @@ #define OPEN 5 #define CLOSE 6 #define WAIT 7 -#define CREAT 8 #define LINK 9 #define UNLINK 10 #define WAITPID 11 @@ -18,7 +17,6 @@ #define CHMOD 15 #define CHOWN 16 #define BRK 17 -#define PREV_STAT 18 #define LSEEK 19 #define MINIX_GETPID 20 #define MOUNT 21 @@ -28,7 +26,6 @@ #define STIME 25 #define PTRACE 26 #define ALARM 27 -#define PREV_FSTAT 28 #define PAUSE 29 #define UTIME 30 #define GETEPINFO 31 @@ -40,7 +37,6 @@ #define RENAME 38 #define MKDIR 39 #define RMDIR 40 -#define DUP 41 #define PIPE 42 #define TIMES 43 #define SYMLINK 45 @@ -48,7 +44,6 @@ #define GETGID 47 #define SIGNAL 48 #define RDLNK 49 -#define PREV_LSTAT 50 #define STAT 51 #define FSTAT 52 #define LSTAT 53 @@ -62,8 +57,6 @@ #define SETSID 62 #define GETPGRP 63 #define ITIMER 64 -#define GETGROUPS_O 65 -#define SETGROUPS_O 66 #define GETMCONTEXT 67 #define SETMCONTEXT 68 diff --git a/include/minix/vfsif.h b/include/minix/vfsif.h index 60446eb42..00d703074 100644 --- a/include/minix/vfsif.h +++ b/include/minix/vfsif.h @@ -81,16 +81,6 @@ typedef struct { gid_t vu_sgroups[NGROUPS_MAX]; } vfs_ucred_t; -#define NGROUPS_MAX_OLD 8 -/* User credential structure before increasing - * uid_t and gid_t u8_t */ -typedef struct { - short vu_uid; - char vu_gid; - int vu_ngroups; - char vu_sgroups[NGROUPS_MAX_OLD]; -} vfs_ucred_old_t; - /* Request numbers */ #define REQ_GETNODE (VFS_BASE + 1) /* Should be removed */ #define REQ_PUTNODE (VFS_BASE + 2) diff --git a/include/sys/ioc_net.h b/include/sys/ioc_net.h index cea3821d1..12f4188a2 100644 --- a/include/sys/ioc_net.h +++ b/include/sys/ioc_net.h @@ -77,7 +77,6 @@ struct msg_control #define NWIOSUDSCONN _IOW ('n', 74, struct sockaddr_un) /* connect() */ #define NWIOSUDSSHUT _IOW ('n', 75, int) /* shutdown() */ #define NWIOSUDSPAIR _IOW ('n', 76, dev_t) /* socketpair() */ -#define NWIOSUDSPAIROLD _IOW ('n', 76, short) /* socketpair() */ #define NWIOSUDSACCEPT _IOW ('n', 77, struct sockaddr_un) /* accept() */ #define NWIOSUDSCTRL _IOW ('n', 78, struct msg_control) /* sendmsg() */ #define NWIOGUDSCTRL _IORW('n', 79, struct msg_control) /* recvmsg() */ @@ -88,7 +87,6 @@ struct msg_control /* setsockopt/setsockopt for unix domain sockets */ #define NWIOGUDSSOTYPE _IOR('n', 90, int) /* SO_TYPE */ #define NWIOGUDSPEERCRED _IOR('n', 91, struct ucred) /* SO_PEERCRED */ -#define NWIOGUDSPEERCREDOLD _IOR('n', 91, struct ucred_old) /* SO_PEERCRED */ #define NWIOGUDSSNDBUF _IOR('n', 92, size_t) /* SO_SNDBUF */ #define NWIOSUDSSNDBUF _IOW('n', 93, size_t) /* SO_SNDBUF */ #define NWIOGUDSRCVBUF _IOR('n', 94, size_t) /* SO_RCVBUF */ diff --git a/lib/libc/sys-minix/stat.c b/lib/libc/sys-minix/stat.c index 983eb2eb5..e5c40707a 100644 --- a/lib/libc/sys-minix/stat.c +++ b/lib/libc/sys-minix/stat.c @@ -5,31 +5,6 @@ #include #include -/* XXX until that st_Xtime macroses used, we have to undefine them, - * because of minix_prev_stat - */ -#undef st_atime -#undef st_ctime -#undef st_mtime - -static void prev_stat2new_stat(struct stat *new, struct minix_prev_stat *prev) -{ - /* Copy field by field because of st_gid type mismath and - * difference in order after atime. - */ - new->st_dev = prev->st_dev; - new->st_ino = prev->st_ino; - new->st_mode = prev->st_mode; - new->st_nlink = prev->st_nlink; - new->st_uid = prev->st_uid; - new->st_gid = prev->st_gid; - new->st_rdev = prev->st_rdev; - new->st_size = prev->st_size; - new->st_atimespec.tv_sec = prev->st_atime; - new->st_mtimespec.tv_sec = prev->st_mtime; - new->st_ctimespec.tv_sec = prev->st_ctime; -} - int _stat(const char *name, struct stat *buffer); int _lstat(const char *name, struct stat *buffer); int _fstat(int fd, struct stat *buffer); @@ -47,32 +22,12 @@ __weak_alias(fstat, __fstat50); int stat(const char *name, struct stat *buffer) { message m; - int r; - struct minix_prev_stat old_sb; m.m1_i1 = strlen(name) + 1; m.m1_p1 = (char *) __UNCONST(name); m.m1_p2 = (char *) buffer; - if((r = _syscall(VFS_PROC_NR, STAT, &m)) >= 0 || errno != ENOSYS) - return r; - - errno = 0; - - /* ENOSYS: new binary and old VFS, fallback to PREV_STAT. - * User has struct stat (buffer), VFS still fills minix_prev_stat. - */ - m.m1_i1 = strlen(name) + 1; - m.m1_p1 = (char *) __UNCONST(name); - m.m1_p2 = (char *) &old_sb; - - if((r = _syscall(VFS_PROC_NR, PREV_STAT, &m)) < 0) - return r; - - memset(buffer, 0, sizeof(struct stat)); - prev_stat2new_stat(buffer, &old_sb); - - return r; + return _syscall(VFS_PROC_NR, STAT, &m); } int _fstat(int fd, struct stat *buffer) { return fstat(fd, buffer); } @@ -80,30 +35,11 @@ int _fstat(int fd, struct stat *buffer) { return fstat(fd, buffer); } int fstat(int fd, struct stat *buffer) { message m; - int r; - struct minix_prev_stat old_sb; m.m1_i1 = fd; m.m1_p1 = (char *) buffer; - if((r = _syscall(VFS_PROC_NR, FSTAT, &m)) >= 0 || errno != ENOSYS) - return r; - - errno = 0; - - /* ENOSYS: new binary and old VFS, fallback to PREV_STAT. - * User has struct stat (buffer), VFS still fills minix_prev_stat. - */ - m.m1_i1 = fd; - m.m1_p1 = (char *) &old_sb; - - if((r = _syscall(VFS_PROC_NR, PREV_FSTAT, &m)) < 0) - return r; - - memset(buffer, 0, sizeof(struct stat)); - prev_stat2new_stat(buffer, &old_sb); - - return r; + return _syscall(VFS_PROC_NR, FSTAT, &m); } int _lstat(const char *name, struct stat *buffer) { return lstat(name, buffer); } @@ -111,30 +47,10 @@ int _lstat(const char *name, struct stat *buffer) { return lstat(name, buffer); int lstat(const char *name, struct stat *buffer) { message m; - int r; - struct minix_prev_stat old_sb; m.m1_i1 = strlen(name) + 1; m.m1_p1 = (char *) __UNCONST(name); m.m1_p2 = (char *) buffer; - if((r = _syscall(VFS_PROC_NR, LSTAT, &m)) >= 0 || errno != ENOSYS) - return r; - - errno = 0; - - /* ENOSYS: new binary and old VFS, fallback to PREV_STAT. - * User has struct stat (buffer), VFS still fills minix_prev_stat. - */ - m.m1_i1 = strlen(name) + 1; - m.m1_p1 = (char *) __UNCONST(name); - m.m1_p2 = (char *) &old_sb; - - if((r = _syscall(VFS_PROC_NR, PREV_LSTAT, &m)) < 0) - return r; - - memset(buffer, 0, sizeof(struct stat)); - prev_stat2new_stat(buffer, &old_sb); - - return r; + return _syscall(VFS_PROC_NR, LSTAT, &m); } diff --git a/lib/libminixfs/fetch_credentials.c b/lib/libminixfs/fetch_credentials.c index 3c5a62d42..34fb6fd35 100644 --- a/lib/libminixfs/fetch_credentials.c +++ b/lib/libminixfs/fetch_credentials.c @@ -10,44 +10,22 @@ int fs_lookup_credentials(vfs_ucred_t *credentials, uid_t *caller_uid, gid_t *caller_gid, cp_grant_id_t grant2, size_t cred_size) { - vfs_ucred_old_t old_cred; int r; memset(credentials, 0, sizeof(*credentials)); - if(cred_size == sizeof(*credentials)) { - r = sys_safecopyfrom(VFS_PROC_NR, grant2, (vir_bytes) 0, - (vir_bytes) credentials, cred_size); - if (r != OK) { - printf("FS: cred copy (regular) failed.\n"); - return(r); - } - } else if(cred_size == sizeof(old_cred)) { - int g; - r = sys_safecopyfrom(VFS_PROC_NR, grant2, (vir_bytes) 0, - (vir_bytes) &old_cred, sizeof(old_cred)); - if (r != OK) { - printf("FS: cred copy (fallback) failed.\n"); - return(r); - } - credentials->vu_ngroups = old_cred.vu_ngroups; - credentials->vu_uid = old_cred.vu_uid; - credentials->vu_gid = old_cred.vu_gid; - for(g = 0; g < NGROUPS_MAX_OLD; g++) { - assert(g < NGROUPS_MAX); - credentials->vu_sgroups[g] = old_cred.vu_sgroups[g]; - } - } else { - static int w = 0; - if(!w) { printf("FS: cred size incompatible with VFS.\n"); w = 1; } - return(EINVAL); /* Wrong size. */ + r = sys_safecopyfrom(VFS_PROC_NR, grant2, (vir_bytes) 0, + (vir_bytes) credentials, cred_size); + if (r != OK) { + printf("FS: cred copy failed\n"); + return(r); } - assert(credentials->vu_ngroups <= NGROUPS_MAX); + assert(credentials->vu_ngroups <= NGROUPS_MAX); - *caller_uid = credentials->vu_uid; - *caller_gid = credentials->vu_gid; + *caller_uid = credentials->vu_uid; + *caller_gid = credentials->vu_gid; - return OK; + return OK; } diff --git a/servers/pfs/dev_uds.c b/servers/pfs/dev_uds.c index d5e9a2127..c9dee6214 100644 --- a/servers/pfs/dev_uds.c +++ b/servers/pfs/dev_uds.c @@ -858,13 +858,6 @@ int uds_ioctl(message *dev_m_in, message *dev_m_out) break; - case NWIOSUDSPAIROLD: - - /* connect two sockets -- socketpair() */ - rc = do_socketpair_old(dev_m_in, dev_m_out); - - break; - case NWIOGUDSSOTYPE: /* get socket type -- getsockopt(SO_TYPE) */ @@ -879,13 +872,6 @@ int uds_ioctl(message *dev_m_in, message *dev_m_out) break; - case NWIOGUDSPEERCREDOLD: - - /* get peer endpoint -- getsockopt(SO_PEERCRED) */ - rc = do_getsockopt_peercred_old(dev_m_in, dev_m_out); - - break; - case NWIOSUDSTADDR: /* set target address -- sendto() */ diff --git a/servers/pfs/proto.h b/servers/pfs/proto.h index 4176f2874..c1c801d3c 100644 --- a/servers/pfs/proto.h +++ b/servers/pfs/proto.h @@ -80,10 +80,8 @@ int do_getsockname(message *dev_m_in, message *dev_m_out); int do_getpeername(message *dev_m_in, message *dev_m_out); int do_shutdown(message *dev_m_in, message *dev_m_out); int do_socketpair(message *dev_m_in, message *dev_m_out); -int do_socketpair_old(message *dev_m_in, message *dev_m_out); int do_getsockopt_sotype(message *dev_m_in, message *dev_m_out); int do_getsockopt_peercred(message *dev_m_in, message *dev_m_out); -int do_getsockopt_peercred_old(message *dev_m_in, message *dev_m_out); int do_getsockopt_sndbuf(message *dev_m_in, message *dev_m_out); int do_setsockopt_sndbuf(message *dev_m_in, message *dev_m_out); int do_getsockopt_rcvbuf(message *dev_m_in, message *dev_m_out); diff --git a/servers/pfs/uds.c b/servers/pfs/uds.c index 922d2f668..5b1ff9195 100644 --- a/servers/pfs/uds.c +++ b/servers/pfs/uds.c @@ -880,53 +880,6 @@ int do_shutdown(message *dev_m_in, message *dev_m_out) return OK; } -int do_socketpair_old(message *dev_m_in, message *dev_m_out) -{ - int rc; - short minorin; - int minorx, minory; - struct sockaddr_un addr; - -#if DEBUG == 1 - static int call_count = 0; - printf("(uds) [%d] do_socketpair() call_count=%d\n", - uds_minor(dev_m_in), ++call_count); -#endif - - /* first ioctl param is the first socket */ - minorx = uds_minor_old(dev_m_in); - - /* third ioctl param is the minor number of the second socket */ - rc = sys_safecopyfrom(VFS_PROC_NR, (cp_grant_id_t) dev_m_in->IO_GRANT, - (vir_bytes) 0, (vir_bytes) &minorin, sizeof(short)); - - if (rc != OK) { - return EIO; - } - - minory = minor(minorin); - -#if DEBUG == 1 - printf("socketpair() %d - %d\n", minorx, minory); -#endif - - /* security check - both sockets must have the same endpoint (owner) */ - if (uds_fd_table[minorx].owner != uds_fd_table[minory].owner) { - - /* we won't allow you to magically connect your socket to - * someone elses socket - */ - return EPERM; - } - - addr.sun_family = AF_UNIX; - addr.sun_path[0] = 'X'; - addr.sun_path[1] = '\0'; - - uds_fd_table[minorx].syscall_done = 1; - return perform_connection(dev_m_in, dev_m_out, &addr, minorx, minory); -} - int do_socketpair(message *dev_m_in, message *dev_m_out) { int rc; @@ -1043,53 +996,6 @@ int do_getsockopt_peercred(message *dev_m_in, message *dev_m_out) return rc ? EIO : OK; } -int do_getsockopt_peercred_old(message *dev_m_in, message *dev_m_out) -{ - int minor; - int peer_minor; - int rc; - struct ucred cred; - struct ucred_old cred_old; - -#if DEBUG == 1 - static int call_count = 0; - printf("(uds) [%d] do_getsockopt_peercred() call_count=%d\n", - uds_minor(dev_m_in), ++call_count); -#endif - - minor = uds_minor(dev_m_in); - - if (uds_fd_table[minor].peer == -1) { - - if (uds_fd_table[minor].err == ECONNRESET) { - uds_fd_table[minor].err = 0; - - return ECONNRESET; - } else { - return ENOTCONN; - } - } - - peer_minor = uds_fd_table[minor].peer; - - /* obtain the peer's credentials */ - rc = getnucred(uds_fd_table[peer_minor].owner, &cred); - if (rc == -1) { - /* likely error: invalid endpoint / proc doesn't exist */ - return errno; - } - - /* copy to old structure */ - cred_old.pid = cred.pid; - cred_old.uid = (short) cred.uid; - cred_old.gid = (char) cred.gid; - - rc = sys_safecopyto(VFS_PROC_NR, (cp_grant_id_t) dev_m_in->IO_GRANT, - (vir_bytes) 0, (vir_bytes) &cred_old, sizeof(struct ucred_old)); - - return rc ? EIO : OK; -} - int do_getsockopt_sndbuf(message *dev_m_in, message *dev_m_out) { int rc; diff --git a/servers/pfs/uds.h b/servers/pfs/uds.h index efcb9c1da..6d412dce3 100644 --- a/servers/pfs/uds.h +++ b/servers/pfs/uds.h @@ -225,7 +225,6 @@ EXTERN uds_fd_t uds_fd_table[NR_FDS]; * Take message m and get the index in uds_fd_table. */ #define uds_minor(m) (minor((dev_t) m->DEVICE)) -#define uds_minor_old(m) (minor((short) m->DEVICE)) /* * Fill in a reply message. diff --git a/servers/pm/getset.c b/servers/pm/getset.c index 5354339df..407a5a63a 100644 --- a/servers/pm/getset.c +++ b/servers/pm/getset.c @@ -18,41 +18,15 @@ *===========================================================================*/ int do_get() { -/* Handle GETUID, GETGID, GETGROUPS, GETGROUPS_O, GETPID, GETPGRP, GETSID, +/* Handle GETUID, GETGID, GETGROUPS, MINIX_GETPID, GETPGRP, GETSID, ISSETUGID. */ register struct mproc *rmp = mp; int r, i; int ngroups; - char sgroups[NGROUPS_MAX]; /* XXX: Temp storage for GETGROUPS_O */ switch(call_nr) { - case GETGROUPS_O: - ngroups = m_in.grp_no; - if (ngroups > NGROUPS_MAX || ngroups < 0) - return(EINVAL); - - if (ngroups == 0) { - r = rmp->mp_ngroups; - break; - } - - if (ngroups < rmp->mp_ngroups) - /* Asking for less groups than available */ - return(EINVAL); - - for (i = 0; i < ngroups; i++) - sgroups[i] = (char) rmp->mp_sgroups[i]; - - r = sys_datacopy(SELF, (vir_bytes) &sgroups, who_e, - (vir_bytes) m_in.groupsp, ngroups * sizeof(char)); - - if (r != OK) - return(r); - - r = rmp->mp_ngroups; - break; case GETGROUPS: ngroups = m_in.grp_no; if (ngroups > NGROUPS_MAX || ngroups < 0) @@ -120,15 +94,13 @@ int do_get() *===========================================================================*/ int do_set() { -/* Handle SETUID, SETEUID, SETGID, SETEGID, SETSID. These calls have in common - * that, if successful, they will be forwarded to VFS as well. +/* Handle SETUID, SETEUID, SETGID, SETGROUPS, SETEGID, and SETSID. These calls + * have in common that, if successful, they will be forwarded to VFS as well. */ register struct mproc *rmp = mp; message m; int r, i; int ngroups; - char sgroups[NGROUPS_MAX]; /* XXX: Temp storage for SETGROUPS_O */ - switch(call_nr) { case SETUID: @@ -192,35 +164,6 @@ int do_set() m.PM_GROUP_NO = rmp->mp_ngroups; m.PM_GROUP_ADDR = (char *) rmp->mp_sgroups; - break; - case SETGROUPS_O: - if (rmp->mp_effuid != SUPER_USER) - return(EPERM); - - ngroups = m_in.grp_no; - - if (ngroups > NGROUPS_MAX || ngroups < 0) - return(EINVAL); - - if (m_in.groupsp == NULL) - return(EFAULT); - - r = sys_datacopy(who_e, (vir_bytes) m_in.groupsp, SELF, - (vir_bytes) &sgroups, ngroups * sizeof(char)); - if (r != OK) - return(r); - - for (i = 0; i < ngroups; i++) - rmp->mp_sgroups[i] = (gid_t) sgroups[i]; - for (i = ngroups; i < NGROUPS_MAX; i++) - rmp->mp_sgroups[i] = 0; - rmp->mp_ngroups = ngroups; - - m.m_type = PM_SETGROUPS; - m.PM_PROC = rmp->mp_endpoint; - m.PM_GROUP_NO = rmp->mp_ngroups; - m.PM_GROUP_ADDR = (char *) rmp->mp_sgroups; - break; case SETSID: if (rmp->mp_procgrp == rmp->mp_pid) return(EPERM); diff --git a/servers/vfs/exec.c b/servers/vfs/exec.c index b3f6f56ce..daad6a2fb 100644 --- a/servers/vfs/exec.c +++ b/servers/vfs/exec.c @@ -156,7 +156,7 @@ static int get_read_vp(struct vfs_exec_info *execi, return r; else r = req_stat(execi->vp->v_fs_e, execi->vp->v_inode_nr, - VFS_PROC_NR, (vir_bytes) &(execi->sb), 0); + VFS_PROC_NR, (vir_bytes) &(execi->sb)); if (r != OK) return r; diff --git a/servers/vfs/misc.c b/servers/vfs/misc.c index 705ba9509..dd1083792 100644 --- a/servers/vfs/misc.c +++ b/servers/vfs/misc.c @@ -3,7 +3,6 @@ * that are mostly performed by the Memory Manager. * * The entry points into this file are - * do_dup: perform the DUP system call * do_fcntl: perform the FCNTL system call * do_sync: perform the SYNC system call * do_fsync: perform the FSYNC system call @@ -106,59 +105,6 @@ int do_getsysinfo() return sys_datacopy(SELF, src_addr, who_e, dst_addr, len); } -/*===========================================================================* - * do_dup * - *===========================================================================*/ -int do_dup() -{ -/* Perform the dup(fd) or dup2(fd,fd2) system call. These system calls are - * obsolete. In fact, it is not even possible to invoke them using the - * current library because the library routines call fcntl(). They are - * provided to permit old binary programs to continue to run. - */ - - int rfd, rfd2; - struct filp *f; - int r = OK; - - scratch(fp).file.fd_nr = job_m_in.fd; - rfd2 = job_m_in.fd2; - - /* Is the file descriptor valid? */ - rfd = scratch(fp).file.fd_nr & ~DUP_MASK; /* kill off dup2 bit, if on */ - if ((f = get_filp(rfd, VNODE_READ)) == NULL) return(err_code); - - /* Distinguish between dup and dup2. */ - if (!(scratch(fp).file.fd_nr & DUP_MASK)) { /* bit not on */ - /* dup(fd) */ - r = get_fd(0, 0, &rfd2, NULL); - } else { - /* dup2(old_fd, new_fd) */ - if (rfd2 < 0 || rfd2 >= OPEN_MAX) { - r = EBADF; - } else if (rfd == rfd2) { /* ignore the call: dup2(x, x) */ - r = rfd2; - } else { - /* All is fine, close new_fd if necessary */ - unlock_filp(f); /* or it might deadlock on do_close */ - (void) close_fd(fp, rfd2); /* cannot fail */ - f = get_filp(rfd, VNODE_READ); /* lock old_fd again */ - if (f == NULL) return(err_code); - } - } - - if (r == OK) { - /* Success. Set up new file descriptors. */ - f->filp_count++; - fp->fp_filp[rfd2] = f; - FD_SET(rfd2, &fp->fp_filp_inuse); - r = rfd2; - } - - unlock_filp(f); - return(r); -} - /*===========================================================================* * do_fcntl * *===========================================================================*/ diff --git a/servers/vfs/open.c b/servers/vfs/open.c index 91e6713b0..cd86331f2 100644 --- a/servers/vfs/open.c +++ b/servers/vfs/open.c @@ -2,7 +2,6 @@ * seeking on files. * * The entry points into this file are - * do_creat: perform the CREAT system call * do_open: perform the OPEN system call * do_mknod: perform the MKNOD system call * do_mkdir: perform the MKDIR system call @@ -38,34 +37,6 @@ static struct vnode *new_node(struct lookup *resolve, int oflags, mode_t bits); static int pipe_open(struct vnode *vp, mode_t bits, int oflags); - -/*===========================================================================* - * do_creat * - *===========================================================================*/ -int do_creat() -{ -/* Perform the creat(name, mode) system call. - * syscall might provide 'name' embedded in the message. - */ - - char fullpath[PATH_MAX]; - vir_bytes vname; - size_t vname_length; - mode_t open_mode; - - vname = (vir_bytes) job_m_in.name; - vname_length = (size_t) job_m_in.name_length; - open_mode = (mode_t) job_m_in.mode; - - if (copy_name(vname_length, fullpath) != OK) { - /* Direct copy failed, try fetching from user space */ - if (fetch_name(vname, vname_length, fullpath) != OK) - return(err_code); - } - - return common_open(fullpath, O_WRONLY | O_CREAT | O_TRUNC, open_mode); -} - /*===========================================================================* * do_open * *===========================================================================*/ @@ -520,7 +491,6 @@ static int pipe_open(struct vnode *vp, mode_t bits, int oflags) } } else if (susp_count > 0) { /* revive blocked processes */ release(vp, OPEN, susp_count); - release(vp, CREAT, susp_count); } return(OK); } diff --git a/servers/vfs/pipe.c b/servers/vfs/pipe.c index c1281393e..73d991018 100644 --- a/servers/vfs/pipe.c +++ b/servers/vfs/pipe.c @@ -397,7 +397,7 @@ void unsuspend_by_endpt(endpoint_t proc_e) *===========================================================================*/ void release(vp, op, count) register struct vnode *vp; /* inode of pipe */ -int op; /* READ, WRITE, OPEN or CREAT */ +int op; /* READ, WRITE, or OPEN */ int count; /* max number of processes to release */ { /* Check to see if any process is hanging on vnode 'vp'. If one is, and it diff --git a/servers/vfs/proto.h b/servers/vfs/proto.h index 82a7aecd8..ee3df9f25 100644 --- a/servers/vfs/proto.h +++ b/servers/vfs/proto.h @@ -130,7 +130,6 @@ void thread_cleanup(struct fproc *rfp); void unlock_proc(struct fproc *rfp); /* misc.c */ -int do_dup(void); void pm_exit(int proc); int do_fcntl(void); void pm_fork(int pproc, int cproc, int cpid); @@ -258,8 +257,7 @@ int req_rename(endpoint_t fs_e, ino_t old_dir, char *old_name, ino_t new_dir, int req_rmdir(endpoint_t fs_e, ino_t inode_nr, char *lastc); int req_slink(endpoint_t fs_e, ino_t inode_nr, char *lastc, endpoint_t proc_e, vir_bytes path_addr, size_t path_length, uid_t uid, gid_t gid); -int req_stat(endpoint_t fs_e, ino_t inode_nr, endpoint_t proc_e, vir_bytes buf, - int old_stat); +int req_stat(endpoint_t fs_e, ino_t inode_nr, endpoint_t proc_e, vir_bytes buf); int req_sync(endpoint_t fs_e); int req_unlink(endpoint_t fs_e, ino_t inode_nr, char *lastc); int req_unmount(endpoint_t fs_e); diff --git a/servers/vfs/request.c b/servers/vfs/request.c index 4f724228e..de25c4c41 100644 --- a/servers/vfs/request.c +++ b/servers/vfs/request.c @@ -922,26 +922,14 @@ int req_slink( /*===========================================================================* * req_stat * *===========================================================================*/ -int req_stat(endpoint_t fs_e, ino_t inode_nr, endpoint_t proc_e, vir_bytes buf, - int old_stat) +int req_stat(endpoint_t fs_e, ino_t inode_nr, endpoint_t proc_e, vir_bytes buf) { cp_grant_id_t grant_id; int r; message m; - struct stat sb; - struct minix_prev_stat old_sb; /* for backward compatibility */ - - if (old_stat == 1) { - /* We're dealing with the old stat() call. First copy stat structure - * to VFS so we can convert the new struct stat to the old version. - */ - grant_id = cpf_grant_direct(fs_e, (vir_bytes) &sb, sizeof(struct stat), - CPF_WRITE); - } else { - /* Grant FS access to copy straight into user provided buffer */ - grant_id = cpf_grant_magic(fs_e, proc_e, buf, sizeof(struct stat), - CPF_WRITE); - } + + /* Grant FS access to copy straight into user provided buffer */ + grant_id = cpf_grant_magic(fs_e, proc_e, buf, sizeof(struct stat), CPF_WRITE); if (grant_id < 0) panic("req_stat: cpf_grant_* failed"); @@ -955,39 +943,6 @@ int req_stat(endpoint_t fs_e, ino_t inode_nr, endpoint_t proc_e, vir_bytes buf, r = fs_sendrec(fs_e, &m); cpf_revoke(grant_id); - if (r != OK || old_stat == 0) - return(r); - -#if defined(_NETBSD_SOURCE) -#undef st_atime -#undef st_ctime -#undef st_mtime -#endif - -/* Copy field by field because of st_gid type mismatch and - * difference in order after atime. - */ - old_sb.st_dev = sb.st_dev; - old_sb.st_ino = sb.st_ino; - old_sb.st_mode = sb.st_mode; - old_sb.st_nlink = sb.st_nlink; - old_sb.st_uid = sb.st_uid; - old_sb.st_gid = sb.st_gid; - old_sb.st_rdev = sb.st_rdev; - old_sb.st_size = sb.st_size; -#if defined(_NETBSD_SOURCE) - old_sb.st_atime = sb.st_atimespec.tv_sec; - old_sb.st_mtime = sb.st_mtimespec.tv_sec; - old_sb.st_ctime = sb.st_ctimespec.tv_sec; -#else - old_sb.st_atime = sb.st_atime; - old_sb.st_mtime = sb.st_mtime; - old_sb.st_ctime = sb.st_ctime; -#endif - - r = sys_vircopy(SELF, (vir_bytes) &old_sb, proc_e, buf, - sizeof(struct minix_prev_stat)); - return(r); } diff --git a/servers/vfs/stadir.c b/servers/vfs/stadir.c index 3d1c367b9..48237fc8c 100644 --- a/servers/vfs/stadir.c +++ b/servers/vfs/stadir.c @@ -164,7 +164,6 @@ int do_stat() struct vmnt *vmp; char fullpath[PATH_MAX]; struct lookup resolve; - int old_stat = 0; vir_bytes vname1, statbuf; size_t vname1_length; @@ -176,12 +175,9 @@ int do_stat() resolve.l_vmnt_lock = VMNT_READ; resolve.l_vnode_lock = VNODE_READ; - if (job_call_nr == PREV_STAT) - old_stat = 1; - if (fetch_name(vname1, vname1_length, fullpath) != OK) return(err_code); if ((vp = eat_path(&resolve, fp)) == NULL) return(err_code); - r = req_stat(vp->v_fs_e, vp->v_inode_nr, who_e, statbuf, old_stat); + r = req_stat(vp->v_fs_e, vp->v_inode_nr, who_e, statbuf); unlock_vnode(vp); unlock_vmnt(vmp); @@ -197,20 +193,17 @@ int do_fstat() { /* Perform the fstat(fd, buf) system call. */ register struct filp *rfilp; - int r, old_stat = 0, rfd; + int r, rfd; vir_bytes statbuf; statbuf = (vir_bytes) job_m_in.buffer; rfd = job_m_in.fd; - if (job_call_nr == PREV_FSTAT) - old_stat = 1; - /* Is the file descriptor valid? */ if ((rfilp = get_filp(rfd, VNODE_READ)) == NULL) return(err_code); r = req_stat(rfilp->filp_vno->v_fs_e, rfilp->filp_vno->v_inode_nr, - who_e, statbuf, old_stat); + who_e, statbuf); unlock_filp(rfilp); @@ -306,7 +299,6 @@ int do_lstat() int r; char fullpath[PATH_MAX]; struct lookup resolve; - int old_stat = 0; vir_bytes vname1, statbuf; size_t vname1_length; @@ -318,11 +310,9 @@ int do_lstat() resolve.l_vmnt_lock = VMNT_READ; resolve.l_vnode_lock = VNODE_READ; - if (job_call_nr == PREV_LSTAT) - old_stat = 1; if (fetch_name(vname1, vname1_length, fullpath) != OK) return(err_code); if ((vp = eat_path(&resolve, fp)) == NULL) return(err_code); - r = req_stat(vp->v_fs_e, vp->v_inode_nr, who_e, statbuf, old_stat); + r = req_stat(vp->v_fs_e, vp->v_inode_nr, who_e, statbuf); unlock_vnode(vp); unlock_vmnt(vmp); diff --git a/servers/vfs/table.c b/servers/vfs/table.c index 808a4abd4..61bd517dc 100644 --- a/servers/vfs/table.c +++ b/servers/vfs/table.c @@ -23,7 +23,7 @@ int (*call_vec[])(void) = { do_open, /* 5 = open */ do_close, /* 6 = close */ no_sys, /* 7 = wait */ - do_creat, /* 8 = creat */ + no_sys, /* 8 = unused (was creat) */ do_link, /* 9 = link */ do_unlink, /* 10 = unlink */ no_sys, /* 11 = waitpid */ @@ -33,7 +33,7 @@ int (*call_vec[])(void) = { do_chmod, /* 15 = chmod */ do_chown, /* 16 = chown */ no_sys, /* 17 = break */ - do_stat, /* 18 = stat (prev)*/ + no_sys, /* 18 = unused (was old stat)*/ do_lseek, /* 19 = lseek */ no_sys, /* 20 = getpid */ do_mount, /* 21 = mount */ @@ -43,7 +43,7 @@ int (*call_vec[])(void) = { no_sys, /* 25 = (stime) */ no_sys, /* 26 = ptrace */ no_sys, /* 27 = alarm */ - do_fstat, /* 28 = fstat (prev)*/ + no_sys, /* 28 = unused (was old fstat)*/ no_sys, /* 29 = pause */ do_utime, /* 30 = utime */ no_sys, /* 31 = (stty) */ @@ -56,7 +56,7 @@ int (*call_vec[])(void) = { do_rename, /* 38 = rename */ do_mkdir, /* 39 = mkdir */ do_unlink, /* 40 = rmdir */ - do_dup, /* 41 = dup */ + no_sys, /* 41 = unused (was dup) */ do_pipe, /* 42 = pipe */ no_sys, /* 43 = times */ no_sys, /* 44 = (prof) */ @@ -65,7 +65,7 @@ int (*call_vec[])(void) = { no_sys, /* 47 = getgid */ no_sys, /* 48 = (signal)*/ do_rdlink, /* 49 = readlink*/ - do_lstat, /* 50 = lstat (prev)*/ + no_sys, /* 50 = unused (was old lstat)*/ do_stat, /* 51 = stat */ do_fstat, /* 52 = fstat */ do_lstat, /* 53 = lstat */ @@ -83,7 +83,7 @@ int (*call_vec[])(void) = { do_stat, /* 65 = stat - badly numbered, being phased out */ do_fstat, /* 66 = fstat - badly numbered, being phased out */ do_lstat, /* 67 = lstat - badly numbered, being phased out */ - no_sys, /* 68 = unused */ + no_sys, /* 68 = (setmcontext) */ no_sys, /* 69 = unused */ no_sys, /* 70 = unused */ no_sys, /* 71 = (sigaction) */ diff --git a/sys/sys/ucred.h b/sys/sys/ucred.h index 27e713379..ac0a887ca 100644 --- a/sys/sys/ucred.h +++ b/sys/sys/ucred.h @@ -50,16 +50,6 @@ struct ucred gid_t gid; }; -#ifdef __minix -/* LSC FIXME: Remove this! Compatibility thing, only used in pfs/uds.c */ -struct ucred_old -{ - pid_t pid; - short uid; - char gid; -}; -#endif /* def __minix */ - /* Userland's view of credentials. This should not change */ struct uucred { unsigned short cr_unused; /* not used, compat */