Change stat order for better ELOOP determination.
diff --git a/syscall.c b/syscall.c
index e2b1394..5a7c8e8 100644
--- a/syscall.c
+++ b/syscall.c
@@ -464,9 +464,14 @@
#ifdef O_NOFOLLOW
fd = open(pathname, flags|O_NOFOLLOW);
#else
+ if (do_lstat(pathname, &l_st) < 0)
+ return -1;
+ if (S_ISLNK(l_st.st_mode)) {
+ errno = ELOOP;
+ return -1;
+ }
if ((fd = open(pathname, flags)) < 0)
return fd;
-
if (do_fstat(fd, &f_st) < 0) {
close_and_return_error:
{
@@ -476,12 +481,6 @@
}
return -1;
}
- if (do_lstat(pathname, &l_st) < 0)
- goto close_and_return_error;
- if (S_ISLNK(l_st.st_mode)) {
- errno = ELOOP;
- goto close_and_return_error;
- }
if (l_st.st_dev != f_st.st_dev || l_st.st_ino != f_st.st_ino) {
errno = EINVAL;
goto close_and_return_error;