+ if (lstat_result != 0 || !S_ISLNK (sbuf->st_mode))
+ return lstat_result;
+
+ len = strlen (file);
+ if (file[len - 1] != '/')
+ return lstat_result;
+
+ /* FILE refers to a symbolic link and the name ends with a slash.
+ Append a `.' to FILE and repeat the lstat call. */
+
+ /* Add one for the `.' we'll append, and one more for the trailing NUL. */
+ new_file = xmalloc (len + 1 + 1);
+ memcpy (new_file, file, len);
+ new_file[len] = '.';
+ new_file[len + 1] = 0;
+
+ lstat_result = lstat (new_file, sbuf);
+ free (new_file);
+
+ return lstat_result;
+}
+#endif /* LSTAT && ! LSTAT_FOLLOWS_SLASHED_SYMLINK */
+
+/* This is a wrapper for stat/lstat.
+ If FILE is the empty string, fail with errno == ENOENT.
+ Otherwise, return the result of calling the real stat/lstat.
+
+ This works around the bug in some systems whereby stat/lstat succeeds when
+ given the zero-length file name argument. The stat/lstat from SunOS 4.1.4
+ has this bug. */
+
+/* This function also provides a version of lstat with consistent semantics
+ when FILE specifies a symbolic link and has a trailing slash. */
+
+#ifdef LSTAT
+# define rpl_xstat rpl_lstat
+# if ! LSTAT_FOLLOWS_SLASHED_SYMLINK
+# define xstat_return_val(F, S) slash_aware_lstat (F, S)
+# else
+# define xstat_return_val(F, S) lstat (F, S)
+# endif
+#else
+# define rpl_xstat rpl_stat
+# define xstat_return_val(F, S) stat (F, S)
+#endif