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

代理服务器

开发平台:

Unix_Linux

  1. /*                                                                           */
  2. /*  * Copyright (c) 1989, 1990, 1991 by the University of Washington         */
  3. /*  *                                                                        */
  4. /*  * For copying and distribution information, please see the file          */
  5. /*  * <copyright.h>.                                                         */
  6. #include <stdio.h>
  7. #include <pfs.h>
  8. #include <pmachine.h>
  9. static VLINK lfree = NULL;
  10. int vlink_count = 0;
  11. int vlink_max = 0;
  12. /*                                                                           */
  13. /*  * vlalloc - allocate and initialize vlink structure                      */
  14. /*  *                                                                        */
  15. /*  * VLALLOC returns a pointer to an initialized structure of type          */
  16. /*  * VLINK.  If it is unable to allocate such a structure, it               */
  17. /*  * returns NULL.                                                          */
  18. VLINK
  19. vlalloc()
  20.     {
  21. VLINK vl;
  22. if(lfree) {
  23.     vl = lfree;
  24.     lfree = lfree->next;
  25. }
  26. else {
  27.     vl = (VLINK) malloc(sizeof(VLINK_ST));
  28.     if (!vl) return(NULL);
  29.     vlink_max++;
  30. }
  31. vlink_count++;
  32. /* Initialize and fill in default values Since all but four are set  */
  33. /* to a zero-value,                                                  */
  34. /*     why not just wipe it clean?                               */
  35. ZERO(vl);
  36. vl->linktype = 'L';
  37. vl->type = stcopy("FILE");
  38. vl->hosttype = stcopy("INTERNET-D");
  39. vl->nametype = stcopy("ASCII");
  40. return(vl);
  41.     }
  42. /*                                                                           */
  43. /*  * vlfree - free a VLINK structure                                        */
  44. /*  *                                                                        */
  45. /*  * VLFREE takes a pointer to a VLINK structure and adds it to             */
  46. /*  * the free list for later reuse.                                         */
  47. void
  48. vlfree(vl)
  49.     VLINK vl;
  50.     {
  51.         extern int string_count;
  52. if(vl->dontfree) return;
  53. /* many of these don't need to call stfree(); since a check for      */
  54. /* pointer validity's already done before even calling it, we can    */
  55. /* just call free() here then do one big decrement of string_count   */
  56. /* at the end.                                                       */
  57. if(vl->name) free(vl->name);
  58. stfree(vl->type);
  59. if(vl->replicas) vllfree(vl->replicas);
  60. stfree(vl->hosttype);
  61. if(vl->host) free(vl->host);
  62. stfree(vl->nametype);
  63. if(vl->filename) free(vl->filename);
  64. if(vl->args) free(vl->args);
  65. if(vl->lattrib) atlfree(vl->lattrib);
  66. /* No allocation routines for f_info yet                             */
  67. vl->f_info = NULL;
  68. vl->next = lfree;
  69. vl->previous = NULL;
  70. lfree = vl;
  71. vlink_count--;
  72. string_count -= 4; /* freed name, host, filename, and args           */
  73.     }
  74. /*                                                                           */
  75. /*  * vllfree - free a VLINK structure                                       */
  76. /*  *                                                                        */
  77. /*  * VLLFREE takes a pointer to a VLINK structure frees it and any linked   */
  78. /*  * VLINK structures.  It is used to free an entrie list of VLINK          */
  79. /*  * structures.                                                            */
  80. void
  81. vllfree(vl)
  82.     VLINK vl;
  83.     {
  84. VLINK nxt;
  85. while((vl != NULL) && !vl->dontfree) {
  86.     nxt = vl->next;
  87.     vlfree(vl);
  88.     vl = nxt;
  89. }
  90.     }