PERFORCE change 98267 for review

Christian S.J. Peron csjp at FreeBSD.org
Thu Jun 1 08:34:15 PDT 2006


http://perforce.freebsd.org/chv.cgi?CH=98267

Change 98267 by csjp at csjp_xor on 2006/06/01 15:32:20

	Check to see if the rootdir is the same as the current working directory.
	If it is, and the pathname was relative, do not separate the componenets
	with a '/' character.

Affected files ...

.. //depot/projects/trustedbsd/audit3/sys/security/audit/audit_bsm_klib.c#9 edit

Differences ...

==== //depot/projects/trustedbsd/audit3/sys/security/audit/audit_bsm_klib.c#9 (text+ko) ====

@@ -487,10 +487,11 @@
 	char *retbuf, *freebuf;
 	struct vnode *vnp;
 	struct filedesc *fdp;
-	int error, vfslocked;
+	int cisr, error, vfslocked;
 
 	fdp = td->td_proc->p_fd;
 	bufp = path;
+	cisr = 0;
 	FILEDESC_LOCK(fdp);
 	if (*(path) == '/') {
 		while (*(bufp) == '/')
@@ -509,6 +510,7 @@
 		}
 	} else {
 		vnp = fdp->fd_cdir;	/* Prepend the current dir. */
+		cisr = (fdp->fd_rdir == fdp->fd_cdir);
 		vref(vnp);
 		bufp = path;
 	}
@@ -525,8 +527,14 @@
 		vn_lock(vnp, LK_EXCLUSIVE | LK_RETRY, td);
 		error = vn_fullpath(td, vnp, &retbuf, &freebuf);
 		if (error == 0) {
-			/* Copy and free buffer allocated by vn_fullpath(). */
-			snprintf(cpath, MAXPATHLEN, "%s/%s", retbuf, bufp);
+			/* Copy and free buffer allocated by vn_fullpath().
+			 * If the current working directory was the same as
+			 * the root directory, and the path was a relative
+			 * pathname, do not separate the two components with
+			 * the '/' character.
+			 */
+			snprintf(cpath, MAXPATHLEN, "%s%s%s", retbuf,
+			    cisr ? "" : "/", bufp);
 			free(freebuf, M_TEMP);
 		} else
 			cpath[0] = '\0';


More information about the p4-projects mailing list