1st mods to get a build under windows. Does not build yet, far from it

This commit is contained in:
Jean-Francois Dockes 2015-08-30 11:19:18 +02:00
parent 2c7f4f8a83
commit ca55c34b28
48 changed files with 1855 additions and 71 deletions

View file

@ -122,7 +122,7 @@ namespace Binc {
for (std::string::const_iterator i = s_in.begin(); i != s_in.end(); ++i) { for (std::string::const_iterator i = s_in.begin(); i != s_in.end(); ++i) {
unsigned char c = (unsigned char)*i; unsigned char c = (unsigned char)*i;
if (c <= 31 || c >= 127 || c == '\"' || c == '\\') if (c <= 31 || c >= 127 || c == '\"' || c == '\\')
return "{" + toString(s_in.length()) + "}\r\n" + s_in; return "{" + toString((unsigned long)s_in.length()) + "}\r\n" + s_in;
} }
return "\"" + s_in + "\""; return "\"" + s_in + "\"";

View file

@ -25,7 +25,7 @@
*/ */
#ifndef mime_inputsource_h_included #ifndef mime_inputsource_h_included
#define mime_inputsource_h_included #define mime_inputsource_h_included
#include "autoconfig.h"
// Data source for MIME parser // Data source for MIME parser
// Note about large files: we might want to change the unsigned int // Note about large files: we might want to change the unsigned int

View file

@ -26,3 +26,37 @@
# define STD_SHARED_PTR RefCntr # define STD_SHARED_PTR RefCntr
#endif #endif
#ifdef _WIN32
#include "safewindows.h"
typedef int pid_t;
inline int readlink(const char *cp, void *buf, int cnt) {
return -1;
}
#define HAVE_STRUCT_TIMESPEC
#define strdup _strdup
#define timegm _mkgmtime
// gmtime is supposedly thread-safe on windows
#define gmtime_r(A, B) gmtime(A)
#define localtime_r(A,B) localtime(A)
typedef DWORD32 u_int32_t;
typedef DWORD64 u_int64_t;
typedef unsigned __int8 u_int8_t;
typedef int mode_t;
typedef int ssize_t;
#define strncasecmp _strnicmp
#define ftruncate _chsize
#define PATH_MAX MAX_PATH
#define MAXPATHLEN PATH_MAX
#define R_OK 4
#define W_OK 2
#define X_OK 4
#define RECOLL_DATADIR "C:\\recoll\\"
#define S_ISLNK(X) false
#define lstat stat
#define fseeko _fseeki64
#define ftello _ftelli64
#endif

View file

@ -19,11 +19,13 @@
#include <stdio.h> #include <stdio.h>
#include <errno.h> #include <errno.h>
#ifndef _WIN32
#include <langinfo.h> #include <langinfo.h>
#include <sys/param.h>
#endif
#include <limits.h> #include <limits.h>
#include "safesysstat.h" #include "safesysstat.h"
#include "safeunistd.h" #include "safeunistd.h"
#include <sys/param.h>
#ifdef __FreeBSD__ #ifdef __FreeBSD__
#include <osreldate.h> #include <osreldate.h>
#endif #endif
@ -200,6 +202,7 @@ RclConfig::RclConfig(const string *argcnf)
// is called from the main thread at once, by constructing a config // is called from the main thread at once, by constructing a config
// from recollinit // from recollinit
if (o_localecharset.empty()) { if (o_localecharset.empty()) {
#ifndef _WIN32
const char *cp; const char *cp;
cp = nl_langinfo(CODESET); cp = nl_langinfo(CODESET);
// We don't keep US-ASCII. It's better to use a superset // We don't keep US-ASCII. It's better to use a superset
@ -217,6 +220,9 @@ RclConfig::RclConfig(const string *argcnf)
// Use cp1252 instead of iso-8859-1, it's a superset. // Use cp1252 instead of iso-8859-1, it's a superset.
o_localecharset = string(cstr_cp1252); o_localecharset = string(cstr_cp1252);
} }
#else
o_localecharset = "UTF-8";
#endif
LOGDEB1(("RclConfig::getDefCharset: localecharset [%s]\n", LOGDEB1(("RclConfig::getDefCharset: localecharset [%s]\n",
o_localecharset.c_str())); o_localecharset.c_str()));
} }

View file

