Merge from ASPLOS tree.
[barrelfish] / usr / spawnd / ps.c
1 /*
2  * Copyright (c) 2009, 2011, ETH Zurich.
3  * All rights reserved.
4  *
5  * This file is distributed under the terms in the attached LICENSE file.
6  * If you do not find this file, copies can be found by writing to:
7  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8  */
9
10 #include <stdlib.h>
11 #include <stdio.h>
12 #include <string.h>
13 #include <assert.h>
14 #include <barrelfish/barrelfish.h>
15 #include <vfs/vfs.h>
16
17 #include "ps.h"
18
19 static struct ps_entry *entries[MAX_DOMAINS];
20
21 errval_t ps_allocate(struct ps_entry *entry, domainid_t *domainid)
22 {
23     for(domainid_t i = 1; i < MAX_DOMAINS; i++) {
24         if(entries[i] == NULL) {
25             entries[i] = entry;
26             *domainid = i;
27             return SYS_ERR_OK;
28         }
29     }
30
31     return SPAWN_ERR_DOMAIN_ALLOCATE;
32 }
33
34 void ps_remove(domainid_t domain_id)
35 {
36     assert(domain_id < MAX_DOMAINS);
37     entries[domain_id] = NULL;
38 }
39
40 bool ps_exists(domainid_t domain_id)
41 {
42     assert(domain_id < MAX_DOMAINS);
43     return entries[domain_id] != NULL ? true : false;
44 }
45
46 struct ps_entry *ps_get(domainid_t domain_id)
47 {
48     if(domain_id >= MAX_DOMAINS) {
49         return NULL;
50     }
51
52     return entries[domain_id];
53 }