aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/sindex.c
diff options
context:
space:
mode:
Diffstat (limited to 'sindex.c')
-rw-r--r--sindex.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/sindex.c b/sindex.c
index 22836a95..bff6d8c4 100644
--- a/sindex.c
+++ b/sindex.c
@@ -101,11 +101,13 @@ static void show_help(int ret)
"\n"
"Options:\n"
" -D, --database=FILE Specify database file (default: %2$s);\n"
+ " -B, --basedir=DIR Define project top directory (default is the current directory);\n"
" -v, --verbose Show information about what is being done;\n"
" -h, --help Show this text and exit.\n"
"\n"
"Environment:\n"
" SINDEX_DATABASE Database file location.\n"
+ " SINDEX_BASEDIR Project top directory.\n"
"\n"
"Report bugs to authors.\n"
"\n",
@@ -125,9 +127,6 @@ static void show_help_add(int ret)
" -v, --verbose Show information about what is being done;\n"
" -h, --help Show this text and exit.\n"
"\n"
- "Environment:\n"
- " SINDEX_BASEDIRE Project top directory.\n"
- "\n"
"Report bugs to authors.\n"
"\n",
progname);
@@ -251,21 +250,26 @@ static void parse_cmdline(int argc, char **argv)
{
static const struct option long_options[] = {
{ "database", required_argument, NULL, 'D' },
+ { "basedir", required_argument, NULL, 'B' },
{ "verbose", no_argument, NULL, 'v' },
{ "help", no_argument, NULL, 'h' },
{ NULL }
};
int c;
+ char *basedir = getenv("SINDEX_BASEDIR");
char *env;
if ((env = getenv("SINDEX_DATABASE")) != NULL)
sindex_dbfile = env;
- while ((c = getopt_long(argc, argv, "+D:vh", long_options, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "+B:D:vh", long_options, NULL)) != -1) {
switch (c) {
case 'D':
sindex_dbfile = optarg;
break;
+ case 'B':
+ basedir = optarg;
+ break;
case 'v':
sindex_verbose++;
break;
@@ -278,6 +282,12 @@ static void parse_cmdline(int argc, char **argv)
message("command required");
show_usage();
}
+
+ if (basedir) {
+ if (!realpath(basedir, cwd))
+ sindex_error(1, errno, "unable to get project base directory");
+ n_cwd = strlen(cwd);
+ }
}
static void parse_cmdline_add(int argc, char **argv)
@@ -1016,6 +1026,9 @@ static void command_search(int argc, char **argv)
char *dberr = NULL;
sqlite3_str *query = sqlite3_str_new(sindex_db);
+ if (chdir(cwd) < 0)
+ sindex_error(1, errno, "unable to change directory: %s", cwd);
+
if (query_appendf(query,
"SELECT"
" file.name,"