@ -31,9 +31,13 @@
#include "pathut.h" #include "pathut.h"
#include "unac.h" #include "unac.h"
#include "smallut.h" #include "smallut.h"
#ifndef _WIN32
#include "execmd.h" #include "execmd.h"
#endif
#ifndef _WIN32
static const int catchedSigs[] = {SIGINT, SIGQUIT, SIGTERM, SIGUSR1, SIGUSR2}; static const int catchedSigs[] = {SIGINT, SIGQUIT, SIGTERM, SIGUSR1, SIGUSR2};
#endif
static pthread_t mainthread_id; static pthread_t mainthread_id;
@ -52,7 +56,9 @@ RclConfig *recollinit(RclInitFlags flags,
// We ignore SIGPIPE always. All pieces of code which can write to a pipe // We ignore SIGPIPE always. All pieces of code which can write to a pipe
// must check write() return values. // must check write() return values.
#ifndef _WIN32
signal(SIGPIPE, SIG_IGN); signal(SIGPIPE, SIG_IGN);
#endif
// Make sure the locale is set. This is only for converting file names // Make sure the locale is set. This is only for converting file names
// to utf8 for indexing. // to utf8 for indexing.
@ -63,6 +69,7 @@ RclConfig *recollinit(RclInitFlags flags,
// Install app signal handler // Install app signal handler
if (sigcleanup) { if (sigcleanup) {
#ifndef _WIN32
struct sigaction action; struct sigaction action;
action.sa_handler = sigcleanup; action.sa_handler = sigcleanup;
action.sa_flags = 0; action.sa_flags = 0;
@ -73,8 +80,8 @@ RclConfig *recollinit(RclInitFlags flags,
perror("Sigaction failed"); perror("Sigaction failed");
} }
} }
#endif
} }
DebugLog::getdbl()->setloglevel(DEBDEB1); DebugLog::getdbl()->setloglevel(DEBDEB1);
DebugLog::setfilename("stderr"); DebugLog::setfilename("stderr");
if (getenv("RECOLL_LOGDATE")) if (getenv("RECOLL_LOGDATE"))
@ -116,6 +123,7 @@ RclConfig *recollinit(RclInitFlags flags,
DebugLog::getdbl()->setloglevel(lev); DebugLog::getdbl()->setloglevel(lev);
} }
// Install log rotate sig handler // Install log rotate sig handler
#ifndef _WIN32
{ {
struct sigaction action; struct sigaction action;
action.sa_handler = siglogreopen; action.sa_handler = siglogreopen;
@ -127,6 +135,7 @@ RclConfig *recollinit(RclInitFlags flags,
} }
} }
} }
#endif
// Make sure the locale charset is initialized (so that multiple // Make sure the locale charset is initialized (so that multiple
// threads don't try to do it at once). // threads don't try to do it at once).
@ -146,7 +155,9 @@ RclConfig *recollinit(RclInitFlags flags,
unac_set_except_translations(unacex.c_str()); unac_set_except_translations(unacex.c_str());
#ifndef IDX_THREADS #ifndef IDX_THREADS
#ifndef _WIN32
ExecCmd::useVfork(true); ExecCmd::useVfork(true);
#endif
#else #else
// Keep threads init behind log init, but make sure it's done before // Keep threads init behind log init, but make sure it's done before
// we do the vfork choice ! The latter is not used any more actually, // we do the vfork choice ! The latter is not used any more actually,
@ -156,11 +167,15 @@ RclConfig *recollinit(RclInitFlags flags,
bool novfork; bool novfork;
config->getConfParam("novfork", &novfork); config->getConfParam("novfork", &novfork);
if (novfork) { if (novfork) {
#ifndef _WIN32
LOGDEB0(("rclinit: will use fork() for starting commands\n")); LOGDEB0(("rclinit: will use fork() for starting commands\n"));
ExecCmd::useVfork(false); ExecCmd::useVfork(false);
#endif
} else { } else {
#ifndef _WIN32
LOGDEB0(("rclinit: will use vfork() for starting commands\n")); LOGDEB0(("rclinit: will use vfork() for starting commands\n"));
ExecCmd::useVfork(true); ExecCmd::useVfork(true);
#endif
} }
#endif #endif
@ -183,6 +198,7 @@ RclConfig *recollinit(RclInitFlags flags,
// to block possible signals // to block possible signals
void recoll_threadinit() void recoll_threadinit()
{ {
#ifndef _WIN32
sigset_t sset; sigset_t sset;
sigemptyset(&sset); sigemptyset(&sset);
@ -190,6 +206,7 @@ void recoll_threadinit()
sigaddset(&sset, catchedSigs[i]); sigaddset(&sset, catchedSigs[i]);
sigaddset(&sset, SIGHUP); sigaddset(&sset, SIGHUP);
pthread_sigmask(SIG_BLOCK, &sset, 0); pthread_sigmask(SIG_BLOCK, &sset, 0);
#endif
} }
bool recoll_ismainthread() bool recoll_ismainthread()

View file

@ -110,7 +110,7 @@ bool SynGroups::setfile(const string& fn)
lnum++; lnum++;
{ {
int ll = strlen(cline); size_t ll = strlen(cline);
while (ll > 0 && (cline[ll-1] == '\n' || cline[ll-1] == '\r')) { while (ll > 0 && (cline[ll-1] == '\n' || cline[ll-1] == '\r')) {
cline[ll-1] = 0; cline[ll-1] = 0;
ll--; ll--;

View file

@ -14,9 +14,8 @@
* Free Software Foundation, Inc., * Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef HAVE_CONFIG_H
#include "autoconfig.h" #include "autoconfig.h"
#endif
#include "debuglog.h" #include "debuglog.h"

View file

@ -43,7 +43,6 @@
#include "fileudi.h" #include "fileudi.h"
#include "cancelcheck.h" #include "cancelcheck.h"
#include "rclinit.h" #include "rclinit.h"
#include "execmd.h"
#include "extrameta.h" #include "extrameta.h"
using namespace std; using namespace std;

View file

@ -27,7 +27,9 @@ using namespace std;
#include "mimetype.h" #include "mimetype.h"
#include "debuglog.h" #include "debuglog.h"
#ifndef _WIN32
#include "execmd.h" #include "execmd.h"
#endif
#include "rclconfig.h" #include "rclconfig.h"
#include "smallut.h" #include "smallut.h"
#include "idfile.h" #include "idfile.h"

View file

@ -14,16 +14,16 @@
* Free Software Foundation, Inc., * Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef HAVE_CONFIG_H
#include "autoconfig.h" #include "autoconfig.h"
#endif
#include <stdio.h> #include <stdio.h>
#include <signal.h> #include <signal.h>
#include <errno.h> #include <errno.h>
#ifndef _WIN32
#include <sys/time.h> #include <sys/time.h>
#include <sys/resource.h> #include <sys/resource.h>
#include <fcntl.h> #endif
#include "safefcntl.h"
#include "safeunistd.h" #include "safeunistd.h"
#include <iostream> #include <iostream>
@ -45,7 +45,9 @@ using namespace std;
#include "beaglequeue.h" #include "beaglequeue.h"
#include "recollindex.h" #include "recollindex.h"
#include "fsindexer.h" #include "fsindexer.h"
#ifndef _WIN32
#include "rclionice.h" #include "rclionice.h"
#endif
#include "execmd.h" #include "execmd.h"
#include "checkretryfailed.h" #include "checkretryfailed.h"
@ -177,11 +179,13 @@ static void makeIndexerOrExit(RclConfig *config, bool inPlaceReset)
void rclIxIonice(const RclConfig *config) void rclIxIonice(const RclConfig *config)
{ {
#ifndef _WIN32
string clss, classdata; string clss, classdata;
if (!config->getConfParam("monioniceclass", clss) || clss.empty()) if (!config->getConfParam("monioniceclass", clss) || clss.empty())
clss = "3"; clss = "3";
config->getConfParam("monioniceclassdata", classdata); config->getConfParam("monioniceclassdata", classdata);
rclionice(clss, classdata); rclionice(clss, classdata);
#endif
} }
class MakeListWalkerCB : public FsTreeWalkerCB { class MakeListWalkerCB : public FsTreeWalkerCB {
@ -393,8 +397,10 @@ int main(int argc, char **argv)
// The reexec struct is used by the daemon to shed memory after // The reexec struct is used by the daemon to shed memory after
// the initial indexing pass and to restart when the configuration // the initial indexing pass and to restart when the configuration
// changes // changes
#ifndef _WIN32
o_reexec = new ReExec; o_reexec = new ReExec;
o_reexec->init(argc, argv); o_reexec->init(argc, argv);
#endif
thisprog = argv[0]; thisprog = argv[0];
argc--; argv++; argc--; argv++;
@ -463,7 +469,9 @@ int main(int argc, char **argv)
cerr << "Configuration problem: " << reason << endl; cerr << "Configuration problem: " << reason << endl;
exit(1); exit(1);
} }
#ifndef _WIN32
o_reexec->atexit(cleanup); o_reexec->atexit(cleanup);
#endif
vector<string> nonexist; vector<string> nonexist;
if (!checktopdirs(config, nonexist)) if (!checktopdirs(config, nonexist))
@ -483,7 +491,7 @@ int main(int argc, char **argv)
if ((op_flags & OPT_E)) { if ((op_flags & OPT_E)) {
exit(0); exit(0);
} }
#ifndef _WIN32
string rundir; string rundir;
config->getConfParam("idxrundir", rundir); config->getConfParam("idxrundir", rundir);
if (!rundir.compare("tmp")) { if (!rundir.compare("tmp")) {
@ -501,6 +509,7 @@ int main(int argc, char **argv)
rundir.c_str(), errno)); rundir.c_str(), errno));
} }
} }
#endif
bool rezero((op_flags & OPT_z) != 0); bool rezero((op_flags & OPT_z) != 0);
bool inPlaceReset((op_flags & OPT_Z) != 0); bool inPlaceReset((op_flags & OPT_Z) != 0);
@ -522,12 +531,13 @@ int main(int argc, char **argv)
// Log something at LOGINFO to reset the trace file. Else at level // Log something at LOGINFO to reset the trace file. Else at level
// 3 it's not even truncated if all docs are up to date. // 3 it's not even truncated if all docs are up to date.
LOGINFO(("recollindex: starting up\n")); LOGINFO(("recollindex: starting up\n"));
#ifndef _WIN32
if (setpriority(PRIO_PROCESS, 0, 20) != 0) { if (setpriority(PRIO_PROCESS, 0, 20) != 0) {
LOGINFO(("recollindex: can't setpriority(), errno %d\n", errno)); LOGINFO(("recollindex: can't setpriority(), errno %d\n", errno));
} }
// Try to ionice. This does not work on all platforms // Try to ionice. This does not work on all platforms
rclIxIonice(config); rclIxIonice(config);
#endif
if (op_flags & (OPT_i|OPT_e)) { if (op_flags & (OPT_i|OPT_e)) {
lockorexit(&pidfile); lockorexit(&pidfile);
@ -596,15 +606,17 @@ int main(int argc, char **argv)
lockorexit(&pidfile); lockorexit(&pidfile);
if (!(op_flags&OPT_D)) { if (!(op_flags&OPT_D)) {
LOGDEB(("recollindex: daemonizing\n")); LOGDEB(("recollindex: daemonizing\n"));
#ifndef _WIN32
if (daemon(0,0) != 0) { if (daemon(0,0) != 0) {
fprintf(stderr, "daemon() failed, errno %d\n", errno); fprintf(stderr, "daemon() failed, errno %d\n", errno);
LOGERR(("daemon() failed, errno %d\n", errno)); LOGERR(("daemon() failed, errno %d\n", errno));
exit(1); exit(1);
} }
#endif
} }
// Need to rewrite pid, it changed // Need to rewrite pid, it changed
pidfile.write_pid(); pidfile.write_pid();
#ifndef _WIN32
// Not too sure if I have to redo the nice thing after daemon(), // Not too sure if I have to redo the nice thing after daemon(),
// can't hurt anyway (easier than testing on all platforms...) // can't hurt anyway (easier than testing on all platforms...)
if (setpriority(PRIO_PROCESS, 0, 20) != 0) { if (setpriority(PRIO_PROCESS, 0, 20) != 0) {
@ -612,6 +624,7 @@ int main(int argc, char **argv)
} }
// Try to ionice. This does not work on all platforms // Try to ionice. This does not work on all platforms
rclIxIonice(config); rclIxIonice(config);
#endif
if (sleepsecs > 0) { if (sleepsecs > 0) {
LOGDEB(("recollindex: sleeping %d\n", sleepsecs)); LOGDEB(("recollindex: sleeping %d\n", sleepsecs));
@ -639,6 +652,7 @@ int main(int argc, char **argv)
} }
} }
deleteZ(confindexer); deleteZ(confindexer);
#ifndef _WIN32
o_reexec->insertArgs(vector<string>(1, "-n")); o_reexec->insertArgs(vector<string>(1, "-n"));
LOGINFO(("recollindex: reexecuting with -n after initial full pass\n")); LOGINFO(("recollindex: reexecuting with -n after initial full pass\n"));
// Note that -n will be inside the reexec when we come // Note that -n will be inside the reexec when we come
@ -646,6 +660,7 @@ int main(int argc, char **argv)
// starting a config change exec to ensure that we do a // starting a config change exec to ensure that we do a
// purging pass in this case. // purging pass in this case.
o_reexec->reexec(); o_reexec->reexec();
#endif
} }
if (updater) { if (updater) {
updater->status.phase = DbIxStatus::DBIXS_MONITOR; updater->status.phase = DbIxStatus::DBIXS_MONITOR;

View file

@ -93,6 +93,7 @@ void docFieldsFromXattrs(RclConfig *cfg, const map<string, string>& xfields,
void reapMetaCmds(RclConfig* cfg, const string& path, void reapMetaCmds(RclConfig* cfg, const string& path,
map<string, string>& cfields) map<string, string>& cfields)
{ {
#ifndef _WIN32
const vector<MDReaper>& reapers = cfg->getMDReapers(); const vector<MDReaper>& reapers = cfg->getMDReapers();
if (reapers.empty()) if (reapers.empty())
return; return;
@ -111,6 +112,7 @@ void reapMetaCmds(RclConfig* cfg, const string& path,
cfields[rp->fieldname] = output; cfields[rp->fieldname] = output;
} }
} }
#endif
} }
// Set fields from external commands // Set fields from external commands

View file

