www.pudn.com > socks5.zip > atalloc.c


/*                                                                           */ 
/*  * Copyright (c) 1989, 1990 by the University of Washington               */ 
/*  *                                                                        */ 
/*  * For copying and distribution information, please see the file          */ 
/*  * .                                                         */ 
 
#include "pmachine.h" 
#include "pfs.h" 
 
static PATTRIB	lfree = NULL; 
int		pattrib_count = 0; 
int		pattrib_max = 0; 
 
/* 
 * atalloc - allocate and initialize vlink structure 
 * 
 *    ATALLOC returns a pointer to an initialized structure of type 
 *    PATTRIB.  If it is unable to allocate such a structure, it 
 *    returns NULL. 
 */ 
PATTRIB 
atalloc() 
    { 
	PATTRIB	at; 
	if(lfree) { 
	    at = lfree; 
	    lfree = lfree->next; 
	} 
	else { 
	    at = (PATTRIB) malloc(sizeof(PATTRIB_ST)); 
	    if (!at) return(NULL); 
	    pattrib_max++; 
	} 
 
	pattrib_count++; 
 
	ZERO(at); 
	/* Initialize and fill in default values; all items are 
	   0 [or NULL] save precedence */ 
	at->precedence = ATR_PREC_OBJECT; 
 
	return(at); 
    } 
 
/* 
 * atfree - free a PATTRIB structure 
 * 
 *    ATFREE takes a pointer to a PATTRRIB structure and adds it to 
 *    the free list for later reuse. 
 */ 
void 
atfree(at) 
    PATTRIB	at; 
    { 
	if(at->aname) stfree(at->aname); 
 
	if((strcmp(at->avtype,"ASCII") == 0) && at->value.ascii)  
	    stfree(at->value.ascii); 
	if((strcmp(at->avtype,"LINK") == 0) && at->value.link)  
	    vlfree(at->value.link); 
	 
	if(at->avtype) stfree(at->avtype); 
 
	at->next = lfree; 
	at->previous = NULL; 
	lfree = at; 
	pattrib_count--; 
    } 
 
/* 
 * atlfree - free a PATTRIB structure 
 * 
 *    ATLFREE takes a pointer to a PATTRIB structure frees it and any linked 
 *    PATTRIB structures.  It is used to free an entrie list of PATTRIB 
 *    structures. 
 */ 
void 
atlfree(at) 
    PATTRIB	at; 
    { 
	PATTRIB	nxt; 
 
	while(at != NULL) { 
	    nxt = at->next; 
	    atfree(at); 
	    at = nxt; 
	} 
    }