Tue, 14 Mar 2023 18:12:20 +0100
3 files changed,
23 insertions(+),
3 deletions(-)
M
include/cedos/sched/process.h
→
include/cedos/sched/process.h
@@ -64,6 +64,13 @@
//! String of arguments for the process char *args; + /* + * String buffers for name and args + * TODO: eventually move to a malloc solution + */ + char name_buf[16]; + char args_buf[128]; + //! Current state of the process. PROCESS_STATE state;
M
src/kernel/sched/sched.c
→
src/kernel/sched/sched.c
@@ -44,9 +44,6 @@ PHYS_ADDR page_dir = create_empty_page_dir();
// set process context PROCESS *p = get_slot(); - p->name = name; - p->args = args; - // TODO: copy name and args instead of linking! p->page_dir = page_dir; p->eip = sched_dispatcher; p->ebp = USER_STACK;@@ -54,6 +51,13 @@ p->esp = USER_STACK - sizeof(SCHED_FRAME);
p->eflags = PROCESS_STD_EFLAGS; p->entry = 0xDEADBEEF; p->state = PSTATE_CREATED; + + // TODO: implement with malloc + strcpy(p->name_buf, name); + strcpy(p->args_buf, args); + + p->name = &(p->name_buf); + p->args = &(p->args_buf); PROCESS_ID pid = add_process(p, current_pid);
M
src/kernel/string.c
→
src/kernel/string.c
@@ -14,6 +14,15 @@ }
return destination; } +char *strcpy(char *destination, const char *source) { + int i = 0; + while (source[i]) { + destination[i] = source[i]; + i++; + } + return destination; +} + void *memset (void *ptr, int value, size_t num) { for (uint32_t i = 0; i < num; i++) { ((uint8_t*)ptr)[i] = (uint8_t)value;