--- a/src/common/rclconfig.cpp
+++ b/src/common/rclconfig.cpp
@@ -206,13 +206,13 @@
zeroMe();
if (o_origcwd.empty()) {
- char buf[MAXPATHLEN];
- if (getcwd(buf, MAXPATHLEN)) {
- o_origcwd = string(buf);
- } else {
- fprintf(stderr, "recollxx: can't retrieve current working "
+ char buf[MAXPATHLEN];
+ if (getcwd(buf, MAXPATHLEN)) {
+ o_origcwd = string(buf);
+ } else {
+ fprintf(stderr, "recollxx: can't retrieve current working "
"directory: relative path translations will fail\n");
- }
+ }
}
// Compute our data dir name, typically /usr/local/share/recoll
@@ -223,37 +223,37 @@
// Command line config name overrides environment
if (argcnf && !argcnf->empty()) {
- m_confdir = path_absolute(*argcnf);
- if (m_confdir.empty()) {
- m_reason =
- string("Cant turn [") + *argcnf + "] into absolute path";
- return;
- }
+ m_confdir = path_absolute(*argcnf);
+ if (m_confdir.empty()) {
+ m_reason =
+ string("Cant turn [") + *argcnf + "] into absolute path";
+ return;
+ }
} else {
- const char *cp = getenv("RECOLL_CONFDIR");
- if (cp) {
- m_confdir = path_canon(cp);
- } else {
- autoconfdir = true;
- m_confdir=path_cat(path_homedata(), path_defaultrecollconfsubdir());
- }
+ const char *cp = getenv("RECOLL_CONFDIR");
+ if (cp) {
+ m_confdir = path_canon(cp);
+ } else {
+ autoconfdir = true;
+ m_confdir=path_cat(path_homedata(), path_defaultrecollconfsubdir());
+ }
}
// Note: autoconfdir and isDefaultConfig() are normally the same. We just
// want to avoid the imperfect test in isDefaultConfig() if we actually know
// this is the default conf
if (!autoconfdir && !isDefaultConfig()) {
- if (!path_exists(m_confdir)) {
- m_reason = "Explicitly specified configuration "
- "directory must exist"
- " (won't be automatically created). Use mkdir first";
- return;
- }
+ if (!path_exists(m_confdir)) {
+ m_reason = "Explicitly specified configuration "
+ "directory must exist"
+ " (won't be automatically created). Use mkdir first";
+ return;
+ }
}
if (!path_exists(m_confdir)) {
- if (!initUserConfig())
- return;
+ if (!initUserConfig())
+ return;
}
// This can't change once computed inside a process. It would be
@@ -264,27 +264,27 @@
// from recollinit
if (o_localecharset.empty()) {
#ifndef _WIN32
- const char *cp;
- cp = nl_langinfo(CODESET);
- // We don't keep US-ASCII. It's better to use a superset
- // Ie: me have a C locale and some french file names, and I
- // can't imagine a version of iconv that couldn't translate
- // from iso8859?
- // The 646 thing is for solaris.
- if (cp && *cp && strcmp(cp, "US-ASCII")
+ const char *cp;
+ cp = nl_langinfo(CODESET);
+ // We don't keep US-ASCII. It's better to use a superset
+ // Ie: me have a C locale and some french file names, and I
+ // can't imagine a version of iconv that couldn't translate
+ // from iso8859?
+ // The 646 thing is for solaris.
+ if (cp && *cp && strcmp(cp, "US-ASCII")
#ifdef sun
- && strcmp(cp, "646")
+ && strcmp(cp, "646")
#endif
- ) {
- o_localecharset = string(cp);
- } else {
- // Use cp1252 instead of iso-8859-1, it's a superset.
- o_localecharset = string(cstr_cp1252);
- }
+ ) {
+ o_localecharset = string(cp);
+ } else {
+ // Use cp1252 instead of iso-8859-1, it's a superset.
+ o_localecharset = string(cstr_cp1252);
+ }
#else
o_localecharset = winACPName();
#endif
- LOGDEB1("RclConfig::getDefCharset: localecharset [" <<
+ LOGDEB1("RclConfig::getDefCharset: localecharset [" <<
o_localecharset << "]\n");
}
@@ -292,7 +292,7 @@
// Additional config directory, values override user ones
if ((cp = getenv("RECOLL_CONFTOP"))) {
- m_cdirs.push_back(cp);
+ m_cdirs.push_back(cp);
}
// User config
@@ -300,7 +300,7 @@
// Additional config directory, overrides system's, overridden by user's
if ((cp = getenv("RECOLL_CONFMID"))) {
- m_cdirs.push_back(cp);
+ m_cdirs.push_back(cp);
}
// Base/installation config
@@ -308,20 +308,20 @@
string cnferrloc;
for (vector<string>::const_iterator it = m_cdirs.begin();
- it != m_cdirs.end(); it++) {
- if (it != m_cdirs.begin())
- cnferrloc += string(" or ");
- cnferrloc += *it;
+ it != m_cdirs.end(); it++) {
+ if (it != m_cdirs.begin())
+ cnferrloc += string(" or ");
+ cnferrloc += *it;
}
// Read and process "recoll.conf"
if (!updateMainConfig())
- return;
+ return;
// Other files
mimemap = new ConfStack<ConfTree>("mimemap", m_cdirs, true);
if (mimemap == 0 || !mimemap->ok()) {
- m_reason = string("No or bad mimemap file in: ") + cnferrloc;
- return;
+ m_reason = string("No or bad mimemap file in: ") + cnferrloc;
+ return;
}
// Maybe create the MIME to suffix association reverse map. Do it
@@ -346,18 +346,18 @@
mimeconf = new ConfStack<ConfSimple>("mimeconf", m_cdirs, true);
if (mimeconf == 0 || !mimeconf->ok()) {
- m_reason = string("No/bad mimeconf in: ") + cnferrloc;
- return;
+ m_reason = string("No/bad mimeconf in: ") + cnferrloc;
+ return;
}
mimeview = new ConfStack<ConfSimple>("mimeview", m_cdirs, false);
if (mimeview == 0)
- mimeview = new ConfStack<ConfSimple>("mimeview", m_cdirs, true);
+ mimeview = new ConfStack<ConfSimple>("mimeview", m_cdirs, true);
if (mimeview == 0 || !mimeview->ok()) {
- m_reason = string("No/bad mimeview in: ") + cnferrloc;
- return;
+ m_reason = string("No/bad mimeview in: ") + cnferrloc;
+ return;
}
if (!readFieldsConfig(cnferrloc))
- return;
+ return;
// Default is no threading
m_thrConf = {{-1, 0}, {-1, 0}, {-1, 0}};
@@ -375,16 +375,16 @@
bool RclConfig::updateMainConfig()
{
ConfStack<ConfTree> *newconf =
- new ConfStack<ConfTree>("recoll.conf", m_cdirs, true);
+ new ConfStack<ConfTree>("recoll.conf", m_cdirs, true);
if (newconf == 0 || !newconf->ok()) {
- if (m_conf)
- return false;
- string where;
- stringsToString(m_cdirs, where);
- m_reason = string("No/bad main configuration file in: ") + where;
- m_ok = false;
+ if (m_conf)
+ return false;
+ string where;
+ stringsToString(m_cdirs, where);
+ m_reason = string("No/bad main configuration file in: ") + where;
+ m_ok = false;
initParamStale(0, 0);
- return false;
+ return false;
}
delete m_conf;
@@ -396,37 +396,37 @@
bool bvalue = false;
if (getConfParam("nocjk", &bvalue) && bvalue == true) {
- TextSplit::cjkProcessing(false);
+ TextSplit::cjkProcessing(false);
} else {
- int ngramlen;
- if (getConfParam("cjkngramlen", &ngramlen)) {
- TextSplit::cjkProcessing(true, (unsigned int)ngramlen);
- } else {
- TextSplit::cjkProcessing(true);
- }
+ int ngramlen;
+ if (getConfParam("cjkngramlen", &ngramlen)) {
+ TextSplit::cjkProcessing(true, (unsigned int)ngramlen);
+ } else {
+ TextSplit::cjkProcessing(true);
+ }
}
bvalue = false;
if (getConfParam("nonumbers", &bvalue) && bvalue == true) {
- TextSplit::noNumbers();
+ TextSplit::noNumbers();
}
bvalue = false;
if (getConfParam("dehyphenate", &bvalue)) {
- TextSplit::deHyphenate(bvalue);
+ TextSplit::deHyphenate(bvalue);
}
bvalue = true;
if (getConfParam("skippedPathsFnmPathname", &bvalue) && bvalue == false) {
- FsTreeWalker::setNoFnmPathname();
+ FsTreeWalker::setNoFnmPathname();
}
static int m_index_stripchars_init = 0;
if (!m_index_stripchars_init) {
- getConfParam("indexStripChars", &o_index_stripchars);
+ getConfParam("indexStripChars", &o_index_stripchars);
getConfParam("indexStoreDocText", &o_index_storedoctext);
getConfParam("testmodifusemtime", &o_uptodate_test_use_mtime);
- m_index_stripchars_init = 1;
+ m_index_stripchars_init = 1;
}
if (getConfParam("cachedir", m_cachedir)) {
@@ -439,8 +439,8 @@
{
ConfNull *conf = new ConfStack<ConfTree>("recoll.conf", m_cdirs, false);
if (conf == 0 || !conf->ok()) {
- m_reason = string("Can't read config");
- return 0;
+ m_reason = string("Can't read config");
+ return 0;
}
return conf;
}
@@ -455,35 +455,35 @@
m_keydirgen++;
m_keydir = dir;
if (m_conf == 0)
- return;
+ return;
if (!m_conf->get("defaultcharset", m_defcharset, m_keydir))
- m_defcharset.erase();
+ m_defcharset.erase();
}
bool RclConfig::getConfParam(const string &name, int *ivp, bool shallow) const
{
string value;
if (!getConfParam(name, value, shallow))
- return false;
+ return false;
errno = 0;
long lval = strtol(value.c_str(), 0, 0);
if (lval == 0 && errno)
- return 0;
+ return 0;
if (ivp)
- *ivp = int(lval);
+ *ivp = int(lval);
return true;
}
bool RclConfig::getConfParam(const string &name, bool *bvp, bool shallow) const
{
if (!bvp)
- return false;
+ return false;
*bvp = false;
string s;
if (!getConfParam(name, s, shallow))
- return false;
+ return false;
*bvp = stringToBool(s);
return true;
}
@@ -492,11 +492,11 @@
bool shallow) const
{
if (!svvp)
- return false;
+ return false;
svvp->clear();
string s;
if (!getConfParam(name, s, shallow))
- return false;
+ return false;
return stringToStrings(s, *svvp);
}
@@ -505,7 +505,7 @@
{
vector<string> v;
if (!out || !getConfParam(name, &v, shallow)) {
- return false;
+ return false;
}
out->clear();
out->insert(v.begin(), v.end());
@@ -516,20 +516,20 @@
bool shallow) const
{
if (!vip)
- return false;
+ return false;
vip->clear();
vector<string> vs;
if (!getConfParam(name, &vs, shallow))
- return false;
+ return false;
vip->reserve(vs.size());
for (unsigned int i = 0; i < vs.size(); i++) {
- char *ep;
- vip->push_back(strtol(vs[i].c_str(), &ep, 0));
- if (ep == vs[i].c_str()) {
- LOGDEB("RclConfig::getConfParam: bad int value in [" << name <<
+ char *ep;
+ vip->push_back(strtol(vs[i].c_str(), &ep, 0));
+ if (ep == vs[i].c_str()) {
+ LOGDEB("RclConfig::getConfParam: bad int value in [" << name <<
"]\n");
- return false;
- }
+ return false;
+ }
}
return true;
}
@@ -542,62 +542,62 @@
vector<int> vq;
vector<int> vt;
if (!getConfParam("thrQSizes", &vq)) {
- LOGINFO("RclConfig::initThrConf: no thread info (queues)\n");
- goto out;
+ LOGINFO("RclConfig::initThrConf: no thread info (queues)\n");
+ goto out;
}
// If the first queue size is 0, autoconf is requested.
if (vq.size() > 0 && vq[0] == 0) {
- CpuConf cpus;
- if (!getCpuConf(cpus) || cpus.ncpus < 1) {
- LOGERR("RclConfig::initThrConf: could not retrieve cpu conf\n");
- cpus.ncpus = 1;
- }
+ CpuConf cpus;
+ if (!getCpuConf(cpus) || cpus.ncpus < 1) {
+ LOGERR("RclConfig::initThrConf: could not retrieve cpu conf\n");
+ cpus.ncpus = 1;
+ }
if (cpus.ncpus != 1) {
LOGDEB("RclConfig::initThrConf: autoconf requested. " <<
cpus.ncpus << " concurrent threads available.\n");
}
- // Arbitrarily set threads config based on number of CPUS. This also
- // depends on the IO setup actually, so we're bound to be wrong...
- if (cpus.ncpus == 1) {
- // Somewhat counter-intuitively (because of possible IO//)
- // it seems that the best config here is no threading
- } else if (cpus.ncpus < 4) {
- // Untested so let's guess...
+ // Arbitrarily set threads config based on number of CPUS. This also
+ // depends on the IO setup actually, so we're bound to be wrong...
+ if (cpus.ncpus == 1) {
+ // Somewhat counter-intuitively (because of possible IO//)
+ // it seems that the best config here is no threading
+ } else if (cpus.ncpus < 4) {
+ // Untested so let's guess...
m_thrConf = {{2, 2}, {2, 2}, {2, 1}};
- } else if (cpus.ncpus < 6) {
- m_thrConf = {{2, 4}, {2, 2}, {2, 1}};
- } else {
- m_thrConf = {{2, 5}, {2, 3}, {2, 1}};
- }
- goto out;
+ } else if (cpus.ncpus < 6) {
+ m_thrConf = {{2, 4}, {2, 2}, {2, 1}};
+ } else {
+ m_thrConf = {{2, 5}, {2, 3}, {2, 1}};
+ }
+ goto out;
} else if (vq.size() > 0 && vq[0] < 0) {
- // threads disabled by config
- goto out;
+ // threads disabled by config
+ goto out;
}
if (!getConfParam("thrTCounts", &vt) ) {
- LOGINFO("RclConfig::initThrConf: no thread info (threads)\n");
- goto out;
+ LOGINFO("RclConfig::initThrConf: no thread info (threads)\n");
+ goto out;
}
if (vq.size() != 3 || vt.size() != 3) {
- LOGINFO("RclConfig::initThrConf: bad thread info vector sizes\n");
- goto out;
+ LOGINFO("RclConfig::initThrConf: bad thread info vector sizes\n");
+ goto out;
}
// Normal case: record info from config
m_thrConf.clear();
for (unsigned int i = 0; i < 3; i++) {
- m_thrConf.push_back({vq[i], vt[i]});
+ m_thrConf.push_back({vq[i], vt[i]});
}
out:
ostringstream sconf;
for (unsigned int i = 0; i < 3; i++) {
- sconf << "(" << m_thrConf[i].first << ", " << m_thrConf[i].second <<
- ") ";
+ sconf << "(" << m_thrConf[i].first << ", " << m_thrConf[i].second <<
+ ") ";
}
LOGDEB("RclConfig::initThrConf: chosen config (ql,nt): " << sconf.str() <<
@@ -607,8 +607,8 @@
pair<int,int> RclConfig::getThrConf(ThrStage who) const
{
if (m_thrConf.size() != 3) {
- LOGERR("RclConfig::getThrConf: bad data in rclconfig\n");
- return pair<int,int>(-1,-1);
+ LOGERR("RclConfig::getThrConf: bad data in rclconfig\n");
+ return pair<int,int>(-1,-1);
}
return m_thrConf[who];
}
@@ -624,13 +624,13 @@
getConfParam("topdirs", &tdl);
}
if (tdl.empty()) {
- LOGERR("RclConfig::getTopdirs: nothing to index: topdirs/monitordirs "
+ LOGERR("RclConfig::getTopdirs: nothing to index: topdirs/monitordirs "
" are not set or have a bad list format\n");
- return tdl;
+ return tdl;
}
for (auto& dir : tdl) {
- dir = path_canon(path_tildexpand(dir));
+ dir = path_canon(path_tildexpand(dir));
}
return tdl;
}
@@ -652,9 +652,9 @@
const string& RclConfig::getDefCharset(bool filename) const
{
if (filename) {
- return o_localecharset;
+ return o_localecharset;
} else {
- return m_defcharset.empty() ? o_localecharset : m_defcharset;
+ return m_defcharset.empty() ? o_localecharset : m_defcharset;
}
}
@@ -678,15 +678,15 @@
public:
SfString(const string& s) : m_str(s) {}
bool operator==(const SfString& s2) {
- string::const_reverse_iterator r1 = m_str.rbegin(), re1 = m_str.rend(),
- r2 = s2.m_str.rbegin(), re2 = s2.m_str.rend();
- while (r1 != re1 && r2 != re2) {
- if (*r1 != *r2) {
- return 0;
- }
- ++r1; ++r2;
- }
- return 1;
+ string::const_reverse_iterator r1 = m_str.rbegin(), re1 = m_str.rend(),
+ r2 = s2.m_str.rbegin(), re2 = s2.m_str.rend();
+ while (r1 != re1 && r2 != re2) {
+ if (*r1 != *r2) {
+ return 0;
+ }
+ ++r1; ++r2;
+ }
+ return 1;
}
string m_str;
};
@@ -694,17 +694,17 @@
class SuffCmp {
public:
int operator()(const SfString& s1, const SfString& s2) {
- //cout << "Comparing " << s1.m_str << " and " << s2.m_str << endl;
- string::const_reverse_iterator
- r1 = s1.m_str.rbegin(), re1 = s1.m_str.rend(),
- r2 = s2.m_str.rbegin(), re2 = s2.m_str.rend();
- while (r1 != re1 && r2 != re2) {
- if (*r1 != *r2) {
- return *r1 < *r2 ? 1 : 0;
- }
- ++r1; ++r2;
- }
- return 0;
+ //cout << "Comparing " << s1.m_str << " and " << s2.m_str << endl;
+ string::const_reverse_iterator
+ r1 = s1.m_str.rbegin(), re1 = s1.m_str.rend(),
+ r2 = s2.m_str.rbegin(), re2 = s2.m_str.rend();
+ while (r1 != re1 && r2 != re2) {
+ if (*r1 != *r2) {
+ return *r1 < *r2 ? 1 : 0;
+ }
+ ++r1; ++r2;
+ }
+ return 0;
}
};
@@ -763,12 +763,12 @@
stringtolower(fn);
SuffixStore::const_iterator it = STOPSUFFIXES->find(fn);
if (it != STOPSUFFIXES->end()) {
- LOGDEB2("RclConfig::inStopSuffixes: Found (" << fni << ") [" <<
+ LOGDEB2("RclConfig::inStopSuffixes: Found (" << fni << ") [" <<
((*it).m_str) << "]\n");
- return true;
+ return true;
} else {
- LOGDEB2("RclConfig::inStopSuffixes: not found [" << fni << "]\n");
- return false;
+ LOGDEB2("RclConfig::inStopSuffixes: not found [" << fni << "]\n");
+ return false;
}
}
@@ -792,7 +792,7 @@
vector<string> sfs = mimemap->getNames(cstr_null);
for (const auto& suff : sfs) {
string mt1;
- if (mimemap->get(suff, mt1, cstr_null) && !stringicmp(mt, mt1)) {
+ if (mimemap->get(suff, mt1, cstr_null) && !stringicmp(mt, mt1)) {
return suff;
}
}
@@ -803,7 +803,7 @@
bool RclConfig::getMimeCategories(vector<string>& cats) const
{
if (!mimeconf)
- return false;
+ return false;
cats = mimeconf->getNames("categories");
return true;
}
@@ -813,8 +813,8 @@
vector<string>cats;
getMimeCategories(cats);
for (vector<string>::iterator it = cats.begin(); it != cats.end(); it++) {
- if (!stringicmp(*it,cat))
- return true;
+ if (!stringicmp(*it,cat))
+ return true;
}
return false;
}
@@ -824,10 +824,10 @@
{
tps.clear();
if (!mimeconf)
- return false;
+ return false;
string slist;
if (!mimeconf->get(cat, slist, "categories"))
- return false;
+ return false;
stringToStrings(slist, tps);
return true;
@@ -861,7 +861,7 @@
}
if (!mimeconf->get(mtype, hs, "index")) {
- LOGDEB1("getMimeHandlerDef: no handler for '" << mtype << "'\n");
+ LOGDEB1("getMimeHandlerDef: no handler for '" << mtype << "'\n");
}
return hs;
}
@@ -871,23 +871,23 @@
string hs;
if (m_mdrstate.needrecompute()) {
m_mdreapers.clear();
- // New value now stored in m_mdrstate.getvalue(0)
- const string& sreapers = m_mdrstate.getvalue(0);
- if (sreapers.empty())
- return m_mdreapers;
- string value;
- ConfSimple attrs;
- valueSplitAttributes(sreapers, value, attrs);
- vector<string> nmlst = attrs.getNames(cstr_null);
- for (vector<string>::const_iterator it = nmlst.begin();
- it != nmlst.end(); it++) {
- MDReaper reaper;
- reaper.fieldname = fieldCanon(*it);
- string s;
- attrs.get(*it, s);
- stringToStrings(s, reaper.cmdv);
- m_mdreapers.push_back(reaper);
- }
+ // New value now stored in m_mdrstate.getvalue(0)
+ const string& sreapers = m_mdrstate.getvalue(0);
+ if (sreapers.empty())
+ return m_mdreapers;
+ string value;
+ ConfSimple attrs;
+ valueSplitAttributes(sreapers, value, attrs);
+ vector<string> nmlst = attrs.getNames(cstr_null);
+ for (vector<string>::const_iterator it = nmlst.begin();
+ it != nmlst.end(); it++) {
+ MDReaper reaper;
+ reaper.fieldname = fieldCanon(*it);
+ string s;
+ attrs.get(*it, s);
+ stringToStrings(s, reaper.cmdv);
+ m_mdreapers.push_back(reaper);
+ }
}
return m_mdreapers;
}
@@ -895,7 +895,7 @@
bool RclConfig::getGuiFilterNames(vector<string>& cats) const
{
if (!mimeconf)
- return false;
+ return false;
cats = mimeconf->getNamesShallow("guifilters");
return true;
}
@@ -904,14 +904,14 @@
{
frag.clear();
if (!mimeconf)
- return false;
+ return false;
if (!mimeconf->get(catfiltername, frag, "guifilters"))
- return false;
+ return false;
return true;
}
bool RclConfig::valueSplitAttributes(const string& whole, string& value,
- ConfSimple& attrs)
+ ConfSimple& attrs)
{
/* There is currently no way to escape a semi-colon */
string::size_type semicol0 = whole.find_first_of(";");
@@ -928,10 +928,10 @@
for (string::size_type i = 0; i < attrstr.size(); i++) {
if (attrstr[i] == ';')
attrstr[i] = '\n';
- }
+ }
attrs.reparse(attrstr);
} else {
- attrs.clear();
+ attrs.clear();
}
return true;
@@ -942,7 +942,7 @@
string fmiss = path_cat(getConfDir(), "missing");
out.clear();
if (!file_to_string(fmiss, out))
- return false;
+ return false;
return true;
}
@@ -951,10 +951,10 @@
string fmiss = path_cat(getCacheDir(), "missing");
FILE *fp = fopen(fmiss.c_str(), "w");
if (fp) {
- if (s.size() > 0 && fwrite(s.c_str(), s.size(), 1, fp) != 1) {
+ if (s.size() > 0 && fwrite(s.c_str(), s.size(), 1, fp) != 1) {
LOGERR("storeMissingHelperDesc: fwrite failed\n");
}
- fclose(fp);
+ fclose(fp);
}
}
@@ -965,8 +965,8 @@
LOGDEB2("RclConfig::readFieldsConfig\n");
m_fields = new ConfStack<ConfSimple>("fields", m_cdirs, true);
if (m_fields == 0 || !m_fields->ok()) {
- m_reason = string("No/bad fields file in: ") + cnferrloc;
- return false;
+ m_reason = string("No/bad fields file in: ") + cnferrloc;
+ return false;
}
// Build a direct map avoiding all indirections for field to
@@ -974,44 +974,44 @@
// Add direct prefixes from the [prefixes] section
vector<string> tps = m_fields->getNames("prefixes");
for (const auto& fieldname : tps) {
- string val;
- m_fields->get(fieldname, val, "prefixes");
- ConfSimple attrs;
- FieldTraits ft;
+ string val;
+ m_fields->get(fieldname, val, "prefixes");
+ ConfSimple attrs;
+ FieldTraits ft;
// fieldname = prefix ; attr1=val;attr2=val...
- if (!valueSplitAttributes(val, ft.pfx, attrs)) {
- LOGERR("readFieldsConfig: bad config line for [" << fieldname <<
+ if (!valueSplitAttributes(val, ft.pfx, attrs)) {
+ LOGERR("readFieldsConfig: bad config line for [" << fieldname <<
"]: [" << val << "]\n");
- return 0;
- }
- string tval;
- if (attrs.get("wdfinc", tval))
- ft.wdfinc = atoi(tval.c_str());
- if (attrs.get("boost", tval))
- ft.boost = atof(tval.c_str());
- if (attrs.get("pfxonly", tval))
- ft.pfxonly = stringToBool(tval);
- if (attrs.get("noterms", tval))
- ft.noterms = stringToBool(tval);
- m_fldtotraits[stringtolower(fieldname)] = ft;
- LOGDEB2("readFieldsConfig: [" << fieldname << "] -> [" << ft.pfx <<
+ return 0;
+ }
+ string tval;
+ if (attrs.get("wdfinc", tval))
+ ft.wdfinc = atoi(tval.c_str());
+ if (attrs.get("boost", tval))
+ ft.boost = atof(tval.c_str());
+ if (attrs.get("pfxonly", tval))
+ ft.pfxonly = stringToBool(tval);
+ if (attrs.get("noterms", tval))
+ ft.noterms = stringToBool(tval);
+ m_fldtotraits[stringtolower(fieldname)] = ft;
+ LOGDEB2("readFieldsConfig: [" << fieldname << "] -> [" << ft.pfx <<
"] " << ft.wdfinc << " " << ft.boost << "\n");
}
// Values section
tps = m_fields->getNames("values");
for (const auto& fieldname : tps) {
- string canonic = stringtolower(fieldname); // canonic name
- string val;
- m_fields->get(fieldname, val, "values");
- ConfSimple attrs;
+ string canonic = stringtolower(fieldname); // canonic name
+ string val;
+ m_fields->get(fieldname, val, "values");
+ ConfSimple attrs;
string svslot;
// fieldname = valueslot ; attr1=val;attr2=val...
- if (!valueSplitAttributes(val, svslot, attrs)) {
- LOGERR("readFieldsConfig: bad value line for [" << fieldname <<
+ if (!valueSplitAttributes(val, svslot, attrs)) {
+ LOGERR("readFieldsConfig: bad value line for [" << fieldname <<
"]: [" << val << "]\n");
- return 0;
- }
+ return 0;
+ }
uint32_t valueslot = uint32_t(atoi(svslot.c_str()));
if (valueslot == 0) {
LOGERR("readFieldsConfig: found 0 value slot for [" << fieldname <<
@@ -1038,8 +1038,8 @@
}
// Find or insert traits entry
- const auto pit =
- m_fldtotraits.insert(
+ const auto pit =
+ m_fldtotraits.insert(
pair<string, FieldTraits>(canonic, FieldTraits())).first;
pit->second.valueslot = valueslot;
pit->second.valuetype = valuetype;
@@ -1051,40 +1051,40 @@
// additional indirection at index time.
tps = m_fields->getNames("aliases");
for (const auto& fieldname : tps) {
- string canonic = stringtolower(fieldname); // canonic name
- FieldTraits ft;
- const auto pit = m_fldtotraits.find(canonic);
- if (pit != m_fldtotraits.end()) {
- ft = pit->second;
- }
- string aliases;
- m_fields->get(canonic, aliases, "aliases");
- vector<string> l;
- stringToStrings(aliases, l);
- for (const auto& alias : l) {
- if (pit != m_fldtotraits.end())
- m_fldtotraits[stringtolower(alias)] = ft;
- m_aliastocanon[stringtolower(alias)] = canonic;
- }
+ string canonic = stringtolower(fieldname); // canonic name
+ FieldTraits ft;
+ const auto pit = m_fldtotraits.find(canonic);
+ if (pit != m_fldtotraits.end()) {
+ ft = pit->second;
+ }
+ string aliases;
+ m_fields->get(canonic, aliases, "aliases");
+ vector<string> l;
+ stringToStrings(aliases, l);
+ for (const auto& alias : l) {
+ if (pit != m_fldtotraits.end())
+ m_fldtotraits[stringtolower(alias)] = ft;
+ m_aliastocanon[stringtolower(alias)] = canonic;
+ }
}
// Query aliases map
tps = m_fields->getNames("queryaliases");
for (const auto& entry: tps) {
- string canonic = stringtolower(entry); // canonic name
- string aliases;
- m_fields->get(canonic, aliases, "queryaliases");
- vector<string> l;
- stringToStrings(aliases, l);
- for (const auto& alias : l) {
- m_aliastoqcanon[stringtolower(alias)] = canonic;
- }
+ string canonic = stringtolower(entry); // canonic name
+ string aliases;
+ m_fields->get(canonic, aliases, "queryaliases");
+ vector<string> l;
+ stringToStrings(aliases, l);
+ for (const auto& alias : l) {
+ m_aliastoqcanon[stringtolower(alias)] = canonic;
+ }
}
#if 0
for (map<string, FieldTraits>::const_iterator it = m_fldtotraits.begin();
- it != m_fldtotraits.end(); it++) {
- LOGDEB("readFieldsConfig: [" << entry << "] -> [" << it->second.pfx <<
+ it != m_fldtotraits.end(); it++) {
+ LOGDEB("readFieldsConfig: [" << entry << "] -> [" << it->second.pfx <<
"] " << it->second.wdfinc << " " << it->second.boost << "\n");
}
#endif
@@ -1097,9 +1097,9 @@
// Extended file attribute to field translations
vector<string>xattrs = m_fields->getNames("xattrtofields");
for (const auto& xattr : xattrs) {
- string val;
- m_fields->get(xattr, val, "xattrtofields");
- m_xattrtofld[xattr] = val;
+ string val;
+ m_fields->get(xattr, val, "xattrtofields");
+ m_xattrtofld[xattr] = val;
}
return true;
@@ -1107,20 +1107,20 @@
// Return specifics for field name:
bool RclConfig::getFieldTraits(const string& _fld, const FieldTraits **ftpp,
- bool isquery) const
+ bool isquery) const
{
string fld = isquery ? fieldQCanon(_fld) : fieldCanon(_fld);
map<string, FieldTraits>::const_iterator pit = m_fldtotraits.find(fld);
if (pit != m_fldtotraits.end()) {
- *ftpp = &pit->second;
- LOGDEB1("RclConfig::getFieldTraits: [" << _fld << "]->[" <<
+ *ftpp = &pit->second;
+ LOGDEB1("RclConfig::getFieldTraits: [" << _fld << "]->[" <<
pit->second.pfx << "]\n");
- return true;
+ return true;
} else {
- LOGDEB1("RclConfig::getFieldTraits: no prefix for field [" << fld <<
+ LOGDEB1("RclConfig::getFieldTraits: no prefix for field [" << fld <<
"]\n");
- *ftpp = 0;
- return false;
+ *ftpp = 0;
+ return false;
}
}
@@ -1128,7 +1128,7 @@
{
set<string> flds;
if (m_fields == 0)
- return flds;
+ return flds;
vector<string> sl = m_fields->getNames("prefixes");
flds.insert(sl.begin(), sl.end());
@@ -1140,9 +1140,9 @@
string fld = stringtolower(f);
map<string, string>::const_iterator it = m_aliastocanon.find(fld);
if (it != m_aliastocanon.end()) {
- LOGDEB1("RclConfig::fieldCanon: [" << f << "] -> [" << it->second <<
+ LOGDEB1("RclConfig::fieldCanon: [" << f << "] -> [" << it->second <<
"]\n");
- return it->second;
+ return it->second;
}
LOGDEB1("RclConfig::fieldCanon: [" << (f) << "] -> [" << (fld) << "]\n");
return fld;
@@ -1153,9 +1153,9 @@
string fld = stringtolower(f);
map<string, string>::const_iterator it = m_aliastoqcanon.find(fld);
if (it != m_aliastoqcanon.end()) {
- LOGDEB1("RclConfig::fieldQCanon: [" << f << "] -> [" << it->second <<
+ LOGDEB1("RclConfig::fieldQCanon: [" << f << "] -> [" << it->second <<
"]\n");
- return it->second;
+ return it->second;
}
return fieldCanon(f);
}
@@ -1180,7 +1180,7 @@
{
set<string> res;
if (mimeview == 0)
- return res;
+ return res;
string base, plus, minus;
mimeview->get("xallexcepts", base, "");
@@ -1192,7 +1192,7 @@
computeBasePlusMinus(res, base, plus, minus);
LOGDEB1("RclConfig::getMimeViewerAllEx(): res: " << stringsToString(res)
- << endl);
+ << endl);
return res;
}
@@ -1208,46 +1208,46 @@
setPlusMinus(sbase, allex, splus, sminus);
if (!mimeview->set("xallexcepts-", sminus, "")) {
- m_reason = string("RclConfig:: cant set value. Readonly?");
- return false;
+ m_reason = string("RclConfig:: cant set value. Readonly?");
+ return false;
}
if (!mimeview->set("xallexcepts+", splus, "")) {
- m_reason = string("RclConfig:: cant set value. Readonly?");
- return false;
+ m_reason = string("RclConfig:: cant set value. Readonly?");
+ return false;
}
return true;
}
string RclConfig::getMimeViewerDef(const string &mtype, const string& apptag,
- bool useall) const
+ bool useall) const
{
LOGDEB2("RclConfig::getMimeViewerDef: mtype [" << mtype << "] apptag ["
<< apptag << "]\n");
string hs;
if (mimeview == 0)
- return hs;
+ return hs;
if (useall) {
- // Check for exception
- set<string> allex = getMimeViewerAllEx();
- bool isexcept = false;
- for (auto& it : allex) {
- vector<string> mita;
- stringToTokens(it, mita, "|");
- if ((mita.size() == 1 && apptag.empty() && mita[0] == mtype) ||
- (mita.size() == 2 && mita[1] == apptag && mita[0] == mtype)) {
- // Exception to x-all
- isexcept = true;
- break;
- }
- }
-
- if (isexcept == false) {
- mimeview->get("application/x-all", hs, "view");
- return hs;
- }
- // Fallthrough to normal case.
+ // Check for exception
+ set<string> allex = getMimeViewerAllEx();
+ bool isexcept = false;
+ for (auto& it : allex) {
+ vector<string> mita;
+ stringToTokens(it, mita, "|");
+ if ((mita.size() == 1 && apptag.empty() && mita[0] == mtype) ||
+ (mita.size() == 2 && mita[1] == apptag && mita[0] == mtype)) {
+ // Exception to x-all
+ isexcept = true;
+ break;
+ }
+ }
+
+ if (isexcept == false) {
+ mimeview->get("application/x-all", hs, "view");
+ return hs;
+ }
+ // Fallthrough to normal case.
}
if (apptag.empty() || !mimeview->get(mtype + string("|") + apptag,
@@ -1259,11 +1259,11 @@
bool RclConfig::getMimeViewerDefs(vector<pair<string, string> >& defs) const
{
if (mimeview == 0)
- return false;
+ return false;
vector<string>tps = mimeview->getNames("view");
for (vector<string>::const_iterator it = tps.begin();
- it != tps.end();it++) {
- defs.push_back(pair<string, string>(*it, getMimeViewerDef(*it, "", 0)));
+ it != tps.end();it++) {
+ defs.push_back(pair<string, string>(*it, getMimeViewerDef(*it, "", 0)));
}
return true;
}
@@ -1274,13 +1274,13 @@
return false;
bool status;
if (!def.empty())
- status = mimeview->set(mt, def, "view");
+ status = mimeview->set(mt, def, "view");
else
- status = mimeview->erase(mt, "view");
+ status = mimeview->erase(mt, "view");
if (!status) {
- m_reason = string("RclConfig:: cant set value. Readonly?");
- return false;
+ m_reason = string("RclConfig:: cant set value. Readonly?");
+ return false;
}
return true;
}
@@ -1301,11 +1301,11 @@
{
string iconname;
if (!apptag.empty())
- mimeconf->get(mtype + string("|") + apptag, iconname, "icons");
+ mimeconf->get(mtype + string("|") + apptag, iconname, "icons");
if (iconname.empty())
mimeconf->get(mtype, iconname, "icons");
if (iconname.empty())
- iconname = "document";
+ iconname = "document";
string iconpath;
#if defined (__FreeBSD__) && __FreeBSD_version < 500000
@@ -1316,9 +1316,9 @@
#endif
if (iconpath.empty()) {
- iconpath = path_cat(m_datadir, "images");
+ iconpath = path_cat(m_datadir, "images");
} else {
- iconpath = path_tildexpand(iconpath);
+ iconpath = path_tildexpand(iconpath);
}
return path_cat(iconpath, iconname) + ".png";
}
@@ -1329,13 +1329,13 @@
{
string result;
if (!getConfParam(varname, result)) {
- result = path_cat(getConfDir(), dflt);
+ result = path_cat(getConfDir(), dflt);
} else {
- result = path_tildexpand(result);
- // If not an absolute path, compute relative to config dir
- if (!path_isabsolute(result)) {
- result = path_cat(getConfDir(), result);
- }
+ result = path_tildexpand(result);
+ // If not an absolute path, compute relative to config dir
+ if (!path_isabsolute(result)) {
+ result = path_cat(getConfDir(), result);
+ }
}
return path_canon(result);
}
@@ -1351,13 +1351,13 @@
{
string result;
if (!getConfParam(varname, result)) {
- result = path_cat(getCacheDir(), dflt);
+ result = path_cat(getCacheDir(), dflt);
} else {
- result = path_tildexpand(result);
- // If not an absolute path, compute relative to cache dir
- if (!path_isabsolute(result)) {
- result = path_cat(getCacheDir(), result);
- }
+ result = path_tildexpand(result);
+ // If not an absolute path, compute relative to cache dir
+ if (!path_isabsolute(result)) {
+ result = path_cat(getCacheDir(), result);
+ }
}
return path_canon(result);
}
@@ -1407,7 +1407,7 @@
* moved. Of course this could be done more efficiently than by splitting
* into vectors, but we don't care.*/
static string path_diffstems(const string& p1, const string& p2,
- string& r1, string& r2)
+ string& r1, string& r2)
{
string reason;
r1.clear();
@@ -1457,7 +1457,7 @@
cur_confdir = m_confdir;
}
LOGDEB1("RclConfig::urlrewrite: orgidxconfdir: " << orig_confdir <<
- " cur_confdir " << cur_confdir << endl);
+ " cur_confdir " << cur_confdir << endl);
string reason = path_diffstems(orig_confdir, cur_confdir,
confstemorg, confstemrep);
if (!reason.empty()) {
@@ -1471,7 +1471,7 @@
// Do path translations exist for this index ?
bool needptrans = true;
if (m_ptrans == 0 || !m_ptrans->hasSubKey(dbdir)) {
- LOGDEB2("RclConfig::urlrewrite: no paths translations (m_ptrans " <<
+ LOGDEB2("RclConfig::urlrewrite: no paths translations (m_ptrans " <<
m_ptrans << ")\n");
needptrans = false;
}
@@ -1483,8 +1483,8 @@
string path = fileurltolocalpath(url);
if (path.empty()) {
- LOGDEB2("RclConfig::urlrewrite: not file url\n");
- return;
+ LOGDEB2("RclConfig::urlrewrite: not file url\n");
+ return;
}
// Do the movable volume thing.
@@ -1519,17 +1519,17 @@
bool RclConfig::sourceChanged() const
{
if (m_conf && m_conf->sourceChanged())
- return true;
+ return true;
if (mimemap && mimemap->sourceChanged())
- return true;
+ return true;
if (mimeconf && mimeconf->sourceChanged())
- return true;
+ return true;
if (mimeview && mimeview->sourceChanged())
- return true;
+ return true;
if (m_fields && m_fields->sourceChanged())
- return true;
+ return true;
if (m_ptrans && m_ptrans->sourceChanged())
- return true;
+ return true;
return false;
}
@@ -1537,7 +1537,7 @@
{
string webqueuedir;
if (!getConfParam("webqueuedir", webqueuedir))
- webqueuedir = "~/.recollweb/ToIndex/";
+ webqueuedir = "~/.recollweb/ToIndex/";
webqueuedir = path_tildexpand(webqueuedir);
return webqueuedir;
}
@@ -1569,8 +1569,8 @@
// And the web queue dir
skpl.push_back(getWebQueueDir());
for (vector<string>::iterator it = skpl.begin(); it != skpl.end(); it++) {
- *it = path_tildexpand(*it);
- *it = path_canon(*it);
+ *it = path_tildexpand(*it);
+ *it = path_canon(*it);
}
sort(skpl.begin(), skpl.end());
vector<string>::iterator uit = unique(skpl.begin(), skpl.end());
@@ -1584,20 +1584,20 @@
getConfParam("daemSkippedPaths", &dskpl);
for (vector<string>::iterator it = dskpl.begin(); it != dskpl.end(); it++) {
- *it = path_tildexpand(*it);
- *it = path_canon(*it);
+ *it = path_tildexpand(*it);
+ *it = path_canon(*it);
}
vector<string> skpl1 = getSkippedPaths();
vector<string> skpl;
if (dskpl.empty()) {
- skpl = skpl1;
+ skpl = skpl1;
} else {
- sort(dskpl.begin(), dskpl.end());
- merge(dskpl.begin(), dskpl.end(), skpl1.begin(), skpl1.end(),
- skpl.begin());
- vector<string>::iterator uit = unique(skpl.begin(), skpl.end());
- skpl.resize(uit - skpl.begin());
+ sort(dskpl.begin(), dskpl.end());
+ merge(dskpl.begin(), dskpl.end(), skpl1.begin(), skpl1.end(),
+ skpl.begin());
+ vector<string>::iterator uit = unique(skpl.begin(), skpl.end());
+ skpl.resize(uit - skpl.begin());
}
return skpl;
}
@@ -1609,7 +1609,7 @@
{
// If the path is absolute, this is it
if (path_isabsolute(icmd))
- return icmd;
+ return icmd;
const char *cp = getenv("PATH");
if (!cp) //??
@@ -1653,18 +1653,18 @@
mimeconf->get(mtype, hs, cstr_null);
if (hs.empty())
- return false;
+ return false;
vector<string> tokens;
stringToStrings(hs, tokens);
if (tokens.empty()) {
- LOGERR("getUncompressor: empty spec for mtype " << mtype << "\n");
- return false;
+ LOGERR("getUncompressor: empty spec for mtype " << mtype << "\n");
+ return false;
}
vector<string>::iterator it = tokens.begin();
if (tokens.size() < 2)
- return false;
+ return false;
if (stringlowercmp("uncompress", *it++))
- return false;
+ return false;
cmd.clear();
cmd.push_back(findFilter(*it));
@@ -1697,7 +1697,15 @@
"# Values set in this file will override the system-wide values for the file\n"
"# with the same name in the central directory. The syntax for setting\n"
"# values is identical.\n"
- ;
+;
+// We just use path_max to print the path to /usr/share/recoll/examples
+// inside the config file. At worse, the text is truncated (using
+// snprintf). But 4096 should be enough :)
+#ifndef PATH_MAX
+#define MYPATHALLOC 4096
+#else
+#define MYPATHALLOC PATH_MAX
+#endif
// Use uni2ascii -a K to generate these from the utf-8 strings
// Swedish and Danish.
@@ -1707,12 +1715,12 @@
// Create initial user config by creating commented empty files
static const char *configfiles[] = {"recoll.conf", "mimemap", "mimeconf",
- "mimeview"};
+ "mimeview"};
static int ncffiles = sizeof(configfiles) / sizeof(char *);
bool RclConfig::initUserConfig()
{
// Explanatory text
- const int bs = sizeof(blurb0)+PATH_MAX+1;
+ const int bs = sizeof(blurb0)+MYPATHALLOC+1;
char blurb[bs];
string exdir = path_cat(m_datadir, "examples");
snprintf(blurb, bs, blurb0, exdir.c_str());
@@ -1720,33 +1728,33 @@
// Use protective 700 mode to create the top configuration
// directory: documents can be reconstructed from index data.
if (!path_exists(m_confdir) &&
- mkdir(m_confdir.c_str(), 0700) < 0) {
- m_reason += string("mkdir(") + m_confdir + ") failed: " +
- strerror(errno);
- return false;
+ mkdir(m_confdir.c_str(), 0700) < 0) {
+ m_reason += string("mkdir(") + m_confdir + ") failed: " +
+ strerror(errno);
+ return false;
}
string lang = localelang();
for (int i = 0; i < ncffiles; i++) {
- string dst = path_cat(m_confdir, string(configfiles[i]));
- if (!path_exists(dst)) {
- FILE *fp = fopen(dst.c_str(), "w");
- if (fp) {
- fprintf(fp, "%s\n", blurb);
- if (!strcmp(configfiles[i], "recoll.conf")) {
- // Add improved unac_except_trans for some languages
- if (lang == "se" || lang == "dk" || lang == "no" ||
- lang == "fi") {
- fprintf(fp, "%s\n", swedish_ex);
- } else if (lang == "de") {
- fprintf(fp, "%s\n", german_ex);
- }
- }
- fclose(fp);
- } else {
- m_reason += string("fopen ") + dst + ": " + strerror(errno);
- return false;
- }
- }
+ string dst = path_cat(m_confdir, string(configfiles[i]));
+ if (!path_exists(dst)) {
+ FILE *fp = fopen(dst.c_str(), "w");
+ if (fp) {
+ fprintf(fp, "%s\n", blurb);
+ if (!strcmp(configfiles[i], "recoll.conf")) {
+ // Add improved unac_except_trans for some languages
+ if (lang == "se" || lang == "dk" || lang == "no" ||
+ lang == "fi") {
+ fprintf(fp, "%s\n", swedish_ex);
+ } else if (lang == "de") {
+ fprintf(fp, "%s\n", german_ex);
+ }
+ }
+ fclose(fp);
+ } else {
+ m_reason += string("fopen ") + dst + ": " + strerror(errno);
+ return false;
+ }
+ }
}
return true;
}
@@ -1782,7 +1790,7 @@
{
zeroMe();
if (!(m_ok = r.m_ok))
- return;
+ return;
// Copyable fields
m_ok = r.m_ok;
@@ -1809,19 +1817,19 @@
// Special treatment
if (r.m_conf)
- m_conf = new ConfStack<ConfTree>(*(r.m_conf));
+ m_conf = new ConfStack<ConfTree>(*(r.m_conf));
if (r.mimemap)
- mimemap = new ConfStack<ConfTree>(*(r.mimemap));
+ mimemap = new ConfStack<ConfTree>(*(r.mimemap));
if (r.mimeconf)
- mimeconf = new ConfStack<ConfSimple>(*(r.mimeconf));
+ mimeconf = new ConfStack<ConfSimple>(*(r.mimeconf));
if (r.mimeview)
- mimeview = new ConfStack<ConfSimple>(*(r.mimeview));
+ mimeview = new ConfStack<ConfSimple>(*(r.mimeview));
if (r.m_fields)
- m_fields = new ConfStack<ConfSimple>(*(r.m_fields));
+ m_fields = new ConfStack<ConfSimple>(*(r.m_fields));
if (r.m_ptrans)
- m_ptrans = new ConfSimple(*(r.m_ptrans));
+ m_ptrans = new ConfSimple(*(r.m_ptrans));
if (r.m_stopsuffixes)
- m_stopsuffixes = new SuffixStore(*((SuffixStore*)r.m_stopsuffixes));
+ m_stopsuffixes = new SuffixStore(*((SuffixStore*)r.m_stopsuffixes));
initParamStale(m_conf, mimemap);
}
@@ -1855,12 +1863,12 @@
static char *thisprog;
static char usage [] = "\n"
-"-c: check a few things in the configuration files\n"
-"[-s subkey] -q param : query parameter value\n"
-"-f : print some field data\n"
-" : default: print parameters\n"
-
-;
+ "-c: check a few things in the configuration files\n"
+ "[-s subkey] -q param : query parameter value\n"
+ "-f : print some field data\n"
+ " : default: print parameters\n"
+
+ ;
static void
Usage(void)
{
@@ -1870,8 +1878,8 @@
static int op_flags;
#define OPT_MOINS 0x1
-#define OPT_s 0x2
-#define OPT_q 0x4
+#define OPT_s 0x2
+#define OPT_q 0x4
#define OPT_c 0x8
#define OPT_f 0x10
@@ -1883,70 +1891,70 @@
argc--; argv++;
while (argc > 0 && **argv == '-') {
- (*argv)++;
- if (!(**argv))
- /* Cas du "adb - core" */
- Usage();
- while (**argv)
- switch (*(*argv)++) {
- case 'c': op_flags |= OPT_c; break;
- case 'f': op_flags |= OPT_f; break;
- case 's': op_flags |= OPT_s; if (argc < 2) Usage();
- skey = *(++argv);
- argc--;
- goto b1;
- case 'q': op_flags |= OPT_q; if (argc < 2) Usage();
- pname = *(++argv);
- argc--;
- goto b1;
- default: Usage(); break;
- }
+ (*argv)++;
+ if (!(**argv))
+ /* Cas du "adb - core" */
+ Usage();
+ while (**argv)
+ switch (*(*argv)++) {
+ case 'c': op_flags |= OPT_c; break;
+ case 'f': op_flags |= OPT_f; break;
+ case 's': op_flags |= OPT_s; if (argc < 2) Usage();
+ skey = *(++argv);
+ argc--;
+ goto b1;
+ case 'q': op_flags |= OPT_q; if (argc < 2) Usage();
+ pname = *(++argv);
+ argc--;
+ goto b1;
+ default: Usage(); break;
+ }
b1: argc--; argv++;
}
if (argc != 0)
- Usage();
+ Usage();
string reason;
RclConfig *config = recollinit(0, 0, reason);
if (config == 0 || !config->ok()) {
- cerr << "Configuration problem: " << reason << endl;
- exit(1);
+ cerr << "Configuration problem: " << reason << endl;
+ exit(1);
}
if (op_flags & OPT_s)
- config->setKeyDir(skey);
+ config->setKeyDir(skey);
if (op_flags & OPT_q) {
- string value;
- if (!config->getConfParam(pname, value)) {
- fprintf(stderr, "getConfParam failed for [%s]\n", pname.c_str());
- exit(1);
- }
- printf("[%s] -> [%s]\n", pname.c_str(), value.c_str());
+ string value;
+ if (!config->getConfParam(pname, value)) {
+ fprintf(stderr, "getConfParam failed for [%s]\n", pname.c_str());
+ exit(1);
+ }
+ printf("[%s] -> [%s]\n", pname.c_str(), value.c_str());
} else if (op_flags & OPT_f) {
- set<string> stored = config->getStoredFields();
- set<string> indexed = config->getIndexedFields();
- cout << "Stored fields: ";
+ set<string> stored = config->getStoredFields();
+ set<string> indexed = config->getIndexedFields();
+ cout << "Stored fields: ";
for (set<string>::const_iterator it = stored.begin();
it != stored.end(); it++) {
cout << "[" << *it << "] ";
}
- cout << endl;
- cout << "Indexed fields: ";
+ cout << endl;
+ cout << "Indexed fields: ";
for (set<string>::const_iterator it = indexed.begin();
it != indexed.end(); it++) {
- const FieldTraits *ftp;
- config->getFieldTraits(*it, &ftp);
- if (ftp)
- cout << "[" << *it << "]" << " -> [" << ftp->pfx << "] ";
- else
- cout << "[" << *it << "]" << " -> [" << "(none)" << "] ";
-
- }
- cout << endl;
+ const FieldTraits *ftp;
+ config->getFieldTraits(*it, &ftp);
+ if (ftp)
+ cout << "[" << *it << "]" << " -> [" << ftp->pfx << "] ";
+ else
+ cout << "[" << *it << "]" << " -> [" << "(none)" << "] ";
+
+ }
+ cout << endl;
} else if (op_flags & OPT_c) {
- // Checking the configuration consistency
-
- // Find and display category names
+ // Checking the configuration consistency
+
+ // Find and display category names
vector<string> catnames;
config->getMimeCategories(catnames);
cout << "Categories: ";
@@ -1956,8 +1964,8 @@
}
cout << endl;
- // Compute union of all types from each category. Check that there
- // are no duplicates while we are at it.
+ // Compute union of all types from each category. Check that there
+ // are no duplicates while we are at it.
set<string> allmtsfromcats;
for (vector<string>::const_iterator it = catnames.begin();
it != catnames.end(); it++) {
@@ -1973,10 +1981,10 @@
}
}
- // Retrieve complete list of mime types
+ // Retrieve complete list of mime types
vector<string> mtypes = config->getAllMimeTypes();
- // And check that each mime type is found in exactly one category
+ // And check that each mime type is found in exactly one category
for (vector<string>::const_iterator it = mtypes.begin();
it != mtypes.end(); it++) {
if (allmtsfromcats.find(*it) == allmtsfromcats.end()) {
@@ -1984,39 +1992,39 @@
}
}
- // List mime types not in mimeview
+ // List mime types not in mimeview
for (vector<string>::const_iterator it = mtypes.begin();
it != mtypes.end(); it++) {
- if (config->getMimeViewerDef(*it, "", false).empty()) {
- cout << "No viewer: [" << *it << "]" << endl;
- }
- }
-
- // Check that each mime type has an indexer
+ if (config->getMimeViewerDef(*it, "", false).empty()) {
+ cout << "No viewer: [" << *it << "]" << endl;
+ }
+ }
+
+ // Check that each mime type has an indexer
for (vector<string>::const_iterator it = mtypes.begin();
it != mtypes.end(); it++) {
- if (config->getMimeHandlerDef(*it, false).empty()) {
- cout << "No filter: [" << *it << "]" << endl;
- }
- }
-
- // Check that each mime type has a defined icon
+ if (config->getMimeHandlerDef(*it, false).empty()) {
+ cout << "No filter: [" << *it << "]" << endl;
+ }
+ }
+
+ // Check that each mime type has a defined icon
for (vector<string>::const_iterator it = mtypes.begin();
it != mtypes.end(); it++) {
- if (config->getMimeIconPath(*it, "") == "document") {
- cout << "No or generic icon: [" << *it << "]" << endl;
- }
+ if (config->getMimeIconPath(*it, "") == "document") {
+ cout << "No or generic icon: [" << *it << "]" << endl;
+ }
}
} else {
config->setKeyDir(cstr_null);
- vector<string> names = config->getConfNames();
- for (vector<string>::iterator it = names.begin();
- it != names.end();it++) {
- string value;
- config->getConfParam(*it, value);
- cout << *it << " -> [" << value << "]" << endl;
- }
+ vector<string> names = config->getConfNames();
+ for (vector<string>::iterator it = names.begin();
+ it != names.end();it++) {
+ string value;
+ config->getConfParam(*it, value);
+ cout << *it << " -> [" << value << "]" << endl;
+ }
}
exit(0);
}