@ -216,7 +216,7 @@ void FileInterner::init(const string &f, const struct stat *stp, RclConfig *cnf,
m_mimetype = l_mime; m_mimetype = l_mime;
RecollFilter *df = getMimeHandler(l_mime, m_cfg, !m_forPreview); RecollFilter *df = getMimeHandler(l_mime, m_cfg, !m_forPreview);
if (!df or df->is_unknown()) { if (!df || df->is_unknown()) {
// No real handler for this type, for now :( // No real handler for this type, for now :(
LOGDEB(("FileInterner:: unprocessed mime: [%s] [%s]\n", LOGDEB(("FileInterner:: unprocessed mime: [%s] [%s]\n",
l_mime.c_str(), f.c_str())); l_mime.c_str(), f.c_str()));

View file

@ -98,7 +98,9 @@ text/plainData: 10
class MimeHandlerExecMultiple : public MimeHandlerExec { class MimeHandlerExecMultiple : public MimeHandlerExec {
///////// /////////
// Things not reset by "clear()", additionally to those in MimeHandlerExec // Things not reset by "clear()", additionally to those in MimeHandlerExec
#ifndef _WIN32
ExecCmd m_cmd; ExecCmd m_cmd;
#endif
/////// End un-cleared stuff. /////// End un-cleared stuff.
public: public:

View file

@ -18,7 +18,7 @@
#include <stdio.h> #include <stdio.h>
#include <fcntl.h> #include <fcntl.h>
#include <errno.h> #include <errno.h>
#include <unistd.h> #include "safeunistd.h"
#include <time.h> #include <time.h>
#include <cstdlib> #include <cstdlib>

View file

@ -22,7 +22,11 @@
#include <sys/types.h> #include <sys/types.h>
#include "safesysstat.h" #include "safesysstat.h"
#include <time.h> #include <time.h>
#ifndef _WIN32
#include <regex.h> #include <regex.h>
#else
#include <regex>
#endif
#include <cstring> #include <cstring>
#include <map> #include <map>
@ -70,6 +74,14 @@ static PTMutexInit o_mcache_mutex;
* offsets for all message "From_" lines follow. The format is purely * offsets for all message "From_" lines follow. The format is purely
* binary, values are not even byte-swapped to be proc-idependant. * binary, values are not even byte-swapped to be proc-idependant.
*/ */
#ifdef _WIN32
// vc++ does not let define an array of size o_b1size because non-const??
#define M_o_b1size 1024
#else
#define M_o_b1size o_b1size;
#endif
class MboxCache { class MboxCache {
public: public:
typedef MimeHandlerMbox::mbhoff_type mbhoff_type; typedef MimeHandlerMbox::mbhoff_type mbhoff_type;
@ -98,7 +110,7 @@ public:
} }
FpKeeper keeper(&fp); FpKeeper keeper(&fp);
char blk1[o_b1size]; char blk1[M_o_b1size];
if (fread(blk1, 1, o_b1size, fp) != o_b1size) { if (fread(blk1, 1, o_b1size, fp) != o_b1size) {
LOGDEB0(("MboxCache::get_offsets: read blk1 errno %d\n", errno)); LOGDEB0(("MboxCache::get_offsets: read blk1 errno %d\n", errno));
return -1; return -1;
@ -226,7 +238,6 @@ private:
}; };
const size_t MboxCache::o_b1size = 1024; const size_t MboxCache::o_b1size = 1024;
static class MboxCache o_mcache; static class MboxCache o_mcache;
static const string cstr_keyquirks("mhmboxquirks"); static const string cstr_keyquirks("mhmboxquirks");
@ -376,9 +387,20 @@ static const char *frompat =
// exactly like: From ^M (From followed by space and eol). We only // exactly like: From ^M (From followed by space and eol). We only
// test for this if QUIRKS_TBIRD is set // test for this if QUIRKS_TBIRD is set
static const char *miniTbirdFrom = "^From $"; static const char *miniTbirdFrom = "^From $";
#ifndef _WIN32
static regex_t fromregex; static regex_t fromregex;
static regex_t minifromregex; static regex_t minifromregex;
#define M_regexec(A,B,C,D,E) regexec(&(A),B,C,D,E)
#else
basic_regex<char> fromregex;
basic_regex<char> minifromregex;
#define REG_ICASE std::regex_constants::icase
#define REG_NOSUB std::regex_constants::nosubs
#define REG_EXTENDED std::regex_constants::extended
#define M_regexec(A, B, C, D, E) regex_match(B,A)
#endif
static bool regcompiled; static bool regcompiled;
static PTMutexInit o_regex_mutex; static PTMutexInit o_regex_mutex;
@ -390,8 +412,13 @@ static void compileregexes()
// that we are alone. // that we are alone.
if (regcompiled) if (regcompiled)
return; return;
#ifndef _WIN32
regcomp(&fromregex, frompat, REG_NOSUB|REG_EXTENDED); regcomp(&fromregex, frompat, REG_NOSUB|REG_EXTENDED);
regcomp(&minifromregex, miniTbirdFrom, REG_NOSUB|REG_EXTENDED); regcomp(&minifromregex, miniTbirdFrom, REG_NOSUB|REG_EXTENDED);
#else
fromregex = basic_regex<char>(frompat, REG_NOSUB | REG_EXTENDED);
minifromregex = basic_regex<char>(miniTbirdFrom, REG_NOSUB | REG_EXTENDED);
#endif
regcompiled = true; regcompiled = true;
} }
@ -440,9 +467,9 @@ bool MimeHandlerMbox::next_document()
(off = o_mcache.get_offset(m_config, m_udi, mtarg)) >= 0 && (off = o_mcache.get_offset(m_config, m_udi, mtarg)) >= 0 &&
fseeko(fp, (off_t)off, SEEK_SET) >= 0 && fseeko(fp, (off_t)off, SEEK_SET) >= 0 &&
fgets(line, LL, fp) && fgets(line, LL, fp) &&
(!regexec(&fromregex, line, 0, 0, 0) || (!M_regexec(fromregex, line, 0, 0, 0) ||
((m_quirks & MBOXQUIRK_TBIRD) && ((m_quirks & MBOXQUIRK_TBIRD) &&
!regexec(&minifromregex, line, 0, 0, 0))) ) { !M_regexec(minifromregex, line, 0, 0, 0))) ) {
LOGDEB0(("MimeHandlerMbox: Cache: From_ Ok\n")); LOGDEB0(("MimeHandlerMbox: Cache: From_ Ok\n"));
fseeko(fp, (off_t)off, SEEK_SET); fseeko(fp, (off_t)off, SEEK_SET);
m_msgnum = mtarg -1; m_msgnum = mtarg -1;
@ -485,9 +512,9 @@ bool MimeHandlerMbox::next_document()
/* The 'F' compare is redundant but it improves performance /* The 'F' compare is redundant but it improves performance
A LOT */ A LOT */
if (line[0] == 'F' && ( if (line[0] == 'F' && (
!regexec(&fromregex, line, 0, 0, 0) || !M_regexec(fromregex, line, 0, 0, 0) ||
((m_quirks & MBOXQUIRK_TBIRD) && ((m_quirks & MBOXQUIRK_TBIRD) &&
!regexec(&minifromregex, line, 0, 0, 0))) !M_regexec(minifromregex, line, 0, 0, 0)))
) { ) {
LOGDEB1(("MimeHandlerMbox: msgnum %d, " LOGDEB1(("MimeHandlerMbox: msgnum %d, "
"From_ at line %d: [%s]\n", m_msgnum, m_lineno, line)); "From_ at line %d: [%s]\n", m_msgnum, m_lineno, line));

View file

@ -18,7 +18,7 @@
#define _MH_SYMLINK_H_INCLUDED_ #define _MH_SYMLINK_H_INCLUDED_
#include <string> #include <string>
#include <unistd.h> #include "safeunistd.h"
#include <errno.h> #include <errno.h>
#include "cstr.h" #include "cstr.h"

View file

@ -31,7 +31,6 @@ using namespace std;
#include "rclconfig.h" #include "rclconfig.h"
#include "smallut.h" #include "smallut.h"
#include "md5ut.h" #include "md5ut.h"
#include "mh_exec.h" #include "mh_exec.h"
#include "mh_execm.h" #include "mh_execm.h"
#include "mh_html.h" #include "mh_html.h"

View file

@ -108,8 +108,12 @@ bool Uncomp::uncompressfile(const string& ifn,
} }
// Execute command and retrieve output file name, check that it exists // Execute command and retrieve output file name, check that it exists
#ifndef _WIN32
ExecCmd ex; ExecCmd ex;
int status = ex.doexec(cmd, args, 0, &tfile); int status = ex.doexec(cmd, args, 0, &tfile);
#else
int status = -1;
#endif
if (status || tfile.empty()) { if (status || tfile.empty()) {
LOGERR(("uncompressfile: doexec: failed for [%s] status 0x%x\n", LOGERR(("uncompressfile: doexec: failed for [%s] status 0x%x\n",
ifn.c_str(), status)); ifn.c_str(), status));

View file

@ -29,7 +29,7 @@
#include <vector> #include <vector>
using namespace std; using namespace std;
#include "xapian.h" #include <xapian.h>
#include "debuglog.h" #include "debuglog.h"
#include "rclconfig.h" #include "rclconfig.h"

View file

@ -18,7 +18,7 @@
#include <stdio.h> #include <stdio.h>
#include <cstring> #include <cstring>
#include <unistd.h> #include "safeunistd.h"
#include <math.h> #include <math.h>
#include <time.h> #include <time.h>
@ -1420,10 +1420,11 @@ bool Db::addOrUpdate(const string &udi, const string &parent_udi, Doc &doc)
time_t mtime = atoll(doc.dmtime.empty() ? doc.fmtime.c_str() : time_t mtime = atoll(doc.dmtime.empty() ? doc.fmtime.c_str() :
doc.dmtime.c_str()); doc.dmtime.c_str());
struct tm tmb; struct tm tmb;
localtime_r(&mtime, &tmb); struct tm *tmbp = &tmb;
tmbp = localtime_r(&mtime, &tmb);
char buf[9]; char buf[9];
snprintf(buf, 9, "%04d%02d%02d", snprintf(buf, 9, "%04d%02d%02d",
tmb.tm_year+1900, tmb.tm_mon + 1, tmb.tm_mday); tmbp->tm_year+1900, tmbp->tm_mon + 1, tmbp->tm_mday);
// Date (YYYYMMDD) // Date (YYYYMMDD)
newdocument.add_boolean_term(wrap_prefix(xapday_prefix) + string(buf)); newdocument.add_boolean_term(wrap_prefix(xapday_prefix) + string(buf));
// Month (YYYYMM) // Month (YYYYMM)

View file

@ -401,10 +401,14 @@ bool Db::idxTermMatch(int typ_sens, const string &lang, const string &root,
// first wildcard character. We only scan the part of the // first wildcard character. We only scan the part of the
// index where this matches // index where this matches
string is; string is;
switch (es) { if (es == string::npos) {
case string::npos: is = prefix + root; break; is = prefix + root;
case 0: is = prefix; break; }
default: is = prefix + root.substr(0, es); break; else if (es == 0) {
is = prefix;
} else {
is = prefix + root.substr(0, es);
} }
LOGDEB2(("termMatch: initsec: [%s]\n", is.c_str())); LOGDEB2(("termMatch: initsec: [%s]\n", is.c_str()));

View file

@ -22,11 +22,12 @@
#include "autoconfig.h" #include "autoconfig.h"
#include <unistd.h> #include "safeunistd.h"
#include <algorithm> #include <algorithm>
#include <map> #include <map>
#include <iostream> #include <iostream>
#include <string>
using namespace std; using namespace std;
#include <xapian.h> #include <xapian.h>

View file

@ -184,7 +184,7 @@ public:
// Offset of last write (newest header) // Offset of last write (newest header)
off_t m_nheadoffs; off_t m_nheadoffs;
// Pad size for newest entry. // Pad size for newest entry.
int m_npadsize; off_t m_npadsize;
// Keep history or only last entry // Keep history or only last entry
bool m_uniquentries; bool m_uniquentries;
///////////////////// End header entries ///////////////////// End header entries
@ -1009,7 +1009,7 @@ bool CirCache::put(const string& udi, const ConfSimple *iconf,
// Data compression ? // Data compression ?
const char *datap = data.c_str(); const char *datap = data.c_str();
unsigned int datalen = data.size(); size_t datalen = data.size();
unsigned short flags = 0; unsigned short flags = 0;
TempBuf compbuf; TempBuf compbuf;
if (!(iflags & NoCompHint)) { if (!(iflags & NoCompHint)) {

View file

@ -14,9 +14,7 @@
* Free Software Foundation, Inc., * Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef HAVE_CONFIG_H #include "autoconfig.h"
#include "config.h"
#endif
#ifndef TEST_CONFTREE #ifndef TEST_CONFTREE

View file

@ -15,14 +15,18 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifndef TEST_COPYFILE #ifndef TEST_COPYFILE
#include "autoconfig.h"
#include <stdio.h> #include <stdio.h>
#include <errno.h> #include <errno.h>
#include "safefcntl.h" #include "safefcntl.h"
#include <sys/types.h> #include <sys/types.h>
#include "safesysstat.h" #include "safesysstat.h"
#include "safeunistd.h" #include "safeunistd.h"
#ifndef _WIN32
#include <sys/time.h> #include <sys/time.h>
#include <utime.h> #include <utime.h>
#endif
#include <cstring> #include <cstring>
@ -43,7 +47,7 @@ bool copyfile(const char *src, const char *dst, string &reason, int flags)
LOGDEB(("copyfile: %s to %s\n", src, dst)); LOGDEB(("copyfile: %s to %s\n", src, dst));
if ((sfd = ::open(src, O_RDONLY)) < 0) { if ((sfd = ::open(src, O_RDONLY, 0)) < 0) {
reason += string("open ") + src + ": " + strerror(errno); reason += string("open ") + src + ": " + strerror(errno);
goto out; goto out;
} }
@ -149,6 +153,7 @@ bool renameormove(const char *src, const char *dst, string &reason)
return false; return false;
} }
#ifndef _WIN32
// Try to preserve modes, owner, times. This may fail for a number // Try to preserve modes, owner, times. This may fail for a number
// of reasons // of reasons
if ((st1.st_mode & 0777) != (st.st_mode & 0777)) { if ((st1.st_mode & 0777) != (st.st_mode & 0777)) {
@ -167,7 +172,7 @@ bool renameormove(const char *src, const char *dst, string &reason)
times[1].tv_sec = st.st_mtime; times[1].tv_sec = st.st_mtime;
times[1].tv_usec = 0; times[1].tv_usec = 0;
utimes(dst, times); utimes(dst, times);
#endif
// All ok, get rid of origin // All ok, get rid of origin
if (unlink(src) < 0) { if (unlink(src) < 0) {
reason += string("Can't unlink ") + src + "Error : " + strerror(errno); reason += string("Can't unlink ") + src + "Error : " + strerror(errno);

View file

@ -16,7 +16,7 @@
*/ */
#ifndef _EXECMD_H_INCLUDED_ #ifndef _EXECMD_H_INCLUDED_
#define _EXECMD_H_INCLUDED_ #define _EXECMD_H_INCLUDED_
#ifndef _WIN32
#include <signal.h> #include <signal.h>
#include <string> #include <string>
@ -279,5 +279,5 @@ private:
std::string m_reason; std::string m_reason;
std::stack<void (*)(void)> m_atexitfuncs; std::stack<void (*)(void)> m_atexitfuncs;
}; };
#endif /* !_WIN32 */
#endif /* _EXECMD_H_INCLUDED_ */ #endif /* _EXECMD_H_INCLUDED_ */

View file

@ -15,6 +15,7 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifndef TEST_FILEUDI #ifndef TEST_FILEUDI
#include "autoconfig.h"
#include <stdio.h> #include <stdio.h>
#include <cstdlib> #include <cstdlib>

View file

@ -14,9 +14,8 @@
* Free Software Foundation, Inc., * Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef HAVE_CONFIG_H
#include "autoconfig.h" #include "autoconfig.h"
#endif
#ifndef TEST_FSTREEWALK #ifndef TEST_FSTREEWALK
@ -25,6 +24,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <errno.h> #include <errno.h>
#include <fnmatch.h> #include <fnmatch.h>
#include "safesysstat.h"
#include <cstring> #include <cstring>
#include <algorithm> #include <algorithm>

View file

@ -15,6 +15,8 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifndef TEST_IDFILE #ifndef TEST_IDFILE
#include "autoconfig.h"
#include <stdlib.h> #include <stdlib.h>
#include <ctype.h> #include <ctype.h>
#include <cstring> #include <cstring>
@ -82,11 +84,11 @@ static string idFileInternal(istream& input, const char *fn)
} }
// gcount includes the \n // gcount includes the \n
int ll = input.gcount() - 1; std::streamsize ll = input.gcount() - 1;
if (ll > 0) if (ll > 0)
gotnonempty = true; gotnonempty = true;
LOGDEB2(("idfile: lnum %d ll %d: [%s]\n", lnum, ll, cline)); LOGDEB2(("idfile: lnum %d ll %u: [%s]\n", lnum, (unsigned int)ll, cline));
// Check for a few things that can't be found in a mail file, // Check for a few things that can't be found in a mail file,
// (optimization to get a quick negative) // (optimization to get a quick negative)

View file

@ -19,17 +19,19 @@
#include "autoconfig.h" #include "autoconfig.h"
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include "safefcntl.h"
#include <fcntl.h> #include "safeunistd.h"
#include <dirent.h> #include "dirent.h"
#ifndef _WIN32
#include <sys/param.h> #include <sys/param.h>
#include <pwd.h> #include <pwd.h>
#include <sys/file.h>
#include <glob.h>
#endif
#include <math.h> #include <math.h>
#include <errno.h> #include <errno.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/file.h>
#include "safesysstat.h" #include "safesysstat.h"
#include <glob.h>
// Let's include all files where statfs can be defined and hope for no // Let's include all files where statfs can be defined and hope for no
// conflict... // conflict...
@ -61,6 +63,9 @@ using namespace std;
bool fsocc(const string &path, int *pc, long long *blocks) bool fsocc(const string &path, int *pc, long long *blocks)
{ {
#ifdef _WIN32
return false;
#else
#ifdef sun #ifdef sun
struct statvfs buf; struct statvfs buf;
if (statvfs(path.c_str(), &buf) != 0) { if (statvfs(path.c_str(), &buf) != 0) {
@ -94,6 +99,7 @@ bool fsocc(const string &path, int *pc, long long *blocks)
} }
} }
return true; return true;
#endif
} }
const string& tmplocation() const string& tmplocation()
@ -112,6 +118,7 @@ const string& tmplocation()
bool maketmpdir(string& tdir, string& reason) bool maketmpdir(string& tdir, string& reason)
{ {
#ifndef _WIN32
tdir = path_cat(tmplocation(), "rcltmpXXXXXX"); tdir = path_cat(tmplocation(), "rcltmpXXXXXX");
char *cp = strdup(tdir.c_str()); char *cp = strdup(tdir.c_str());
@ -146,11 +153,15 @@ bool maketmpdir(string& tdir, string& reason)
#endif #endif
return true; return true;
#else
return false;
#endif
} }
TempFileInternal::TempFileInternal(const string& suffix) TempFileInternal::TempFileInternal(const string& suffix)
: m_noremove(false) : m_noremove(false)
{ {
#ifndef _WIN32
string filename = path_cat(tmplocation(), "rcltmpfXXXXXX"); string filename = path_cat(tmplocation(), "rcltmpfXXXXXX");
char *cp = strdup(filename.c_str()); char *cp = strdup(filename.c_str());
if (!cp) { if (!cp) {
@ -177,6 +188,7 @@ TempFileInternal::TempFileInternal(const string& suffix)
m_reason = string("Could not open/create") + m_filename; m_reason = string("Could not open/create") + m_filename;
m_filename.erase(); m_filename.erase();
} }
#endif
} }
TempFileInternal::~TempFileInternal() TempFileInternal::~TempFileInternal()
@ -285,6 +297,9 @@ string path_suffix(const string& s)
string path_home() string path_home()
{ {
#ifdef _WIN32
return "c:\\";
#else
uid_t uid = getuid(); uid_t uid = getuid();
struct passwd *entry = getpwuid(uid); struct passwd *entry = getpwuid(uid);
@ -299,10 +314,14 @@ string path_home()
string homedir = entry->pw_dir; string homedir = entry->pw_dir;
path_catslash(homedir); path_catslash(homedir);
return homedir; return homedir;
#endif
} }
string path_tildexpand(const string &s) string path_tildexpand(const string &s)
{ {
#ifdef _WIN32
return s;
#else
if (s.empty() || s[0] != '~') if (s.empty() || s[0] != '~')
return s; return s;
string o = s; string o = s;
@ -318,6 +337,7 @@ string path_tildexpand(const string &s)
o.replace(0, l+1, entry->pw_dir); o.replace(0, l+1, entry->pw_dir);
} }
return o; return o;
#endif
} }
string path_absolute(const string &is) string path_absolute(const string &is)
@ -402,6 +422,9 @@ bool makepath(const string& ipath)
vector<string> path_dirglob(const string &dir, const string pattern) vector<string> path_dirglob(const string &dir, const string pattern)
{ {
#ifdef _WIN32
return vector<string>();
#else
vector<string> res; vector<string> res;
glob_t mglob; glob_t mglob;
string mypat=path_cat(dir, pattern); string mypat=path_cat(dir, pattern);
@ -413,6 +436,7 @@ vector<string> path_dirglob(const string &dir, const string pattern)
} }
globfree(&mglob); globfree(&mglob);
return res; return res;
#endif
} }
bool path_isdir(const string& path) bool path_isdir(const string& path)
@ -679,6 +703,9 @@ int Pidfile::flopen()
m_reason = "fcntl lock failed"; m_reason = "fcntl lock failed";
return -1; return -1;
} }
#else
#ifdef _WIN32
return 0;
#else #else
int operation = LOCK_EX | LOCK_NB; int operation = LOCK_EX | LOCK_NB;
if (flock(m_fd, operation) == -1) { if (flock(m_fd, operation) == -1) {
@ -688,6 +715,7 @@ int Pidfile::flopen()
m_reason = "flock failed"; m_reason = "flock failed";
return -1; return -1;
} }
#endif // ! win32
#endif // ! sun #endif // ! sun
if (ftruncate(m_fd, 0) != 0) { if (ftruncate(m_fd, 0) != 0) {

View file

@ -708,10 +708,80 @@ typedef int clockid_t;
#undef USE_CLOCK_GETTIME #undef USE_CLOCK_GETTIME
#endif #endif
#ifdef WIN32
#include "safewindows.h"
// Note: struct timespec is defined by pthread.h (from pthreads-w32)
#ifndef CLOCK_REALTIME
#define CLOCK_REALTIME 0
#endif
LARGE_INTEGER getFILETIMEoffset()
{
SYSTEMTIME s;
FILETIME f;
LARGE_INTEGER t;
s.wYear = 1970;
s.wMonth = 1;
s.wDay = 1;
s.wHour = 0;
s.wMinute = 0;
s.wSecond = 0;
s.wMilliseconds = 0;
SystemTimeToFileTime(&s, &f);
t.QuadPart = f.dwHighDateTime;
t.QuadPart <<= 32;
t.QuadPart |= f.dwLowDateTime;
return (t);
}
int clock_gettime(int X, struct timespec *tv)
{
LARGE_INTEGER t;
FILETIME f;
double microseconds;
static LARGE_INTEGER offset;
static double frequencyToMicroseconds;
static int initialized = 0;
static BOOL usePerformanceCounter = 0;
if (!initialized) {
LARGE_INTEGER performanceFrequency;
initialized = 1;
usePerformanceCounter = QueryPerformanceFrequency(&performanceFrequency);
if (usePerformanceCounter) {
QueryPerformanceCounter(&offset);
frequencyToMicroseconds = (double)performanceFrequency.QuadPart / 1000000.;
}
else {
offset = getFILETIMEoffset();
frequencyToMicroseconds = 10.;
}
}
if (usePerformanceCounter) QueryPerformanceCounter(&t);
else {
GetSystemTimeAsFileTime(&f);
t.QuadPart = f.dwHighDateTime;
t.QuadPart <<= 32;
t.QuadPart |= f.dwLowDateTime;
}
t.QuadPart -= offset.QuadPart;
microseconds = (double)t.QuadPart / frequencyToMicroseconds;
t.QuadPart = (long long)microseconds;
tv->tv_sec = t.QuadPart / 1000000;
tv->tv_nsec = (t.QuadPart % 1000000) * 1000;
return (0);
}
#define USE_CLOCK_GETTIME
#else /* -> !_WIN32 */
#ifndef USE_CLOCK_GETTIME #ifndef USE_CLOCK_GETTIME
#include <sys/time.h> #include <sys/time.h>
#endif #endif
#endif
static void gettime(clockid_t clk_id, struct timespec *ts) static void gettime(clockid_t clk_id, struct timespec *ts)
{ {
#ifndef USE_CLOCK_GETTIME #ifndef USE_CLOCK_GETTIME
@ -740,29 +810,29 @@ Chrono::Chrono()
} }
// Reset and return value before rest in milliseconds // Reset and return value before rest in milliseconds
long Chrono::restart() time_t Chrono::restart()
{ {
struct timespec tv; struct timespec tv;
gettime(CLOCK_REALTIME, &tv); gettime(CLOCK_REALTIME, &tv);
long ret = MILLIS(tv); time_t ret = MILLIS(tv);
m_secs = tv.tv_sec; m_secs = tv.tv_sec;
m_nsecs = tv.tv_nsec; m_nsecs = tv.tv_nsec;
return ret; return ret;
} }
// Get current timer value, milliseconds // Get current timer value, milliseconds
long Chrono::millis(int frozen) time_t Chrono::millis(int frozen)
{ {
return nanos() / 1000000; return nanos() / 1000000;
} }
// //
long Chrono::micros(int frozen) time_t Chrono::micros(int frozen)
{ {
return nanos() / 1000; return nanos() / 1000;
} }
long long Chrono::nanos(int frozen) time_t Chrono::nanos(int frozen)
{ {
if (frozen) { if (frozen) {
return NANOS(frozen_tv); return NANOS(frozen_tv);
@ -773,12 +843,12 @@ long long Chrono::nanos(int frozen)
} }
} }
float Chrono::secs(int frozen) double Chrono::secs(int frozen)
{ {
struct timespec tv; struct timespec tv;
gettime(CLOCK_REALTIME, &tv); gettime(CLOCK_REALTIME, &tv);
float secs = (float)(frozen?frozen_tv.tv_sec:tv.tv_sec - m_secs); double secs = (double)(frozen?frozen_tv.tv_sec:tv.tv_sec - m_secs);
float nsecs = (float)(frozen?frozen_tv.tv_nsec:tv.tv_nsec - m_nsecs); double nsecs = (double)(frozen?frozen_tv.tv_nsec:tv.tv_nsec - m_nsecs);
return secs + nsecs * 1e-9; return secs + nsecs * 1e-9;
} }
@ -818,7 +888,7 @@ static bool parsedate(vector<string>::const_iterator& it,
return false; return false;
} }
if (it == end || sscanf(it++->c_str(), "%d", &dip->d1) != 1) { if (it == end || sscanf(it++->c_str(), "%d", &dip->d1) != 1) {
return -1; return false;
} }
return true; return true;
@ -1062,7 +1132,7 @@ void catstrerror(string *reason, const char *what, int _errno)
reason->append(" : "); reason->append(" : ");
#ifdef sun #if defined(sun) || defined(_WIN32)
// Note: sun strerror is noted mt-safe ?? // Note: sun strerror is noted mt-safe ??
reason->append(strerror(_errno)); reason->append(strerror(_errno));
#else #else

View file

@ -153,7 +153,7 @@ class Chrono {
public: public:
Chrono(); Chrono();
/** Reset origin */ /** Reset origin */
long restart(); time_t restart();
/** Snapshot current time */ /** Snapshot current time */
static void refnow(); static void refnow();
/** Get current elapsed since creation or restart /** Get current elapsed since creation or restart
@ -162,14 +162,14 @@ class Chrono {
* allow for using one actual system call to get values from many * allow for using one actual system call to get values from many
* chrono objects, like when examining timeouts in a queue) * chrono objects, like when examining timeouts in a queue)
*/ */
long millis(int frozen = 0); time_t millis(int frozen = 0);
long ms() {return millis();} time_t ms() {return millis();}
long micros(int frozen = 0); time_t micros(int frozen = 0);
long long nanos(int frozen = 0); time_t nanos(int frozen = 0);
float secs(int frozen = 0); double secs(int frozen = 0);
private: private:
long m_secs; time_t m_secs;
long m_nsecs; time_t m_nsecs;
}; };
/** Temp buffer with automatic deallocation */ /** Temp buffer with automatic deallocation */

