亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? news.c

?? 打魔獸戰網的都知道他是什么
?? C
字號:
/* * Copyright (C) 2000 Alexey Belyaev (spider@omskart.ru) * Copyright (C) 2004 Dizzy  * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */#define NEWS_INTERNAL_ACCESS#include "common/setup_before.h"#include <stdio.h>#ifdef HAVE_STDDEF_H# include <stddef.h>#else# ifndef NULL#  define NULL ((void *)0)# endif#endif#ifdef STDC_HEADERS# include <stdlib.h>#else# ifdef HAVE_MALLOC_H#  include <malloc.h># endif#endif#include "compat/strtoul.h"#ifdef HAVE_STRING_H# include <string.h>#else# ifdef HAVE_STRINGS_H#  include <strings.h># endif#endif#ifdef HAVE_ERRNO_H# include <errno.h>#endif#ifdef HAVE_TIME_H# include <time.h>#endif#ifdef HAVE_ASSERT_H# include <assert.h>#endif#include "compat/strchr.h"#include "compat/strdup.h"#include "compat/strerror.h"#include "common/eventlog.h"#include "common/elist.h"#include "common/util.h"#include "common/proginfo.h"#include "common/xalloc.h"#include "news.h"#include "common/setup_after.h"static t_elist news_head;static int _news_parsetime(char *buff, struct tm *date, unsigned line){    char *p;    date->tm_hour= 6;     date->tm_min = 6;  // need to set non-zero values or else date is displayed wrong    date->tm_sec = 6;      date->tm_isdst=-1;    if (!(p = strchr(buff,'/'))) return -1;    *p = '\0';    date->tm_mon = atoi(buff) - 1;    if ((date->tm_mon<0) || (date->tm_mon>11)) {	eventlog(eventlog_level_error,__FUNCTION__,"found invalid month (%i) in news date. (format: {MM/DD/YYYY}) on line %u",date->tm_mon,line);    }    buff = p + 1;    if (!(p = strchr(buff,'/'))) return -1;    *p = '\0';    date->tm_mday = atoi(buff);    if ((date->tm_mday<1) || (date->tm_mday>31)) {	eventlog(eventlog_level_error,__FUNCTION__,"found invalid month day (%i) in news date. (format: {MM/DD/YYYY}) on line %u",date->tm_mday,line);	return -1;    }    buff = p + 1;    if (!(p = strchr(buff,'}'))) return -1;    *p = '\0';    date->tm_year=atoi(buff)-1900;    if (date->tm_year>137) //limited due to 32bit t_time    {	eventlog(eventlog_level_error,__FUNCTION__,"found invalid year (%i) (>2037) in news date.  on line %u",date->tm_year+1900,line);	return -1;    }    return 0;}static void _news_insert_index(t_news_index *ni, const char *buff, unsigned len, int date_set){    t_elist *curr;    t_news_index *cni;    elist_for_each(curr,&news_head) {	cni = elist_entry(curr,t_news_index,list);	if (cni->date <= ni->date) break;    }    if (curr != &news_head && cni->date == ni->date) {	if (date_set == 1)	    eventlog(eventlog_level_warn,__FUNCTION__,"found another news item for same date, trying to join both");	if ((lstr_get_len(&cni->body) + len +2) > 1023)	    eventlog(eventlog_level_error,__FUNCTION__,"failed in joining news, cause news too long - skipping");	else {	    lstr_set_str(&cni->body,xrealloc(lstr_get_str(&cni->body),lstr_get_len(&cni->body) + len + 1 + 1));	    strcpy(lstr_get_str(&cni->body) + lstr_get_len(&cni->body), buff);	    *(lstr_get_str(&cni->body) + lstr_get_len(&cni->body) + len) = '\n';	    *(lstr_get_str(&cni->body) + lstr_get_len(&cni->body) + len + 1) = '\0';	    lstr_set_len(&cni->body,lstr_get_len(&cni->body) + len + 1);	}	xfree((void *)ni);    } else {	/* adding new index entry */	lstr_set_str(&ni->body,xmalloc(len + 2));	strcpy(lstr_get_str(&ni->body),buff);	strcat(lstr_get_str(&ni->body),"\n");	lstr_set_len(&ni->body,len + 1);	elist_add_tail(curr,&ni->list);    }}static void _news_insert_default(void){    const char * deftext = "No news today";    t_news_index	*ni;    ni = (t_news_index*)xmalloc(sizeof(t_news_index));    ni->date = time(NULL);    _news_insert_index(ni, deftext, strlen(deftext), 1);}extern int news_load(const char *filename){    FILE * 		fp;    unsigned int	line;    unsigned int	len;    char		buff[256];    struct tm		date;    char		date_set;    t_news_index	*ni;    elist_init(&news_head);    date_set = 0;    if (!filename) {	eventlog(eventlog_level_error, __FUNCTION__,"got NULL fullname");	return -1;    }    if ((fp = fopen(filename,"rt"))==NULL) {	eventlog(eventlog_level_warn, __FUNCTION__,"can't open news file");	_news_insert_default();	return 0;    }    for (line=1; fgets(buff,sizeof(buff),fp); line++) {	len = strlen(buff);	while(len && (buff[len - 1] == '\n' || buff[len - 1] == '\r')) len--;	if (!len) continue; /* empty line */	buff[len] = '\0';	if (buff[0]=='{') {	    if (_news_parsetime(buff + 1,&date, line)) {		eventlog(eventlog_level_error,__FUNCTION__,"error parsing news date on line %u",line);		return -1;	    }	    date_set = 1;	} else {	    ni = (t_news_index*)xmalloc(sizeof(t_news_index));	    if (date_set)		ni->date = mktime(&date);	    else {		ni->date = time(NULL);		eventlog(eventlog_level_warn,__FUNCTION__,"(first) news entry seems to be missing a timestamp, please check your news file on line %u",line);	    }	    _news_insert_index(ni,buff,len,date_set);	    date_set = 2;	}    }    fclose(fp);    if (elist_empty(&news_head)) {	eventlog(eventlog_level_warn,__FUNCTION__,"no news configured");	_news_insert_default();    }    return 0;}/* Free up all of the elements in the linked list */extern int news_unload(void){    t_elist *		curr, *save;    t_news_index * 	ni;    elist_for_each_safe(curr,&news_head,save)    {	ni = elist_entry(curr,t_news_index,list);	elist_del(&ni->list);	xfree((void *)lstr_get_str(&ni->body));	xfree((void *)ni);    }    elist_init(&news_head);    return 0;}extern unsigned int news_get_lastnews(void){    if (elist_empty(&news_head)) return 0;    return ((elist_entry(news_head.next,t_news_index,list))->date);}extern unsigned int news_get_firstnews(void){    if (elist_empty(&news_head)) return 0;    return ((elist_entry(news_head.prev,t_news_index,list))->date);}extern void news_traverse(t_news_cb cb, void *data){    t_elist *curr;    t_news_index *cni;    assert(cb);    elist_for_each(curr,&news_head)    {	cni = elist_entry(curr,t_news_index,list);	if (cb(cni->date,&cni->body,data)) break;    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲欧美在线| 欧美videos中文字幕| 亚洲伦理在线精品| 99久久婷婷国产综合精品| 国产精品高潮呻吟久久| 9i看片成人免费高清| 亚洲视频一区二区在线观看| 在线日韩一区二区| 亚洲va国产天堂va久久en| 911精品国产一区二区在线| 偷拍与自拍一区| 亚洲精品一区二区三区99| 国产馆精品极品| 亚洲特黄一级片| 884aa四虎影成人精品一区| 久久精品国产亚洲a| 亚洲国产电影在线观看| 欧美在线观看一二区| 另类综合日韩欧美亚洲| 中文字幕av一区二区三区| 在线亚洲+欧美+日本专区| 蜜臀av亚洲一区中文字幕| 精品国产亚洲在线| 91香蕉视频mp4| 午夜精品aaa| 国产日韩欧美一区二区三区综合| 99久久精品费精品国产一区二区| 18成人在线视频| 91精品国产综合久久精品| 欧美精品久久天天躁| 麻豆国产精品一区二区三区 | 91黄色免费版| 日本系列欧美系列| 国产精品污www在线观看| 欧美私模裸体表演在线观看| 国产资源在线一区| 亚洲在线中文字幕| 国产精品日韩成人| 日韩欧美中文字幕公布| 91影院在线免费观看| 久久97超碰国产精品超碰| 亚洲欧美二区三区| 久久无码av三级| 欧美情侣在线播放| 波多野结衣在线一区| 美日韩黄色大片| 亚洲午夜成aⅴ人片| 国产精品乱码人人做人人爱| 欧美videossexotv100| 欧美中文字幕不卡| 成人avav在线| 国产精品自在欧美一区| 免费不卡在线视频| 亚洲国产日韩在线一区模特| 国产精品女上位| 欧美成人精品福利| 欧美精品第一页| 在线观看成人免费视频| av爱爱亚洲一区| 国产黑丝在线一区二区三区| 美女精品自拍一二三四| 视频在线观看国产精品| 亚洲一二三级电影| 亚洲欧美另类久久久精品2019| 久久网这里都是精品| 久久综合视频网| 久久综合国产精品| 精品va天堂亚洲国产| 日韩欧美精品在线视频| 欧美日韩第一区日日骚| 欧美日韩成人综合| 欧美三区免费完整视频在线观看| 97久久精品人人做人人爽| 99久久久无码国产精品| av午夜一区麻豆| 成人福利视频在线| 粉嫩在线一区二区三区视频| 国产福利91精品| 国产 欧美在线| 成人激情黄色小说| av日韩在线网站| 99精品一区二区三区| 色综合久久久久| 色8久久精品久久久久久蜜| 91麻豆精东视频| 欧美制服丝袜第一页| 欧美日韩精品一区二区三区蜜桃| 国产精品免费看片| 中文字幕一区二区三区蜜月| 亚洲免费色视频| 午夜精品123| 久久国产三级精品| 国产一区在线精品| 懂色av中文一区二区三区| av成人免费在线观看| 日本国产一区二区| 91精品国产综合久久久久久久| 欧美一区二区三区啪啪| 亚洲精品在线观看视频| 欧美国产激情一区二区三区蜜月| 自拍偷拍亚洲综合| 午夜视频一区在线观看| 精品一区二区三区香蕉蜜桃 | 国产精品久久毛片a| 亚洲欧美一区二区三区孕妇| 亚洲国产欧美在线人成| 日本va欧美va精品发布| 国产精品99久久久久久有的能看 | 亚洲一区影音先锋| 日本美女一区二区| 成人自拍视频在线观看| 在线观看免费一区| 日韩一二三四区| 最新中文字幕一区二区三区| 亚洲第一福利视频在线| 国产在线不卡视频| 色综合天天狠狠| 日韩精品在线一区二区| 国产精品五月天| 日韩av一级电影| 99视频有精品| 日韩一级高清毛片| 亚洲人亚洲人成电影网站色| 日本女优在线视频一区二区| 成人av免费在线观看| 91精品婷婷国产综合久久性色| 国产亚洲精品中文字幕| 亚洲国产成人91porn| 国产一区二区三区免费播放| 色吧成人激情小说| 国产日韩三级在线| 亚洲6080在线| 成人不卡免费av| 精品久久五月天| 亚洲成a人片综合在线| 国产**成人网毛片九色| 欧美一区二区三区爱爱| 亚洲精品国产精华液| 国产成人av影院| 日韩免费在线观看| 亚洲成人1区2区| av亚洲精华国产精华| 亚洲精品一区二区三区蜜桃下载| 亚洲成人在线免费| 99精品视频在线观看| 国产亚洲成av人在线观看导航 | 91一区二区三区在线播放| 精品三级在线看| 亚洲高清免费观看| 色8久久精品久久久久久蜜| 国产精品丝袜久久久久久app| 男女性色大片免费观看一区二区| 色老汉av一区二区三区| 欧美经典一区二区| 国产在线视频精品一区| 日韩精品最新网址| 日韩av一区二区三区四区| 欧美日韩视频在线第一区 | 石原莉奈在线亚洲三区| 色欧美片视频在线观看| 国产精品久久毛片av大全日韩| 国产九九视频一区二区三区| 日韩三级电影网址| 免费成人你懂的| 3d成人h动漫网站入口| 亚洲成年人网站在线观看| 欧美性色黄大片| 亚洲国产一区二区在线播放| 91激情在线视频| 一级日本不卡的影视| 色8久久人人97超碰香蕉987| 亚洲欧美偷拍另类a∨色屁股| jizz一区二区| 亚洲日穴在线视频| 一本大道久久a久久综合| ...av二区三区久久精品| 91在线精品一区二区三区| 国产精品国产自产拍在线| 99久久精品一区| 一区二区国产盗摄色噜噜| 欧美在线小视频| 三级亚洲高清视频| 日韩久久精品一区| 国产99精品国产| 亚洲欧美偷拍三级| 欧美日韩视频在线第一区| 日本va欧美va欧美va精品| 精品成人免费观看| 成人av高清在线| 亚洲午夜在线观看视频在线| 666欧美在线视频| 精品在线一区二区三区| 国产亚洲欧美中文| 一本久久综合亚洲鲁鲁五月天| 亚洲欧美日韩久久| 欧美另类videos死尸| 看电视剧不卡顿的网站| 欧美国产日韩精品免费观看| 99久久精品情趣| 日韩国产高清在线|