From owner-p4-projects@FreeBSD.ORG Thu Mar 29 20:39:07 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4492316A405; Thu, 29 Mar 2007 20:39:07 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1A07216A401 for ; Thu, 29 Mar 2007 20:39:07 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 08BB213C448 for ; Thu, 29 Mar 2007 20:39:07 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l2TKd68B025432 for ; Thu, 29 Mar 2007 20:39:06 GMT (envelope-from rdivacky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l2TKd6XA025429 for perforce@freebsd.org; Thu, 29 Mar 2007 20:39:06 GMT (envelope-from rdivacky@FreeBSD.org) Date: Thu, 29 Mar 2007 20:39:06 GMT Message-Id: <200703292039.l2TKd6XA025429@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to rdivacky@FreeBSD.org using -f From: Roman Divacky To: Perforce Change Reviews Cc: Subject: PERFORCE change 116875 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 29 Mar 2007 20:39:07 -0000 http://perforce.freebsd.org/chv.cgi?CH=116875 Change 116875 by rdivacky@rdivacky_witten on 2007/03/29 20:38:55 Fix a mismerge of linux_file.c Affected files ... .. //depot/projects/linuxolator/src/sys/compat/linux/linux_file.c#18 edit Differences ... ==== //depot/projects/linuxolator/src/sys/compat/linux/linux_file.c#18 (text+ko) ==== @@ -234,116 +234,6 @@ return error; } -/* - * common code for linux *at set of syscalls - * - * works like this: - * if filename is absolute - * ignore dirfd - * else - * if dirfd == AT_FDCWD - * return CWD/filename - * else - * return DIRFD/filename - */ -static int -linux_at(struct thread *td, int dirfd, char *filename, char **newpath, char **freebuf) -{ - struct file *fp; - int error = 0; - struct vnode *dvp; - struct filedesc *fdp = td->td_proc->p_fd; - char *fullpath = "unknown"; - char *freepath = NULL; - - /* don't do anything if the pathname is absolute */ - if (*filename == '/') { - *newpath= filename; - return (0); - } - - /* check for AT_FDWCD */ - if (dirfd == LINUX_AT_FDCWD) { - FILEDESC_LOCK(fdp); - dvp = fdp->fd_cdir; - FILEDESC_UNLOCK(fdp); - } else { - error = fget(td, dirfd, &fp); - if (error) - return (error); - dvp = fp->f_vnode; - /* only a dir can be dfd */ - if (dvp->v_type != VDIR) { - fdrop(fp, td); - return (ENOTDIR); - } - fdrop(fp, td); - } - - error = vn_fullpath(td, dvp, &fullpath, &freepath); - if (!error) { - *newpath = malloc(strlen(fullpath) + strlen(filename) + 2, M_TEMP, M_WAITOK | M_ZERO); - *freebuf = freepath; - sprintf(*newpath, "%s/%s", fullpath, filename); - } - - return (error); -} - -int -linux_openat(struct thread *td, struct linux_openat_args *args) -{ - char *newpath, *oldpath, *freebuf = NULL, *path; - int error; - - oldpath = malloc(MAXPATHLEN, M_TEMP, M_WAITOK); - error = copyinstr(args->filename, oldpath, MAXPATHLEN, NULL); - -#ifdef DEBUG - if (ldebug(openat)) - printf(ARGS(openat, "%i, %s, 0x%x, 0x%x"), args->dfd, - oldpath, args->flags, args->mode); -#endif - - error = linux_at(td, args->dfd, oldpath, &newpath, &freebuf); - if (error) - return (error); -#ifdef DEBUG - printf(LMSG("newpath: %s"), newpath); -#endif - if (args->flags & LINUX_O_CREAT) - LCONVPATH_SEG(td, newpath, &path, 1, UIO_SYSSPACE); - else - LCONVPATH_SEG(td, newpath, &path, 0, UIO_SYSSPACE); - if (freebuf) - free(freebuf, M_TEMP); - if (*oldpath != '/') - free(newpath, M_TEMP); - - error = linux_common_open(td, path, args->flags, args->mode, 1); - free(oldpath, M_TEMP); - return (error); -} - -int -linux_open(struct thread *td, struct linux_open_args *args) -{ - char *path; - - if (args->flags & LINUX_O_CREAT) - LCONVPATHCREAT(td, args->path, &path); - else - LCONVPATHEXIST(td, args->path, &path); - -#ifdef DEBUG - if (ldebug(open)) - printf(ARGS(open, "%s, 0x%x, 0x%x"), - path, args->flags, args->mode); -#endif - - return linux_common_open(td, path, args->flags, args->mode, 0); -} - int linux_openat(struct thread *td, struct linux_openat_args *args) {