Update of /cvsroot/libsysio/libsysio/src
In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv4690/src
Modified Files:
inode.c symlink.c
Log Message:
Crafted new _sysio_p_symlink routine and modified the symlink library
entry-point to use it.
Index: inode.c
===================================================================
RCS file: /cvsroot/libsysio/libsysio/src/inode.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -w -b -B -p -r1.33 -r1.34
--- inode.c 20 Nov 2007 17:49:26 -0000 1.33
+++ inode.c 20 Nov 2007 18:01:42 -0000 1.34
@@ -1044,6 +1044,20 @@ _sysio_p_unlink(struct pnode *pno)
}
/*
+ * Perform symlink operation; oldpath to new.
+ */
+int
+_sysio_p_symlink(const char *oldpath, struct pnode *new)
+{
+
+ if (new->p_base->pb_ino)
+ return -EEXIST;
+ if (IS_RDONLY(new->p_parent))
+ return -EROFS;
+ return PNOP_SYMLINK(new, oldpath);
+}
+
+/*
* Perform remove directory operation on some pnode.
*/
int
Index: symlink.c
===================================================================
RCS file: /cvsroot/libsysio/libsysio/src/symlink.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -w -b -B -p -r1.18 -r1.19
--- symlink.c 2 Jul 2007 18:58:17 -0000 1.18
+++ symlink.c 20 Nov 2007 18:01:42 -0000 1.19
@@ -50,8 +50,6 @@
#include "sysio.h"
#include "inode.h"
-#include "fs.h"
-#include "mount.h"
#include "sysio-symbols.h"
int
@@ -63,6 +61,9 @@ SYSIO_INTERFACE_NAME(symlink)(const char
SYSIO_INTERFACE_DISPLAY_BLOCK;
SYSIO_INTERFACE_ENTER(symlink, "%s%s", oldpath, newpath);
+ err = 0;
+ pno = NULL;
+ do {
INTENT_INIT(&intent, INT_CREAT, NULL, NULL);
err =
_sysio_namei(_sysio_cwd,
@@ -71,19 +72,14 @@ SYSIO_INTERFACE_NAME(symlink)(const char
&intent,
&pno);
if (err)
- goto out;
- if (pno->p_base->pb_ino) {
- err = -EEXIST;
- goto error;
- }
+ break;
err = _sysio_permitted(pno->p_parent, W_OK);
if (err)
- goto error;
-
- err = PNOP_SYMLINK(pno, oldpath);
-error:
+ break;
+ err = _sysio_p_symlink(oldpath, pno);
+ } while (0);
+ if (pno)
P_RELE(pno);
-out:
SYSIO_INTERFACE_RETURN(err ? -1 : 0, err, symlink, "%d", 0);
}
|