X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/d22b8a59995829bc14b4490b9bddd95346e0585d..c57b3a9e5071a269d44d0ea01210a13ee56ca6fd:/lib/macros.c diff --git a/lib/macros.c b/lib/macros.c index 4d3b9a0..e11c264 100644 --- a/lib/macros.c +++ b/lib/macros.c @@ -2,33 +2,27 @@ * This file is part of DisOrder * Copyright (C) 2008 Richard Kettlewell * - * This program is free software; you can redistribute it and/or modify + * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * along with this program. If not, see . */ /** @file lib/macros.c * @brief Macro expansion */ -#include -#include "types.h" +#include "common.h" -#include #include -#include -#include #include #include #include @@ -203,11 +197,11 @@ const struct mx_node *mx_parse(const char *filename, * and the name. */ dynstr_init(d); if(input == end) - fatal(0, "%s:%d: invalid expansion syntax (truncated)", - filename, e->line); + disorder_fatal(0, "%s:%d: invalid expansion syntax (truncated)", + filename, e->line); if(!isalnum((unsigned char)*input)) - fatal(0, "%s:%d: invalid expansion syntax (unexpected %#x)", - filename, e->line, (unsigned char)*input); + disorder_fatal(0, "%s:%d: invalid expansion syntax (unexpected %#x)", + filename, e->line, (unsigned char)*input); while(input < end && (isalnum((unsigned char)*input) || *input == '-')) dynstr_append(d, *input++); dynstr_terminate(d); @@ -246,9 +240,9 @@ const struct mx_node *mx_parse(const char *filename, } if(input >= end) { /* We ran out of input without encountering a balanced cbracket */ - fatal(0, "%s:%d: unterminated expansion argument '%.*s'", - filename, argument_start_line, - (int)(input - argument_start), argument_start); + disorder_fatal(0, "%s:%d: unterminated expansion argument '%.*s'", + filename, argument_start_line, + (int)(input - argument_start), argument_start); } /* Consistency check */ assert(*input == cbracket); @@ -396,8 +390,8 @@ int mx_register_macro(const char *name, /* This locates the error to the definition, which may be a line or two * beyond the @define command itself. The backtrace generated by * mx_expand() may help more. */ - error(0, "%s:%d: duplicate definition of '%s'", - definition->filename, definition->line, name); + disorder_error(0, "%s:%d: duplicate definition of '%s'", + definition->filename, definition->line, name); #endif return -2; } @@ -438,17 +432,17 @@ int mx_expand(const struct mx_node *m, case MX_EXPANSION: rc = 0; if(!(e = hash_find(expansions, m->name))) { - error(0, "%s:%d: unknown expansion name '%s'", - m->filename, m->line, m->name); + disorder_error(0, "%s:%d: unknown expansion name '%s'", + m->filename, m->line, m->name); if(sink_printf(output, "[['%s' unknown]]", m->name) < 0) return -1; } else if(m->nargs < e->min) { - error(0, "%s:%d: expansion '%s' requires %d args, only %d given", - m->filename, m->line, m->name, e->min, m->nargs); + disorder_error(0, "%s:%d: expansion '%s' requires %d args, only %d given", + m->filename, m->line, m->name, e->min, m->nargs); if(sink_printf(output, "[['%s' too few args]]", m->name) < 0) return -1; } else if(m->nargs > e->max) { - error(0, "%s:%d: expansion '%s' takes at most %d args, but %d given", + disorder_error(0, "%s:%d: expansion '%s' takes at most %d args, but %d given", m->filename, m->line, m->name, e->max, m->nargs); if(sink_printf(output, "[['%s' too many args]]", m->name) < 0) return -1; @@ -494,8 +488,8 @@ int mx_expand(const struct mx_node *m, if(rc) { /* For non-IO errors we generate some backtrace */ if(rc != -1) - error(0, " ...in @%s at %s:%d", - m->name, m->filename, m->line); + disorder_error(0, " ...in @%s at %s:%d", + m->name, m->filename, m->line); return rc; } break; @@ -529,7 +523,7 @@ int mx_expandstr(const struct mx_node *m, } else *sp = 0; if(rc && rc != -1 && what) - error(0, " ...in %s at %s:%d", what, m->filename, m->line); + disorder_error(0, " ...in %s at %s:%d", what, m->filename, m->line); return rc; } @@ -551,11 +545,11 @@ int mx_expand_file(const char *path, const struct mx_node *m; if((fd = open(path, O_RDONLY)) < 0) - fatal(errno, "error opening %s", path); + disorder_fatal(errno, "error opening %s", path); if(fstat(fd, &sb) < 0) - fatal(errno, "error statting %s", path); + disorder_fatal(errno, "error statting %s", path); if(!S_ISREG(sb.st_mode)) - fatal(0, "%s: not a regular file", path); + disorder_fatal(0, "%s: not a regular file", path); sofar = 0; b = xmalloc_noptr(sb.st_size); while(sofar < sb.st_size) { @@ -563,16 +557,16 @@ int mx_expand_file(const char *path, if(n > 0) sofar += n; else if(n == 0) - fatal(0, "unexpected EOF reading %s", path); + disorder_fatal(0, "unexpected EOF reading %s", path); else if(errno != EINTR) - fatal(errno, "error reading %s", path); + disorder_fatal(errno, "error reading %s", path); } xclose(fd); m = mx_parse(path, 1, b, b + sb.st_size); rc = mx_expand(m, output, u); if(rc && rc != -1) /* Mention inclusion in backtrace */ - error(0, " ...in inclusion of file '%s'", path); + disorder_error(0, " ...in inclusion of file '%s'", path); return rc; }