summaryrefslogtreecommitdiffabout
path: root/src/main.c
Side-by-side diff
Diffstat (limited to 'src/main.c') (more/less context) (ignore whitespace changes)
-rw-r--r--src/main.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/main.c b/src/main.c
index 01fd14b..3d0264c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -550,6 +550,7 @@ parse_opt(int key, char *arg, struct argp_state *state)
case 'v':
{
char *p;
+ struct locus locus = { "<command line>", 1, 0 };
p = strchr(arg, '=');
if (!p)
@@ -557,7 +558,7 @@ parse_opt(int key, char *arg, struct argp_state *state)
_("expected assignment, but found `%s'"),
arg);
*p++ = 0;
- defer_initialize_variable(arg, p);
+ defer_initialize_variable(arg, p, &locus);
break;
}
@@ -716,7 +717,9 @@ cb_set_variable(void *data, mu_config_value_t *arg)
{
const char *value;
char *alloc_str = NULL;
-
+ struct mu_locus mloc;
+ struct locus locus;
+
if (mu_cfg_assert_value_type(arg, MU_CFG_ARRAY))
return 1;
if (arg->v.arg.c < 2) {
@@ -749,8 +752,25 @@ cb_set_variable(void *data, mu_config_value_t *arg)
__FILE__, __LINE__);
abort();
}
-
- defer_initialize_variable(arg->v.arg.v[0].v.string, value);
+
+ locus.leng = 0;
+ if (mu_stream_ioctl (mu_strerr, MU_IOCTL_LOGSTREAM,
+ MU_IOCTL_LOGSTREAM_GET_LOCUS, &mloc)) {
+ locus.file = "<unknown>";
+ locus.line = 0;
+ locus.point = 0;
+ } else {
+ if (mloc.mu_file) {
+ struct literal *lit = string_alloc(mloc.mu_file,
+ strlen(mloc.mu_file));
+ free(mloc.mu_file);
+ locus.file = lit->text;
+ } else
+ locus.file = "<unknown>";
+ locus.line = mloc.mu_line;
+ locus.point = mloc.mu_col;
+ }
+ defer_initialize_variable(arg->v.arg.v[0].v.string, value, &locus);
free(alloc_str);
return 0;
}

Return to:

Send suggestions and report system problems to the System administrator.