コード例 #1
0
ファイル: table.c プロジェクト: Maximus5/evil-programmers
int tableSet(PTable t,const pchar Name,const pchar Value)
{
  PTablePage p=t->pFirst,q;
  int idx0,idx=0,res=0;
  p=tableFind(p,&idx,Name);
  if(p)
  {
    q=p;idx0=idx;
    while((p=tableFind(p,&idx,Name)))
    {
      if(t->iFlags&TABLE_FLAG_ALLOCNAME)xfree(p->Values[idx].szName);
      if(t->iFlags&TABLE_FLAG_ALLOCVALUE)xfree(p->Values[idx].szValue);
      if(idx!=p->iCount-1)memmove(&p->Values[idx],&p->Values[idx+1],sizeof(SAttr)*(p->iCount-idx-1));
      p->iCount--;
      t->iCount--;
      res++;
    }
    if(res)t->iHoles++;
    if(t->iFlags&TABLE_FLAG_ALLOCVALUE)xfree(q->Values[idx].szValue);
    if(xstrlen(q->Values[idx0].szValue)>=xstrlen(Value))
      xstrcpy(q->Values[idx0].szValue,Value);
    else
      q->Values[idx0].szValue=xstrdup(t->pPool,Value);
    return t->iCount;
  }else return tableAdd(t,Name,Value);
}
コード例 #2
0
void looking (_node** tree, char** grid, char* string, stack* stack, table* allWords)
{
    int f = searchDictionary(tree,string);
    int i;

    if (f != -1)
    {
        if (f) tableAdd(allWords,string);
        stackPrint(stack);
        neighbors* n = getNeighbors (stackTop(stack));

        for (i = 0; i < neighSize(n); ++i)
        {
            position* newPos = neighGet(n,i);
            if (!stackFind(stack,newPos))
            {
                stackPush(stack,newPos);
                char newString[strlen(string)+1];
                strcpy(newString,string);
                strcat(newString,&(grid[newPos->x][newPos->y]));

                looking(tree,grid,newString,stack,allWords);
            }
        }
    }
}
コード例 #3
0
ファイル: xmlite.c プロジェクト: Maximus5/evil-programmers
static int xmlParseTag(void* Pool,PXMLNode x,PXMLNode* p,pchar src,int i)
{
  int st,j,q;
  for(;;)
  {
    i=xmlSkipSpace(src,i);CHK;
    if(src[i]=='/')
    {
      if(src[i+1]!='>')return 0;
      x->eType=xmlEmpty;
      return i+2;
    }
    if(src[i]=='>')
    {
      *p=x;
      return i+1;
    }
    st=i;
    i=xmlGetWordEnd(src,i);CHK;
    if(src[i]!='=')return 0;
    if(src[i+1]!='"' && src[i+1]!='\'')return 0;
    q=src[i+1];
    src[i]=0;
    i+=2;
    j=i;
    i=xmlSkipTill(src,i,(xchar)q);
    if(i==-1)
    {
      src[j-2]='=';
      return 0;
    }
    if(x->tAttrs==NULL)x->tAttrs=tableNew(Pool,TABLE_FLAG_ALLOCNAME);
    tableAdd(x->tAttrs,src+st,xmlSubst(xstrndup(Pool,src+j,i-j)));
    src[j-2]='=';
    i++;
  }
//  return i;
}
コード例 #4
0
ファイル: manager.c プロジェクト: ffbli666/D2MCE
int main_imanager_req(){
	int i, j;
	int index;
	void *buf;
	unsigned int offset;
	unsigned int users_count;
	unsigned int src_node;
	unsigned int seq_number;
	unsigned int node_id;
	struct sm_header *find;
	char *sm_name;
	if(g_group.coordinator.main_id == g_group.node_id)
		return 1;
	//max 33 mutex
	buf = mem_malloc(MAIN_IMAIN_SIZE);
	((struct request_header*)buf)->msg_type = MSG_IMAIN_MANAGER;
	sendRecv(g_group.coordinator.main_id, buf, sizeof(struct request_header),
			buf, MSG_IMAIN_MANAGER);
	if(g_group.sm_table == NULL){
		g_group.sm_table = hashTableCreate(SM_HASH_SIZE);
	}
	
	src_node = ((struct imain_reply*)buf)->req.src_node;
	seq_number = ((struct imain_reply*)buf)->req.src_seq_number;
	offset = sizeof(struct imain_reply);
	//copy share memory data
	for(i=0; i<((struct imain_reply*)buf)->sm_num; i++){
		//mutex name
		sm_name = malloc(((struct main_sm_info*)(buf+offset))->name_len);
		memcpy(sm_name, buf+offset+sizeof(struct main_sm_info), ((struct main_sm_info*)(buf+offset))->name_len);
		sm_name[((struct main_sm_info*)(buf+offset))->name_len] = 0;
		printf("%s", sm_name);
		//search mutex
		find = hashTableSearch(g_group.sm_table, ((struct main_sm_info*)(buf+offset))->hash_id, sm_name);
		if(find == NULL){
			//create new
			find = createSM(((struct main_sm_info*)(buf+offset))->hash_id, sm_name, 
						((struct main_sm_info*)(buf+offset))->home_node, ((struct main_sm_info*)(buf+offset))->size);
			hashTableInsert(g_group.sm_table, (struct hashheader*)find);
		}
		//copy 
		find->count = ((struct main_sm_info*)(buf+offset))->count;
		//copy queue info
		users_count = ((struct main_sm_info*)(buf+offset))->users_count;
		offset += sizeof(struct main_sm_info)+strlen(sm_name);
		if(find->users == NULL)
			find->users = tableCreate(MAX_NODE_NUM, sizeof(unsigned int));
		for(j=0; j< users_count; j++){
			node_id = *((unsigned int*)(buf+offset));
			if(searchNode(find->users, src_node)==-1){
				index = tableGetEmpty(find->users);
				if(index == -1)
					return -1;
				tableAdd(find->users, (void*)&src_node, index);
			}
			offset += sizeof(unsigned int);
		}
	}	
	g_group.coordinator.main_id = g_group.node_id;
	((struct request_header*)buf)->msg_type = MSG_IMAIN_READY;
	((struct request_header*)buf)->seq_number = seq_number;
	sendTo(src_node ,buf, sizeof(struct request_header));
	mem_free(buf);
	return 1;
}