* Struct-ifying file_status
@ 2011-03-14 17:03 Kristaps Dzonsons
0 siblings, 0 replies; only message in thread
From: Kristaps Dzonsons @ 2011-03-14 17:03 UTC (permalink / raw)
To: tech, Ingo Schwarze
[-- Attachment #1: Type: text/plain, Size: 266 bytes --]
Hi,
I'm slowly moving the file-read and pre-parsing main.c stuff into its
own file. Unfortunately, there's lots of goo in these files and this
will take some care. Any objections to this first patch, which makes
file_status local to struct curparse?
Kristaps
[-- Attachment #2: patch.file_status.txt --]
[-- Type: text/plain, Size: 4723 bytes --]
Index: main.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/main.c,v
retrieving revision 1.147
diff -u -r1.147 main.c
--- main.c 7 Mar 2011 01:35:51 -0000 1.147
+++ main.c 14 Mar 2011 17:01:18 -0000
@@ -78,11 +78,12 @@
};
struct curparse {
- const char *file; /* Current parse. */
- int fd; /* Current parse. */
- int line; /* Line number in the file. */
- enum mandoclevel wlevel; /* Ignore messages below this. */
- int wstop; /* Stop after a file with a warning. */
+ const char *file; /* current file-name */
+ enum mandoclevel file_status; /* error status of current parse */
+ int fd; /* current file-descriptor */
+ int line; /* line number in the file */
+ enum mandoclevel wlevel; /* ignore messages below this */
+ int wstop; /* stop after a file with a warning */
enum intt inttype; /* which parser to use */
struct man *pman; /* persistent man parser */
struct mdoc *pmdoc; /* persistent mdoc parser */
@@ -241,7 +242,6 @@
static int woptions(struct curparse *, char *);
static const char *progname;
-static enum mandoclevel file_status = MANDOCLEVEL_OK;
static enum mandoclevel exit_status = MANDOCLEVEL_OK;
int
@@ -378,7 +378,7 @@
if (-1 == (fd = open(file, O_RDONLY, 0))) {
perror(file);
- file_status = MANDOCLEVEL_SYSERR;
+ curp->file_status = MANDOCLEVEL_SYSERR;
return(0);
}
@@ -396,7 +396,7 @@
if (-1 == close(fd))
perror(file);
- return(MANDOCLEVEL_FATAL > file_status ? 1 : 0);
+ return(MANDOCLEVEL_FATAL > curp->file_status ? 1 : 0);
}
@@ -500,7 +500,7 @@
curp->mdoc = NULL;
curp->man = NULL;
- file_status = MANDOCLEVEL_OK;
+ curp->file_status = MANDOCLEVEL_OK;
/* Make sure the mandotory roff parser is initialised. */
@@ -513,26 +513,26 @@
pdesc(curp);
- if (MANDOCLEVEL_FATAL <= file_status)
+ if (MANDOCLEVEL_FATAL <= curp->file_status)
goto cleanup;
/* NOTE a parser may not have been assigned, yet. */
if ( ! (curp->man || curp->mdoc)) {
fprintf(stderr, "%s: Not a manual\n", curp->file);
- file_status = MANDOCLEVEL_FATAL;
+ curp->file_status = MANDOCLEVEL_FATAL;
goto cleanup;
}
/* Clean up the parse routine ASTs. */
if (curp->mdoc && ! mdoc_endparse(curp->mdoc)) {
- assert(MANDOCLEVEL_FATAL <= file_status);
+ assert(MANDOCLEVEL_FATAL <= curp->file_status);
goto cleanup;
}
if (curp->man && ! man_endparse(curp->man)) {
- assert(MANDOCLEVEL_FATAL <= file_status);
+ assert(MANDOCLEVEL_FATAL <= curp->file_status);
goto cleanup;
}
@@ -544,7 +544,7 @@
* the requested level, do not produce output.
*/
- if (MANDOCLEVEL_OK != file_status && curp->wstop)
+ if (MANDOCLEVEL_OK != curp->file_status && curp->wstop)
goto cleanup;
/* If unset, allocate output dev now (if applicable). */
@@ -619,8 +619,8 @@
assert(curp->roff);
roff_reset(curp->roff);
- if (exit_status < file_status)
- exit_status = file_status;
+ if (exit_status < curp->file_status)
+ exit_status = curp->file_status;
return;
}
@@ -639,7 +639,7 @@
*/
if ( ! read_whole_file(curp, &blk, &with_mmap)) {
- file_status = MANDOCLEVEL_SYSERR;
+ curp->file_status = MANDOCLEVEL_SYSERR;
return;
}
@@ -655,6 +655,11 @@
free(blk.buf);
}
+/*
+ * Main parse routine for an opened file. This is called for each
+ * opened file and simply loops around the full input file, possibly
+ * nesting (i.e., with `so').
+ */
static void
parsebuf(struct curparse *curp, struct buf blk, int start)
{
@@ -666,12 +671,6 @@
int lnn; /* line number in the real file */
unsigned char c;
- /*
- * Main parse routine for an opened file. This is called for
- * each opened file and simply loops around the full input file,
- * possibly nesting (i.e., with `so').
- */
-
memset(&ln, 0, sizeof(struct buf));
lnn = curp->line;
@@ -816,7 +815,7 @@
pos = 0;
continue;
case (ROFF_ERR):
- assert(MANDOCLEVEL_FATAL <= file_status);
+ assert(MANDOCLEVEL_FATAL <= curp->file_status);
break;
case (ROFF_SO):
if (pfile(ln.buf + of, curp)) {
@@ -833,7 +832,7 @@
* call, make sure we don't continue parsing.
*/
- if (MANDOCLEVEL_FATAL <= file_status)
+ if (MANDOCLEVEL_FATAL <= curp->file_status)
break;
/*
@@ -881,7 +880,7 @@
curp->line, ln.buf, of);
if (0 == rc) {
- assert(MANDOCLEVEL_FATAL <= file_status);
+ assert(MANDOCLEVEL_FATAL <= curp->file_status);
break;
}
@@ -1062,8 +1061,8 @@
fprintf(stderr, ": %s", msg);
fputc('\n', stderr);
- if (file_status < level)
- file_status = level;
+ if (cp->file_status < level)
+ cp->file_status = level;
return(level < MANDOCLEVEL_FATAL);
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2011-03-14 17:04 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-03-14 17:03 Struct-ifying file_status Kristaps Dzonsons
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).