citadel/poky/meta/recipes-extended/tzcode/files/0002-Port-zdump-to-C90-snprintf.patch

116 lines
3.7 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From e231da4fb2beb17c60b4b1a5c276366d6a6e433f Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Mon, 23 Oct 2017 17:58:36 -0700
Subject: [PATCH] Port zdump to C90 + snprintf
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Problem reported by Jon Skeet in:
https://mm.icann.org/pipermail/tz/2017-October/025362.html
* NEWS: Mention this.
* zdump.c (my_snprintf): New macro or function. If a macro, it is
just snprintf. If a function, it is the same as the old snprintf
static function, with an ATTRIBUTE_FORMAT to pacify modern GCC.
All uses of snprintf changed to use my_snprintf. This way,
installers dont need to specify -DHAVE_SNPRINTF if they are using
a pre-C99 compiler with a library that has snprintf.
Upstream-Status: Backport
Signed-off-by: Armin Kuster <akuster@mvista.com>
---
NEWS | 4 ++++
zdump.c | 29 ++++++++++++++++-------------
2 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/NEWS b/NEWS
index 75ab095..dea08b8 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,10 @@ Unreleased, experimental changes
The Makefile now quotes values like BACKWARD more carefully when
passing them to the shell. (Problem reported by Zefram.)
+ Builders no longer need to specify -DHAVE_SNPRINTF on platforms
+ that have snprintf and use pre-C99 compilers. (Problem reported
+ by Jon Skeet.)
+
Release 2017c - 2017-10-20 14:49:34 -0700
diff --git a/zdump.c b/zdump.c
index 8e3bf3e..d4e6084 100644
--- a/zdump.c
+++ b/zdump.c
@@ -795,12 +795,14 @@ show(timezone_t tz, char *zone, time_t t, bool v)
abbrok(abbr(tmp), zone);
}
-#if !HAVE_SNPRINTF
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
# include <stdarg.h>
/* A substitute for snprintf that is good enough for zdump. */
-static int
-snprintf(char *s, size_t size, char const *format, ...)
+static int ATTRIBUTE_FORMAT((printf, 3, 4))
+my_snprintf(char *s, size_t size, char const *format, ...)
{
int n;
va_list args;
@@ -839,10 +841,10 @@ format_local_time(char *buf, size_t size, struct tm const *tm)
{
int ss = tm->tm_sec, mm = tm->tm_min, hh = tm->tm_hour;
return (ss
- ? snprintf(buf, size, "%02d:%02d:%02d", hh, mm, ss)
+ ? my_snprintf(buf, size, "%02d:%02d:%02d", hh, mm, ss)
: mm
- ? snprintf(buf, size, "%02d:%02d", hh, mm)
- : snprintf(buf, size, "%02d", hh));
+ ? my_snprintf(buf, size, "%02d:%02d", hh, mm)
+ : my_snprintf(buf, size, "%02d", hh));
}
/* Store into BUF, of size SIZE, a formatted UTC offset for the
@@ -877,10 +879,10 @@ format_utc_offset(char *buf, size_t size, struct tm const *tm, time_t t)
mm = off / 60 % 60;
hh = off / 60 / 60;
return (ss || 100 <= hh
- ? snprintf(buf, size, "%c%02ld%02d%02d", sign, hh, mm, ss)
+ ? my_snprintf(buf, size, "%c%02ld%02d%02d", sign, hh, mm, ss)
: mm
- ? snprintf(buf, size, "%c%02ld%02d", sign, hh, mm)
- : snprintf(buf, size, "%c%02ld", sign, hh));
+ ? my_snprintf(buf, size, "%c%02ld%02d", sign, hh, mm)
+ : my_snprintf(buf, size, "%c%02ld", sign, hh));
}
/* Store into BUF (of size SIZE) a quoted string representation of P.
@@ -983,15 +985,16 @@ istrftime(char *buf, size_t size, char const *time_fmt,
for (abp = ab; is_alpha(*abp); abp++)
continue;
len = (!*abp && *ab
- ? snprintf(b, s, "%s", ab)
+ ? my_snprintf(b, s, "%s", ab)
: format_quoted_string(b, s, ab));
if (s <= len)
return false;
b += len, s -= len;
}
- formatted_len = (tm->tm_isdst
- ? snprintf(b, s, &"\t\t%d"[show_abbr], tm->tm_isdst)
- : 0);
+ formatted_len
+ = (tm->tm_isdst
+ ? my_snprintf(b, s, &"\t\t%d"[show_abbr], tm->tm_isdst)
+ : 0);
}
break;
}
--
2.7.4