aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_argv.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-04-03 14:02:10 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-04-03 14:02:10 +0000
commit59c7bc58d7303ddeb6eb395dc50a072f2ed339f5 (patch)
tree7f3504c6d42d01d731e46758220cef92739731a7 /mdoc_argv.c
parenta907445c2b200a31f661cd37cd622ec9328eb04d (diff)
downloadmandoc-59c7bc58d7303ddeb6eb395dc50a072f2ed339f5.tar.gz
mandoc-59c7bc58d7303ddeb6eb395dc50a072f2ed339f5.tar.zst
mandoc-59c7bc58d7303ddeb6eb395dc50a072f2ed339f5.zip
Merged Ingo Schwarze's patch (plus documentation) for removing extraneous list types, which happens fairly often.
Diffstat (limited to 'mdoc_argv.c')
-rw-r--r--mdoc_argv.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/mdoc_argv.c b/mdoc_argv.c
index 52483803..47221073 100644
--- a/mdoc_argv.c
+++ b/mdoc_argv.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_argv.c,v 1.36 2010/03/31 07:42:04 kristaps Exp $ */
+/* $Id: mdoc_argv.c,v 1.37 2010/04/03 14:02:10 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -288,7 +288,7 @@ mdoc_argv(struct mdoc *m, int line, enum mdoct tok,
void
mdoc_argv_free(struct mdoc_arg *p)
{
- int i, j;
+ int i;
if (NULL == p)
return;
@@ -300,23 +300,28 @@ mdoc_argv_free(struct mdoc_arg *p)
}
assert(p->argc);
- /* LINTED */
- for (i = 0; i < (int)p->argc; i++) {
- if (0 == p->argv[i].sz)
- continue;
- if (NULL == p->argv[i].value)
- continue;
+ for (i = (int)p->argc - 1; i >= 0; i--)
+ mdoc_argn_free(p, i);
+
+ free(p->argv);
+ free(p);
+}
+
- /* LINTED */
- for (j = 0; j < (int)p->argv[i].sz; j++)
- if (p->argv[i].value[j])
- free(p->argv[i].value[j]);
+void
+mdoc_argn_free(struct mdoc_arg *p, int iarg)
+{
+ struct mdoc_argv *arg = &p->argv[iarg];
+ int j;
- free(p->argv[i].value);
+ if (arg->sz && arg->value) {
+ for (j = (int)arg->sz - 1; j >= 0; j--)
+ free(arg->value[j]);
+ free(arg->value);
}
- free(p->argv);
- free(p);
+ for (--p->argc; iarg < (int)p->argc; iarg++)
+ p->argv[iarg] = p->argv[iarg+1];
}