4.4BSD/usr/src/contrib/calc-1.26.4/alloc.h

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

/*
 * Copyright (c) 1993 David I. Bell
 * Permission is granted to use, distribute, or modify this source,
 * provided that this copyright notice remains intact.
 *
 * Allocator definitions (fast malloc and free)
 */

#if !defined(CALC_MALLOC)

#include "have_malloc.h"
#ifdef HAVE_MALLOC_H
# include <malloc.h>
#else
# if defined(__STDC__)
   extern void *malloc();
   extern void *realloc();
   extern void free();
# else
   extern char *malloc();
   extern char *realloc();
   extern void free();
# endif
#endif

#include "have_string.h"

#ifdef HAVE_STRING_H
# include <string.h>

#else

# ifdef OLD_BSD
extern void bcopy();
extern void bfill();
extern char *index();
# else /* OLD_BSD */
extern void memcpy();
extern void memset();
#  if defined(__STDC__)
extern void *strchr();
#  else
extern char *strchr();
#  endif
# endif /* OLD_BSD */
extern void strcpy();
extern void strncpy();
extern void strcat();
extern int strcmp();
extern long strlen();	/* should be size_t, but old systems don't have it */

#endif

#ifdef OLD_BSD
#undef memcpy
#define memcpy(s1, s2, n) bcopy(s2, s1, n)
#undef memset
#define memset(s, c, n) bfill(s, n, c)
#undef strchr
#define strchr(s, c) index(s, c)
#endif

#ifdef DONT_HAVE_VSPRINTF
/*
 * XXX - hack aleart
 *
 * Systems that do not have vsprintf() need something.  In some cases
 * the sprintf function will deal correctly with the va_alist 3rd arg.
 * Hope for the best!
 */
#define vsprintf sprintf
#endif

#define mem_alloc malloc
#define mem_realloc realloc
#define mem_free free

#else /*!CALC_MALLOC*/

#define malloc(a) mem_alloc((long) a)
#define realloc(a,b) mem_realloc((char *) a, (long) b)
#define free(a) mem_free((char *) a)
extern char *mem_alloc();
extern char *mem_realloc();
extern int mem_free();		/* MUST be int even though no return value */

#endif /*!CALC_MALLOC*/


/*
 * An item to be placed on a free list.
 * These items are overlayed on top of the actual item being managed.
 * Therefore, the managed items must be at least this size!
 * Also, all items on a single free list must be the same size.
 */
struct free_item {
	struct free_item *next;			/* next item on free list */
};
typedef struct free_item FREEITEM;


/*
 * The actual free list header.
 */
typedef struct {
	long		itemsize;	/* size of an item being managed */
	long		maxfree;	/* maximum number of free items */
	long		curfree;	/* current number of free items */
	FREEITEM	*freelist;	/* the free list */
} FREELIST;

#if defined(__STDC__)
typedef void ALLOCITEM;
#else
typedef char ALLOCITEM;
#endif
extern ALLOCITEM * allocitem( /* FREELIST * */ );
extern void freeitem( /* FREELIST *, char * */ );
extern void mem_stats();

/* END CODE */