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


/*                                                                           */ 
/*  * Copyright (c) 1989, 1990, 1991 by the University of Washington         */ 
/*  *                                                                        */ 
/*  * For copying and distribution information, please see the file          */ 
/*  * .                                                         */ 
 
#include "pmachine.h" 
#include "pfs.h" 
 
static PTEXT	freep = NULL; 
int 		ptext_count = 0; 
int		ptext_max = 0; 
 
/*                                                                           */ 
/*  * ptalloc - allocate and initialize ptext structure                      */ 
/*  *                                                                        */ 
/*  * PTALLOC returns a pointer to an initialized structure of type          */ 
/*  * PTEXT.  If it is unable to allocate such a structure, it               */ 
/*  * returns NULL.                                                          */ 
PTEXT 
ptalloc() 
    { 
	PTEXT	vt; 
	if(freep) { 
	    vt = freep; 
	    freep = freep->next; 
	} 
	else { 
	    vt = (PTEXT) malloc(sizeof(PTEXT_ST)); 
	    if (!vt) return(NULL); 
	    ptext_max++; 
	} 
	ptext_count++; 
 
	/* nearly all parts are 0 [or NULL]                                  */ 
	ZERO(vt); 
	/* The offset is to leave room for additional headers                */ 
	vt->start = vt->dat + MAX_PTXT_HDR; 
 
	return(vt); 
    } 
 
/*                                                                           */ 
/*  * ptfree - free a VTEXT structure                                        */ 
/*  *                                                                        */ 
/*  * VTFREE takes a pointer to a VTEXT structure and adds it to             */ 
/*  * the free list for later reuse.                                         */ 
void 
ptfree(vt) 
    PTEXT	vt; 
    { 
	vt->next = freep; 
	vt->previous = NULL; 
	freep = vt; 
	ptext_count--; 
    } 
 
/*                                                                           */ 
/*  * ptlfree - free a VTEXT structure                                       */ 
/*  *                                                                        */ 
/*  * VTLFREE takes a pointer to a VTEXT structure frees it and any linked   */ 
/*  * VTEXT structures.  It is used to free an entrie list of VTEXT          */ 
/*  * structures.                                                            */ 
void 
ptlfree(vt) 
    PTEXT	vt; 
    { 
	PTEXT	nxt; 
 
	while(vt != NULL) { 
	    nxt = vt->next; 
	    ptfree(vt); 
	    vt = nxt; 
	} 
    }