#include <mm/vmm.h> #include <ubixos/vitals.h> #include <ubixos/spinlock.h> #include <ubixos/kpanic.h> #include <ubixos/sched.h> #include <string.h> void mmCopyVirtualSpace(kTask_t *task, kTask_t *new) { mMap *tmp, *tmp2 , *prev; tmp = task->FirstPage; if(tmp != NULL) { tmp2 = (mMap *)kmalloc(sizeof(mMap)); new->FirstPage = tmp2; prev = NULL; } else { new->FirstPage = NULL; new->LastPage = NULL; return; } if(tmp->Next == NULL) { tmp2->Next = NULL; tmp2->Previous = NULL; new->LastPage = tmp2; } else { for(;;) { tmp2->Previous = prev; tmp2->pageAddr = tmp->pageAddr; prev = tmp2; tmp2 = (mMap *) kmalloc(sizeof(mMap)); prev->Next = tmp2; tmp = tmp->Next; if(tmp == NULL) { kfree(tmp2); prev->Next = NULL; new->LastPage = prev; break; } } } return; }