home *** CD-ROM | disk | FTP | other *** search
/ Collection of Internet / Collection of Internet.iso / msdos / lynx / source / www / library / implemen / htassoc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-25  |  1.8 KB  |  84 lines

  1.  
  2. /* MODULE                            HTAssoc.c
  3. **        ASSOCIATION LIST FOR STORING NAME-VALUE PAIRS.
  4. **        NAMES NOT CASE SENSITIVE, AND ONLY COMMON LENGTH
  5. **        IS CHECKED (allows abbreviations; well, length is
  6. **        taken from lookup-up name, so if table contains
  7. **        a shorter abbrev it is not found).
  8. ** AUTHORS:
  9. **    AL    Ari Luotonen    luotonen@dxcern.cern.ch
  10. **
  11. ** HISTORY:
  12. **
  13. **
  14. ** BUGS:
  15. **
  16. **
  17. */
  18.  
  19. #include"capalloc.h"
  20. #include"capstdio.h"
  21. #include <string.h>
  22.  
  23. #include "HTAAUtil.h"
  24. #include "HTAssoc.h"
  25. #include "HTString.h"
  26.  
  27.  
  28. PUBLIC HTAssocList *HTAssocList_new NOARGS
  29. {
  30.     return HTList_new();
  31. }
  32.  
  33.  
  34. PUBLIC void HTAssocList_delete ARGS1(HTAssocList *, alist)
  35. {
  36.     if (alist) {
  37.     HTAssocList *cur = alist;
  38.     HTAssoc *assoc;
  39.     while (NULL != (assoc = (HTAssoc*)HTList_nextObject(cur))) {
  40.         if (assoc->name) free(assoc->name);
  41.         if (assoc->value) free(assoc->value);
  42.         free(assoc);
  43.     }
  44.     HTList_delete(alist);
  45.     }
  46. }
  47.  
  48.  
  49. PUBLIC void HTAssocList_add ARGS3(HTAssocList *,    alist,
  50.                   CONST char *,        name,
  51.                   CONST char *,        value)
  52. {
  53.     HTAssoc *assoc;
  54.  
  55.     if (alist) {
  56.     if (!(assoc = (HTAssoc*)malloc(sizeof(HTAssoc))))
  57.         outofmem(__FILE__, "HTAssoc_add");
  58.     assoc->name = NULL;
  59.     assoc->value = NULL;
  60.  
  61.     if (name) StrAllocCopy(assoc->name, name);
  62.     if (value) StrAllocCopy(assoc->value, value);
  63.     HTList_addObject(alist, (void*)assoc);
  64.     }
  65. #ifndef RELEASE
  66.     else if (TRACE) fprintf(stderr, "HTAssoc_add: ERROR: assoc list NULL!!\n");
  67. #endif /* RELEASE */
  68. }
  69.  
  70.  
  71. PUBLIC char *HTAssocList_lookup ARGS2(HTAssocList *,    alist,
  72.                       CONST char *,    name)
  73. {
  74.     HTAssocList *cur = alist;
  75.     HTAssoc *assoc;
  76.  
  77.     while (NULL != (assoc = (HTAssoc*)HTList_nextObject(cur))) {
  78.     if (!strncasecomp(assoc->name, name, strlen(name)))
  79.         return assoc->value;
  80.     }
  81.     return NULL;
  82. }
  83.  
  84.