[tz] [PROPOSED 5/7] Avoid macros in zic.c when easy
Paul Eggert
eggert at cs.ucla.edu
Wed Oct 26 04:10:19 UTC 2022
* zic.c (ZIC_MIN, ZIC_MAX, readlink, symlink): Now ordinary symbols
instead of macros, as C macros are too powerful and not needed here.
(link): Remove this macro; no longer needed.
(linkat): Use HAVE_LINK directly. This should be a bit faster on
systems that have symlinks but not hard links, since it avoids
an unnecessary readlink call.
---
zic.c | 31 ++++++++++++++++++++++---------
1 file changed, 22 insertions(+), 9 deletions(-)
diff --git a/zic.c b/zic.c
index e18506d..c549c85 100644
--- a/zic.c
+++ b/zic.c
@@ -23,8 +23,9 @@
#include <stdio.h>
typedef int_fast64_t zic_t;
-#define ZIC_MIN INT_FAST64_MIN
-#define ZIC_MAX INT_FAST64_MAX
+static zic_t const
+ ZIC_MIN = INT_FAST64_MIN,
+ ZIC_MAX = INT_FAST64_MAX;
#define SCNdZIC SCNdFAST64
#ifndef ZIC_MAX_ABBR_LEN_WO_WARN
@@ -137,17 +138,29 @@ extern char * optarg;
extern int optind;
#endif
-#if ! HAVE_LINK
-# define link(target, linkname) (errno = ENOTSUP, -1)
-#endif
#if ! HAVE_SYMLINK
-# define readlink(file, buf, size) (errno = ENOTSUP, -1)
-# define symlink(target, linkname) (errno = ENOTSUP, -1)
+static ssize_t
+readlink(char const *restrict file, char *restrict buf, size_t size)
+{
+ errno = ENOTSUP;
+ return -1;
+}
+static int
+symlink(char const *target, char const *linkname)
+{
+ errno = ENOTSUP;
+ return -1;
+}
# define S_ISLNK(m) 0
#endif
#ifndef AT_SYMLINK_FOLLOW
-# define linkat(targetdir, target, linknamedir, linkname, flag) \
- (itssymlink(target) ? (errno = ENOTSUP, -1) : link(target, linkname))
+# if HAVE_LINK
+# define linkat(targetdir, target, linknamedir, linkname, flag) \
+ (itssymlink(target) ? (errno = ENOTSUP, -1) : link(target, linkname))
+# else
+# define linkat(targetdir, target, linknamedir, linkname, flag) \
+ (errno = ENOTSUP, -1)
+# endif
#endif
static void addtt(zic_t starttime, int type);
--
2.37.3
More information about the tz
mailing list