View file

@ -0,0 +1,41 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Win32ProjectRecoll", "Win32ProjectRecoll.vcxproj", "{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "recollindex", "recollindex\recollindex.vcxproj", "{A513D65F-798C-4166-B66E-49F69ADA4F59}"
ProjectSection(ProjectDependencies) = postProject
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D} = {23FF40E1-BA87-4E5F-9B22-2EB760FF403D}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Debug|x64.ActiveCfg = Debug|Win32
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Debug|x64.Build.0 = Debug|Win32
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Debug|x86.ActiveCfg = Debug|Win32
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Debug|x86.Build.0 = Debug|Win32
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Release|x64.ActiveCfg = Release|x64
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Release|x64.Build.0 = Release|x64
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Release|x86.ActiveCfg = Release|Win32
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Release|x86.Build.0 = Release|Win32
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Debug|x64.ActiveCfg = Debug|Win32
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Debug|x64.Build.0 = Debug|Win32
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Debug|x86.ActiveCfg = Debug|Win32
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Debug|x86.Build.0 = Debug|Win32
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Release|x64.ActiveCfg = Release|x64
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Release|x64.Build.0 = Release|x64
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Release|x86.ActiveCfg = Release|Win32
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View file

@ -0,0 +1,216 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>Win32ProjectRecoll</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;__WIN32__;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>C:\xapian\xapian-core-1.2.8\include;C:\Users\Bill\recoll\src\internfile;C:\Users\Bill\recoll\src\rcldb;C:\Users\Bill\recoll\src\index;C:\Users\Bill\recoll\src\bincimapmime;C:\Users\Bill\recoll\src\unac;C:\Users\Bill\recoll\src\windows;C:\zlib\include;C:\pthreads-w32\Pre-built.2\include;C:\Users\Bill\recoll\src\xaposix;C:\Users\Bill\recoll\src\common;C:\Users\Bill\recoll\src\utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4800</DisableSpecificWarnings>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>C:\xapian\xapian-core-1.2.8\include;C:\Users\Bill\recoll\src\internfile;C:\Users\Bill\recoll\src\rcldb;C:\Users\Bill\recoll\src\index;C:\Users\Bill\recoll\src\bincimapmime;C:\Users\Bill\recoll\src\unac;C:\Users\Bill\recoll\src\windows;C:\zlib\include;C:\pthreads-w32\Pre-built.2\include;C:\Users\Bill\recoll\src\xaposix;C:\Users\Bill\recoll\src\common;C:\Users\Bill\recoll\src\utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4800</DisableSpecificWarnings>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<Text Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\common\autoconfig.h" />
<ClInclude Include="..\common\conf_post.h" />
<ClInclude Include="..\internfile\mh_symlink.h" />
<ClInclude Include="..\utils\debuglog.h" />
<ClInclude Include="..\utils\execmd.h" />
<ClInclude Include="..\utils\pathut.h" />
<ClInclude Include="..\utils\smallut.h" />
<ClInclude Include="..\xaposix\safefcntl.h" />
<ClInclude Include="..\xaposix\safesysstat.h" />
<ClInclude Include="..\xaposix\safeunistd.h" />
<ClInclude Include="..\xaposix\safewindows.h" />
<ClInclude Include="fnmatch.h" />
<ClInclude Include="targetver.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\bincimapmime\convert.cc" />
<ClCompile Include="..\bincimapmime\mime-parsefull.cc" />
<ClCompile Include="..\bincimapmime\mime-parseonlyheader.cc" />
<ClCompile Include="..\bincimapmime\mime-printbody.cc" />
<ClCompile Include="..\bincimapmime\mime.cc" />
<ClCompile Include="..\common\cstr.cpp" />
<ClCompile Include="..\common\rclconfig.cpp" />
<ClCompile Include="..\common\rclinit.cpp" />
<ClCompile Include="..\common\syngroups.cpp" />
<ClCompile Include="..\common\textsplit.cpp" />
<ClCompile Include="..\common\unacpp.cpp" />
<ClCompile Include="..\index\fetcher.cpp" />
<ClCompile Include="..\index\fsfetcher.cpp" />
<ClCompile Include="..\index\fsindexer.cpp" />
<ClCompile Include="..\index\indexer.cpp" />
<ClCompile Include="..\index\mimetype.cpp" />
<ClCompile Include="..\index\subtreelist.cpp" />
<ClCompile Include="..\internfile\extrameta.cpp" />
<ClCompile Include="..\internfile\htmlparse.cpp" />
<ClCompile Include="..\internfile\internfile.cpp" />
<ClCompile Include="..\internfile\mh_html.cpp" />
<ClCompile Include="..\internfile\mh_mail.cpp" />
<ClCompile Include="..\internfile\mh_mbox.cpp" />
<ClCompile Include="..\internfile\mh_text.cpp" />
<ClCompile Include="..\internfile\mimehandler.cpp" />
<ClCompile Include="..\internfile\txtdcode.cpp" />
<ClCompile Include="..\internfile\uncomp.cpp" />
<ClCompile Include="..\rcldb\daterange.cpp" />
<ClCompile Include="..\rcldb\expansiondbs.cpp" />
<ClCompile Include="..\rcldb\rclabstract.cpp" />
<ClCompile Include="..\rcldb\rcldb.cpp" />
<ClCompile Include="..\rcldb\rcldoc.cpp" />
<ClCompile Include="..\rcldb\rcldups.cpp" />
<ClCompile Include="..\rcldb\rclquery.cpp" />
<ClCompile Include="..\rcldb\rclterms.cpp" />
<ClCompile Include="..\rcldb\searchdata.cpp" />
<ClCompile Include="..\rcldb\searchdatatox.cpp" />
<ClCompile Include="..\rcldb\searchdataxml.cpp" />
<ClCompile Include="..\rcldb\stemdb.cpp" />
<ClCompile Include="..\rcldb\stoplist.cpp" />
<ClCompile Include="..\rcldb\synfamily.cpp" />
<ClCompile Include="..\unac\unac.c" />
<ClCompile Include="..\utils\appformime.cpp" />
<ClCompile Include="..\utils\base64.cpp" />
<ClCompile Include="..\utils\circache.cpp" />
<ClCompile Include="..\utils\conftree.cpp" />
<ClCompile Include="..\utils\copyfile.cpp" />
<ClCompile Include="..\utils\debuglog.cpp" />
<ClCompile Include="..\utils\fileudi.cpp" />
<ClCompile Include="..\utils\fstreewalk.cpp" />
<ClCompile Include="..\utils\idfile.cpp" />
<ClCompile Include="..\utils\md5.cpp" />
<ClCompile Include="..\utils\pathut.cpp" />
<ClCompile Include="..\utils\smallut.cpp" />
<ClCompile Include="..\xaposix\safe.cc" />
<ClCompile Include="dirent.c" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -0,0 +1,231 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<Text Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="targetver.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\utils\smallut.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\utils\debuglog.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\utils\pathut.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\common\conf_post.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\xaposix\safefcntl.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\xaposix\safesysstat.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\xaposix\safeunistd.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\xaposix\safewindows.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="fnmatch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\common\autoconfig.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\internfile\mh_symlink.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\utils\execmd.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\utils\smallut.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\utils\debuglog.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\common\cstr.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\utils\appformime.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\utils\base64.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\utils\circache.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\utils\conftree.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\utils\copyfile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\utils\fileudi.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\utils\fstreewalk.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\utils\idfile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\utils\md5.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\common\rclconfig.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\common\rclinit.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\common\syngroups.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\common\textsplit.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\common\unacpp.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="dirent.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\bincimapmime\convert.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\bincimapmime\mime.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\bincimapmime\mime-parsefull.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\bincimapmime\mime-parseonlyheader.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\bincimapmime\mime-printbody.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\index\fetcher.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\index\fsfetcher.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\index\fsindexer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\index\indexer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\index\mimetype.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\index\subtreelist.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\internfile\extrameta.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\internfile\htmlparse.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\internfile\internfile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\internfile\mh_html.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\internfile\mh_mail.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\internfile\mh_mbox.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\internfile\mh_text.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\internfile\mimehandler.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\daterange.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\expansiondbs.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\rclabstract.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\rcldb.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\rcldoc.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\rcldups.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\rclquery.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\rclterms.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\searchdata.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\searchdatatox.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\searchdataxml.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\stemdb.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\stoplist.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\rcldb\synfamily.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\xaposix\safe.cc">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\internfile\txtdcode.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\internfile\uncomp.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\utils\pathut.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\unac\unac.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

