From b7ff16151bdba3e6ac30fec330eb16bf58b859a5 Mon Sep 17 00:00:00 2001
From: Timur Safin <tsafin@tarantool.org>
Date: Thu, 26 May 2022 02:38:42 +0300
Subject: [PATCH] datetime: refactor interval_to_string

Simplify/shorten `interval_to_string()` implementation.

Part of #7045

NO_CHANGELOG=refactoring
NO_DOC=refactoring
NO_TEST=refactoring
---
 src/lib/core/datetime.c | 22 +++++++---------------
 1 file changed, 7 insertions(+), 15 deletions(-)

diff --git a/src/lib/core/datetime.c b/src/lib/core/datetime.c
index 387db53f0e..e28cb79655 100644
--- a/src/lib/core/datetime.c
+++ b/src/lib/core/datetime.c
@@ -577,63 +577,55 @@ interval_to_string(const struct interval *ival, char *buf, ssize_t len)
 		"%+d",	/* true */
 	};
 
-	bool need_sign = true;
 	size_t sz = 0;
 	if (ival->year != 0) {
 		SNPRINT(sz, snprintf, buf, len, "%+d years", ival->year);
-		need_sign = false;
 	}
 	if (ival->month != 0) {
 		SPACE();
-		SNPRINT(sz, snprintf, buf, len, signed_fmt[need_sign],
+		SNPRINT(sz, snprintf, buf, len, signed_fmt[sz == 0],
 			ival->month);
 		SNPRINT(sz, snprintf, buf, len, " months");
-		need_sign = false;
 	}
 	if (ival->week != 0) {
 		SPACE();
-		SNPRINT(sz, snprintf, buf, len, signed_fmt[need_sign],
+		SNPRINT(sz, snprintf, buf, len, signed_fmt[sz == 0],
 			ival->week);
 		SNPRINT(sz, snprintf, buf, len, " weeks");
-		need_sign = false;
 	}
 	int64_t days = (int64_t)ival->day;
 	if (days != 0) {
 		SPACE();
-		SNPRINT(sz, snprintf, buf, len, long_signed_fmt[need_sign],
+		SNPRINT(sz, snprintf, buf, len, long_signed_fmt[sz == 0],
 			days);
 		SNPRINT(sz, snprintf, buf, len, " days");
-		need_sign = false;
 	}
 	int64_t hours = (int64_t)ival->hour;
 	if (ival->hour != 0) {
 		SPACE();
-		SNPRINT(sz, snprintf, buf, len, long_signed_fmt[need_sign],
+		SNPRINT(sz, snprintf, buf, len, long_signed_fmt[sz == 0],
 			hours);
 		SNPRINT(sz, snprintf, buf, len, " hours");
-		need_sign = false;
 	}
 	int64_t minutes = (int64_t)ival->min;
 	if (minutes != 0) {
 		SPACE();
-		SNPRINT(sz, snprintf, buf, len, long_signed_fmt[need_sign],
+		SNPRINT(sz, snprintf, buf, len, long_signed_fmt[sz == 0],
 			minutes);
 		SNPRINT(sz, snprintf, buf, len, " minutes");
-		need_sign = false;
 	}
 
 	int64_t secs = (int64_t)ival->sec;
 	if (secs != 0 || sz == 0) {
 		SPACE();
-		SNPRINT(sz, snprintf, buf, len, long_signed_fmt[need_sign],
+		SNPRINT(sz, snprintf, buf, len, long_signed_fmt[sz == 0],
 			secs);
 		SNPRINT(sz, snprintf, buf, len, " seconds");
-		need_sign = false;
 	}
 	int32_t nsec = ival->nsec;
 	if (nsec != 0) {
 		SPACE();
-		SNPRINT(sz, snprintf, buf, len, signed_fmt[need_sign],
+		SNPRINT(sz, snprintf, buf, len, signed_fmt[sz == 0],
 			nsec);
 		SNPRINT(sz, snprintf, buf, len, " nanoseconds");
 	}
-- 
GitLab