From 31174f11d0995f901343f15e92ff6b38faec174c Mon Sep 17 00:00:00 2001
From: "Thomas G. Lockhart" <lockhart@fourpalms.org>
Date: Tue, 16 Sep 1997 16:12:55 +0000
Subject: [PATCH] Remove difftime() calls.  Still uses time_t declarations, but
 most code will be changed for next release.

---
 src/backend/utils/adt/timestamp.c | 154 ++++++------------------------
 1 file changed, 28 insertions(+), 126 deletions(-)

diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index 4e66ea4cb3c..691886658e1 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -5,128 +5,19 @@
 #include "postgres.h"
 #include "miscadmin.h"
 #include "utils/builtins.h"
+#include "access/xact.h"
 
-/* sunos doesn't have this function */
-#if defined(sunos4)
-#define difftime(time1,time0)  ((time1) - (time0))
-#endif
-
-#if FALSE
-/* copy the next part of the string into a buffer */
-static const char *
-cpstr(const char *s, char *buf)
-{
-	char		in = 0;
-
-	while (isspace(*s))
-		s++;
-
-	for (; *s && !isspace(*s); s++)
-	{
-		if (strchr("-,:/", *s))
-		{
-			buf[in] = 0;
-			return (s + 1);
-		}
-
-		if (in < 16)
-			buf[in++] = tolower(*s);
-	}
-
-	buf[in] = 0;
-	return s;
-}
-
-#endif
-
-/* assumes dd/mm/yyyy unless first item is month in word form */
 time_t
 timestamp_in(const char *timestamp_str)
 {
 	int4		result;
 
-#if FALSE
-	struct tm	input_time;
-	char		buf[18];
-	const char *p;
-	static const char *mstr[] = {
-		"january", "february", "march", "april", "may", "june",
-		"july", "august", "september", "october", "november", "december"
-	};
-
-	memset(&input_time, 0, sizeof(input_time));
-	p = cpstr(timestamp_str, buf);
-	if (isdigit(buf[0]))		/* must be dd/mm/yyyy */
-	{
-		input_time.tm_mday = atoi(buf);
-		p = cpstr(p, buf);
-		if (!buf[0])
-			elog(WARN, "timestamp_in: timestamp \"%s\" not a proper date",
-				 timestamp_str);
-		if (isdigit(buf[0]))
-		{
-			input_time.tm_mon = atoi(buf) - 1;
-			if (input_time.tm_mon < 0 || input_time.tm_mon > 11)
-				elog(WARN, "timestamp_in: timestamp \"%s\" invalid month",
-					 timestamp_str);
-		}
-		else
-		{
-			int			i;
-
-			for (i = 0; i < 12; i++)
-				if (strncmp(mstr[i], buf, strlen(buf)) == 0)
-					break;
-			if (1 > 11)
-				elog(WARN, "timestamp_in: timestamp \"%s\" invalid month",
-					 timestamp_str);
-			input_time.tm_mon = i;
-		}
-	}
-	else
-/* must be month/dd/yyyy */
-	{
-		int			i;
-
-		for (i = 0; i < 12; i++)
-			if (strncmp(mstr[i], buf, strlen(buf)) == 0)
-				break;
-		if (1 > 11)
-			elog(WARN, "timestamp_in: timestamp \"%s\" invalid month",
-				 timestamp_str);
-		input_time.tm_mon = i;
-		p = cpstr(p, buf);
-		input_time.tm_mday = atoi(buf);
-		if (!input_time.tm_mday || input_time.tm_mday > 31)
-			elog(WARN, "timestamp_in: timestamp \"%s\" not a proper date",
-				 timestamp_str);
-	}
-
-	p = cpstr(p, buf);
-	if (!buf[0] || !isdigit(buf[0]))
-		elog(WARN, "timestamp_in: timestamp \"%s\" not a proper date",
-			 timestamp_str);
-	if ((input_time.tm_year = atoi(buf)) < 1900)
-		input_time.tm_year += 1900;
-
-	/* now get the time */
-	p = cpstr(p, buf);
-	input_time.tm_hour = atoi(buf);
-	p = cpstr(p, buf);
-	input_time.tm_min = atoi(buf);
-	p = cpstr(p, buf);
-	input_time.tm_sec = atoi(buf);
-
-	/* use mktime(), but make this GMT, not local time */
-	result = mktime(&input_time);
-#endif
-
 	result = nabstimein((char *) timestamp_str);
 
 	return result;
 }
 
-char	   *
+char *
 timestamp_out(time_t timestamp)
 {
 	char	   *result;
@@ -138,13 +29,6 @@ timestamp_out(time_t timestamp)
 	char		zone[MAXDATELEN + 1],
 			   *tzn = zone;
 
-#if FALSE
-	time = localtime(&timestamp);
-
-	sprintf(result, "%04d-%02d-%02d %02d:%02d:%02d",
-			time->tm_year + 1900, time->tm_mon + 1, time->tm_mday,
-			time->tm_hour, time->tm_min, time->tm_sec);
-#endif
 	abstime2tm(timestamp, &tz, tm, tzn);
 	EncodeDateTime(tm, fsec, &tz, &tzn, USE_ISO_DATES, buf);
 
@@ -158,44 +42,62 @@ now(void)
 {
 	time_t		sec;
 
-	time(&sec);
+	sec = GetCurrentTransactionStartTime();
 	return (sec);
 }
 
 bool
 timestampeq(time_t t1, time_t t2)
 {
-	return difftime(t1, t2) == 0;
+#if FALSE
+	return(t1 == t2);
+#endif
+	return(abstimeeq(t1,t2));
 }
 
 bool
 timestampne(time_t t1, time_t t2)
 {
-	return difftime(t1, t2) != 0;
+#if FALSE
+	return(t1 != t2);
+#endif
+	return(abstimene(t1,t2));
 }
 
 bool
 timestamplt(time_t t1, time_t t2)
 {
-	return difftime(t1, t2) > 0;
+#if FALSE
+	return(t1 > t2);
+#endif
+	return(abstimelt(t1,t2));
 }
 
 bool
 timestampgt(time_t t1, time_t t2)
 {
-	return difftime(t1, t2) < 0;
+#if FALSE
+	return(t1 < t2);
+#endif
+	return(abstimegt(t1,t2));
 }
 
 bool
 timestample(time_t t1, time_t t2)
 {
-	return difftime(t1, t2) >= 0;
+#if FALSE
+	return(t1 >= t2);
+#endif
+	return(abstimele(t1,t2));
 }
 
 bool
 timestampge(time_t t1, time_t t2)
 {
-	return difftime(t1, t2) <= 0;
+#if FALSE
+	return(t1 <= t2);
+#endif
+	return(abstimege(t1,t2));
 }
 
 DateTime   *
@@ -217,4 +119,4 @@ timestamp_datetime(time_t timestamp)
 		elog(WARN, "Unable to convert timestamp to datetime", timestamp_out(timestamp));
 
 	return (result);
-}								/* timestamp_datetime() */
+} /* timestamp_datetime() */
-- 
GitLab