X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fres.c;h=15e65e58238cbecc19907b3cde3f0ab252e9b477;hb=3a4f37bf02075e0ad4b56b2b1f7bf9ac9cada998;hp=90cf2d969d0228cfc98a99e89c3fc0bbc37d113f;hpb=c71dc4cafd880d69e6b14b308630fbc69a7d7b23;p=idzebra-moved-to-github.git diff --git a/util/res.c b/util/res.c index 90cf2d9..15e65e5 100644 --- a/util/res.c +++ b/util/res.c @@ -1,6 +1,6 @@ -/* $Id: res.c,v 1.35 2004-06-14 23:42:33 adam Exp $ - Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 - Index Data Aps +/* $Id: res.c,v 1.44 2005-08-17 21:28:07 adam Exp $ + Copyright (C) 1995-2005 + Index Data ApS This file is part of the Zebra server. @@ -20,19 +20,19 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include #include #include #include #ifdef WIN32 #include -#else +#endif +#if HAVE_UNISTD_H #include #endif -#include #include +#include struct res_entry { char *name; @@ -80,16 +80,19 @@ static char *xstrdup_env(const char *src) char *env_val; int k = 0; i = i + 2; - while (k < 127 && src[i] && !strchr("}\n\r\f", src[i])) + while (k < 127 && src[i] && !strchr(":}\n\r\f", src[i])) envname[k++] = src[i++]; envname[k] = '\0'; - if (src[i] == '}') - i++; + env_val = getenv(envname); if (env_val) env_strlen += 1 + strlen(env_val); else env_strlen++; + while (src[i] && !strchr("}\n\r\f", src[i])) + i++; + if (src[i] == '}') + i++; } else i++; @@ -104,17 +107,25 @@ static char *xstrdup_env(const char *src) char *env_val; int k = 0; i = i + 2; - while(k < 127 && src[i] && !strchr("}\n\r\f", src[i])) + while(k < 127 && src[i] && !strchr(":}\n\r\f", src[i])) envname[k++] = src[i++]; envname[k] = '\0'; - if (src[i] == '}') - i++; env_val = getenv(envname); if (env_val) { strcpy(dst+j, env_val); j += strlen(env_val); } + else if (src[i] == ':' && src[i+1] == '-') + { + i = i + 2; + while (src[i] && !strchr("}\n\r\f", src[i])) + dst[j++] = src[i++]; + } + while (src[i] && !strchr("}\n\r\f", src[i])) + i++; + if (src[i] == '}') + i++; } else dst[j++] = src[i++]; @@ -135,17 +146,16 @@ static void reread (Res r) assert (r); r->init = 1; - val_buf = (char*) xmalloc (val_max); - if (!r->name) return; fr = fopen (r->name, "r"); if (!fr) { - logf (LOG_WARN|LOG_ERRNO, "Cannot open `%s'", r->name); + yaz_log (YLOG_WARN|YLOG_ERRNO, "Cannot open `%s'", r->name); return ; } + val_buf = (char*) xmalloc (val_max); while (1) { line = fgets (fr_buf, sizeof(fr_buf)-1, fr); @@ -198,7 +208,7 @@ static void reread (Res r) val_size--; val_buf[val_size] = '\0'; resp->value = xstrdup_env(val_buf); - logf (LOG_DEBUG, "(name=%s,value=%s)", + yaz_log (YLOG_DEBUG, "(name=%s,value=%s)", resp->name, resp->value); break; } @@ -245,7 +255,7 @@ Res res_open (const char *name, Res def_res, Res over_res) if (access (name, R_OK)) #endif { - logf (LOG_WARN|LOG_ERRNO, "Cannot open `%s'", name); + yaz_log (YLOG_WARN|YLOG_ERRNO, "Cannot open `%s'", name); return 0; } } @@ -261,10 +271,8 @@ Res res_open (const char *name, Res def_res, Res over_res) return r; } -void res_close (Res r) +void res_clear (Res r) { - if (!r) - return; if (r->init) { struct res_entry *re, *re1; @@ -278,6 +286,16 @@ void res_close (Res r) xfree (re); } } + r->init = 0; + r->first = r->last = NULL; +} + +void res_close (Res r) +{ + if (!r) + return; + res_clear(r); + xfree (r->name); xfree (r); } @@ -331,7 +349,7 @@ const char *res_get_def (Res r, const char *name, const char *def) if (!(t = res_get (r, name))) { - logf (LOG_DEBUG, "CAUTION: Using default resource %s:%s", name, def); + yaz_log (YLOG_DEBUG, "CAUTION: Using default resource %s:%s", name, def); return def; } else @@ -407,7 +425,7 @@ int res_write (Res r) fr = fopen (r->name, "w"); if (!fr) { - logf (LOG_FATAL|LOG_ERRNO, "Cannot create `%s'", r->name); + yaz_log (YLOG_FATAL|YLOG_ERRNO, "Cannot create `%s'", r->name); exit (1); } @@ -446,3 +464,14 @@ int res_write (Res r) return 0; } +ZEBRA_RES res_get_int(Res r, const char *name, int *val) +{ + const char *cp = res_get(r, name); + if (cp) + { + if (sscanf(cp, "%d", val) == 1) + return ZEBRA_OK; + yaz_log(YLOG_WARN, "Expected integer for resource %s", name); + } + return ZEBRA_FAIL; +}