#include "access_rx_cache.h"
+#include "complete_pread.h"
#include "db.h"
#include "dprintf.h"
#include "io_uring_engine.h"
using namespace std;
using namespace std::chrono;
-#define DEFAULT_DBPATH "/var/lib/mlocate/plocate.db"
-
-const char *dbpath = DEFAULT_DBPATH;
+const char *dbpath = DBFILE;
bool ignore_case = false;
bool only_count = false;
bool print_nul = false;
bool match_basename = false;
int64_t limit_matches = numeric_limits<int64_t>::max();
int64_t limit_left = numeric_limits<int64_t>::max();
+bool stdout_is_tty = false;
steady_clock::time_point start;
ZSTD_DDict *ddict = nullptr;
hdr.zstd_dictionary_offset_bytes = 0;
hdr.zstd_dictionary_length_bytes = 0;
}
+ if (hdr.max_version < 2) {
+ // This too. (We ignore the other max_version 2 fields.)
+ hdr.check_visibility = true;
+ }
}
Corpus::~Corpus()
size_t scan_docids(const vector<Needle> &needles, const vector<uint32_t> &docids, const Corpus &corpus, IOUringEngine *engine)
{
Serializer docids_in_order;
- AccessRXCache access_rx_cache(engine);
+ AccessRXCache access_rx_cache(engine, corpus.get_hdr().check_visibility);
atomic<uint64_t> matched{ 0 };
for (size_t i = 0; i < docids.size(); ++i) {
uint32_t docid = docids[i];
}
}
- AccessRXCache access_rx_cache(nullptr);
+ AccessRXCache access_rx_cache(nullptr, corpus.get_hdr().check_visibility);
Serializer serializer;
uint32_t num_blocks = corpus.get_num_filename_blocks();
unique_ptr<uint64_t[]> offsets(new uint64_t[num_blocks + 1]);
// work for fairly unclear gain.)
uint64_t matched = scan_all_docids(needles, fd, corpus);
dprintf("Done in %.1f ms, found %" PRId64 " matches.\n",
- 1e3 * duration<float>(steady_clock::now() - start).count(), matched);
+ 1e3 * duration<float>(steady_clock::now() - start).count(), matched);
if (only_count) {
printf("%" PRId64 "\n", matched);
}
if (done)
return;
- uint32_t trgm __attribute__((unused)) = trgmptr.trgm;
+ uint32_t trgm = trgmptr.trgm;
const unsigned char *pldata = reinterpret_cast<const unsigned char *>(s.data());
size_t num = trgmptr.num_docids;
decoded.resize(num);
" -b, --basename search only the file name portion of path names\n"
" -c, --count print number of matches instead of the matches\n"
" -d, --database DBPATH search for files in DBPATH\n"
- " (default is " DEFAULT_DBPATH ")\n"
+ " (default is " DBFILE ")\n"
" -i, --ignore-case search case-insensitively\n"
" -l, --limit LIMIT stop after LIMIT matches\n"
" -0, --null delimit matches by NUL instead of newline\n"
void version()
{
- printf("plocate %s\n", PLOCATE_VERSION);
+ printf("%s %s\n", PACKAGE_NAME, PACKAGE_VERSION);
printf("Copyright 2020 Steinar H. Gunderson\n");
printf("License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>.\n");
printf("This is free software: you are free to change and redistribute it.\n");
setlocale(LC_ALL, "");
for (;;) {
int option_index = 0;
- int c = getopt_long(argc, argv, "bcd:hil:n:0wVD", long_options, &option_index);
+ int c = getopt_long(argc, argv, "bcd:hil:n:0rwVD", long_options, &option_index);
if (c == -1) {
break;
}
}
}
+ if (!print_nul) {
+ stdout_is_tty = isatty(1);
+ }
+
vector<Needle> needles;
for (int i = optind; i < argc; ++i) {
Needle needle;