* terms of the GNU Lesser General Public License
* (see cit/LGPL or http://www.gnu.org/licenses/lgpl.html)
*
- * Cplant(TM) Copyright 1998-2003 Sandia Corporation.
+ * Cplant(TM) Copyright 1998-2006 Sandia Corporation.
* Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
* license for use of this work by or on behalf of the US Government.
* Export of this program may require a license from the United States
err = _sysio_namei(_sysio_cwd, path, 0, &intent, &pno);
if (err)
goto out;
- if (IS_RDONLY(pno, pno->p_base->pb_ino)) {
- err = -EROFS;
+ if (!S_ISDIR(pno->p_base->pb_ino->i_stbuf.st_mode)) {
+ err = -ENOTDIR;
goto error;
}
+ err = _sysio_permitted(pno->p_parent, W_OK);
+ if (err)
+ goto error;
if (pno->p_ref > 1) {
err = -EBUSY;
goto error;
}
- err = pno->p_base->pb_ino->i_ops.inop_rmdir(pno);
+ /*
+ * Use the parent node operations to request the task in case the
+ * driver is implemented using differentiated inode operations based
+ * on file type, such as incore does.
+ */
+ err = (*pno->p_parent->p_base->pb_ino->i_ops.inop_rmdir)(pno);
if (err)
goto error;
/*