This helps compatibility with certain configurations of musl libc.
Note that the output format on updatedb.conf errors will change somewhat,
and only the first one will be reported followed by immediate exit
(unlike earlier, where all updatedb.conf errors would be output before exit).
Based on a patch by Alfred Persson Forsberg.
#include "lib.h"
#include <algorithm>
#include "lib.h"
#include <algorithm>
/* Fall through */
case '\n':
uc_current_line++;
/* Fall through */
case '\n':
uc_current_line++;
- if (uc_current_line == 0) {
- error_at_line(0, 0, UPDATEDB_CONF, uc_current_line - 1,
- _("warning: Line number overflow"));
- error_message_count--; /* Don't count as an error */
- }
return UCT_EOL;
case '=':
return UCT_EOL;
case '=':
case '"': {
while ((c = getc_unlocked(uc_file)) != '"') {
if (c == EOF || c == '\n') {
case '"': {
while ((c = getc_unlocked(uc_file)) != '"') {
if (c == EOF || c == '\n') {
- error_at_line(0, 0, UPDATEDB_CONF, uc_line,
- _("missing closing `\"'"));
- ungetc(c, uc_file);
- break;
+ fprintf(stderr, "%s:%u: missing closing `\"'\n",
+ UPDATEDB_CONF, uc_line);
+ exit(EXIT_FAILURE);
}
uc_lex_buf.push_back(c);
}
}
uc_lex_buf.push_back(c);
}
static void
parse_updatedb_conf(void)
{
static void
parse_updatedb_conf(void)
{
- int old_error_one_per_line;
- unsigned old_error_message_count;
bool had_prune_bind_mounts, had_prunefs, had_prunenames, had_prunepaths;
uc_file = fopen(UPDATEDB_CONF, "r");
if (uc_file == NULL) {
bool had_prune_bind_mounts, had_prunefs, had_prunenames, had_prunepaths;
uc_file = fopen(UPDATEDB_CONF, "r");
if (uc_file == NULL) {
- if (errno != ENOENT)
- error(EXIT_FAILURE, errno, _("can not open `%s'"), UPDATEDB_CONF);
- goto err;
+ if (errno != ENOENT) {
+ perror(UPDATEDB_CONF);
+ exit(EXIT_FAILURE);
+ }
+ return;
}
flockfile(uc_file);
uc_current_line = 1;
}
flockfile(uc_file);
uc_current_line = 1;
- old_error_message_count = error_message_count;
- old_error_one_per_line = error_one_per_line;
- error_one_per_line = 1;
had_prune_bind_mounts = false;
had_prunefs = false;
had_prunenames = false;
had_prune_bind_mounts = false;
had_prunefs = false;
had_prunenames = false;
break;
case UCT_IDENTIFIER:
break;
case UCT_IDENTIFIER:
- error_at_line(0, 0, UPDATEDB_CONF, uc_line,
- _("unknown variable `%s'"), uc_lex_buf.c_str());
- goto skip_to_eol;
+ fprintf(stderr, "%s:%u: unknown variable: `%s'\n",
+ UPDATEDB_CONF, uc_line, uc_lex_buf.c_str());
+ exit(EXIT_FAILURE);
- error_at_line(0, 0, UPDATEDB_CONF, uc_line,
- _("variable name expected"));
- goto skip_to_eol;
+ fprintf(stderr, "%s:%u: variable name expected\n",
+ UPDATEDB_CONF, uc_line);
+ exit(EXIT_FAILURE);
}
if (*had_var != false) {
}
if (*had_var != false) {
- error_at_line(0, 0, UPDATEDB_CONF, uc_line,
- _("variable `%s' was already defined"), uc_lex_buf.c_str());
- goto skip_to_eol;
+ fprintf(stderr, "%s:%u: variable `%s' was already defined\n",
+ UPDATEDB_CONF, uc_line, uc_lex_buf.c_str());
+ exit(EXIT_FAILURE);
}
*had_var = true;
var_token = token;
token = uc_lex();
if (token != UCT_EQUAL) {
}
*had_var = true;
var_token = token;
token = uc_lex();
if (token != UCT_EQUAL) {
- error_at_line(0, 0, UPDATEDB_CONF, uc_line,
- _("`=' expected after variable name"));
- goto skip_to_eol;
+ fprintf(stderr, "%s:%u: `=' expected after variable name\n",
+ UPDATEDB_CONF, uc_line);
+ exit(EXIT_FAILURE);
}
token = uc_lex();
if (token != UCT_QUOTED) {
}
token = uc_lex();
if (token != UCT_QUOTED) {
- error_at_line(0, 0, UPDATEDB_CONF, uc_line,
- _("value in quotes expected after `='"));
- goto skip_to_eol;
+ fprintf(stderr, "%s:%u: value in quotes expected after `='\n",
+ UPDATEDB_CONF, uc_line);
+ exit(EXIT_FAILURE);
}
if (var_token == UCT_PRUNE_BIND_MOUNTS) {
if (parse_bool(&conf_prune_bind_mounts, uc_lex_buf.c_str()) != 0) {
}
if (var_token == UCT_PRUNE_BIND_MOUNTS) {
if (parse_bool(&conf_prune_bind_mounts, uc_lex_buf.c_str()) != 0) {
- error_at_line(0, 0, UPDATEDB_CONF, uc_line,
- _("invalid value `%s' of PRUNE_BIND_MOUNTS"),
- uc_lex_buf.c_str());
- goto skip_to_eol;
+ fprintf(stderr, "%s:%u: invalid value `%s' of PRUNE_BIND_MOUNTS\n",
+ UPDATEDB_CONF, uc_line, uc_lex_buf.c_str());
+ exit(EXIT_FAILURE);
}
} else if (var_token == UCT_PRUNEFS)
var_add_values(&conf_prunefs, uc_lex_buf.c_str());
}
} else if (var_token == UCT_PRUNEFS)
var_add_values(&conf_prunefs, uc_lex_buf.c_str());
abort();
token = uc_lex();
if (token != UCT_EOL && token != UCT_EOF) {
abort();
token = uc_lex();
if (token != UCT_EOL && token != UCT_EOF) {
- error_at_line(0, 0, UPDATEDB_CONF, uc_line,
- _("unexpected data after variable value"));
- goto skip_to_eol;
+ fprintf(stderr, "%s:%u: unexpected data after variable value\n",
+ UPDATEDB_CONF, uc_line);
+ exit(EXIT_FAILURE);
while (token != UCT_EOL) {
if (token == UCT_EOF)
goto eof;
while (token != UCT_EOL) {
if (token == UCT_EOF)
goto eof;
- if (ferror(uc_file))
- error(EXIT_FAILURE, 0, _("I/O error reading `%s'"), UPDATEDB_CONF);
- error_one_per_line = old_error_one_per_line;
+ if (ferror(uc_file)) {
+ perror(UPDATEDB_CONF);
+ exit(EXIT_FAILURE);
+ }
funlockfile(uc_file);
fclose(uc_file);
funlockfile(uc_file);
fclose(uc_file);
- if (error_message_count != old_error_message_count)
- exit(EXIT_FAILURE);
-err:;
}
/* Command-line argument parsing */
}
/* Command-line argument parsing */
do
buf.resize(buf.size() * 1.5);
while ((res = getcwd(buf.data(), buf.size())) == NULL && errno == ERANGE);
do
buf.resize(buf.size() * 1.5);
while ((res = getcwd(buf.data(), buf.size())) == NULL && errno == ERANGE);
- if (res == NULL)
- error(EXIT_FAILURE, errno, _("can not get current working directory"));
+ if (res == NULL) {
+ fprintf(stderr, "%s: %s: can not get current working directory\n",
+ program_invocation_name, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
buf.resize(strlen(buf.data()));
return buf + '/' + path;
}
buf.resize(strlen(buf.data()));
return buf + '/' + path;
}
exit(EXIT_FAILURE);
case 'B':
exit(EXIT_FAILURE);
case 'B':
- if (got_prune_bind_mounts != false)
- error(EXIT_FAILURE, 0,
- _("--%s would override earlier command-line argument"),
- "prune-bind-mounts");
+ if (got_prune_bind_mounts != false) {
+ fprintf(stderr, "%s: --%s would override earlier command-line argument\n",
+ program_invocation_name, "prune-bind-mounts");
+ exit(EXIT_FAILURE);
+ }
got_prune_bind_mounts = true;
got_prune_bind_mounts = true;
- if (parse_bool(&conf_prune_bind_mounts, optarg) != 0)
- error(EXIT_FAILURE, 0, _("invalid value `%s' of --%s"), optarg,
- "prune-bind-mounts");
+ if (parse_bool(&conf_prune_bind_mounts, optarg) != 0) {
+ fprintf(stderr, "%s: invalid value %s of --%s\n",
+ program_invocation_name, optarg, "prune-bind-mounts");
+ exit(EXIT_FAILURE);
+ }
- if (prunefs_changed != false)
- error(EXIT_FAILURE, 0,
- _("--%s would override earlier command-line argument"),
- "prunefs");
+ if (prunefs_changed != false) {
+ fprintf(stderr, "%s: --%s would override earlier command-line argument\n",
+ program_invocation_name, "prunefs");
+ exit(EXIT_FAILURE);
+ }
prunefs_changed = true;
conf_prunefs.clear();
var_add_values(&conf_prunefs, optarg);
break;
case 'N':
prunefs_changed = true;
conf_prunefs.clear();
var_add_values(&conf_prunefs, optarg);
break;
case 'N':
- if (prunenames_changed != false)
- error(EXIT_FAILURE, 0,
- _("--%s would override earlier command-line argument"),
- "prunenames");
+ if (prunenames_changed != false) {
+ fprintf(stderr, "%s: --%s would override earlier command-line argument\n",
+ program_invocation_name, "prunenames");
+ exit(EXIT_FAILURE);
+ }
prunenames_changed = true;
conf_prunenames.clear();
var_add_values(&conf_prunenames, optarg);
break;
case 'P':
prunenames_changed = true;
conf_prunenames.clear();
var_add_values(&conf_prunenames, optarg);
break;
case 'P':
- if (prunepaths_changed != false)
- error(EXIT_FAILURE, 0,
- _("--%s would override earlier command-line argument"),
- "prunepaths");
+ if (prunepaths_changed != false) {
+ fprintf(stderr, "%s: --%s would override earlier command-line argument\n",
+ program_invocation_name, "prunepaths");
+ exit(EXIT_FAILURE);
+ }
prunepaths_changed = true;
conf_prunepaths.clear();
var_add_values(&conf_prunepaths, optarg);
break;
case 'U':
prunepaths_changed = true;
conf_prunepaths.clear();
var_add_values(&conf_prunepaths, optarg);
break;
case 'U':
- if (conf_scan_root != NULL)
- error(EXIT_FAILURE, 0, _("--%s specified twice"),
- "database-root");
+ if (conf_scan_root != NULL) {
+ fprintf(stderr, "%s: --%s specified twice\n",
+ program_invocation_name, "database-root");
+ exit(EXIT_FAILURE);
+ }
conf_scan_root = realpath(optarg, nullptr);
conf_scan_root = realpath(optarg, nullptr);
- if (conf_scan_root == NULL)
- error(EXIT_FAILURE, errno, _("invalid value `%s' of --%s"), optarg,
- "database-root");
+ if (conf_scan_root == NULL) {
+ fprintf(stderr, "%s: %s: invalid value `%s' of --%s\n",
+ program_invocation_name, strerror(errno), optarg, "database-root");
+ exit(EXIT_FAILURE);
+ }
exit(EXIT_SUCCESS);
case 'l':
exit(EXIT_SUCCESS);
case 'l':
- if (got_visibility != false)
- error(EXIT_FAILURE, 0, _("--%s specified twice"),
- "require-visibility");
+ if (got_visibility != false) {
+ fprintf(stderr, "%s: --%s specified twice\n",
+ program_invocation_name, "require-visibility");
+ exit(EXIT_FAILURE);
+ }
+
- if (parse_bool(&conf_check_visibility, optarg) != 0)
- error(EXIT_FAILURE, 0, _("invalid value `%s' of --%s"), optarg,
- "require-visibility");
+ if (parse_bool(&conf_check_visibility, optarg) != 0) {
+ fprintf(stderr, "%s: invalid value `%s' of --%s",
+ program_invocation_name, optarg, "require-visibility");
+ exit(EXIT_FAILURE);
+ }
- if (!conf_output.empty())
- error(EXIT_FAILURE, 0, _("--%s specified twice"), "output");
+ if (!conf_output.empty()) {
+ fprintf(stderr, "%s: --%s specified twice",
+ program_invocation_name, "output");
+ exit(EXIT_FAILURE);
+ }
conf_output = optarg;
break;
conf_output = optarg;
break;
- if (optind != argc)
- error(EXIT_FAILURE, 0, _("unexpected operand on command line"));
+ if (optind != argc) {
+ fprintf(stderr, "%s: unexpected operand on command line",
+ program_invocation_name);
+ exit(EXIT_FAILURE);
+ }
if (conf_scan_root == NULL) {
static char root[] = "/";
if (conf_scan_root == NULL) {
static char root[] = "/";