atalloc.c
上传用户:sddyfurun
上传日期:2007-01-04
资源大小:525k
文件大小:2k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*                                                                           */
  2. /*  * Copyright (c) 1989, 1990 by the University of Washington               */
  3. /*  *                                                                        */
  4. /*  * For copying and distribution information, please see the file          */
  5. /*  * <copyright.h>.                                                         */
  6. #include "pmachine.h"
  7. #include "pfs.h"
  8. static PATTRIB lfree = NULL;
  9. int pattrib_count = 0;
  10. int pattrib_max = 0;
  11. /*
  12.  * atalloc - allocate and initialize vlink structure
  13.  *
  14.  *    ATALLOC returns a pointer to an initialized structure of type
  15.  *    PATTRIB.  If it is unable to allocate such a structure, it
  16.  *    returns NULL.
  17.  */
  18. PATTRIB
  19. atalloc()
  20.     {
  21. PATTRIB at;
  22. if(lfree) {
  23.     at = lfree;
  24.     lfree = lfree->next;
  25. }
  26. else {
  27.     at = (PATTRIB) malloc(sizeof(PATTRIB_ST));
  28.     if (!at) return(NULL);
  29.     pattrib_max++;
  30. }
  31. pattrib_count++;
  32. ZERO(at);
  33. /* Initialize and fill in default values; all items are
  34.    0 [or NULL] save precedence */
  35. at->precedence = ATR_PREC_OBJECT;
  36. return(at);
  37.     }
  38. /*
  39.  * atfree - free a PATTRIB structure
  40.  *
  41.  *    ATFREE takes a pointer to a PATTRRIB structure and adds it to
  42.  *    the free list for later reuse.
  43.  */
  44. void
  45. atfree(at)
  46.     PATTRIB at;
  47.     {
  48. if(at->aname) stfree(at->aname);
  49. if((strcmp(at->avtype,"ASCII") == 0) && at->value.ascii) 
  50.     stfree(at->value.ascii);
  51. if((strcmp(at->avtype,"LINK") == 0) && at->value.link) 
  52.     vlfree(at->value.link);
  53. if(at->avtype) stfree(at->avtype);
  54. at->next = lfree;
  55. at->previous = NULL;
  56. lfree = at;
  57. pattrib_count--;
  58.     }
  59. /*
  60.  * atlfree - free a PATTRIB structure
  61.  *
  62.  *    ATLFREE takes a pointer to a PATTRIB structure frees it and any linked
  63.  *    PATTRIB structures.  It is used to free an entrie list of PATTRIB
  64.  *    structures.
  65.  */
  66. void
  67. atlfree(at)
  68.     PATTRIB at;
  69.     {
  70. PATTRIB nxt;
  71. while(at != NULL) {
  72.     nxt = at->next;
  73.     atfree(at);
  74.     at = nxt;
  75. }
  76.     }