source: git/factory/mmalloc.c @ 84250a6

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