//递归方式
int Search_Bin(SStable ST,KeyType key,int low,int high)
{

	mid=(low+high)/2;
	if(EQ(key,ST.elem[mid].key))	return mid;
	else if(LT(key,ST.elem[mid].key))	Search_Bin(ST,key,low,mid-1);
	else Search_Bin(ST,key,mid+1,high);
}
示例#2
0
文件: bbsman.c 项目: bmybbs/bmybbs
int
do_set(char *dirptr, int size, char *file, int flag, char *board)
{
	char path[256], buf[256];
	struct fileheader *f;
	int om, og, nm, ng, filetime;
	int start;
	int total = size / sizeof(struct fileheader);
	filetime = atoi(file + 2);
	sprintf(path, "boards/%s/%s", board, file);

	start = Search_Bin(dirptr, filetime,0 , total - 1);
	if (start >= 0) {
		f = (struct fileheader*)(dirptr + start * sizeof(struct fileheader));
		om = f->accessed & FH_MARKED;
		og = f->accessed & FH_DIGEST;
		f->accessed |= flag;
		if (flag == 0) 
			f->accessed = 0;
		nm = f->accessed & FH_MARKED;
		ng = f->accessed & FH_DIGEST;
		printf("<tr><td>%s<td>标题:%s<td>标记成功.\n",
		       fh2owner(f), nohtml(f->title));
		buf[0] = 0;
		if ((!om) && (nm))
			snprintf(buf, 256, "%s mark %s %s %s",
				 currentuser.userid, board,
				 fh2owner(f), f->title);
		if ((om) && (!nm))
			snprintf(buf, 256, "%s unmark %s %s %s",
				 currentuser.userid, board,
				 fh2owner(f), f->title);
		if ((!og) && (ng))
			snprintf(buf, 256, "%s digest %s %s %s",
				 currentuser.userid, board,
				 fh2owner(f), f->title);
		if ((og) && (!ng))
			snprintf(buf, 256, "%s undigest %s %s %s",
				 currentuser.userid, board,
				 fh2owner(f), f->title);
		if (buf[0] != 0)
			newtrace(buf);
		return 0;
	}
	printf("<td><td><td>%s<td>文件不存在.\n", file);
	return -1;
}