Back to index

avfs  1.0.1
alloc.c
Go to the documentation of this file.
00001 /*
00002     AVFS: A Virtual File System Library
00003     Copyright (C) 1998-2001  Miklos Szeredi <miklos@szeredi.hu>
00004 
00005     This program can be distributed under the terms of the GNU GPL.
00006     See the file COPYING.
00007 */
00008 
00009 #if 1
00010 #include "avfs.h"
00011 
00012 #include <stdio.h>
00013 #include <stdlib.h>
00014 
00015 static int malloctr;
00016 static AV_LOCK_DECL(mallock);
00017 
00018 void av_check_malloc()
00019 {
00020     int ctr;
00021 
00022     AV_LOCK(mallock);
00023     ctr = malloctr;
00024     AV_UNLOCK(mallock);
00025 
00026     if(ctr != 0) 
00027         av_log(AVLOG_WARNING, "Unfreed memory remaining (%i)", ctr);
00028     else
00029         av_log(AVLOG_DEBUG, "No unfreed memory remaining");
00030 }
00031 
00032 static void out_of_memory()
00033 {
00034     av_log(AVLOG_ERROR, "Out of memory");
00035     fprintf(stderr, "Out of memory\n");
00036     exit(127);
00037 }
00038 
00039 void *av_malloc(avsize_t nbyte)
00040 {
00041     void *p;
00042 
00043     AV_LOCK(mallock);
00044     malloctr ++;
00045     AV_UNLOCK(mallock);
00046 
00047     if(nbyte == 0)
00048         nbyte = 1;
00049 
00050     p = malloc(nbyte);
00051     if(p == NULL) 
00052         out_of_memory();
00053     
00054     return p;
00055 }
00056 
00057 void *av_calloc(avsize_t nbyte)
00058 {
00059     void *p;
00060 
00061     AV_LOCK(mallock);
00062     malloctr ++;
00063     AV_UNLOCK(mallock);
00064     
00065     if(nbyte == 0)
00066         nbyte = 1;
00067     
00068     p = calloc(nbyte, 1);
00069     if(p == NULL)
00070        out_of_memory();
00071 
00072     return p;
00073 }
00074 
00075 void *av_realloc(void *ptr, avsize_t nbyte)
00076 {
00077     void *p;
00078     
00079     AV_LOCK(mallock);
00080     if(ptr == 0)
00081         malloctr ++;
00082     else if(nbyte == 0)
00083         malloctr --;
00084     AV_UNLOCK(mallock);
00085 
00086     if(ptr == NULL && nbyte == 0)
00087         nbyte = 1;
00088 
00089     p = realloc(ptr, nbyte);
00090     if(p == NULL)
00091         out_of_memory();
00092   
00093     return p;
00094 }
00095 
00096 void av_free(void *ptr)
00097 {
00098     AV_LOCK(mallock);
00099     if(ptr != NULL)
00100         malloctr --;
00101     AV_UNLOCK(mallock);
00102 
00103     if(ptr != NULL)
00104        free(ptr);
00105 }
00106 #endif