Blame tests/Performance/DND/alloc.c

Packit b099d7
/* $XConsortium: alloc.c /main/5 1995/07/15 21:01:19 drk $ */
Packit b099d7
/*
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
 */
Packit b099d7
/*
Packit b099d7
 * HISTORY
Packit b099d7
 */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *This file contains a front end to malloc.  The function tcMalloc behaves
Packit b099d7
 *like malloc, but keeps a record.  Calling tcFreeAll will free all memory
Packit b099d7
 *allocated by tcMalloc
Packit b099d7
 */
Packit b099d7
#include <X11/Intrinsic.h>
Packit b099d7
#include <Xm/Xm.h>
Packit b099d7
Packit b099d7
#define MALLOC_CHUNK 50
Packit b099d7
Packit b099d7
static void **entriesMalloced;
Packit b099d7
static int numEntriesMalloced=0;
Packit b099d7
static int numEntriesAvail=0;
Packit b099d7
Packit b099d7
Packit b099d7
void *
Packit b099d7
tcMalloc(size_t size)
Packit b099d7
{
Packit b099d7
    if (numEntriesMalloced == numEntriesAvail)
Packit b099d7
    {
Packit b099d7
	if (numEntriesAvail == 0)
Packit b099d7
	{
Packit b099d7
	    numEntriesAvail = MALLOC_CHUNK;
Packit b099d7
	    entriesMalloced = (void **) XtMalloc(MALLOC_CHUNK * sizeof(void *));
Packit b099d7
	}
Packit b099d7
	else
Packit b099d7
	{
Packit b099d7
	    numEntriesAvail += MALLOC_CHUNK;
Packit b099d7
	    entriesMalloced = (void **) XtRealloc((char *) entriesMalloced,
Packit b099d7
						  numEntriesAvail * sizeof(void *));
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
    entriesMalloced[numEntriesMalloced] = (void *)XtMalloc(size);
Packit b099d7
    return (entriesMalloced[numEntriesMalloced++]);
Packit b099d7
} 
Packit b099d7
Packit b099d7
void
Packit b099d7
tcFreeAll()
Packit b099d7
{
Packit b099d7
    while (numEntriesMalloced > 0)
Packit b099d7
	XtFree(entriesMalloced[--numEntriesMalloced]);
Packit b099d7
}