Beispiel #1
0
heap_t *create_heap(uint32_t start, uint32_t end, uint32_t max, uint8_t supervisor, uint8_t readonly)
{
	heap_t *heap = (heap_t*) kmalloc(sizeof(heap_t));
	ASSERT((start % 0x1000 == 0));
	ASSERT((end % 0x1000 == 0));

	heap->index = place_list((type_t*) start, HEAP_INDEX_SIZE, &header_t_lessthan);
	
	start += sizeof(type_t) * HEAP_INDEX_SIZE;
	
	if ((start & 0xFFFFF000) != 0) {
		start &= 0xFFFFF000;
		start += 0x1000;
	}
	
	heap->start_address = start;
	heap->end_address = end;
	heap->max_address = max;
	heap->supervisor = supervisor;
	heap->readonly = readonly;
	
	header_t *hole = (header_t*) start;
	hole->size = end - start;
	hole->magic = HEAP_MAGIC;
	hole->is_hole = 1;
	insert_list((type_t) hole, &heap->index);
	
	return heap;
}
int cgiParser() {
	    //request call=status
	    if(!memscmp(query,"status") && uid > 0){
	        id=status();
		if(id < 0) { 
			return FALSE;
		} 

		len=snprintf(query,BLOCK-1,"<check><place>%d</place></check>",id);
		if ( id == 0 ) place_list();
	        cgiWrite(query,len); 

	    //request call=list
	    } else if(!memscmp(query,"getplace") && uid > 0){
		place_list();
	    //request call=getuser
	    } else if(!memscmp(query,"getuser") && uid > 0){
		get_user();
	    //request call=getmsg
	    } else if(!memscmp(query,"getmsg") && uid > 0){
		place_get_message();
	    //request call=fresh
	    } else if(!memscmp(query,"fresh") && uid > 0){
		get_user();
		if(uid>0) place_get_message();
	    //request call=addmsg
	    } else if(!memscmp(query,"addmsg") && !cgiFormString ("msg",query,150) && uid > 0){
		if(!memcmp(query,"/MSG ",5)) {
			place_add_private(query+5);
		} else {
			place_add_message(query);
		}
	    //request call=join
	    } else if(!memscmp(query,"join")  && !cgiFormString ("place",query,3) && uid > 0){
		id=atoi(query);
	        user_join(id);
                cgiWriteStr("<action>join</action>");
		cgiprintf("<place_id>%s</place_id>",query); 
	    //request call=logout
	    } else if(!memscmp(query,"logout") ){
		LOGOUT
		return FALSE;	
	    //request call=login
            } else if(!memscmp(query,"login")  && !cgiFormString ("login",REG_LOGIN,REG_LOGIN_SIZE)  && !cgiFormString ("password",REG_PASS,REG_PASS_SIZE)){