X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fdatabase.c;h=3dfe74e0ef2405a319a557169ce96aad16351b34;hb=4b1fc6c00b0a19fb4432aa49219045b6ae2bff7a;hp=d5b9e757cf7d0ff788d1e69d1dc160e7c3c8cf0d;hpb=bb76bca1e2b4969ea08cf2f1f57d74cfa31dd026;p=pazpar2-moved-to-github.git diff --git a/src/database.c b/src/database.c index d5b9e75..3dfe74e 100644 --- a/src/database.c +++ b/src/database.c @@ -26,6 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include #include +#include #include "pazpar2.h" #include "host.h" @@ -45,7 +46,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #endif -static struct host *hosts = 0; // The hosts we know about +static struct host *hosts = 0; /* thread pr */ static xmlDoc *get_explain_xml(struct conf_targetprofiles *targetprofiles, const char *id) @@ -98,13 +99,36 @@ static struct host *find_host(const char *hostport) return create_host(hostport); } +int resolve_database(struct database *db) +{ + if (db->host == 0) + { + struct host *host; + char *p; + char hostport[256]; + strcpy(hostport, db->url); + if ((p = strchr(hostport, '/'))) + *p = '\0'; + if (!(host = find_host(hostport))) + return -1; + db->host = host; + } + return 0; +} + +void resolve_databases(struct conf_service *service) +{ + struct database *db = service->databases; + for (; db; db = db->next) + resolve_database(db); +} + static struct database *load_database(const char *id, struct conf_service *service) { xmlDoc *doc = 0; struct zr_explain *explain = 0; struct database *db; - struct host *host; char hostport[256]; char *dbname; struct setting *idset; @@ -126,13 +150,11 @@ static struct database *load_database(const char *id, *(dbname++) = '\0'; else dbname = ""; - if (!(host = find_host(hostport))) - return 0; db = nmem_malloc(service->nmem, sizeof(*db)); memset(db, 0, sizeof(*db)); - db->host = host; + db->host = 0; db->url = nmem_strdup(service->nmem, id); - db->databases = xmalloc(2 * sizeof(char *)); + db->databases = nmem_malloc(service->nmem, 2 * sizeof(char *)); db->databases[0] = nmem_strdup(service->nmem, dbname); db->databases[1] = 0; db->errors = 0;