source: git/factory/mmalloc.c @ 9d7aaa

spielwiese
Last change on this file since 9d7aaa was 9d7aaa, checked in by Jens Schmidt <schmidt@…>, 27 years ago
#include <config.h> added git-svn-id: file:///usr/local/Singular/svn/trunk@155 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 1.9 KB
Line 
1/* emacs edit mode for this file is -*- C -*- */
2/* $Id: mmalloc.c,v 1.2 1997-04-15 09:22:55 schmidt Exp $ */
3
4/*
5$Log: not supported by cvs2svn $
6Revision 1.1  1997/03/27 10:14:25  schmidt
7spurious #include <stdio.h> removed
8
9Revision 1.0  1996/05/17 10:59:47  stobbe
10Initial revision
11
12*/
13
14#define _POSIX_SOURCE 1
15
16#include <config.h>
17
18#include <string.h>
19#include <stdlib.h>
20
21#include "memman.h"
22#include "mmprivate.h"
23
24size_t
25mmSizeL( void* adr )
26{
27    if (adr!=NULL) {
28
29        adr = (size_t*)adr-1;
30        return *(size_t*)adr;
31    }
32    return 0;
33}
34
35#ifndef MDEBUG
36
37void *
38mmAlloc( size_t size )
39{
40    size_t thesize = size + sizeof( void * );
41    size_t * dummy = (size_t*)mmAllocBlock( thesize );
42    *dummy = thesize;
43    return (void*)(dummy+1);
44}
45
46void
47mmFree( void* adr )
48{
49    if (adr!=NULL) {
50        adr = (size_t*)adr-1;
51        mmFreeBlock( adr, *(size_t*)adr );
52    }
53}
54
55void *
56mmRealloc( void* adr, size_t newsize )
57{
58    size_t oldsize = *((size_t*)(adr)-1);
59    void* newadr = mmAlloc( newsize );
60    memcpy( newadr, adr, (oldsize < newsize) ? oldsize : newsize );
61    mmFree( adr );
62    return newadr;
63}
64
65#else /* MDEBUG */
66
67void *
68mmDBAlloc( size_t size, char* fname, int lineno )
69{
70    size_t thesize = size + sizeof( void * );
71    size_t * dummy = (size_t*)mmDBAllocBlock( thesize, fname, lineno );
72    *dummy = thesize;
73    return (void*)(dummy+1);
74}
75
76void
77mmDBFree( void* adr, char* fname, int lineno )
78{
79    if (adr!=NULL) {
80        size_t l;
81        adr = (size_t*)adr-1;
82#ifdef __alpha__
83        l= (*(size_t*)((int)adr&(~7)));
84#else
85        l= (*(size_t*)((int)adr&(~3)));
86#endif
87        mmDBFreeBlock( adr,l, fname, lineno );
88    }
89}
90
91void *
92mmDBRealloc( void* adr, size_t newsize, char* fname, int lineno )
93{
94    size_t oldsize = *((size_t*)(adr)-1);
95    void* newadr = mmDBAlloc( newsize, fname, lineno );
96    memcpy( newadr, adr, (oldsize < newsize) ? oldsize : newsize );
97    mmDBFree( adr, fname, lineno );
98    return newadr;
99}
100
101#endif /* MDEBUG */
Note: See TracBrowser for help on using the repository browser.