]> git.sesse.net Git - plocate/blobdiff - conf.cpp
Release plocate 1.1.22.
[plocate] / conf.cpp
index a8ec972b5c4a750eaf07d37064b61fa2462ad522..c52287ec47aa6e28e385009c55578f66af0afbce 100644 (file)
--- a/conf.cpp
+++ b/conf.cpp
@@ -22,7 +22,6 @@ any later version.
 
 #include "conf.h"
 
-#include "error.h"
 #include "lib.h"
 
 #include <algorithm>
@@ -167,11 +166,6 @@ uc_lex(void)
                /* 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 '=':
@@ -180,10 +174,9 @@ uc_lex(void)
        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);
                }
@@ -215,21 +208,18 @@ uc_lex(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) {
-               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;
@@ -263,40 +253,39 @@ parse_updatedb_conf(void)
                        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());
@@ -308,12 +297,11 @@ parse_updatedb_conf(void)
                        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;
@@ -321,14 +309,12 @@ parse_updatedb_conf(void)
                }
        }
 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 */
@@ -337,12 +323,13 @@ err:;
 static void
 help(void)
 {
-       printf(_("Usage: updatedb [OPTION]...\n"
-                "Update a mlocate database.\n"
+       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"
@@ -365,10 +352,10 @@ help(void)
                 "  -V, --version                  print version information\n"
                 "\n"
                 "The configuration defaults to values read from\n"
-                "`%s'.\n"),
+                "`%s'.\n",
               DBFILE, UPDATEDB_CONF);
-       printf(_("\n"
-                "Report bugs to %s.\n"),
+       printf("\n"
+              "Report bugs to %s.\n",
               PACKAGE_BUGREPORT);
 }
 
@@ -383,8 +370,11 @@ prepend_cwd(const string &path)
        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;
 }
@@ -393,12 +383,14 @@ prepend_cwd(const string &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' },
@@ -435,63 +427,73 @@ parse_arguments(int argc, char *argv[])
                        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");
-                       conf_scan_root = canonicalize_file_name(optarg);
-                       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 specified twice\n",
+                                       program_invocation_name, "database-root");
+                               exit(EXIT_FAILURE);
+                       }
+                       conf_scan_root = realpath(optarg, nullptr);
+                       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':
                        puts("updatedb (" PACKAGE_NAME ") " PACKAGE_VERSION);
-                       puts(_("Copyright (C) 2007 Red Hat, Inc. All rights reserved.\n"
-                              "This software is distributed under the GPL v.2.\n"
-                              "\n"
-                              "This program is provided with NO WARRANTY, to the extent "
-                              "permitted by law."));
+                       puts("Copyright (C) 2007 Red Hat, Inc. All rights reserved.\n"
+                            "This software is distributed under the GPL v.2.\n"
+                            "\n"
+                            "This program is provided with NO WARRANTY, to the extent "
+                            "permitted by law.");
                        exit(EXIT_SUCCESS);
 
                case 'e':
@@ -499,6 +501,11 @@ parse_arguments(int argc, char *argv[])
                        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);
@@ -509,13 +516,18 @@ parse_arguments(int argc, char *argv[])
                        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':
@@ -524,8 +536,11 @@ parse_arguments(int argc, char *argv[])
                        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;
 
@@ -550,8 +565,11 @@ parse_arguments(int argc, char *argv[])
                }
        }
 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[] = "/";
 
@@ -620,7 +638,6 @@ void conf_prepare(int argc, char *argv[])
        string_list_dir_path_sort(&conf_prunepaths);
 
        if (conf_debug_pruning) {
-               /* This is debuging output, don't mark anything for translation */
                fprintf(stderr, "conf_block:\n");
                for (char c : conf_block) {
                        if (isascii((unsigned char)c) && isprint((unsigned char)c) && c != '\\')