148
src/windows/dirent.c Normal file
View file

@ -0,0 +1,148 @@
/*
Implementation of POSIX directory browsing functions and types for Win32.
Author: Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com)
History: Created March 1997. Updated June 2003 and July 2012.
Rights: See end of file.
*/
#include <dirent.h>
#include <errno.h>
#include <io.h> /* _findfirst and _findnext set errno iff they return -1 */
#include <stdlib.h>
#include <string.h>
#ifdef __cplusplus
extern "C"
{
#endif
typedef ptrdiff_t handle_type; /* C99's intptr_t not sufficiently portable */
struct DIR
{
handle_type handle; /* -1 for failed rewind */
struct _finddata_t info;
struct dirent result; /* d_name null iff first time */
char *name; /* null-terminated char string */
};
DIR *opendir(const char *name)
{
DIR *dir = 0;
if(name && name[0])
{
size_t base_length = strlen(name);
const char *all = /* search pattern must end with suitable wildcard */
strchr("/\\", name[base_length - 1]) ? "*" : "/*";
if((dir = (DIR *) malloc(sizeof *dir)) != 0 &&
(dir->name = (char *) malloc(base_length + strlen(all) + 1)) != 0)
{
strcat(strcpy(dir->name, name), all);
if((dir->handle =
(handle_type) _findfirst(dir->name, &dir->info)) != -1)
{
dir->result.d_name = 0;
}
else /* rollback */
{
free(dir->name);
free(dir);
dir = 0;
}
}
else /* rollback */
{
free(dir);
dir = 0;
errno = ENOMEM;
}
}
else
{
errno = EINVAL;
}
return dir;
}
int closedir(DIR *dir)
{
int result = -1;
if(dir)
{
if(dir->handle != -1)
{
result = _findclose(dir->handle);
}
free(dir->name);
free(dir);
}
if(result == -1) /* map all errors to EBADF */
{
errno = EBADF;
}
return result;
}
struct dirent *readdir(DIR *dir)
{
struct dirent *result = 0;
if(dir && dir->handle != -1)
{
if(!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1)
{
result = &dir->result;
result->d_name = dir->info.name;
}
}
else
{
errno = EBADF;
}
return result;
}
void rewinddir(DIR *dir)
{
if(dir && dir->handle != -1)
{
_findclose(dir->handle);
dir->handle = (handle_type) _findfirst(dir->name, &dir->info);
dir->result.d_name = 0;
}
else
{
errno = EBADF;
}
}
#ifdef __cplusplus
}
#endif
/*
Copyright Kevlin Henney, 1997, 2003, 2012. All rights reserved.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose is hereby granted without fee, provided
that this copyright and permissions notice appear in all copies and
derivatives.
This software is supplied "as is" without express or implied warranty.
But that said, if there are any problems please get in touch.
*/

