Commit Diff


commit - fe48b8a35b1ce2ff6de2275bc413d8e0e60eaf2f
commit + cd4ec459ec584d645acf6873b22b9f4f9e687cd9
blob - 1d3789e902b9ab1f3b7dd6c0ffece44888797b6b
blob + 789f88be02e9d1b536dea3344011e8058451cc72
--- vias.c
+++ vias.c
@@ -108,29 +108,31 @@ open_nosym(const char *file)
 {
 	static int dep = 0;
 	struct stat sb;
-	char dir[PATH_MAX];
+	char path[PATH_MAX];
 	int fd, pfd;
 
 	dep++;
-	(void) strlcpy(dir, dirname(file), sizeof(dir));
+	strlcpy(path, file, sizeof(path));
+	(void) strlcpy(path, dirname(path), sizeof(path));
 
-	if (dir[1] == '\0') {
+	if (path[1] == '\0') {
 		dep--;
 		if ((pfd = open("/", O_CLOEXEC)) == -1)
 			return -1;
 	} else {
-		pfd = open_nosym(dir);
+		pfd = open_nosym(path);
 		dep--;
 		if (pfd == -1)
 			return -1;
 	}
 
 	do {
+		strlcpy(path, file, sizeof(path));
 		if (dep) {
-			fd = openat(pfd, basename(file),
+			fd = openat(pfd, basename(path),
 			    O_NOFOLLOW | O_CLOEXEC);
 		} else {
-			fd = openat(pfd, basename(file),
+			fd = openat(pfd, basename(path),
 			    O_RDWR | O_NOFOLLOW | O_CLOEXEC | O_CREAT, 0777);
 		}
 	} while (fd == -1 && errno == EINTR);