home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
534.lha
/
vmalloc_v1.2
/
vinit.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-08-08
|
2KB
|
72 lines
/*
* Code to initialise the VMarray.
*
* 1) Open an empty disk file.
* 2) Initialise a structure holding a pointer to the free list, and
* the file handle.
* 3) Initialise the free list with the special dummy entry containing a
* pointer to the end of the file, and a maximum size of zero.
*/
#include "vm.h"
struct VM_Construct *
VM_Open(char *VM_Filename) {
BPTR VM_File ;
struct VM_Construct *VM_C ;
struct VM_FreeList *VM_F ;
VM_File = TOpen(VM_Filename,MODE_NEWFILE) ;
if (!VM_File)
return NULL ;
VM_C = (struct VM_Construct *)
TMemAlloc( sizeof(struct VM_Construct), MEMF_PUBLIC) ;
if (!VM_C) {
FreeTrackedItem((void *)VM_File) ;
return NULL ;
}
VM_C->VM_File = VM_File ;
VM_C->VM_FileName = VM_Filename ;
VM_C->VM_Length = 0 ;
VM_F = (struct VM_FreeList *)
TMemAlloc( sizeof(struct VM_FreeList), MEMF_PUBLIC) ;
if (!VM_F) {
FreeTrackedItem((void *)VM_File) ;
FreeTrackedItem(VM_C) ;
return NULL ;
}
VM_F->VM_Next = NULL ;
VM_F->VM_Offset = 0 ;
VM_F->VM_Length = 0 ;
VM_C->VM_FreeList = VM_F ;
VM_C->VM_NumLocks = 0 ;
NewList((struct List *) &(VM_C->VM_LockList)) ;
return VM_C ;
}
ULONG
VM_Close(struct VM_Construct *VM_C) {
ULONG Err ;
if (VM_C) {
if (VM_C->VM_NumLocks) {
Err = VM_FlushLockList(VM_C) ;
if (Err)
return -1 ;
}
VM_FlushFreeList(&(VM_C->VM_FreeList)) ;
FreeTrackedItem((void *)VM_C->VM_File) ;
DeleteFile(VM_C->VM_FileName) ;
VM_C->VM_File = NULL ;
FreeTrackedItem(VM_C) ;
}
}