changeset 1761:3767595e9069 HEAD

imap_to_datetime_offset() isn't needed. optimized imap_to_datetime() a bit.
author Timo Sirainen <tss@iki.fi>
date Mon, 08 Sep 2003 03:57:36 +0300
parents 7bbd17c237a4
children 520e3a0496db
files src/lib-imap/imap-date.c src/lib-imap/imap-date.h
diffstat 2 files changed, 45 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-imap/imap-date.c	Mon Sep 08 03:41:11 2003 +0300
+++ b/src/lib-imap/imap-date.c	Mon Sep 08 03:57:36 2003 +0300
@@ -134,38 +134,56 @@
 	return TRUE;
 }
 
-static const char *imap_to_datetime_internal(struct tm *tm, int timezone_offset)
+const char *imap_to_datetime(time_t time)
 {
-	int negative;
+	char *buf;
+	struct tm *tm;
+	int timezone_offset, year;
+
+	tm = localtime(&time);
+	timezone_offset = utc_offset(tm, time);
+
+	/* @UNSAFE: but faster than t_strdup_printf() call.. */
+	buf = t_malloc(27);
+
+	/* dd-mon- */
+	buf[0] = (tm->tm_mday / 10) + '0';
+	buf[1] = (tm->tm_mday % 10) + '0';
+	buf[2] = '-';
+	memcpy(buf+3, month_names[tm->tm_mon], 3);
+	buf[6] = '-';
 
+	/* yyyy */
+	year = tm->tm_year + 1900;
+	buf[7] = (year / 1000) + '0';
+	buf[8] = ((year / 100) % 10) + '0';
+	buf[9] = ((year / 10) % 10) + '0';
+	buf[10] = (year % 10) + '0';
+	buf[11] = ' ';
+
+	/* hh:mi:ss */
+	buf[12] = (tm->tm_hour / 10) + '0';
+	buf[13] = (tm->tm_hour % 10) + '0';
+	buf[14] = ':';
+	buf[15] = (tm->tm_min / 10) + '0';
+	buf[16] = (tm->tm_min % 10) + '0';
+	buf[17] = ':';
+	buf[18] = (tm->tm_sec / 10) + '0';
+	buf[19] = (tm->tm_sec % 10) + '0';
+	buf[20] = ' ';
+
+	/* timezone */
 	if (timezone_offset >= 0)
-		negative = 0;
+		buf[21] = '+';
 	else {
-		negative = 1;
+		buf[21] = '-';
 		timezone_offset = -timezone_offset;
 	}
-
-	return t_strdup_printf("%02d-%s-%04d %02d:%02d:%02d %c%02d%02d",
-			       tm->tm_mday, month_names[tm->tm_mon],
-			       tm->tm_year+1900,
-			       tm->tm_hour, tm->tm_min, tm->tm_sec,
-			       negative ? '-' : '+',
-			       timezone_offset / 60, timezone_offset % 60);
-}
-
-const char *imap_to_datetime_offset(time_t time, int timezone_offset)
-{
-	struct tm *tm;
+	buf[22] = (timezone_offset / 600) + '0';
+	buf[23] = ((timezone_offset / 60) % 10) + '0';
+	buf[24] = ((timezone_offset % 60) / 10) + '0';
+	buf[25] = (timezone_offset % 10) + '0';
+	buf[26] = '\0';
 
-	time += timezone_offset;
-	tm = gmtime(&time);
-	return imap_to_datetime_internal(tm, timezone_offset);
+	return buf;
 }
-
-const char *imap_to_datetime(time_t time)
-{
-	struct tm *tm;
-
-	tm = localtime(&time);
-	return imap_to_datetime_internal(tm, utc_offset(tm, time));
-}
--- a/src/lib-imap/imap-date.h	Mon Sep 08 03:41:11 2003 +0300
+++ b/src/lib-imap/imap-date.h	Mon Sep 08 03:57:36 2003 +0300
@@ -7,8 +7,6 @@
 int imap_parse_date(const char *str, time_t *time);
 int imap_parse_datetime(const char *str, time_t *time, int *timezone_offset);
 
-/* Returns given UTC time in given timezone. */
-const char *imap_to_datetime_offset(time_t time, int timezone_offset);
 /* Returns given UTC time in local timezone. */
 const char *imap_to_datetime(time_t time);