[Libsysio-commit] HEAD: libsysio/src mkdir.c mknod.c
Brought to you by:
lward
From: Lee W. <lw...@us...> - 2005-05-12 20:17:59
|
Update of /cvsroot/libsysio/libsysio/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27251 Modified Files: mkdir.c mknod.c Log Message: The umask was not being applied before passing the mode argument to the underlying driver. Fixed. As well, mknod now knows how to create regular files. Report of the problem and patch supplied by Phil Schwan from Cluster File Systems Inc. Index: mkdir.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/src/mkdir.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -w -b -B -p -r1.14 -r1.15 --- mkdir.c 21 Sep 2004 16:18:31 -0000 1.14 +++ mkdir.c 12 May 2005 20:17:48 -0000 1.15 @@ -76,6 +76,8 @@ SYSIO_INTERFACE_NAME(mkdir)(const char * 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); Index: mknod.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/src/mknod.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -w -b -B -p -r1.16 -r1.17 --- mknod.c 29 Sep 2004 15:30:20 -0000 1.16 +++ mknod.c 12 May 2005 20:17:50 -0000 1.17 @@ -80,13 +80,17 @@ PREPEND(__, SYSIO_INTERFACE_NAME(xmknod) } /* - * 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) |