aboutsummaryrefslogtreecommitdiff
path: root/src/memory.c
blob: ca7e6f512d814338bd4a776432919c54b3b8a394 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. 
 *
 * See the LICENSE file
 *
 * The origin of this software must not be misrepresented, either by
 * explicit claim or by omission.  Since few users ever read sources,
 * credits must appear in the documentation.
 *
 * date: Sat Mar 30 14:25:25 GMT 2002 
 *
 * -- memory functions
 */
#include "memory.h"

struct memrequest {
  char *ptr;
  struct memrequest *next;
};

/*
 *  Add a buffer to memrequest list
 */
void *__ILWS_add_buffer(struct memrequest *list,unsigned int size) {
  struct memrequest *tmem;
  if(size==0) {
    return NULL;
  };
  if(list!=NULL) {
    tmem=list;
  }else {
    return NULL;
  };
  while(tmem->next!=NULL)tmem=tmem->next;
  tmem->next=__ILWS_malloc(sizeof(struct memrequest));
  if(tmem->next==NULL) return NULL;           // ERROR
  tmem->next->ptr=__ILWS_malloc(size);
  tmem->next->next=NULL;
  return tmem->next->ptr;
}

/*
 * Initialize memrequest list of buffers
 */
struct memrequest *__ILWS_init_buffer_list() {
  struct memrequest *newlist;
  newlist=__ILWS_malloc(sizeof(struct memrequest));
  if(newlist==NULL) 
    return NULL;  
  newlist->next=NULL;
  newlist->ptr=NULL;
  return newlist;
}

/*
 * Delete memrequest buffer node (free)
 */
void __ILWS_delete_buffer(struct memrequest *mem) {
  __ILWS_free(mem->ptr);
  __ILWS_free(mem);
}

/*
 * Delete memrequest next buffer
 */
void __ILWS_delete_next_buffer(struct memrequest *mem) {
  struct memrequest *tmem;
  tmem=mem->next;
  mem->next=mem->next->next;
  __ILWS_delete_buffer(tmem);
}

/*
 * Delete whole memrequest buffer list
 */
void __ILWS_delete_buffer_list(struct memrequest *list) {
  struct memrequest *tmem=list;
  if (tmem==NULL) 
    return;
  
  while(tmem->next!=NULL) {
    __ILWS_delete_next_buffer(tmem);
  };
  __ILWS_delete_buffer(tmem);
}