-/* $Id: mdocml.c,v 1.8 2008/11/23 22:30:53 kristaps Exp $ */
+/* $Id: mdocml.c,v 1.13 2008/11/27 17:27:50 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
#include "libmdocml.h"
-#define BUFFER_IN_DEF BUFSIZ
-#define BUFFER_OUT_DEF BUFSIZ
+#define BUFFER_IN_DEF BUFSIZ /* See begin_bufs. */
+#define BUFFER_OUT_DEF BUFSIZ /* See begin_bufs. */
-static void usage(void);
-static int begin_io(const struct md_args *,
+static void usage(void);
+
+static int begin_io(const struct md_args *,
char *, char *);
-static int leave_io(const struct md_buf *,
+static int leave_io(const struct md_buf *,
const struct md_buf *, int);
-static int begin_bufs(const struct md_args *,
+static int begin_bufs(const struct md_args *,
struct md_buf *, struct md_buf *);
static int leave_bufs(const struct md_buf *,
const struct md_buf *, int);
extern int optind;
out = in = NULL;
+
+ (void)memset(&args, 0, sizeof(struct md_args));
- while (-1 != (c = getopt(argc, argv, "o:")))
+ while (-1 != (c = getopt(argc, argv, "o:vW")))
switch (c) {
case ('o'):
out = optarg;
break;
+ case ('v'):
+ args.verbosity++;
+ break;
+ case ('W'):
+ args.warnings |= MD_WARN_ALL;
+ break;
default:
usage();
return(1);
if (1 == argc)
in = *argv++;
- args.type = MD_HTML4_STRICT;
- args.dbg = MD_DBG_TREE;
+ args.type = MD_DUMMY;
return(begin_io(&args, out ? out : "-", in ? in : "-"));
}
+/*
+ * Close out file descriptors opened in begin_io. If the descriptor
+ * refers to stdin/stdout, then do nothing.
+ */
static int
leave_io(const struct md_buf *out,
const struct md_buf *in, int c)
}
+/*
+ * Open file descriptors or assign stdin/stdout, if dictated by the "-"
+ * token instead of a filename.
+ */
static int
begin_io(const struct md_args *args, char *out, char *in)
{
}
+/*
+ * Free buffers allocated in begin_bufs.
+ */
static int
leave_bufs(const struct md_buf *out,
const struct md_buf *in, int c)
}
+/*
+ * Allocate buffers to the maximum of either the input file's blocksize
+ * or BUFFER_IN_DEF/BUFFER_OUT_DEF, which should be around BUFSIZE.
+ */
static int
begin_bufs(const struct md_args *args,
struct md_buf *out, struct md_buf *in)
if (-1 == fstat(in->fd, &stin)) {
warn("%s", in->name);
return(1);
- } else if (0 == stin.st_size) {
+ } else if (STDIN_FILENO != in->fd && 0 == stin.st_size) {
warnx("%s: empty file", in->name);
return(1);
} else if (-1 == fstat(out->fd, &stout)) {
{
extern char *__progname;
- (void)printf("usage: %s [-o outfile] [infile]\n", __progname);
+ (void)printf("usage: %s [-vW] [-o outfile] [infile]\n", __progname);
}