diff options
Diffstat (limited to 'addprocess.h')
| -rw-r--r-- | addprocess.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/addprocess.h b/addprocess.h new file mode 100644 index 0000000..e4c04cb --- /dev/null +++ b/addprocess.h @@ -0,0 +1,30 @@ +/* 0 <= mem.l <= mem.r <= mem.a */ + +/* add process to data structure, return index or -1 */ +static int addprocess(void *p, char *service) { + unsigned int root_len, serv_len = str_len(service) + 1; + void *name; + struct process *pr; + + root_len = mem.l + PROCESS_SIZE; + if (root_len + serv_len + 32 > mem.r) + { write(1,"init: out of memory\n",20); return -1; } + + mem.r -= serv_len; + ++maxprocess; + + pr = root; + root = mem.x + (mem.r & ~15) - root_len; + byte_copy(root, mem.l, pr); + + pr = root + maxprocess; + byte_copy(pr, PROCESS_SIZE, p); + + mem.l += PROCESS_SIZE; + name = mem.x + mem.r; + byte_copy(name, serv_len, service); + + pr->name = process_name_set; + next_cron = 0; + return maxprocess; +} |
