diff options
| author | Klaatu <[email protected]> | 2015-05-17 15:33:21 +1200 |
|---|---|---|
| committer | Klaatu <[email protected]> | 2015-05-17 15:33:21 +1200 |
| commit | b0de699679e8f1e39af847ed172d1ba605b4370c (patch) | |
| tree | 01dac00471d61f727394e508c613b29cff0ceae5 /addprocess.h | |
bulk upload of source
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; +} |
