You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
2.6 KiB

//
// WordContext.cc
//
// WordContext: call Initialize for all classes that need to.
// This will enable the Instance() static member
// of each to return a properly allocated and configured
// object.
//
// Part of the ht://Dig package <http://www.htdig.org/>
// Copyright (c) 1999-2004 The ht://Dig Group
// For copyright details, see the file COPYING in your distribution
// or the GNU Library General Public License (LGPL) version 2 or later
// <http://www.gnu.org/copyleft/lgpl.html>
//
// $Id: WordContext.cc,v 1.5 2004/05/28 13:15:26 lha Exp $
//
#ifdef HAVE_CONFIG_H
#include "htconfig.h"
#endif /* HAVE_CONFIG_H */
#include <stdlib.h>
#include <sys/stat.h>
#include <errno.h>
#include "WordContext.h"
#include "WordType.h"
#include "WordKeyInfo.h"
#include "WordDBInfo.h"
#include "WordRecord.h"
#include "WordMonitor.h"
void WordContext::Initialize(Configuration &config)
{
#if !defined(HAVE_LIBZ) || !defined(HAVE_ZLIB_H)
config.Add("wordlist_compress", "false");
#endif
WordType::Initialize(config);
WordKeyInfo::Initialize(config);
WordRecordInfo::Initialize(config);
WordDBInfo::Initialize(config);
if(config.Boolean("wordlist_monitor"))
WordMonitor::Initialize(config);
}
Configuration *WordContext::Initialize(const ConfigDefaults* config_defaults /* = 0 */)
{
Configuration *config = new Configuration();
if(config_defaults)
config->Defaults(config_defaults);
String filename;
//
// Check file pointed by MIFLUZ_CONFIG environment variable
//
if(getenv("MIFLUZ_CONFIG")) {
filename << getenv("MIFLUZ_CONFIG");
struct stat statbuf;
if(stat((char*)filename, &statbuf) < 0) {
if(errno != ENOENT) {
fprintf(stderr, "WordContext::Initialize: MIFLUZ_CONFIG could not stat %s\n", (char*)filename);
perror("");
}
filename.trunc();
}
}
//
// Check for ~/.mifluz
//
if(filename.empty()) {
const char* home = getenv("HOME");
if(home) {
filename << home << "/.mifluz";
struct stat statbuf;
if(stat((char*)filename, &statbuf) < 0) {
if(errno != ENOENT) {
fprintf(stderr, "WordContext::Initialize: could not stat %s\n", (char*)filename);
perror("");
}
filename.trunc();
}
}
}
if(!filename.empty())
config->Read(filename);
Initialize(*config);
if(filename.empty() && !config_defaults) {
delete config;
config = 0;
}
return config;
}
void WordContext::Finish()
{
delete WordType::Instance();
delete WordKeyInfo::Instance();
delete WordRecordInfo::Instance();
delete WordDBInfo::Instance();
if(WordMonitor::Instance()) delete WordMonitor::Instance();
}