Newer
Older
ubixos-old / src / sys / mm / copyvirtualspace.c
@fsdfs fsdfs on 10 Aug 2005 921 bytes updates + kmalloc() and kfree() stubs
#include <mm/vmm.h>
#include <ubixos/vitals.h>
#include <ubixos/spinlock.h>
#include <ubixos/kpanic.h>
#include <ubixos/sched.h>
#include <string.h>
#include <lib/kmalloc.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->pid = new->id;
			tmp2->pageAddr = tmp->pageAddr;
			tmp2->status = tmp->status;
			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;
}