From faeac6115689ab87067e90058a3d5ad249898451 Mon Sep 17 00:00:00 2001
From: phil <phil>
Date: Fri, 20 May 2005 22:55:11 +0000
Subject: [PATCH] b=3359 r=lee@sandia.gov

libsysio fixes which always apply the umask before calling liblustre.
With these changes, liblustre can stop worrying about the umask entirely.
---
 libsysio/src/mkdir.c | 2 ++
 libsysio/src/mknod.c | 8 ++++++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/libsysio/src/mkdir.c b/libsysio/src/mkdir.c
index 1d89acd9dc..ee59348515 100644
--- a/libsysio/src/mkdir.c
+++ b/libsysio/src/mkdir.c
@@ -76,6 +76,8 @@ SYSIO_INTERFACE_NAME(mkdir)(const char *path, mode_t mode)
 		err = -EROFS;
 		goto error;
 	}
+	mode |= S_IFDIR;
+	mode &= ~(_sysio_umask & 0777); /* apply umask */
 	err = (*pno->p_parent->p_base->pb_ino->i_ops.inop_mkdir)(pno, mode);
 error:
 	P_RELE(pno);
diff --git a/libsysio/src/mknod.c b/libsysio/src/mknod.c
index 288dccea75..35ca0f982a 100644
--- a/libsysio/src/mknod.c
+++ b/libsysio/src/mknod.c
@@ -80,13 +80,17 @@ PREPEND(__, SYSIO_INTERFACE_NAME(xmknod))(int __ver,
 	}
 
 	/*
-	 * Support only character-special and fifos right now.
+	 * Support only regular, character-special and fifos right now.
+	 * (mode & S_IFMT) == 0 is the same as S_IFREG.
 	 */
-	if (!(S_ISCHR(mode) || S_ISFIFO(mode))) {
+	if ((mode & S_IFMT) &&
+	    !(S_ISREG(mode) || S_ISCHR(mode) || S_ISFIFO(mode))) {
 		err = -EINVAL;
 		goto out;
 	}
 
+	mode &= ~(_sysio_umask & 0777);	/* apply umask */
+
 	INTENT_INIT(&intent, INT_CREAT, &mode, NULL);
 	err = _sysio_namei(_sysio_cwd, path, ND_NEGOK, &intent, &pno);
 	if (err)
-- 
GitLab