50
src/windows/dirent.h Normal file
View file

@ -0,0 +1,50 @@
#ifndef DIRENT_INCLUDED
#define DIRENT_INCLUDED
/*
Declaration of POSIX directory browsing functions and types for Win32.
Author: Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com)
History: Created March 1997. Updated June 2003.
Rights: See end of file.
*/
#ifdef __cplusplus
extern "C"
{
#endif
typedef struct DIR DIR;
struct dirent
{
char *d_name;
};
DIR *opendir(const char *);
int closedir(DIR *);
struct dirent *readdir(DIR *);
void rewinddir(DIR *);
/*
Copyright Kevlin Henney, 1997, 2003. All rights reserved.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose is hereby granted without fee, provided
that this copyright and permissions notice appear in all copies and
derivatives.
This software is supplied "as is" without express or implied warranty.
But that said, if there are any problems please get in touch.
*/
#ifdef __cplusplus
}
#endif
#endif

188
src/windows/fnmatch.c Normal file
View file

@ -0,0 +1,188 @@
/* Copyright (C) 1992 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. */
/* Modified slightly by Brian Berliner <berliner@sun.com> and
Jim Blandy <jimb@cyclic.com> for CVS use */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
/* Some file systems are case-insensitive. If FOLD_FN_CHAR is
#defined, it maps the character C onto its "canonical" form. In a
case-insensitive system, it would map all alphanumeric characters
to lower case. Under Windows NT, / and \ are both path component
separators, so FOLD_FN_CHAR would map them both to /. */
#ifndef FOLD_FN_CHAR
#define FOLD_FN_CHAR(c) (c)
#endif
/* IGNORE(@ */
/* #include <ansidecl.h> */
/* @) */
#include <errno.h>
#include <fnmatch.h>
#if !defined(__GNU_LIBRARY__) && !defined(STDC_HEADERS)
extern int errno;
#endif
/* Match STRING against the filename pattern PATTERN, returning zero if
it matches, nonzero if not. */
int
#if __STDC__
fnmatch (const char *pattern, const char *string, int flags)
#else
fnmatch (pattern, string, flags)
char *pattern;
char *string;
int flags;
#endif
{
register const char *p = pattern, *n = string;
register char c;
if ((flags & ~__FNM_FLAGS) != 0)
{
errno = EINVAL;
return -1;
}
while ((c = *p++) != '\0')
{
switch (c)
{
case '?':
if (*n == '\0')
return FNM_NOMATCH;
else if ((flags & FNM_PATHNAME) && *n == '/')
return FNM_NOMATCH;
else if ((flags & FNM_PERIOD) && *n == '.' &&
(n == string || ((flags & FNM_PATHNAME) && n[-1] == '/')))
return FNM_NOMATCH;
break;
case '\\':
if (!(flags & FNM_NOESCAPE))
c = *p++;
if (*n != c)
return FNM_NOMATCH;
break;
case '*':
if ((flags & FNM_PERIOD) && *n == '.' &&
(n == string || ((flags & FNM_PATHNAME) && n[-1] == '/')))
return FNM_NOMATCH;
for (c = *p++; c == '?' || c == '*'; c = *p++, ++n)
if (((flags & FNM_PATHNAME) && *n == '/') ||
(c == '?' && *n == '\0'))
return FNM_NOMATCH;
if (c == '\0')
return 0;
{
char c1 = (!(flags & FNM_NOESCAPE) && c == '\\') ? *p : c;
for (--p; *n != '\0'; ++n)
if ((c == '[' || *n == c1) &&
fnmatch(p, n, flags & ~FNM_PERIOD) == 0)
return 0;
return FNM_NOMATCH;
}
case '[':
{
/* Nonzero if the sense of the character class is inverted. */
register int not;
if (*n == '\0')
return FNM_NOMATCH;
if ((flags & FNM_PERIOD) && *n == '.' &&
(n == string || ((flags & FNM_PATHNAME) && n[-1] == '/')))
return FNM_NOMATCH;
not = (*p == '!' || *p == '^');
if (not)
++p;
c = *p++;
for (;;)
{
register char cstart = c, cend = c;
if (!(flags & FNM_NOESCAPE) && c == '\\')
cstart = cend = *p++;
if (c == '\0')
/* [ (unterminated) loses. */
return FNM_NOMATCH;
c = *p++;
if ((flags & FNM_PATHNAME) && c == '/')
/* [/] can never match. */
return FNM_NOMATCH;
if (c == '-' && *p != ']')
{
cend = *p++;
if (!(flags & FNM_NOESCAPE) && cend == '\\')
cend = *p++;
if (cend == '\0')
return FNM_NOMATCH;
c = *p++;
}
if (*n >= cstart && *n <= cend)
goto matched;
if (c == ']')
break;
}
if (!not)
return FNM_NOMATCH;
break;
matched:;
/* Skip the rest of the [...] that already matched. */
while (c != ']')
{
if (c == '\0')
/* [... (unterminated) loses. */
return FNM_NOMATCH;
c = *p++;
if (!(flags & FNM_NOESCAPE) && c == '\\')
/* 1003.2d11 is unclear if this is right. %%% */
++p;
}
if (not)
return FNM_NOMATCH;
}
break;
default:
if (FOLD_FN_CHAR (c) != FOLD_FN_CHAR (*n))
return FNM_NOMATCH;
}
++n;
}
if (*n == '\0')
return 0;
return FNM_NOMATCH;
}

