-/* $Id: man_validate.c,v 1.24 2009/08/22 09:10:38 kristaps Exp $ */
+/* $Id: man_validate.c,v 1.28 2010/01/01 17:14:28 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <sys/types.h>
#include <assert.h>
static int check_bline(CHKARGS);
static int check_eq0(CHKARGS);
-static int check_eq1(CHKARGS);
+static int check_le1(CHKARGS);
static int check_ge2(CHKARGS);
static int check_le5(CHKARGS);
static int check_par(CHKARGS);
static int check_part(CHKARGS);
static int check_root(CHKARGS);
static int check_sec(CHKARGS);
-static int check_sp(CHKARGS);
static int check_text(CHKARGS);
static v_check posts_eq0[] = { check_eq0, NULL };
static v_check posts_par[] = { check_par, NULL };
static v_check posts_part[] = { check_part, NULL };
static v_check posts_sec[] = { check_sec, NULL };
-static v_check posts_sp[] = { check_sp, NULL };
+static v_check posts_sp[] = { check_le1, NULL };
static v_check pres_bline[] = { check_bline, NULL };
static const struct man_valid man_valids[MAN_MAX] = {
{ pres_bline, posts_eq0 }, /* br */
- { pres_bline, posts_ge2_le5 }, /* TH */
+ { pres_bline, posts_ge2_le5 }, /* TH */ /* FIXME: make sure capitalised. */
{ pres_bline, posts_sec }, /* SH */
{ pres_bline, posts_sec }, /* SS */
{ pres_bline, posts_par }, /* TP */
{ NULL, posts_part }, /* RS */
{ NULL, NULL }, /* DT */
{ NULL, NULL }, /* UC */
+ { NULL, NULL }, /* PD */
};
}
INEQ_DEFINE(0, ==, eq0)
-INEQ_DEFINE(1, ==, eq1)
+INEQ_DEFINE(1, <=, le1)
INEQ_DEFINE(2, >=, ge2)
INEQ_DEFINE(5, <=, le5)
-static int
-check_sp(CHKARGS)
-{
- long lval;
- char *ep, *buf;
-
- if (NULL == n->child)
- return(1);
- else if ( ! check_eq1(m, n))
- return(0);
-
- assert(MAN_TEXT == n->child->type);
- buf = n->child->string;
- assert(buf);
-
- /* From OpenBSD's strtol(3). */
-
- errno = 0;
- lval = strtol(buf, &ep, 10);
- if (buf[0] == '\0' || *ep != '\0')
- return(man_nerr(m, n->child, WNUMFMT));
-
- if ((errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) ||
- (lval > INT_MAX || lval < 0))
- return(man_nerr(m, n->child, WNUMFMT));
-
- return(1);
-}
-
-
static int
check_sec(CHKARGS)
{