about summary refs log tree commit diff
path: root/chat.c
diff options
context:
space:
mode:
Diffstat (limited to 'chat.c')
-rw-r--r--chat.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/chat.c b/chat.c
index 6458925..7de427c 100644
--- a/chat.c
+++ b/chat.c
@@ -40,6 +40,7 @@
 #include <sys/stat.h>
 #include <sys/wait.h>
 #include <sysexits.h>
+#include <time.h>
 #include <tls.h>
 #include <unistd.h>
 
@@ -124,6 +125,16 @@ static void parseHash(char *str) {
 	if (*str) hashBound = strtoul(&str[1], NULL, 0);
 }
 
+static void parseTimestamp(const char *format) {
+	uiTime.enable = true;
+	if (!format) return;
+	char buf[TimeCap];
+	uiTime.format = format;
+	struct tm *time = localtime(&(time_t) { -22100400 });
+	uiTime.width = strftime(buf, sizeof(buf), format, time);
+	if (!uiTime.width) errx(EX_USAGE, "invalid timestamp format: %s", format);
+}
+
 #ifdef __OpenBSD__
 
 static void unveilConfig(const char *name) {
@@ -197,6 +208,7 @@ int main(int argc, char *argv[]) {
 		{ .val = 'O', .name = "open", required_argument },
 		{ .val = 'R', .name = "restrict", no_argument },
 		{ .val = 'S', .name = "bind", required_argument },
+		{ .val = 'T', .name = "timestamp", optional_argument },
 		{ .val = 'a', .name = "sasl-plain", required_argument },
 		{ .val = 'c', .name = "cert", required_argument },
 		{ .val = 'e', .name = "sasl-external", no_argument },
@@ -234,6 +246,7 @@ int main(int argc, char *argv[]) {
 			break; case 'O': utilPush(&urlOpenUtil, optarg);
 			break; case 'R': self.restricted = true;
 			break; case 'S': bind = optarg;
+			break; case 'T': parseTimestamp(optarg);
 			break; case 'a': sasl = true; self.plain = optarg;
 			break; case 'c': cert = optarg;
 			break; case 'e': sasl = true;