-static int pre_an(PRE_ARGS);
-static int pre_bd(PRE_ARGS);
-static int pre_bl(PRE_ARGS);
-static int pre_cd(PRE_ARGS);
-static int pre_dd(PRE_ARGS);
-static int pre_display(PRE_ARGS);
-static int pre_dt(PRE_ARGS);
-static int pre_er(PRE_ARGS);
-static int pre_ex(PRE_ARGS);
-static int pre_fd(PRE_ARGS);
-static int pre_it(PRE_ARGS);
-static int pre_lb(PRE_ARGS);
-static int pre_os(PRE_ARGS);
-static int pre_rv(PRE_ARGS);
-static int pre_sh(PRE_ARGS);
-static int pre_ss(PRE_ARGS);
-static int herr_ge1(POST_ARGS);
-static int hwarn_le1(POST_ARGS);
-static int herr_eq0(POST_ARGS);
-static int eerr_eq0(POST_ARGS);
-static int eerr_le2(POST_ARGS);
-static int eerr_eq1(POST_ARGS);
-static int eerr_ge1(POST_ARGS);
-static int ewarn_eq0(POST_ARGS);
-static int ewarn_eq1(POST_ARGS);
-static int bwarn_ge1(POST_ARGS);
-static int hwarn_eq1(POST_ARGS);
-static int ewarn_ge1(POST_ARGS);
-static int ebool(POST_ARGS);
-static int post_an(POST_ARGS);
-static int post_args(POST_ARGS);
-static int post_at(POST_ARGS);
-static int post_bf(POST_ARGS);
-static int post_bl(POST_ARGS);
-static int post_bl_head(POST_ARGS);
-static int post_it(POST_ARGS);
-static int post_nm(POST_ARGS);
-static int post_root(POST_ARGS);
-static int post_sh(POST_ARGS);
-static int post_sh_body(POST_ARGS);
-static int post_sh_head(POST_ARGS);
-static int post_st(POST_ARGS);
-
-#define vwarn(m, t) nwarn((m), (m)->last, (t))
-#define verr(m, t) nerr((m), (m)->last, (t))
-#define nwarn(m, n, t) perr((m), (n)->line, (n)->pos, (t), 0)
-#define nerr(m, n, t) perr((m), (n)->line, (n)->pos, (t), 1)
-
-static v_pre pres_an[] = { pre_an, NULL };
-static v_pre pres_bd[] = { pre_display, pre_bd, NULL };
-static v_pre pres_bl[] = { pre_bl, NULL };
-static v_pre pres_cd[] = { pre_cd, NULL };
-static v_pre pres_dd[] = { pre_dd, NULL };
-static v_pre pres_d1[] = { pre_display, NULL };
-static v_pre pres_dt[] = { pre_dt, NULL };
-static v_pre pres_er[] = { pre_er, NULL };
-static v_pre pres_ex[] = { pre_ex, NULL };
-static v_pre pres_fd[] = { pre_fd, NULL };
-static v_pre pres_it[] = { pre_it, NULL };
-static v_pre pres_lb[] = { pre_lb, NULL };
-static v_pre pres_os[] = { pre_os, NULL };
-static v_pre pres_rv[] = { pre_rv, NULL };
-static v_pre pres_sh[] = { pre_sh, NULL };
-static v_pre pres_ss[] = { pre_ss, NULL };
-static v_post posts_bool[] = { eerr_eq1, ebool, NULL };
-static v_post posts_bd[] = { herr_eq0, bwarn_ge1, NULL };
-static v_post posts_text[] = { eerr_ge1, NULL };
-static v_post posts_wtext[] = { ewarn_ge1, NULL };
-static v_post posts_notext[] = { eerr_eq0, NULL };
-static v_post posts_wline[] = { bwarn_ge1, herr_eq0, NULL };
-static v_post posts_sh[] = { herr_ge1, bwarn_ge1, post_sh, NULL };
-static v_post posts_bl[] = { bwarn_ge1, post_bl, NULL };
-static v_post posts_it[] = { post_it, NULL };
-static v_post posts_in[] = { ewarn_eq1, NULL };
-static v_post posts_ss[] = { herr_ge1, NULL };
-static v_post posts_pf[] = { eerr_eq1, NULL };
-static v_post posts_lb[] = { eerr_eq1, NULL };
-static v_post posts_st[] = { eerr_eq1, post_st, NULL };
-static v_post posts_pp[] = { ewarn_eq0, NULL };
-static v_post posts_ex[] = { eerr_eq0, post_args, NULL };
-static v_post posts_rv[] = { eerr_eq0, post_args, NULL };
-static v_post posts_an[] = { post_an, NULL };
-static v_post posts_at[] = { post_at, NULL };
-static v_post posts_xr[] = { eerr_ge1, eerr_le2, NULL };
-static v_post posts_nm[] = { post_nm, NULL };
-static v_post posts_bf[] = { hwarn_le1, post_bf, NULL };
-static v_post posts_fo[] = { hwarn_eq1, bwarn_ge1, NULL };
+
+#ifdef __linux__
+extern size_t strlcat(char *, const char *, size_t);
+#endif
+
+static int berr_ge1(POST_ARGS);
+static int bwarn_ge1(POST_ARGS);
+static int ebool(POST_ARGS);
+static int eerr_eq0(POST_ARGS);
+static int eerr_eq1(POST_ARGS);
+static int eerr_ge1(POST_ARGS);
+static int eerr_le2(POST_ARGS);
+static int ewarn_ge1(POST_ARGS);
+static int herr_eq0(POST_ARGS);
+static int herr_ge1(POST_ARGS);
+static int hwarn_eq1(POST_ARGS);
+static int hwarn_le1(POST_ARGS);
+
+static int post_an(POST_ARGS);
+static int post_args(POST_ARGS);
+static int post_at(POST_ARGS);
+static int post_bf(POST_ARGS);
+static int post_bl(POST_ARGS);
+static int post_bl_head(POST_ARGS);
+static int post_it(POST_ARGS);
+static int post_lb(POST_ARGS);
+static int post_nm(POST_ARGS);
+static int post_root(POST_ARGS);
+static int post_sh(POST_ARGS);
+static int post_sh_body(POST_ARGS);
+static int post_sh_head(POST_ARGS);
+static int post_sp(POST_ARGS);
+static int post_st(POST_ARGS);
+static int pre_an(PRE_ARGS);
+static int pre_bd(PRE_ARGS);
+static int pre_bl(PRE_ARGS);
+static int pre_cd(PRE_ARGS);
+static int pre_dd(PRE_ARGS);
+static int pre_display(PRE_ARGS);
+static int pre_dt(PRE_ARGS);
+static int pre_er(PRE_ARGS);
+static int pre_ex(PRE_ARGS);
+static int pre_fd(PRE_ARGS);
+static int pre_it(PRE_ARGS);
+static int pre_lb(PRE_ARGS);
+static int pre_os(PRE_ARGS);
+static int pre_rv(PRE_ARGS);
+static int pre_sh(PRE_ARGS);
+static int pre_ss(PRE_ARGS);
+
+static v_post posts_an[] = { post_an, NULL };
+static v_post posts_at[] = { post_at, NULL };
+static v_post posts_bd[] = { herr_eq0, bwarn_ge1, NULL };
+static v_post posts_bf[] = { hwarn_le1, post_bf, NULL };
+static v_post posts_bl[] = { bwarn_ge1, post_bl, NULL };
+static v_post posts_bool[] = { eerr_eq1, ebool, NULL };
+static v_post posts_ex[] = { eerr_eq0, post_args, NULL };
+static v_post posts_fo[] = { hwarn_eq1, bwarn_ge1, NULL };
+static v_post posts_in[] = { eerr_eq1, NULL };
+static v_post posts_it[] = { post_it, NULL };
+static v_post posts_lb[] = { eerr_eq1, post_lb, NULL };
+static v_post posts_nd[] = { berr_ge1, NULL };
+static v_post posts_nm[] = { post_nm, NULL };
+static v_post posts_notext[] = { eerr_eq0, NULL };
+static v_post posts_pf[] = { eerr_eq1, NULL };
+static v_post posts_rv[] = { eerr_eq0, post_args, NULL };
+static v_post posts_sh[] = { herr_ge1, bwarn_ge1, post_sh, NULL };
+static v_post posts_sp[] = { post_sp, NULL };
+static v_post posts_ss[] = { herr_ge1, NULL };
+static v_post posts_st[] = { eerr_eq1, post_st, NULL };
+static v_post posts_text[] = { eerr_ge1, NULL };
+static v_post posts_wline[] = { bwarn_ge1, herr_eq0, NULL };
+static v_post posts_wtext[] = { ewarn_ge1, NULL };
+static v_post posts_xr[] = { eerr_ge1, eerr_le2, NULL };
+static v_pre pres_an[] = { pre_an, NULL };
+static v_pre pres_bd[] = { pre_display, pre_bd, NULL };
+static v_pre pres_bl[] = { pre_bl, NULL };
+static v_pre pres_cd[] = { pre_cd, NULL };
+static v_pre pres_d1[] = { pre_display, NULL };
+static v_pre pres_dd[] = { pre_dd, NULL };
+static v_pre pres_dt[] = { pre_dt, NULL };
+static v_pre pres_er[] = { pre_er, NULL };
+static v_pre pres_ex[] = { pre_ex, NULL };
+static v_pre pres_fd[] = { pre_fd, NULL };
+static v_pre pres_it[] = { pre_it, NULL };
+static v_pre pres_lb[] = { pre_lb, NULL };
+static v_pre pres_os[] = { pre_os, NULL };
+static v_pre pres_rv[] = { pre_rv, NULL };
+static v_pre pres_sh[] = { pre_sh, NULL };
+static v_pre pres_ss[] = { pre_ss, NULL };