Jiří Moskovčák 84c71b
--- acl-2.2.39/getfacl/getfacl.c.old	2007-11-08 14:38:56.000000000 +0100
Jiří Moskovčák 84c71b
+++ acl-2.2.39/getfacl/getfacl.c	2007-11-08 14:39:19.000000000 +0100
Jiří Moskovčák 448cce
@@ -598,17 +598,17 @@ int __do_print(const char *file, const s
Jiří Moskovčák 448cce
 char *resolve_symlinks(const char *file)
Steve Grubb d5ab53
 {
Jiří Moskovčák 448cce
 	static char buffer[4096];
Jiří Moskovčák 448cce
+	struct stat stat;
Jiří Moskovčák 448cce
 	char *path = NULL;
Steve Grubb d5ab53
-	ssize_t len;
Jiří Moskovčák 448cce
 
Steve Grubb d5ab53
-	len = readlink(file, buffer, sizeof(buffer)-1);
Steve Grubb d5ab53
-	if (len < 0) {
Steve Grubb d5ab53
-		if (errno == EINVAL)	/* not a symlink, use given path */
Steve Grubb d5ab53
-			path = (char *)file;
Steve Grubb d5ab53
-	} else {
Steve Grubb d5ab53
-		buffer[len+1] = '\0';
Steve Grubb d5ab53
-		path = buffer;
Jiří Moskovčák 448cce
-	}
Jiří Moskovčák 448cce
+	if (lstat(file, &stat) == -1)
Jiří Moskovčák 448cce
+		return path;
Steve Grubb d5ab53
+
Jiří Moskovčák 448cce
+	if (S_ISLNK(stat.st_mode) && !opt_walk_physical)
Jiří Moskovčák 448cce
+		path = realpath(file, buffer);
Jiří Moskovčák 448cce
+	else
Jiří Moskovčák 448cce
+		path = (char *)file; 	/* not a symlink, use given path */
Steve Grubb d5ab53
+
Jiří Moskovčák 448cce
 	return path;
Steve Grubb d5ab53
 }
Steve Grubb d5ab53
 
Jiří Moskovčák 84c71b
--- acl-2.2.39/setfacl/setfacl.c.old	2006-06-20 08:51:25.000000000 +0200
Jiří Moskovčák 84c71b
+++ acl-2.2.39/setfacl/setfacl.c	2007-11-08 14:39:19.000000000 +0100
Jiří Moskovčák 84c71b
@@ -314,17 +316,17 @@ int __do_set(const char *file, const str
Jiří Moskovčák 84c71b
 char *resolve_symlinks(const char *file)
Jiří Moskovčák 84c71b
 {
Jiří Moskovčák 84c71b
 	static char buffer[4096];
Jiří Moskovčák 84c71b
+	struct stat stat;
Jiří Moskovčák 84c71b
 	char *path = NULL;
Jiří Moskovčák 84c71b
-	ssize_t len;
Jiří Moskovčák 84c71b
 
Jiří Moskovčák 84c71b
-	len = readlink(file, buffer, sizeof(buffer)-1);
Jiří Moskovčák 84c71b
-	if (len < 0) {
Jiří Moskovčák 84c71b
-		if (errno == EINVAL)	/* not a symlink, use given path */
Jiří Moskovčák 84c71b
-			path = (char *)file;
Jiří Moskovčák 84c71b
-	} else {
Jiří Moskovčák 84c71b
-		buffer[len+1] = '\0';
Jiří Moskovčák 84c71b
-		path = buffer;
Jiří Moskovčák 84c71b
-	}
Jiří Moskovčák 84c71b
+	if (lstat(file, &stat) == -1)
Jiří Moskovčák 84c71b
+		return path;
Jiří Moskovčák 84c71b
+
Jiří Moskovčák 84c71b
+	if (S_ISLNK(stat.st_mode) && !opt_walk_physical)
Jiří Moskovčák 84c71b
+		path = realpath(file, buffer);
Jiří Moskovčák 84c71b
+	else
Jiří Moskovčák 84c71b
+		path = (char *)file;    /* not a symlink, use given path */
Jiří Moskovčák 84c71b
+
Jiří Moskovčák 84c71b
 	return path;
Jiří Moskovčák 84c71b
 }
Jiří Moskovčák 84c71b