diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2019-06-30 16:02:48 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2019-06-30 16:02:48 +0300 |
commit | e7ac13a57d0b8d144f973d863d025b6ca7f654f0 (patch) | |
tree | cc316731c22da7bb99d4c6e1b35ee0e591694f69 | |
parent | 55130b6b78a343c213147621a6543b0c7a1eb23f (diff) | |
download | rush-e7ac13a57d0b8d144f973d863d025b6ca7f654f0.tar.gz rush-e7ac13a57d0b8d144f973d863d025b6ca7f654f0.tar.bz2 |
Minor fix
* configure.ac: Version 1.9.91
* NEWS: Update.
* src/cfgram.y: Fix calls to compile_transform_expr.
* src/config.c: Likewise.
* src/rush.c (die): Allow for fmt==NULL.
(die_usage): New function.
* src/rush.h (die_usage): New proto.
(compile_transform_expr): Change signature.
* src/transform.c (parse_transform_expr): Take struct cfloc * as
an additional argument. Use it in diagnostics.
(compile_transform_expr): Likewise.
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/cfgram.y | 17 | ||||
-rw-r--r-- | src/config.c | 2 | ||||
-rw-r--r-- | src/rush.c | 20 | ||||
-rw-r--r-- | src/rush.h | 7 | ||||
-rw-r--r-- | src/transform.c | 35 |
7 files changed, 55 insertions, 30 deletions
@@ -3,7 +3,7 @@ See the end of file for copying conditions. Please send bug reports to <bug-rush@gnu.org.ua> -Version 1.9.90 (git) +Version 1.9.91 (git) This version introduces a completely new syntax for the configuration file. Please see the documentation for details. diff --git a/configure.ac b/configure.ac index 94d5cfd..0d7d299 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ # along with GNU Rush. If not, see <http://www.gnu.org/licenses/>. AC_PREREQ(2.63) -AC_INIT([GNU rush], [1.9.90], [bug-rush@gnu.org]) +AC_INIT([GNU rush], [1.9.91], [bug-rush@gnu.org]) AC_CONFIG_SRCDIR([src/rush.c]) AC_CONFIG_HEADER([config.h]) AC_CONFIG_AUX_DIR([build-aux]) diff --git a/src/cfgram.y b/src/cfgram.y index c4acd9e..71d5ebf 100644 --- a/src/cfgram.y +++ b/src/cfgram.y @@ -456,7 +456,8 @@ set_stmt : SET index '=' value node->target.v.arg.ins = 0; node->target.v.arg.idx = $2; node->v.xf.pattern = NULL; - node->v.xf.trans = compile_transform_expr($4, re_flags); + node->v.xf.trans = compile_transform_expr($4, re_flags, + &@4); } | SET index '=' string '~' value { @@ -467,7 +468,8 @@ set_stmt : SET index '=' value node->target.v.arg.ins = 0; node->target.v.arg.idx = $2; node->v.xf.pattern = $4; - node->v.xf.trans = compile_transform_expr($6, re_flags); + node->v.xf.trans = compile_transform_expr($6, re_flags, + &@6); } | INSERT index '=' string '~' value { @@ -478,7 +480,8 @@ set_stmt : SET index '=' value node->target.v.arg.ins = 1; node->target.v.arg.idx = $2; node->v.xf.pattern = $4; - node->v.xf.trans = compile_transform_expr($6, re_flags); + node->v.xf.trans = compile_transform_expr($6, re_flags, + &@6); } | SET IDENT '=' value { @@ -495,7 +498,9 @@ set_stmt : SET index '=' value new_set_node(transform_set, $2, &@2); if (node) { node->v.xf.pattern = NULL; - node->v.xf.trans = compile_transform_expr($4, re_flags); + node->v.xf.trans = compile_transform_expr($4, + re_flags, + &@4); } } | SET IDENT '=' string '~' value @@ -504,7 +509,9 @@ set_stmt : SET index '=' value new_set_node(transform_set, $2, &@2); if (node) { node->v.xf.pattern = $4; - node->v.xf.trans = compile_transform_expr($6, re_flags); + node->v.xf.trans = compile_transform_expr($6, + re_flags, + &@6); } } | UNSET IDENT diff --git a/src/config.c b/src/config.c index 752e692..fcb44df 100644 --- a/src/config.c +++ b/src/config.c @@ -575,7 +575,7 @@ _parse_transform_common(input_buf_ptr ibuf, struct rush_rule *rule, default: abort(); } - node->v.xf.trans = compile_transform_expr(expr, re_flags); + node->v.xf.trans = compile_transform_expr(expr, re_flags, &ibuf->loc); if (env->argc > 1) node->v.xf.pattern = xstrdup(env->argv[0]); else @@ -208,10 +208,12 @@ logmsg(int prio, const char *fmt, ...) void die(enum error_type type, struct rush_i18n *i18n, const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - vlogmsg(LOG_ERR, fmt, ap); - va_end(ap); + if (fmt) { + va_list ap; + va_start(ap, fmt); + vlogmsg(LOG_ERR, fmt, ap); + va_end(ap); + } if (!lint_option) { const char *msg = error_msg[type].text; if (error_msg[type].custom) { @@ -231,6 +233,16 @@ die(enum error_type type, struct rush_i18n *i18n, const char *fmt, ...) } void +die_usage(struct cfloc const *loc, char const *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vcferror(loc, fmt, ap); + va_end(ap); + die(usage_error, NULL, NULL); +} + +void xalloc_die() { die(system_error, NULL, _("Not enough memory")); @@ -323,8 +323,12 @@ extern struct passwd *rush_pw; logmsg(LOG_DEBUG, fmt, __VA_ARGS__); \ } while(0) +struct cfloc; + void die(enum error_type type, struct rush_i18n *i18n, const char *fmt, ...) RUSH_NORETURN RUSH_PRINTFLIKE(3,4); +void die_usage(struct cfloc const *loc, char const *fmt, ...) + RUSH_NORETURN RUSH_PRINTFLIKE(2,3); void logmsg(int prio, const char *fmt, ...) RUSH_PRINTFLIKE(2,3); void vlogmsg(int prio, const char *fmt, va_list ap); @@ -338,7 +342,8 @@ int limits_record_add(limits_record_t lrec, char *str, char **endp); int parse_limits(limits_record_t *plrec, char *str, char **endp); int set_user_limits(const char *name, struct limits_rec *lrec); -transform_t compile_transform_expr (const char *expr, int cflags); +transform_t compile_transform_expr (const char *expr, int cflags, + struct cfloc *loc); char *transform_string (struct transform *tf, const char *input); int post_socket_send(const struct rush_sockaddr *sockaddr, diff --git a/src/transform.c b/src/transform.c index 3d7801d..67c0c74 100644 --- a/src/transform.c +++ b/src/transform.c @@ -142,7 +142,7 @@ add_case_ctl_segment (struct transform *tf, enum case_ctl_type ctl) static const char * parse_transform_expr (struct transform_list *tlist, const char *expr, - int cflags) + int cflags, struct cfloc *loc) { int delim; int i, j, rc; @@ -151,8 +151,9 @@ parse_transform_expr (struct transform_list *tlist, const char *expr, struct transform *tf = new_transform (tlist); if (expr[0] != 's') - die(usage_error, NULL, _("Invalid transform expression: %s"), expr); - + die_usage (loc, "%s", + _("Transform expression must start with 's' followed by a punctuation character")); + delim = expr[1]; /* Scan regular expression */ @@ -161,18 +162,19 @@ parse_transform_expr (struct transform_list *tlist, const char *expr, i++; if (expr[i] != delim) - die(usage_error, NULL, - _("Missing 2nd delimiter in position %d of expression %s"), i, expr); - + die_usage (loc, + _("Missing 2nd delimiter in position %d of expression %s"), + i, expr); + /* Scan replacement expression */ for (j = i + 1; expr[j] && expr[j] != delim; j++) if (expr[j] == '\\' && expr[j+1]) j++; if (expr[j] != delim) - die(usage_error, NULL, - _("Missing trailing delimiter in position %d of expression %s"), - j, expr); + die_usage (loc, + _("Missing trailing delimiter in position %d of expression %s"), + j, expr); /* Check flags */ tf->transform_type = transform_first; @@ -198,8 +200,7 @@ parse_transform_expr (struct transform_list *tlist, const char *expr, break; default: - die(usage_error, NULL, - _("Unknown flag in transform expression: %c"), *p); + die_usage (loc, _("Unknown flag in transform expression: %c"), *p); } if (*p == ';') @@ -216,7 +217,7 @@ parse_transform_expr (struct transform_list *tlist, const char *expr, { char errbuf[512]; regerror (rc, &tf->regex, errbuf, sizeof (errbuf)); - die(usage_error, NULL, _("Invalid transform expression: %s"), errbuf); + die_usage (loc, _("Invalid transform expression: %s"), errbuf); } if (str[0] == '^' || str[strlen (str) - 1] == '$') @@ -243,9 +244,9 @@ parse_transform_expr (struct transform_list *tlist, const char *expr, case '5': case '6': case '7': case '8': case '9': n = strtoul (cur, &cur, 10); if (n > tf->regex.re_nsub) - die(usage_error, NULL, - _("Invalid transform replacement: " - "back reference out of range")); + die_usage (loc, + _("Invalid transform replacement: " + "back reference out of range")); add_backref_segment (tf, n); break; @@ -354,11 +355,11 @@ parse_transform_expr (struct transform_list *tlist, const char *expr, } transform_t -compile_transform_expr (const char *expr, int cflags) +compile_transform_expr (const char *expr, int cflags, struct cfloc *loc) { struct transform_list tlist = { NULL, NULL }; while (*expr) - expr = parse_transform_expr (&tlist, expr, cflags); + expr = parse_transform_expr (&tlist, expr, cflags, loc); return tlist.head; } |