On 1/4/21 9:03 AM, Adhemerval Zanella wrote:

-# define __lstat64(version, file, buf) lstat (file, buf)
+# define __lxstat64(version, file, buf) lstat (file, buf)

That change isn't quite right for the !_LIBC case, since it doesn't define the __stat64 macro and it defines __lstat64 with the wrong API.

I installed the attached patch into Gnulib, which should do the change right for both Gnulib and glibc, the idea being that the Gnulib and glibc source files can be identical.
From 8eb0e08598b9815f0e85ce1bde676169920087ef Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Fri, 8 Jan 2021 17:31:28 -0800
Subject: [PATCH] tempname: sync with proposed glibc patch

This is from Adhemerval Zanella in:
https://sourceware.org/pipermail/libc-alpha/2021-January/121301.html
* lib/tempname.c (__lxstat64): Remove.
(__lstat64, __stat64): New replacement macros.  All uses changed.
---
 ChangeLog      | 6 ++++++
 lib/tempname.c | 7 ++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index a2787f59a..812888f8e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2021-01-08  Paul Eggert  <egg...@cs.ucla.edu>
 
+	tempname: sync with proposed glibc patch
+	This is from Adhemerval Zanella in:
+	https://sourceware.org/pipermail/libc-alpha/2021-January/121301.html
+	* lib/tempname.c (__lxstat64): Remove.
+	(__lstat64, __stat64): New replacement macros.  All uses changed.
+
 	regex: stop using alloca
 	* lib/regex_internal.h: Do not include <alloca.h> or define
 	__libc_use_alloca or alloca.  Patch written by Adhemerval Zanella:
diff --git a/lib/tempname.c b/lib/tempname.c
index 9ed67fec2..f196b9862 100644
--- a/lib/tempname.c
+++ b/lib/tempname.c
@@ -61,7 +61,8 @@
 # define __gen_tempname gen_tempname
 # define __mkdir mkdir
 # define __open open
-# define __lxstat64(version, file, buf) lstat (file, buf)
+# define __lstat64(file, buf) lstat (file, buf)
+# define __stat64(file, buf) stat (file, buf)
 # define __getrandom getrandom
 # define __clock_gettime64 clock_gettime
 # define __timespec64 timespec
@@ -96,7 +97,7 @@ static int
 direxists (const char *dir)
 {
   struct_stat64 buf;
-  return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode);
+  return __stat64 (dir, &buf) == 0 && S_ISDIR (buf.st_mode);
 }
 
 /* Path search algorithm, for tmpnam, tmpfile, etc.  If DIR is
@@ -188,7 +189,7 @@ try_nocreate (char *tmpl, void *flags _GL_UNUSED)
 {
   struct_stat64 st;
 
-  if (__lxstat64 (_STAT_VER, tmpl, &st) == 0 || errno == EOVERFLOW)
+  if (__lstat64 (tmpl, &st) == 0 || errno == EOVERFLOW)
     __set_errno (EEXIST);
   return errno == ENOENT ? 0 : -1;
 }
-- 
2.27.0

Reply via email to