From 89db87d7187f8db3f1ffed3fdcdc825c360e97ef Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Sat, 15 Aug 2009 13:17:59 +0200
Subject: [PATCH] Date extension: implemented a few more date parts.

---
 src/lib-sieve/plugins/date/ext-date-common.c | 47 +++++++++++++++-----
 1 file changed, 37 insertions(+), 10 deletions(-)

diff --git a/src/lib-sieve/plugins/date/ext-date-common.c b/src/lib-sieve/plugins/date/ext-date-common.c
index efea31680..bd4a8511d 100644
--- a/src/lib-sieve/plugins/date/ext-date-common.c
+++ b/src/lib-sieve/plugins/date/ext-date-common.c
@@ -275,22 +275,31 @@ const char *ext_date_part_extract
  * Date part implementations
  */
 
+static const char *month_names[] = {
+	"Jan", "Feb", "Mar", "Apr", "May", "Jun",
+	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+};
+
+static const char *weekday_names[] = {
+	"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+};
+
 static const char *ext_date_year_part_get
 (struct tm *tm, int zone_offset ATTR_UNUSED)
 {
-	return t_strdup_printf("%04d", tm->tm_year + 1900);
+	return t_strdup_printf("%d", tm->tm_year + 1900);
 }
 
 static const char *ext_date_month_part_get
 (struct tm *tm, int zone_offset ATTR_UNUSED)
 {
-	return t_strdup_printf("%02d", tm->tm_mon);
+	return t_strdup_printf("%d", tm->tm_mon);
 }
 
 static const char *ext_date_day_part_get
 (struct tm *tm, int zone_offset ATTR_UNUSED)
 {
-	return t_strdup_printf("%02d", tm->tm_mday);
+	return t_strdup_printf("%d", tm->tm_mday);
 }
 
 static const char *ext_date_date_part_get
@@ -309,19 +318,19 @@ static const char *ext_date_julian_part_get
 static const char *ext_date_hour_part_get
 (struct tm *tm, int zone_offset ATTR_UNUSED)
 {
-	return t_strdup_printf("%02d", tm->tm_hour);
+	return t_strdup_printf("%d", tm->tm_hour);
 }
 
 static const char *ext_date_minute_part_get
 (struct tm *tm, int zone_offset ATTR_UNUSED)
 {
-	return t_strdup_printf("%02d", tm->tm_min);
+	return t_strdup_printf("%d", tm->tm_min);
 }
 
 static const char *ext_date_second_part_get
 (struct tm *tm, int zone_offset ATTR_UNUSED)
 {
-	return t_strdup_printf("%02d", tm->tm_sec);
+	return t_strdup_printf("%d", tm->tm_sec);
 }
 
 static const char *ext_date_time_part_get
@@ -339,17 +348,35 @@ static const char *ext_date_iso8601_part_get
 static const char *ext_date_std11_part_get
 (struct tm *tm, int zone_offset)
 {
-	return "";
+	return t_strdup_printf("%s, %02d %s %04d %02d:%02d:%02d %s",
+		weekday_names[tm->tm_wday],
+		tm->tm_mday,
+		month_names[tm->tm_mon],
+		tm->tm_year+1900,
+		tm->tm_hour, tm->tm_min, tm->tm_sec, 
+		ext_date_zone_part_get(tm, zone_offset));
 }
 
 static const char *ext_date_zone_part_get
 (struct tm *tm ATTR_UNUSED, int zone_offset)
 {
-	return "";
+	bool negative;
+	int offset = zone_offset;
+
+	if (zone_offset >= 0)
+		negative = FALSE;
+	else {
+		negative = TRUE;
+		offset = -offset;
+	}
+
+	return t_strdup_printf
+		("%c%02d%02d", negative ? '-' : '+', offset / 60, offset % 60);
 }
 
-static const char *ext_date_weekday_part_get(struct tm *tm, int zone_offset)
+static const char *ext_date_weekday_part_get
+(struct tm *tm, int zone_offset ATTR_UNUSED)
 {
-	return "";
+	return t_strdup_printf("%d", tm->tm_wday);
 }
 
-- 
GitLab