38
src/windows/fnmatch.h Normal file
View file

@ -0,0 +1,38 @@
/* Copyright (C) 1992 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. */
#ifndef _FNMATCH_H
#define _FNMATCH_H 1
/* Bits set in the FLAGS argument to `fnmatch'. */
#undef FNM_PATHNAME
#define FNM_PATHNAME (1 << 0)/* No wildcard can ever match `/'. */
#undef FNM_NOESCAPE
#define FNM_NOESCAPE (1 << 1)/* Backslashes don't quote special chars. */
#undef FNM_PERIOD
#define FNM_PERIOD (1 << 2)/* Leading `.' is matched only explicitly. */
#undef __FNM_FLAGS
#define __FNM_FLAGS (FNM_PATHNAME|FNM_NOESCAPE|FNM_PERIOD)
/* Value returned by `fnmatch' if STRING does not match PATTERN. */
#undef FNM_NOMATCH
#define FNM_NOMATCH 1
/* Match STRING against the filename pattern PATTERN,
returning zero if it matches, FNM_NOMATCH if not. */
extern int fnmatch (const char *pattern, const char *string, int flags);
#endif /* fnmatch.h */

View file

@ -0,0 +1,156 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{A513D65F-798C-4166-B66E-49F69ADA4F59}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>recollindex</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>__WIN32__;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\pthreads-w32\Pre-built.2\include;C:\Users\Bill\recoll\src\xaposix;C:\Users\Bill\recoll\src\utils;C:\Users\Bill\recoll\src\unac;C:\Users\Bill\recoll\src\rcldb;C:\Users\Bill\recoll\src\internfile;C:\Users\Bill\recoll\src\index;C:\Users\Bill\recoll\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\xapian\xapian-core-1.2.8\win32\Debug;C:\Users\Bill\recoll\src\windows\Debug;C:\pthreads-w32\Pre-built.2\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>C:\Users\Bill\recoll\src\windows\Debug\Win32ProjectRecoll.lib;C:\xapian\xapian-core-1.2.8\win32\Debug\xapian-core.lib;C:\zlib\lib\zdll.lib;Ws2_32.lib;Rpcrt4.lib;pthreadVC2.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\pthreads-w32\Pre-built.2\include;C:\Users\Bill\recoll\src\xaposix;C:\Users\Bill\recoll\src\utils;C:\Users\Bill\recoll\src\unac;C:\Users\Bill\recoll\src\rcldb;C:\Users\Bill\recoll\src\internfile;C:\Users\Bill\recoll\src\index;C:\Users\Bill\recoll\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\xapian\xapian-core-1.2.8\win32\Debug;C:\Users\Bill\recoll\src\windows\x64\Debug;C:\pthreads-w32\Pre-built.2\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>pthreadVC2.lib;Win32ProjectRecoll.lib;xapian-core.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\index\recollindex.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\index\recollindex.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

8
src/windows/targetver.h Normal file
View file

@ -0,0 +1,8 @@
#pragma once
// Including SDKDDKVer.h defines the highest available Windows platform.
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
#include <SDKDDKVer.h>

249
src/xaposix/config.h Normal file
View file

