/* */ /* * Copyright (c) 1989, 1990, 1991 by the University of Washington */ /* * */ /* * For copying and distribution information, please see the file */ /* * . */ #include #include #include static VLINK lfree = NULL; int vlink_count = 0; int vlink_max = 0; /* */ /* * vlalloc - allocate and initialize vlink structure */ /* * */ /* * VLALLOC returns a pointer to an initialized structure of type */ /* * VLINK. If it is unable to allocate such a structure, it */ /* * returns NULL. */ VLINK vlalloc() { VLINK vl; if(lfree) { vl = lfree; lfree = lfree->next; } else { vl = (VLINK) malloc(sizeof(VLINK_ST)); if (!vl) return(NULL); vlink_max++; } vlink_count++; /* Initialize and fill in default values Since all but four are set */ /* to a zero-value, */ /* why not just wipe it clean? */ ZERO(vl); vl->linktype = 'L'; vl->type = stcopy("FILE"); vl->hosttype = stcopy("INTERNET-D"); vl->nametype = stcopy("ASCII"); return(vl); } /* */ /* * vlfree - free a VLINK structure */ /* * */ /* * VLFREE takes a pointer to a VLINK structure and adds it to */ /* * the free list for later reuse. */ void vlfree(vl) VLINK vl; { extern int string_count; if(vl->dontfree) return; /* many of these don't need to call stfree(); since a check for */ /* pointer validity's already done before even calling it, we can */ /* just call free() here then do one big decrement of string_count */ /* at the end. */ if(vl->name) free(vl->name); stfree(vl->type); if(vl->replicas) vllfree(vl->replicas); stfree(vl->hosttype); if(vl->host) free(vl->host); stfree(vl->nametype); if(vl->filename) free(vl->filename); if(vl->args) free(vl->args); if(vl->lattrib) atlfree(vl->lattrib); /* No allocation routines for f_info yet */ vl->f_info = NULL; vl->next = lfree; vl->previous = NULL; lfree = vl; vlink_count--; string_count -= 4; /* freed name, host, filename, and args */ } /* */ /* * vllfree - free a VLINK structure */ /* * */ /* * VLLFREE takes a pointer to a VLINK structure frees it and any linked */ /* * VLINK structures. It is used to free an entrie list of VLINK */ /* * structures. */ void vllfree(vl) VLINK vl; { VLINK nxt; while((vl != NULL) && !vl->dontfree) { nxt = vl->next; vlfree(vl); vl = nxt; } }