proc.c - vx32 - Local 9vx git repository for patches.
(HTM) git clone git://r-36.net/vx32
(DIR) Log
(DIR) Files
(DIR) Refs
---
proc.c (941B)
---
1 #include <stdlib.h>
2 #include <errno.h>
3 #include <assert.h>
4
5 #include "vx32.h"
6 #include "vx32impl.h"
7
8 static vxproc *procs[VXPROCSMAX];
9
10 vxproc *vxproc_alloc(void)
11 {
12 // Find an available process number
13 int pno;
14 for (pno = 0; ; pno++) {
15 if (pno == VXPROCSMAX) {
16 errno = EAGAIN;
17 return NULL;
18 }
19 if (procs[pno] == 0)
20 break;
21 }
22
23 // Allocate the vxproc structure
24 vxproc *pr = calloc(1, sizeof(vxproc));
25 if (pr == NULL) {
26 errno = ENOMEM;
27 return NULL;
28 }
29 pr->vxpno = pno;
30
31 // Create the process's emulation state
32 if (vxemu_init(pr) < 0)
33 return NULL;
34
35 procs[pno] = pr;
36 return pr;
37 }
38
39 void vxproc_free(vxproc *proc)
40 {
41 assert(procs[proc->vxpno] == proc);
42 procs[proc->vxpno] = NULL;
43
44 // Free the emulation state
45 if (proc->emu != NULL)
46 vxemu_free(proc->emu);
47
48 // Free the process memory.
49 if (proc->mem != NULL)
50 vxmem_free(proc->mem);
51
52 free(proc);
53 }
54
55 void vxproc_flush(vxproc *proc)
56 {
57 vxemu_flush(proc->emu);
58 }