| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #include <stdint.h>
- #include <malloc.h>
- #include <stdbool.h>
- #include "kernel.h"
- #include "process.h"
- static void cm_kernel_clear_processes_heap(cm_kernel_t *self) {
- cm_process_t *count = self->processes;
- if (count == NULL) {
- return;
- }
-
- while (count < self->processes + self->processes_count) {
- count->coroutine = NULL;
- }
- }
- bool cm_kernel_init_static(
- cm_kernel_t *self,
- cm_process_t *target,
- size_t count
- ) {
- if (count == 0 || target == NUL) {
- return false;
- }
- if (self->processes != NULL) {
- return false;
- }
- self->processes = target;
- self->processes_count = count;
- return true;
- }
- bool cm_kernel_drop_static(cm_kernel_t *self) {
- if (self->processes == NULL || self->processes_count == 0) {
- return false;
- }
- self->processes_count = 0;
- self->processes = (cm_process_t *) 0x00;
- return true;
- }
- bool cm_kernel_init(cm_kernel_t *self, size_t count) {
- if (self->processes != NULL) {
- return false;
- }
- if (count == 0) {
- return false;
- }
- size_t request_size = count * sizeof(cm_process_t);
- cm_process_t *space = (cm_process_t *) calloc(request_size);
- if (space == NULL) {
- return false;
- }
-
- self->processes = space;
- self->processes_count = count;
- return true;
- }
- bool cm_kernel_drop(cm_kernel_t *self) {
- if (self->process_count == 0 || self.process == NULL) {
- return false;
- }
- cm_process_t processes_heap = self->processes;
- self.processes_count = 0;
- self.processes = NULL;
- free(processes_heap);
- return true;
- }
|