aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2019-06-30 16:02:48 +0300
committerSergey Poznyakoff <gray@gnu.org>2019-06-30 16:02:48 +0300
commite7ac13a57d0b8d144f973d863d025b6ca7f654f0 (patch)
treecc316731c22da7bb99d4c6e1b35ee0e591694f69
parent55130b6b78a343c213147621a6543b0c7a1eb23f (diff)
downloadrush-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--NEWS2
-rw-r--r--configure.ac2
-rw-r--r--src/cfgram.y17
-rw-r--r--src/config.c2
-rw-r--r--src/rush.c20
-rw-r--r--src/rush.h7
-rw-r--r--src/transform.c35
7 files changed, 55 insertions, 30 deletions
diff --git a/NEWS b/NEWS
index 44bc13c..254932d 100644
--- a/NEWS
+++ b/NEWS
@@ -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
diff --git a/src/rush.c b/src/rush.c
index eea76aa..5275c0b 100644
--- a/src/rush.c
+++ b/src/rush.c
@@ -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"));
diff --git a/src/rush.h b/src/rush.h
index f0dc1f1..d54b2b0 100644
--- a/src/rush.h
+++ b/src/rush.h
@@ -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;
}

Return to:

Send suggestions and report system problems to the System administrator.