[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: KDE2



斉藤です。

再度mkdirの話です。
ファイル名の最後に / があるといけないのは mkdir だけで、
open, stat, rmdirといったところは OK です。
mkdir だけがだめというのはやはり尺然としません。

ファイル名の最後の / を無視するパッチを作ってみましたが、
役にたちませんか?

mips-elfのダイナミックローダの話の追加ですが、
先のmailのテストプログラムで、
        s = dlsym(p, "main");
を呼び出すと、sの値が、xxx.cのmain()でなく、
sss.cのmain()になりませんか?

-----------------------------------------------------------------
--- vfs_syscalls.c.orig	Wed Feb  2 08:10:54 2000
+++ vfs_syscalls.c	Mon Nov 27 15:27:13 2000
@@ -2453,12 +2453,29 @@
 	} */ *uap = v;
 	register struct vnode *vp;
 	struct vattr vattr;
+#ifndef  NO_POSIX_MKDIR
+	char *path, *cp;
+	int pathlen;
+#endif
 	int error;
 	struct nameidata nd;
 
+#ifndef  NO_POSIX_MKDIR
+	MALLOC(path, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+	error = copyinstr(SCARG(uap, path), path, MAXPATHLEN, &pathlen);
+	if (error)
+		goto out;
+	cp = path + pathlen - 2;
+	while (*cp == '/' && pathlen > 2) {
+		*(char *)cp-- = 0;
+		pathlen--;
+	}
+	NDINIT(&nd, CREATE, LOCKPARENT, UIO_SYSSPACE, path, p);
+#else
 	NDINIT(&nd, CREATE, LOCKPARENT, UIO_USERSPACE, SCARG(uap, path), p);
+#endif
 	if ((error = namei(&nd)) != 0)
-		return (error);
+		goto out;
 	vp = nd.ni_vp;
 	if (vp != NULL) {
 		VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
@@ -2467,7 +2484,8 @@
 		else
 			vput(nd.ni_dvp);
 		vrele(vp);
-		return (EEXIST);
+		error = EEXIST;
+		goto out;
 	}
 	VATTR_NULL(&vattr);
 	vattr.va_type = VDIR;
@@ -2476,6 +2494,10 @@
 	error = VOP_MKDIR(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr);
 	if (!error)
 		vput(nd.ni_vp);
+out:
+#ifndef NO_POSIX_MKDIR
+	FREE(path, M_NAMEI);
+#endif
 	return (error);
 }
 
-----------------------------------------------------------------