From 581c961c5b8e511a89addca064f372103d2400ee Mon Sep 17 00:00:00 2001 From: snowdrop Date: Fri, 29 Oct 2004 09:28:25 +0000 Subject: initial import --- utils/alloc.c | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100755 utils/alloc.c (limited to 'utils/alloc.c') diff --git a/utils/alloc.c b/utils/alloc.c new file mode 100755 index 0000000..621377d --- /dev/null +++ b/utils/alloc.c @@ -0,0 +1,105 @@ +/****************************************************************** + * $Id: alloc.c,v 1.1 2004/10/29 09:28:25 snowdrop Exp $ + * + * CSOAP Project: A http client/server library in C + * Copyright (C) 2003-2004 Ferhat Ayaz + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Email: ferhatayaz@yahoo.com + ******************************************************************/ + +#include +#include + +#include "alloc.h" + +#undef malloc +#undef free + +typedef struct _alloc_node +{ + char func[150]; + char file[150]; + int line; + int size; + void* pointer; + struct _alloc_node *next; +}alloc_node_t; + + +static alloc_node_t *alloc_first = NULL; +static alloc_node_t *alloc_last = NULL; + +void* _mem_alloc(const char* func, const char* file, int line, size_t size) +{ + + int i = strlen(file)-1; + + alloc_node_t *node = (alloc_node_t*)malloc(sizeof(alloc_node_t)); + strcpy(node->func, func); + while (i>0 && file[i]!='\\')i--; + strcpy(node->file, (file[i]!='\\')?file:(file+i+1)); + node->line = line; + node->size = size; + node->pointer = malloc(size); + node->next = NULL; + + if (alloc_first == NULL) + alloc_first = alloc_last = node; + else { + alloc_last->next = node; + alloc_last = node; + } + + return node->pointer; +} + + +void _mem_free(void *p) +{ + alloc_node_t *node = alloc_first; + + while (node) { + if (node->pointer == p) { + free(p); + node->pointer = NULL; + return; + } + node = node->next; + } +} + + +void _mem_report() +{ + alloc_node_t *tmp, *node = alloc_first; + printf("****************** String Report **********************\n"); + + while (node) { + if (node->pointer) { + fprintf(stdout, "[%s:%d] \t%s()\t%d bytes\n", + node->file, node->line, node->func, node->size); + } + tmp = node->next; + free(node); + node = tmp; + } + printf("****************** End Report **********************\n"); +} + + + -- cgit v1.1-32-gdbae