X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=data1%2Fd1_attset.c;h=e745292aa308d422bc164560f7fb06018e200e4c;hp=568027f169ebac99d39474b6aea4032e557bc69b;hb=ba0720e26f508ba3396e232d2f82037c0e701698;hpb=519fefb91135ad52134b9fc4e82b3874f5525a2b diff --git a/data1/d1_attset.c b/data1/d1_attset.c index 568027f..e745292 100644 --- a/data1/d1_attset.c +++ b/data1/d1_attset.c @@ -1,91 +1,48 @@ -/* - * Copyright (c) 1995-1999, Index Data. - * See the file LICENSE for details. - * Sebastian Hammer, Adam Dickmeiss - * - * $Log: d1_attset.c,v $ - * Revision 1.1 2002-10-22 12:53:33 adam - * data1 part of zebra - * - * Revision 1.15 2002/04/04 20:49:46 adam - * New functions yaz_is_abspath, yaz_path_fopen_base - * - * Revision 1.14 1999/11/30 13:47:12 adam - * Improved installation. Moved header files to include/yaz. - * - * Revision 1.13 1999/10/21 12:06:29 adam - * Retrieval module no longer uses ctype.h - functions. - * - * Revision 1.12 1999/08/27 09:40:32 adam - * Renamed logf function to yaz_log. Removed VC++ project files. - * - * Revision 1.11 1998/10/14 13:31:56 adam - * Bug fix. Bug introduced by previous commit. - * - * Revision 1.10 1998/10/13 16:09:48 adam - * Added support for arbitrary OID's for tagsets, schemas and attribute sets. - * Added support for multiple attribute set references and tagset references - * from an abstract syntax file. - * Fixed many bad logs-calls in routines that read the various - * specifications regarding data1 (*.abs,*.att,...) and made the messages - * consistent whenever possible. - * Added extra 'lineno' argument to function readconf_line. - * - * Revision 1.9 1998/05/18 13:07:03 adam - * Changed the way attribute sets are handled by the retriaval module. - * Extended Explain conversion / schema. - * Modified server and client to work with ASN.1 compiled protocol handlers. - * - * Revision 1.8 1998/02/11 11:53:35 adam - * Changed code so that it compiles as C++. - * - * Revision 1.7 1997/09/17 12:10:34 adam - * YAZ version 1.4. - * - * Revision 1.6 1997/09/05 09:50:56 adam - * Removed global data1_tabpath - uses data1_get_tabpath() instead. - * - * Revision 1.5 1996/05/09 07:27:43 quinn - * Multiple local attributes values supported. - * - * Revision 1.4 1996/02/21 15:23:36 quinn - * Reversed fclose and return; - * - * Revision 1.3 1995/12/13 17:14:26 quinn - * *** empty log message *** - * - * Revision 1.2 1995/11/01 16:34:55 quinn - * Making data1 look for tables in data1_tabpath - * - * Revision 1.1 1995/11/01 11:56:07 quinn - * Added Retrieval (data management) functions en masse. - * - * - */ +/* This file is part of the Zebra server. + Copyright (C) 1994-2011 Index Data + +Zebra 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, or (at your option) any later +version. + +Zebra 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 + +*/ + +#if HAVE_CONFIG_H +#include +#endif #include #include #include #include -#include -#include +#include +#include -data1_att *data1_getattbyname(data1_handle dh, data1_attset *s, char *name) +data1_att *data1_getattbyname(data1_handle dh, data1_attset *s, const char *name) { data1_att *r; data1_attset_child *c; /* scan local set */ for (r = s->atts; r; r = r->next) - if (!data1_matchstr(r->name, name)) - return r; + if (!data1_matchstr(r->name, name)) + return r; for (c = s->children; c; c = c->next) { - assert (c->child); - /* scan included sets */ - if ((r = data1_getattbyname (dh, c->child, name))) - return r; + assert (c->child); + /* scan included sets */ + if ((r = data1_getattbyname (dh, c->child, name))) + return r; } return 0; } @@ -96,7 +53,7 @@ data1_attset *data1_empty_attset(data1_handle dh) data1_attset *res = (data1_attset*) nmem_malloc(mem,sizeof(*res)); res->name = 0; - res->reference = VAL_NONE; + res->oid = 0; res->atts = 0; res->children = 0; res->next = 0; @@ -128,43 +85,32 @@ data1_attset *data1_read_attset(data1_handle dh, const char *file) { int num; char *name; + char *endptr; data1_att *t; - data1_local_attribute *locals; if (argc < 3) { - yaz_log(LOG_WARN, "%s:%d: Bad # of args to att", file, lineno); + yaz_log(YLOG_WARN, "%s:%d: Bad # of args to att", file, lineno); continue; } - num = atoi (argv[1]); + if (argc > 3) + { + yaz_log(YLOG_WARN, "%s:%d: Local attributes not supported", + file, lineno); + } + num = strtol(argv[1], &endptr, 10); + if (*endptr != '\0') + { + yaz_log(YLOG_WARN, "%s:%d: Bad attribute integer %s", + file, lineno, argv[1]); + continue; + } name = argv[2]; - if (argc == 3) /* no local attributes given */ - { - locals = (data1_local_attribute *) - nmem_malloc(mem, sizeof(*locals)); - locals->local = num; - locals->next = 0; - } - else /* parse the string "local{,local}" */ - { - char *p = argv[3]; - data1_local_attribute **ap = &locals; - do - { - *ap = (data1_local_attribute *) - nmem_malloc(mem, sizeof(**ap)); - (*ap)->local = atoi(p); - (*ap)->next = 0; - ap = &(*ap)->next; - } - while ((p = strchr(p, ',')) && *(++p)); - } t = *attp = (data1_att *)nmem_malloc(mem, sizeof(*t)); t->parent = res; t->name = nmem_strdup(mem, name); t->value = num; - t->locals = locals; t->next = 0; attp = &t->next; } @@ -172,7 +118,7 @@ data1_attset *data1_read_attset(data1_handle dh, const char *file) { if (argc != 2) { - yaz_log(LOG_WARN, "%s:%d: Bad # of args to name", file, lineno); + yaz_log(YLOG_WARN, "%s:%d: Bad # of args to name", file, lineno); continue; } } @@ -182,14 +128,17 @@ data1_attset *data1_read_attset(data1_handle dh, const char *file) if (argc != 2) { - yaz_log(LOG_WARN, "%s:%d: Bad # of args to reference", + yaz_log(YLOG_WARN, "%s:%d: Bad # of args to reference", file, lineno); continue; } name = argv[1]; - if ((res->reference = oid_getvalbyname(name)) == VAL_NONE) + + res->oid = yaz_string_to_oid_nmem(yaz_oid_std(), + CLASS_ATTSET, name, mem); + if (!res->oid) { - yaz_log(LOG_WARN, "%s:%d: Unknown reference oid '%s'", + yaz_log(YLOG_WARN, "%s:%d: Unknown reference oid '%s'", file, lineno, name); fclose(f); return 0; @@ -197,7 +146,7 @@ data1_attset *data1_read_attset(data1_handle dh, const char *file) } else if (!strcmp(cmd, "ordinal")) { - yaz_log (LOG_WARN, "%s:%d: Directive ordinal ignored", + yaz_log (YLOG_WARN, "%s:%d: Directive ordinal ignored", file, lineno); } else if (!strcmp(cmd, "include")) @@ -207,7 +156,7 @@ data1_attset *data1_read_attset(data1_handle dh, const char *file) if (argc != 2) { - yaz_log(LOG_WARN, "%s:%d: Bad # of args to include", + yaz_log(YLOG_WARN, "%s:%d: Bad # of args to include", file, lineno); continue; } @@ -215,7 +164,7 @@ data1_attset *data1_read_attset(data1_handle dh, const char *file) if (!(attset = data1_get_attset (dh, name))) { - yaz_log(LOG_WARN, "%s:%d: Include of attset %s failed", + yaz_log(YLOG_WARN, "%s:%d: Include of attset %s failed", file, lineno, name); continue; @@ -228,10 +177,19 @@ data1_attset *data1_read_attset(data1_handle dh, const char *file) } else { - yaz_log(LOG_WARN, "%s:%d: Unknown directive '%s'", + yaz_log(YLOG_WARN, "%s:%d: Unknown directive '%s'", file, lineno, cmd); } } fclose(f); return res; } +/* + * Local variables: + * c-basic-offset: 4 + * c-file-style: "Stroustrup" + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +