aboutsummaryrefslogtreecommitdiff
path: root/addprocess.h
diff options
context:
space:
mode:
Diffstat (limited to 'addprocess.h')
-rw-r--r--addprocess.h30
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;
+}