#include "conf.h"
-#include "error.h"
#include "lib.h"
#include <algorithm>
/* 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 '=':
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);
}
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) {
- 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;
- 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;
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);
default:
- 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) {
- 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) {
- 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) {
- 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) {
- 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());
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);
}
/* Fall through */
- skip_to_eol:
while (token != UCT_EOL) {
if (token == UCT_EOF)
goto eof;
}
}
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);
- if (error_message_count != old_error_message_count)
- exit(EXIT_FAILURE);
-err:;
}
/* Command-line argument parsing */
printf(_("Usage: updatedb [OPTION]...\n"
"Update a plocate database.\n"
"\n"
- " -f, --add-prunefs FS omit also FS\n"
- " -n, --add-prunenames NAMES omit also NAMES\n"
- " -e, --add-prunepaths PATHS omit also PATHS\n"
+ " -f, --add-prunefs FS omit also FS (space-separated)\n"
+ " -n, --add-prunenames NAMES omit also NAMES (space-separated)\n"
+ " -e, --add-prunepaths PATHS omit also PATHS (space-separated)\n"
+ " --add-single-prunepath PATH omit also PATH\n"
" -U, --database-root PATH the subtree to store in "
"database (default \"/\")\n"
" -h, --help print this help\n"
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;
}
static void
parse_arguments(int argc, char *argv[])
{
- enum { OPT_DEBUG_PRUNING = CHAR_MAX + 1 };
+ enum { OPT_DEBUG_PRUNING = CHAR_MAX + 1,
+ OPT_ADD_SINGLE_PRUNEPATH = CHAR_MAX + 2 };
static const struct option options[] = {
{ "add-prunefs", required_argument, NULL, 'f' },
{ "add-prunenames", required_argument, NULL, 'n' },
{ "add-prunepaths", required_argument, NULL, 'e' },
+ { "add-single-prunepath", required_argument, NULL, OPT_ADD_SINGLE_PRUNEPATH },
{ "database-root", required_argument, NULL, 'U' },
{ "debug-pruning", no_argument, NULL, OPT_DEBUG_PRUNING },
{ "help", no_argument, NULL, 'h' },
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;
- 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);
+ }
break;
case 'F':
- 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':
- 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':
- 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);
+ 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);
- 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);
+ }
break;
case 'V':
var_add_values(&conf_prunepaths, optarg);
break;
+ case OPT_ADD_SINGLE_PRUNEPATH:
+ prunepaths_changed = true;
+ conf_prunepaths.push_back(optarg);
+ break;
+
case 'f':
prunefs_changed = true;
var_add_values(&conf_prunefs, optarg);
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);
+ }
+
got_visibility = true;
- 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);
+ }
break;
case 'n':
break;
case 'o':
- 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;
}
}
options_done:
- 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[] = "/";