4.3BSD/usr/src/usr.lib/libU77/malloc_.c

Compare this file to the similar file:
Show the results in this format:

/*
 * Copyright (c) 1980 Regents of the University of California.
 * All rights reserved.  The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 *
 *	@(#)malloc_.c	5.1	6/7/85
 */

/*
 *	allows f77 programs to dynamicly allocate space
 *	three routines:
 *		call malloc(need, addr)
 *		integer need, addr
 *
 *		call free(addr)
 *		integer addr
 *
 *		call falloc( nelem, elsize, clean, basevec, addr, offset )
 *		integer nelem, elsize, clean, addr, offset
 *		dimension basevec(1)
 *
 *	malloc() & falloc() alloc space and put address in 'addr', 0 if can't
 *	do it.  free() frees a block.  malloc() gets a block of at least
 *	'need' bytes; falloc() gets at least nelem*elsize bytes, zeros
 *	the block if clean=1, and returns an offset so that the block
 *	can be referenced as basevec(offset+1)...basevec(offset+nelem)
 *	in the calling program.  falloc() gets an extra element so that
 *	all the elements will be in the block even if address arithmetic
 *	involves truncation.
 */

char *calloc(), *malloc();

malloc_( need, addr )
int *need; char **addr;
{
	*addr = malloc( *need );
}

free_( addr )
char **addr;
{
	free( *addr );
}

falloc_( nelem, elsize, clean, basevec, addr, offset )
int *nelem, *elsize, *clean, *offset;
char **addr, *basevec;
{
	if( *clean == 1 )
		*addr = calloc( *nelem + 1, *elsize );
	else
		*addr = malloc( (*nelem + 1) * *elsize );
		
	if( *addr != 0 )
		*offset = ((*addr - basevec) / *elsize) + 1;
	else
		*offset = 0;

}