@ -0,0 +1,249 @@
/* config.h. Generated from config.h.in by configure. */
/* config.h.in. Generated from configure.ac by autoheader. */
/* Define if ftime returns void */
/* #undef FTIME_RETURNS_VOID */
/* Define to 1 if you have the `closefrom' function. */
/* #undef HAVE_CLOSEFROM */
/* Define to 1 if you have the `dirfd' function. */
#define HAVE_DIRFD 1
/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1
/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define to 1 if you have the `fork' function. */
#define HAVE_FORK 1
/* Define to 1 if you have the `fsync' function. */
#define HAVE_FSYNC 1
/* Define to 1 if you have the `ftime' function. */
#define HAVE_FTIME 1
/* Define to 1 if you have the `gethostname' function. */
#define HAVE_GETHOSTNAME 1
/* Define to 1 if you have the `getrlimit' function. */
#define HAVE_GETRLIMIT 1
/* Define to 1 if you have the `getrusage' function. */
#define HAVE_GETRUSAGE 1
/* Define to 1 if you have the `gettimeofday' function. */
#define HAVE_GETTIMEOFDAY 1
/* Define to 1 if you have the `hstrerror' function. */
#define HAVE_HSTRERROR 1
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define to 1 if you have the `link' function. */
#define HAVE_LINK 1
/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
/* Define if pread is available on this system */
#define HAVE_PREAD 1
/* Define if pwrite is available on this system */
#define HAVE_PWRITE 1
/* Define to 1 if you have the `setenv' function. */
#define HAVE_SETENV 1
/* Define to 1 if you have the `sigaction' function. */
#define HAVE_SIGACTION 1
/* Define to 1 if you have the `sigsetjmp' function */
#define HAVE_SIGSETJMP 1
/* Define to 1 if you have the 'socketpair' function. */
#define HAVE_SOCKETPAIR 1
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the `strerror' function. */
#define HAVE_STRERROR 1
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the `sysconf' function. */
#define HAVE_SYSCONF 1
/* Define to 1 if you have the <sys/errno.h> header file. */
#define HAVE_SYS_ERRNO_H 1
/* Define to 1 if you have the <sys/resource.h> header file. */
#define HAVE_SYS_RESOURCE_H 1
/* Define to 1 if you have the <sys/select.h> header file. */
#define HAVE_SYS_SELECT_H 1
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <sys/utsname.h> header file. */
#define HAVE_SYS_UTSNAME_H 1
/* Define to 1 if you have the `times' function. */
#define HAVE_TIMES 1
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Define to 1 if you have the <uuid.h> header file. */
/* #undef HAVE_UUID_H */
/* Define to 1 if you have the 'uuid_unparse_lower' function. */
#define HAVE_UUID_UNPARSE_LOWER 1
/* Define to 1 if you have the <uuid/uuid.h> header file. */
#define HAVE_UUID_UUID_H 1
/* Define if a suitable valgrind is installed */
#define HAVE_VALGRIND 1
/* Define to 1 if you have the <valgrind/memcheck.h> header file. */
#define HAVE_VALGRIND_MEMCHECK_H 1
/* Define to 1 if you have the <zlib.h> header file. */
#define HAVE_ZLIB_H 1
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#define LT_OBJDIR ".libs/"
/* Name of package */
#define PACKAGE "xapian-core"
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "http://xapian.org/bugs"
/* Define to the full name of this package. */
#define PACKAGE_NAME "xapian-core"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "xapian-core 1.2.14"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "xapian-core"
/* Define to the home page for this package. */
#define PACKAGE_URL ""
/* Define to the version of this package. */
#define PACKAGE_VERSION "1.2.14"
/* explicit prototype needed for pread (if any) */
/* #undef PREAD_PROTOTYPE */
/* explicit prototype needed for pwrite (if any) */
/* #undef PWRITE_PROTOTYPE */
/* The size of `int', as computed by sizeof. */
#define SIZEOF_INT 4
/* The size of `long', as computed by sizeof. */
#define SIZEOF_LONG 8
/* Define to the name of a function implementing snprintf but not caring about
ISO C99 return value semantics (if one exists) */
#define SNPRINTF snprintf
/* Define to the name of a function implementing snprintf with ISO C99
semantics (if one exists) */
#define SNPRINTF_ISO snprintf
/* type to use for 5th parameter to getsockopt */
#define SOCKLEN_T socklen_t
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define if the testsuite should use RTTI */
#define USE_RTTI 1
/* Version number of package */
#define VERSION "1.2.14"
/* Define if you want assertions (causes some slow-down) */
/* #undef XAPIAN_ASSERTIONS */
/* Define if you want paranoid assertions (causes significant slow-down) */
/* #undef XAPIAN_ASSERTIONS_PARANOID */
/* Define if you want a log of methods called and other debug messages */
/* #undef XAPIAN_DEBUG_LOG */
/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef _FILE_OFFSET_BITS */
/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */
/* Define on mingw to the minimum msvcrt version to assume */
/* #undef __MSVCRT_VERSION__ */
/* Define to `int' if <sys/types.h> does not define. */
/* #undef mode_t */
/* Define to `int' if <sys/types.h> does not define. */
/* #undef pid_t */
/* Define to `int' if <sys/types.h> does not define. */
/* #undef ssize_t */
/* Disable stupid MSVC "performance" warning for converting int to bool. */
#ifdef _MSC_VER
# pragma warning(disable:4800)
#endif
/* _FORTIFY_SOURCE is only supported by GCC >= 4.1 and glibc >= 2.3.4, but it
* shouldn't cause a problem to define it where it's not supported and some
* distros may have backported support, so hardcoding version checks is
* counter-productive.
*
* Check if _FORTIFY_SOURCE is already defined to allow the user to override
* our choice with "./configure CPPFLAGS=-D_FORTIFY_SOURCE=0" or "...=1".
*/
#if defined __GNUC__ && !defined _FORTIFY_SOURCE
# define _FORTIFY_SOURCE 2
#endif
/* For GCC >= 3.0 (and Intel's C++ compiler, which also defines __GNUC__),
* we can use __builtin_expect to give the compiler hints about branch
* prediction. See HACKING for how to use these.
*/
#if defined __GNUC__
/* The arguments of __builtin_expect() are both long, so use !! to ensure that
* the first argument is always an integer expression, and always 0 or 1, but
* still has the same truth value for the if or while it is used in.
*/
# define rare(COND) __builtin_expect(!!(COND), 0)
# define usual(COND) __builtin_expect(!!(COND), 1)
#else
# define rare(COND) (COND)
# define usual(COND) (COND)
#endif

107
src/xaposix/realtime.h Normal file
View file

@ -0,0 +1,107 @@
/** @file realtime.h
* @brief Functions for handling a time or time interval in a double.
*/
/* Copyright (C) 2010,2013 Olly Betts
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef XAPIAN_INCLUDED_REALTIME_H
#define XAPIAN_INCLUDED_REALTIME_H
#include <cmath>
#include <ctime>
#include "safeerrno.h"
#include "safeunistd.h"
#ifndef __WIN32__
# ifdef HAVE_FTIME
# include <sys/timeb.h>
# endif
# ifdef HAVE_GETTIMEOFDAY
# include <sys/time.h>
# endif
#else
# include <sys/types.h>
# include <sys/timeb.h>
extern void xapian_sleep_milliseconds(unsigned int millisecs);
#endif
namespace RealTime {
/// Return the current time.
inline double now() {
#ifndef __WIN32__
// POSIX.1-2008 stopped specifying ftime(), so prefer gettimeofday().
# ifdef HAVE_GETTIMEOFDAY
struct timeval tv;
if (usual(gettimeofday(&tv, NULL) == 0))
return tv.tv_sec + (tv.tv_usec * 1e-6);
return double(std::time(NULL));
# elif defined HAVE_FTIME
struct timeb tp;
# ifdef FTIME_RETURNS_VOID
ftime(&tp);
# else
if (rare(ftime(&tp) != 0))
return double(std::time(NULL));
# endif
return tp.time + (tp.millitm * 1e-3);
# else
return double(std::time(NULL));
# endif
#else
struct __timeb64 tp;
_ftime64(&tp);
return tp.time + tp.millitm * 1e-3;
#endif
}
/** Return the end time for a timeout in @a timeout seconds.
*
* If @a timeout is 0, that means "no timeout", so 0 is returned. Otherwise
* the current time plus @a timeout seconds is returned.
*/
inline double end_time(double timeout) {
return (timeout == 0.0 ? timeout : timeout + now());
}
/// Sleep until the time represented by this object.
inline void sleep(double t) {
#ifndef __WIN32__
double delta;
struct timeval tv;
do {
delta = t - RealTime::now();
if (delta <= 0.0)
return;
tv.tv_sec = long(delta);
tv.tv_usec = long(std::fmod(delta, 1.0) * 1e6);
} while (select(0, NULL, NULL, NULL, &tv) < 0 && errno == EINTR);
#else
double delta = t - RealTime::now();
if (delta <= 0.0)
return;
while (rare(delta > 4294967.0)) {
xapian_sleep_milliseconds(4294967000u);
delta -= 4294967.0;
}
xapian_sleep_milliseconds(unsigned(delta * 1000.0));
#endif
}
}
#endif // XAPIAN_INCLUDED_REALTIME_H

31
src/xaposix/safe.cc Normal file
View file

@ -0,0 +1,31 @@
/** @file safe.cc
* @brief Helper functions for safe*.h
*/
/* Copyright (C) 2007 Olly Betts
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "safewindows.h"
// Used by safeunistd.h:
void
xapian_sleep_milliseconds(unsigned int millisecs)
{
Sleep(millisecs);
}

36
src/xaposix/safeerrno.h Normal file
View file

@ -0,0 +1,36 @@
/* safeerrno.h: #include <errno.h>, but working around broken platforms.
*
* Copyright (C) 2006,2007 Olly Betts
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
* USA
*/
#ifndef XAPIAN_INCLUDED_SAFEERRNO_H
#define XAPIAN_INCLUDED_SAFEERRNO_H
//#ifndef PACKAGE
//# error You must #include <config.h> before #include "safeerrno.h"
//#endif
// Compaq's C++ compiler requires sys/errno.h to be included, followed by
// errno.h, otherwise you don't get EINTR or most of the other EXXX codes
// defined.
#if defined __DECCXX && defined HAVE_SYS_ERRNO_H
# include <sys/errno.h>
#endif
#include <cerrno>
#endif // XAPIAN_INCLUDED_SAFEERRNO_H

View file

@ -34,7 +34,9 @@
#ifdef _MSC_VER #ifdef _MSC_VER
// MSVC #define-s open but also defines a function called open, so just undef // MSVC #define-s open but also defines a function called open, so just undef
// the macro. // the macro.
# undef open // Jf/recoll: don't do this, open() seems to be finally deprecated in vs 2015, we need _open(). Hopefully recoll has
// no open() methods..
//# undef open
#else #else
inline int fcntl_open_(const char *filename, int flags, mode_t mode) { inline int fcntl_open_(const char *filename, int flags, mode_t mode) {

45
src/xaposix/safewindows.h Normal file
View file

@ -0,0 +1,45 @@
/* safewindows.h: #include <windows.h> without all the bloat and damage.
*
* Copyright (C) 2005,2007 Olly Betts
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA
*/
#ifndef XAPIAN_INCLUDED_SAFEWINDOWS_H
#define XAPIAN_INCLUDED_SAFEWINDOWS_H
#if !defined __CYGWIN__ && !defined __WIN32__
# error Including safewindows.h, but neither __CYGWIN__ nor __WIN32__ defined!
#endif
// Prevent windows.h from defining min and max macros.
#ifndef NOMINMAX
# define NOMINMAX
#endif
// Prevent windows.h from including lots of obscure win32 api headers
// which we don't care about and will just slow down compilation and
// increase the risk of symbol collisions.
#define WIN32_LEAN_AND_MEAN
#define NOGDI
#include <windows.h>
// FOF_NOERRORUI isn't defined by older versions of the mingw headers.
#ifndef FOF_NOERRORUI
# define FOF_NOERRORUI 1024
#endif
#endif // XAPIAN_INCLUDED_SAFEWINDOWS_H