]> git.cameronkatri.com Git - mandoc.git/blob - eqn.c
Don't let empty strings into the makewhatis keyword database.
[mandoc.git] / eqn.c
1 /* $Id: eqn.c,v 1.4 2011/03/22 09:48:13 kristaps Exp $ */
2 /*
3 * Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17 #ifdef HAVE_CONFIG_H
18 #include "config.h"
19 #endif
20
21 #include <assert.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <time.h>
26
27 #include "mandoc.h"
28 #include "libmandoc.h"
29 #include "libroff.h"
30
31 /* ARGSUSED */
32 enum rofferr
33 eqn_read(struct eqn_node **epp, int ln, const char *p, int offs)
34 {
35 size_t sz;
36 struct eqn_node *ep;
37
38 if (0 == strcmp(p, ".EN")) {
39 *epp = NULL;
40 return(ROFF_EQN);
41 }
42
43 ep = *epp;
44
45 sz = strlen(&p[offs]);
46 ep->eqn.data = mandoc_realloc(ep->eqn.data, ep->eqn.sz + sz + 1);
47 if (0 == ep->eqn.sz)
48 *ep->eqn.data = '\0';
49
50 ep->eqn.sz += sz;
51 strlcat(ep->eqn.data, &p[offs], ep->eqn.sz + 1);
52 return(ROFF_IGN);
53 }
54
55 struct eqn_node *
56 eqn_alloc(int pos, int line)
57 {
58 struct eqn_node *p;
59
60 p = mandoc_calloc(1, sizeof(struct eqn_node));
61 p->eqn.line = line;
62 p->eqn.pos = pos;
63
64 return(p);
65 }
66
67 /* ARGSUSED */
68 void
69 eqn_end(struct eqn_node *e)
70 {
71
72 /* Nothing to do. */
73 }
74
75 void
76 eqn_free(struct eqn_node *p)
77 {
78
79 free(p->eqn.data);
80 free(p);
81 }