X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/d22b8a59995829bc14b4490b9bddd95346e0585d..refs/heads/master:/lib/macros.c
diff --git a/lib/macros.c b/lib/macros.c
index 4d3b9a0..3639bcb 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
@@ -69,7 +63,7 @@ struct expansion {
/** @brief Callback (cast to appropriate type)
*
* Cast to @ref mx_simple_callback or @ref mx_magic_callback as required. */
- void (*callback)();
+ void (*callback)(void);
/** @brief Macro definition
*
@@ -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);
@@ -338,7 +332,7 @@ static int mx__register(unsigned flags,
int min,
int max,
char **args,
- void (*callback)(),
+ void (*callback)(void),
const struct mx_node *definition) {
struct expansion e[1];
@@ -363,7 +357,7 @@ void mx_register(const char *name,
int min,
int max,
mx_simple_callback *callback) {
- mx__register(EXP_SIMPLE, name, min, max, 0, (void (*)())callback, 0);
+ mx__register(EXP_SIMPLE, name, min, max, 0, (void (*)(void))callback, 0);
}
/** @brief Register a magic expansion rule
@@ -376,7 +370,7 @@ void mx_register_magic(const char *name,
int min,
int max,
mx_magic_callback *callback) {
- mx__register(EXP_MAGIC, name, min, max, 0, (void (*)())callback, 0);
+ mx__register(EXP_MAGIC, name, min, max, 0, (void (*)(void))callback, 0);
}
/** @brief Register a macro
@@ -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;
}