⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adbanner.c

📁 打魔兽战网的都知道他是什么
💻 C
📖 第 1 页 / 共 2 页
字号:
    if (!head)	return NULL;        LIST_TRAVERSE_CONST(head,curr)    {        if (!(temp = elem_get_data(curr)))	{	    eventlog(eventlog_level_error,__FUNCTION__,"found NULL adbanner in list");	    continue;	}	if (temp->id==id && (temp->client == 0 || temp->client == clienttag))	    return temp;    }        return NULL;}/* * Dizzy: maybe we should use a temporary list, right now we parse the list for * 2 times. It should not matter for servers without more than 20 ads :)*/static t_adbanner * adbannerlist_get_random(t_list const * head, t_clienttag client){    t_elem const * curr;    t_adbanner *   temp;    unsigned int ccount, ocount, pos;    if (!head)	return NULL;    ocount = 0; ccount = 0;    LIST_TRAVERSE_CONST(head,curr)    {        if (!(temp = elem_get_data(curr)))	{	    eventlog(eventlog_level_error,__FUNCTION__,"found NULL adbanner in list");	    continue;	}	if ((adbanner_get_client(temp) == client))	    ccount++;	else if ((adbanner_get_client(temp) == 0))	    ocount++;    }    if (ccount) {	pos = ((unsigned int)rand())%ccount;	ccount = 0;	LIST_TRAVERSE_CONST(head,curr)	{    	    if (!(temp = elem_get_data(curr))) continue;	    if ((adbanner_get_client(temp) == client))		if (ccount++ == pos) return temp;	}	eventlog(eventlog_level_error,__FUNCTION__,"found client ads but couldnt locate random chosed!");    } else if (ocount) {	pos = ((unsigned int)rand())%ocount;	ocount = 0;	LIST_TRAVERSE_CONST(head,curr)	{    	    if (!(temp = elem_get_data(curr))) continue;	    if ((adbanner_get_client(temp) == 0))		if (ocount++ == pos) return temp; 	}	eventlog(eventlog_level_error,__FUNCTION__,"couldnt locate random chosed!");    }    return NULL;}static int adbannerlist_insert(t_list * head, unsigned int * count, char const * filename, unsigned int delay, char const * link, unsigned int next_id, char const * client){    t_adbanner * ad;    unsigned int id;    char *       ext;    bn_int       bntag;        assert(head != NULL);    assert(count != NULL);    assert(filename != NULL);    assert(link != NULL);    if (strlen(filename)<7)    {	eventlog(eventlog_level_error,__FUNCTION__,"got bad ad filename \"%s\"",filename);	return -1;    }        ext = xmalloc(strlen(filename));        if (sscanf(filename,"%*c%*c%x.%s",&id,ext)!=2)    {	eventlog(eventlog_level_error,__FUNCTION__,"got bad ad filename \"%s\"",filename);	xfree(ext);	return -1;    }        if (strcasecmp(ext,"pcx")==0)        bn_int_tag_set(&bntag,EXTENSIONTAG_PCX);    else if (strcasecmp(ext,"mng")==0)	bn_int_tag_set(&bntag,EXTENSIONTAG_MNG);    else if (strcasecmp(ext,"smk")==0)        bn_int_tag_set(&bntag,EXTENSIONTAG_SMK);    else    {	eventlog(eventlog_level_error,__FUNCTION__,"unknown extension on filename \"%s\"",filename);	xfree(ext);	return -1;    }    xfree(ext);        if (!(ad = adbanner_create(id,next_id,delay,bntag,filename,link,client)))    {	eventlog(eventlog_level_error,__FUNCTION__,"could not create ad");	return -1;    }        list_prepend_data(head,ad);    (*count)++;        return 0;}extern int adbannerlist_create(char const * filename){    FILE *          fp;    unsigned int    line;    unsigned int    pos;    unsigned int    len;    char *          buff;    char *          name;    char *          when;    char *          link;    char *	    client;    char *          temp;    unsigned int    delay;    unsigned int    next_id;        if (!filename)    {        eventlog(eventlog_level_error,__FUNCTION__,"got NULL filename");        return -1;    }        adbannerlist_init_head = list_create();    adbannerlist_start_head = list_create();    adbannerlist_norm_head = list_create();        if (!(fp = fopen(filename,"r")))    {        eventlog(eventlog_level_error,__FUNCTION__,"could not open adbanner file \"%s\" for reading (fopen: %s)",filename,pstrerror(errno));	list_destroy(adbannerlist_norm_head);	list_destroy(adbannerlist_start_head);	list_destroy(adbannerlist_init_head);	adbannerlist_init_head=adbannerlist_start_head=adbannerlist_norm_head = NULL;        return -1;    }        for (line=1; (buff = file_get_line(fp)); line++)    {        for (pos=0; buff[pos]=='\t' || buff[pos]==' '; pos++);        if (buff[pos]=='\0' || buff[pos]=='#')        {            continue;        }        if ((temp = strrchr(buff,'#')))        {	    unsigned int endpos;	                *temp = '\0';	    len = strlen(buff)+1;            for (endpos=len-1;  buff[endpos]=='\t' || buff[endpos]==' '; endpos--);            buff[endpos+1] = '\0';        }        len = strlen(buff)+1;        name = xmalloc(len);        when = xmalloc(len);        link = xmalloc(len);        client = xmalloc(len);		if (sscanf(buff," \"%[^\"]\" %[a-z] %u \"%[^\"]\" %x \"%[^\"]\"",name,when,&delay,link,&next_id,client)!=6)	    {		eventlog(eventlog_level_error,__FUNCTION__,"malformed line %u in file \"%s\"",line,filename);		xfree(client);		xfree(link);		xfree(name);         	xfree(when);		continue;	    }		if (strcmp(when,"init")==0)	    adbannerlist_insert(adbannerlist_init_head,&adbannerlist_init_count,name,delay,link,next_id,client);	else if (strcmp(when,"start")==0)	    adbannerlist_insert(adbannerlist_start_head,&adbannerlist_start_count,name,delay,link,next_id,client);	else if (strcmp(when,"norm")==0)	    adbannerlist_insert(adbannerlist_norm_head,&adbannerlist_norm_count,name,delay,link,next_id,client);	else	    eventlog(eventlog_level_error,__FUNCTION__,"when field has unknown value on line %u in file \"%s\"",line,filename);		xfree(client);	xfree(link);	xfree(name);        xfree(when);    }        file_get_line(NULL); // clear file_get_line buffer    if (fclose(fp)<0)	eventlog(eventlog_level_error,__FUNCTION__,"could not close adbanner file \"%s\" after reading (fclose: %s)",filename,pstrerror(errno));    return 0;}extern int adbannerlist_destroy(void){    t_elem *     curr;    t_adbanner * ad;        if (adbannerlist_init_head)    {	LIST_TRAVERSE(adbannerlist_init_head,curr)	{	    if (!(ad = elem_get_data(curr)))		eventlog(eventlog_level_error,__FUNCTION__,"found NULL adbanner in init list");	    else		adbanner_destroy(ad);	    list_remove_elem(adbannerlist_init_head,&curr);	}	list_destroy(adbannerlist_init_head);	adbannerlist_init_head = NULL;	adbannerlist_init_count = 0;    }        if (adbannerlist_start_head)    {	LIST_TRAVERSE(adbannerlist_start_head,curr)	{	    if (!(ad = elem_get_data(curr)))		eventlog(eventlog_level_error,__FUNCTION__,"found NULL adbanner in start list");	    else		adbanner_destroy(ad);	    list_remove_elem(adbannerlist_start_head,&curr);	}	list_destroy(adbannerlist_start_head);	adbannerlist_start_head = NULL;	adbannerlist_start_count = 0;    }        if (adbannerlist_norm_head)    {	LIST_TRAVERSE(adbannerlist_norm_head,curr)	{	    if (!(ad = elem_get_data(curr)))		eventlog(eventlog_level_error,__FUNCTION__,"found NULL adbanner in norm list");	    else		adbanner_destroy(ad);	    list_remove_elem(adbannerlist_norm_head,&curr);	}	list_destroy(adbannerlist_norm_head);	adbannerlist_norm_head = NULL;	adbannerlist_norm_count = 0;    }        return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -