[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);
}
-----------------------------------------------------------------
- Follow-Ups:
- Re: KDE2
- From: KAWAMOTO Yosihisa <kawamoto@es.osaka-u.ac.jp>