aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/man_validate.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2011-03-07 01:35:51 +0000
committerIngo Schwarze <schwarze@openbsd.org>2011-03-07 01:35:51 +0000
commit04cc425ad5987ba914232718ff8bbd5ef418b4d6 (patch)
treefffb227f8453437d1a80c4109593664bef06d4f4 /man_validate.c
parent130d794d1e169870967f8cbb047c5a35891cbfb7 (diff)
downloadmandoc-04cc425ad5987ba914232718ff8bbd5ef418b4d6.tar.gz
mandoc-04cc425ad5987ba914232718ff8bbd5ef418b4d6.tar.zst
mandoc-04cc425ad5987ba914232718ff8bbd5ef418b4d6.zip
Clean up date handling,
as a first step to get rid of the frequent petty warnings in this area: - always store dates as strings, not as seconds since the Epoch - for input, try the three most common formats everywhere - for unrecognized format, just pass the date though verbatim - when there is no date at all, still use the current date Originally triggered by a one-line patch from Tim van der Molen, <tbvdm at xs4all dot nl>, which is included here. Feedback and OK on manual parts from jmc@. "please check this in" kristaps@
Diffstat (limited to 'man_validate.c')
-rw-r--r--man_validate.c40
1 files changed, 16 insertions, 24 deletions
diff --git a/man_validate.c b/man_validate.c
index d98862e9..c09ab36c 100644
--- a/man_validate.c
+++ b/man_validate.c
@@ -1,6 +1,7 @@
-/* $Id: man_validate.c,v 1.62 2011/02/09 09:18:15 kristaps Exp $ */
+/* $Id: man_validate.c,v 1.63 2011/03/07 01:35:51 schwarze Exp $ */
/*
- * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -194,8 +195,9 @@ check_root(CHKARGS)
*/
m->meta.title = mandoc_strdup("unknown");
- m->meta.date = time(NULL);
m->meta.msec = mandoc_strdup("1");
+ m->meta.date = mandoc_normdate(NULL,
+ m->msg, m->data, n->line, n->pos);
}
return(1);
@@ -298,7 +300,7 @@ check_ft(CHKARGS)
}
if (0 == ok) {
- man_vmsg(m, MANDOCERR_BADFONT,
+ man_vmsg(m, MANDOCERR_BADFONT,
n->line, n->pos, "%s", cp);
*cp = '\0';
}
@@ -377,6 +379,7 @@ static int
post_TH(CHKARGS)
{
const char *p;
+ int line, pos;
if (m->meta.title)
free(m->meta.title);
@@ -386,12 +389,13 @@ post_TH(CHKARGS)
free(m->meta.source);
if (m->meta.msec)
free(m->meta.msec);
- if (m->meta.rawdate)
- free(m->meta.rawdate);
+ if (m->meta.date)
+ free(m->meta.date);
- m->meta.title = m->meta.vol = m->meta.rawdate =
+ line = n->line;
+ pos = n->pos;
+ m->meta.title = m->meta.vol = m->meta.date =
m->meta.msec = m->meta.source = NULL;
- m->meta.date = 0;
/* ->TITLE<- MSEC DATE SOURCE VOL */
@@ -419,24 +423,12 @@ post_TH(CHKARGS)
/* TITLE MSEC ->DATE<- SOURCE VOL */
- /*
- * Try to parse the date. If this works, stash the epoch (this
- * is optimal because we can reformat it in the canonical form).
- * If it doesn't parse, isn't specified at all, or is an empty
- * string, then use the current date.
- */
-
if (n)
n = n->next;
- if (n && n->string && *n->string) {
- m->meta.date = mandoc_a2time
- (MTIME_ISO_8601, n->string);
- if (0 == m->meta.date) {
- man_nmsg(m, n, MANDOCERR_BADDATE);
- m->meta.rawdate = mandoc_strdup(n->string);
- }
- } else
- m->meta.date = time(NULL);
+ if (n)
+ pos = n->pos;
+ m->meta.date = mandoc_normdate(n ? n->string : NULL,
+ m->msg, m->data, line, pos);
/* TITLE MSEC DATE ->SOURCE<- VOL */