Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Mar 2007 12:52:33 GMT
From:      Roman Divacky <rdivacky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 116412 for review
Message-ID:  <200703231252.l2NCqXQM062622@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=116412

Change 116412 by rdivacky@rdivacky_witten on 2007/03/23 12:52:07

	Implement empty stubs for *at family of syscalls.

Affected files ...

.. //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_dummy.c#10 edit
.. //depot/projects/linuxolator/src/sys/compat/linux/linux_file.c#16 edit
.. //depot/projects/linuxolator/src/sys/compat/linux/linux_misc.c#63 edit
.. //depot/projects/linuxolator/src/sys/compat/linux/linux_util.h#3 edit
.. //depot/projects/linuxolator/src/sys/i386/linux/linux_dummy.c#10 edit

Differences ...

==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_dummy.c#10 (text+ko) ====

@@ -96,16 +96,6 @@
 DUMMY(inotify_add_watch);
 DUMMY(inotify_rm_watch);
 DUMMY(migrate_pages);
-DUMMY(mkdirat);
-DUMMY(mknodat);
-DUMMY(fchownat);
-DUMMY(futimesat);
-DUMMY(fstatat64);
-DUMMY(unlinkat);
-DUMMY(renameat);
-DUMMY(linkat);
-DUMMY(symlinkat);
-DUMMY(readlinkat);
 DUMMY(fchmodat);
 DUMMY(faccessat);
 DUMMY(pselect6);

==== //depot/projects/linuxolator/src/sys/compat/linux/linux_file.c#16 (text+ko) ====

@@ -68,6 +68,63 @@
 #endif
 #include <compat/linux/linux_util.h>
 
+/*
+ * 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
+ */
+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_creat(struct thread *td, struct linux_creat_args *args)
 {
@@ -177,62 +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)
 {
@@ -658,6 +659,12 @@
 }
 
 int
+linux_unlinkat(struct thread *td, struct linux_unlinkat_args *args)
+{
+	return (ENOSYS);
+}
+
+int
 linux_chdir(struct thread *td, struct linux_chdir_args *args)
 {
 	char *path;
@@ -709,6 +716,12 @@
 }
 
 int
+linux_mkdirat(struct thread *td, struct linux_mkdirat_args *args)
+{
+	return (ENOSYS);
+}
+
+int
 linux_rmdir(struct thread *td, struct linux_rmdir_args *args)
 {
 	char *path;
@@ -750,6 +763,12 @@
 }
 
 int
+linux_renameat(struct thread *td, struct linux_renameat_args *args)
+{
+	return (ENOSYS);
+}
+
+int
 linux_symlink(struct thread *td, struct linux_symlink_args *args)
 {
 	char *path, *to;
@@ -774,6 +793,12 @@
 }
 
 int
+linux_symlinkat(struct thread *td, struct linux_symlinkat_args *args)
+{
+	return (ENOSYS);
+}
+
+int
 linux_readlink(struct thread *td, struct linux_readlink_args *args)
 {
 	char *name;
@@ -793,6 +818,12 @@
 }
 
 int
+linux_readlinkat(struct thread *td, struct linux_readlinkat_args *args)
+{
+	return (ENOSYS);
+}
+
+int
 linux_truncate(struct thread *td, struct linux_truncate_args *args)
 {
 	char *path;
@@ -850,6 +881,12 @@
 }
 
 int
+linux_linkat(struct thread *td, struct linux_linkat_args *args)
+{
+	return (ENOSYS);
+}
+
+int
 linux_fdatasync(td, uap)
 	struct thread *td;
 	struct linux_fdatasync_args *uap;
@@ -1330,3 +1367,22 @@
 	LFREEPATH(path);
 	return (error);
 }
+
+int
+linux_futimesat(struct thread *td, struct linux_futimesat_args *args)
+{
+	return (ENOSYS);
+}
+
+int
+linux_fstatat64(struct thread *td, struct linux_fstatat64_args *args)
+{
+	return (ENOSYS);
+}
+
+int
+linux_fchownat(struct thread *td, struct linux_fchownat_args *args)
+{
+	return (ENOSYS);
+}
+

==== //depot/projects/linuxolator/src/sys/compat/linux/linux_misc.c#63 (text+ko) ====

@@ -971,6 +971,12 @@
 	return (error);
 }
 
+int
+linux_mknodat(struct thread *td, struct linux_mknodat_args *args)
+{
+	return (ENOSYS);
+}
+
 /*
  * UGH! This is just about the dumbest idea I've ever heard!!
  */

==== //depot/projects/linuxolator/src/sys/compat/linux/linux_util.h#3 (text+ko) ====

@@ -104,4 +104,7 @@
 char	*linux_get_char_devices(void);
 void	linux_free_get_char_devices(char *string);
 
+/* XXX: doesnt belong here */
+int	linux_at(struct thread *td, int dirfd, char *filename, char **newpath, char **freebuf);
+
 #endif /* !_LINUX_UTIL_H_ */

==== //depot/projects/linuxolator/src/sys/i386/linux/linux_dummy.c#10 (text+ko) ====

@@ -86,18 +86,6 @@
 DUMMY(inotify_add_watch);
 DUMMY(inotify_rm_watch);
 DUMMY(migrate_pages);
-DUMMY(mkdirat);
-DUMMY(mknodat);
-DUMMY(fchownat);
-DUMMY(futimesat);
-DUMMY(fstatat64);
-DUMMY(unlinkat);
-DUMMY(renameat);
-DUMMY(linkat);
-DUMMY(symlinkat);
-DUMMY(readlinkat);
-DUMMY(fchmodat);
-DUMMY(faccessat);
 DUMMY(pselect6);
 DUMMY(ppoll);
 DUMMY(unshare);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200703231252.l2NCqXQM062622>