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

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

?? ng.c

?? 早期freebsd實現
?? C
字號:
/*  $Revision: 1.19 $****  Routine for the in-core data structures for the active and newsfeeds**  files.*/#include "innd.h"#include "mydir.h"/***  Hash function taken from Chris Torek's hash package posted to**  comp.lang.c on 18-Oct-90 in <27038@mimsy.umd.edu>.  Thanks, Chris.*/#define NGH_HASH(Name, p, j)	\	for (p = Name, j = 0; *p; ) j = (j << 5) + j + *p++/***  Size of hash table.   Change NGH_BUCKET if not a power of two.*/#define NGH_SIZE	512#define NGH_BUCKET(j)	&NGHtable[j & (NGH_SIZE - 1)]/***  Newsgroup hash entry, which is really a hash bucket -- pointers**  to all the groups with this hash code.*/typedef struct _NGHASH {    int			Size;    int			Used;    NEWSGROUP		**Groups;} NGHASH;STATIC BUFFER	NGdirs;STATIC BUFFER	NGnames;STATIC NGHASH	NGHtable[NGH_SIZE];STATIC int	NGHbuckets;STATIC int	NGHcount;/***  Sorting predicate for qsort call in NGparsefile.  Put newsgroups in**  rough order of their activity.  Will be better if we write a "counts"**  file sometime.*/STATIC intNGcompare(p1, p2)    POINTER	p1;    POINTER	p2;{    NEWSGROUP	**ng1;    NEWSGROUP	**ng2;    ng1 = CAST(NEWSGROUP**, p1);    ng2 = CAST(NEWSGROUP**, p2);    return ng1[0]->Last - ng2[0]->Last;}/***  Convert a newsgroup name into a directory name.*/STATIC voidNGdirname(p)    register char	*p;{    for ( ; *p; p++)	if (*p == '.')	    *p = '/';}/***  Parse a single line from the active file, filling in ngp.  Be careful**  not to write NUL's into the in-core copy, since we're either mmap(2)'d,**  or we want to just blat it out to disk later.*/STATIC BOOLNGparseentry(ngp, p, end)    register NEWSGROUP		*ngp;    register char		*p;    register char		*end;{    register char		*q;    register unsigned int	j;    register NGHASH		*htp;    register NEWSGROUP		**ngpp;    register int		i;    if ((q = strchr(p, ' ')) == NULL)	return FALSE;    i = q - p;    ngp->NameLength = i;    ngp->Name = &NGnames.Data[NGnames.Used];    (void)strncpy(ngp->Name, p, (SIZE_T)i);    ngp->Name[i] = '\0';    NGnames.Used += i + 1;    ngp->Dir = &NGdirs.Data[NGdirs.Used];    (void)strncpy(ngp->Dir, p, (SIZE_T)i);    ngp->Dir[i] = '\0';    NGdirs.Used += i + 1;    NGdirname(ngp->Dir);    ngp->LastString = ++q;    if ((q = strchr(q, ' ')) == NULL || q > end)	return FALSE;    ngp->Lastwidth = q - ngp->LastString;    if ((q = strchr(q, ' ')) == NULL || q > end)	return FALSE;    if ((q = strchr(q + 1, ' ')) == NULL || q > end)	return FALSE;    ngp->Rest = ++q;    /* We count on atoi() to stop at the space after the digits! */    ngp->Last = atol(ngp->LastString);    ngp->nSites = 0;    ngp->Sites = NEW(int, NGHcount);    ngp->Alias = NULL;    /* Find the right bucket for the group, make sure there is room. */    /* SUPPRESS 6 *//* Over/underflow from plus expression */    NGH_HASH(ngp->Name, p, j);    htp = NGH_BUCKET(j);    for (p = ngp->Name, ngpp = htp->Groups, i = htp->Used; --i >= 0; ngpp++)	if (*p == ngpp[0]->Name[0] && EQ(p, ngpp[0]->Name)) {	    syslog(L_ERROR, "%s duplicate_group %s", LogName, p);	    return FALSE;	}    if (htp->Used >= htp->Size) {	htp->Size += NGHbuckets;	RENEW(htp->Groups, NEWSGROUP*, htp->Size);    }    htp->Groups[htp->Used++] = ngp;    return TRUE;}/***  Parse the active file, building the initial Groups global.*/voidNGparsefile(){    register char	*p;    register char	*q;    register int	i;    register BOOL	SawMe;    register NEWSGROUP	*ngp;    register NGHASH	*htp;    char		**strings;    char		*active;    char		*end;    /* If re-reading, remove anything we might have had. */    if (Groups) {	for (i = nGroups, ngp = Groups; --i >= 0; ngp++)	    DISPOSE(ngp->Sites);	DISPOSE(Groups);	DISPOSE(GroupPointers);	DISPOSE(NGdirs.Data);	DISPOSE(NGnames.Data);    }    /* Get active file and space for group entries. */    active = ICDreadactive(&end);    for (p = active, i = 0; p < end && (p = strchr(p, '\n')) != NULL; p++, i++)	continue;    nGroups = i;    Groups = NEW(NEWSGROUP, nGroups);    GroupPointers = NEW(NEWSGROUP*, nGroups);    /* Get space to hold copies of the names and the directory names.     * This might take more space than individually allocating each     * element, but it is definitely easier on the system. */    i = end - active;    NGdirs.Size = i;    NGdirs.Data = NEW(char, NGdirs.Size + 1);    NGdirs.Used = 0;    NGnames.Size = i;    NGnames.Data = NEW(char, NGnames.Size + 1);    NGnames.Used = 0;    /* Set up the default hash buckets. */    NGHbuckets = nGroups / NGH_SIZE;    if (NGHbuckets == 0)	NGHbuckets = 1;    if (NGHtable[0].Groups)	for (i = NGH_SIZE, htp = NGHtable; --i >= 0; htp++)	    htp->Used = 0;    else	for (i = NGH_SIZE, htp = NGHtable; --i >= 0; htp++) {	    htp->Size = NGHbuckets;	    htp->Groups = NEW(NEWSGROUP*, htp->Size);	    htp->Used = 0;	}    /* Count the number of sites. */    SawMe = FALSE;    for (strings = SITEreadfile(TRUE), i = 0; (p = strings[i]) != NULL; i++)	if (*p == 'M' && *++p == 'E' && *++p == ':')	    SawMe = TRUE;    if (i == 0 || (i == 1 && SawMe)) {	syslog(L_ERROR, "%s bad_newsfeeds no feeding sites", LogName);	NGHcount = 1;    }    else	NGHcount = i;    /* Loop over all lines in the active file, filling in the fields of     * the Groups array. */    for (p = active, ngp = Groups, i = nGroups; --i >= 0; ngp++, p = q + 1) {	ngp->Start = p - active;	if ((q = strchr(p, '\n')) == NULL || !NGparseentry(ngp, p, q)) {	    syslog(L_FATAL, "%s bad_active %s...", LogName, MaxLength(p, p));	    exit(1);	}    }    /* Sort each bucket. */    for (i = NGH_SIZE, htp = NGHtable; --i >= 0; htp++)	if (htp->Used > 1)	    qsort((POINTER)htp->Groups, (SIZE_T)htp->Used,		sizeof htp->Groups[0], NGcompare);    /* Chase down any alias flags. */    for (ngp = Groups, i = nGroups; --i >= 0; ngp++)	if (ngp->Rest[0] == NF_FLAG_ALIAS) {	    ngp->Alias = ngp;	    if ((p = strchr(ngp->Alias->Rest, '\n')) != NULL)		*p = '\0';	    ngp->Alias = NGfind(&ngp->Alias->Rest[1]);	    if (p)		*p = '\n';	    if (ngp->Alias != NULL && ngp->Alias->Rest[0] == NF_FLAG_ALIAS)		syslog(L_NOTICE, "%s alias_error %s too many levels",		    LogName, ngp->Name);	}}/***  Hash a newsgroup and see if we get it.*/NEWSGROUP *NGfind(Name)    char			*Name;{    register char		*p;    register int		i;    register unsigned int	j;    register NEWSGROUP		**ngp;    char			c;    NGHASH			*htp;    /* SUPPRESS 6 *//* Over/underflow from plus expression */    NGH_HASH(Name, p, j);    htp = NGH_BUCKET(j);    for (c = *Name, ngp = htp->Groups, i = htp->Used; --i >= 0; ngp++)	if (c == ngp[0]->Name[0] && EQ(Name, ngp[0]->Name))	    return ngp[0];    return NULL;}/***  Split a newsgroups header line into the groups we get.  Return a**  point to static memory and clobber the argument along the way.*/char **NGsplit(p)    register char	*p;{    static char		**groups;    static int		oldlength;    register char	**gp;    register int	i;    /* Get an array of character pointers. */    i = strlen(p);    if (groups == NULL) {	groups = NEW(char*, i + 1);	oldlength = i;    }    else if (oldlength < i) {	RENEW(groups, char*, i + 1);	oldlength = i;    }    /* Loop over text. */    for (gp = groups; *p; *p++ = '\0') {	/* Skip leading separators. */	for (; NG_ISSEP(*p); p++)	    continue;	if (*p == '\0')	    break;	/* Mark the start of the newsgroup, move to the end of it. */	for (*gp++ = p; *p && !NG_ISSEP(*p); p++)	    continue;	if (*p == '\0')	    break;    }    *gp = NULL;    return groups;}/***  Renumber a group.*/BOOLNGrenumber(ngp)    NEWSGROUP		*ngp;{    static char		NORENUMBER[] = "%s cant renumber %s %s too wide";    static char		RENUMBER[] = "%s renumber %s %s from %ld to %ld";    register DIR	*dp;    register DIRENTRY	*ep;    register char	*f2;    register char	*p;    char		*f3;    char		*f4;    char		*start;    long		l;    long		himark;    long		lomark;    char		*dummy;    /* Get a valid offset into the active file. */    if (ICDneedsetup) {	syslog(L_ERROR, "%s unsynched must reload before renumber", LogName);	return FALSE;    }    start = ICDreadactive(&dummy) + ngp->Start;    /* Check the file format. */    if ((f2 = strchr(start, ' ')) == NULL     || (f3 = strchr(++f2, ' ')) == NULL     || (f4 = strchr(++f3, ' ')) == NULL) {	syslog(L_ERROR, "%s bad_format active %s",	    LogName, MaxLength(start, start));	return FALSE;    }    himark = atol(f2);    lomark = himark + 1;    /* Scan the directory. */    if ((dp = opendir(ngp->Dir)) != NULL) {	while ((ep = readdir(dp)) != NULL) {	    p = ep->d_name;	    if (!CTYPE(isdigit, p[0]) || strspn(p, "0123456789") != strlen(p)	     || (l = atol(p)) == 0)		continue;	    if (l < lomark)		lomark = l;	    if (l > himark)		himark = l;	}	(void)closedir(dp);    }    l = atol(f2);    if (himark != l) {	syslog(L_NOTICE, RENUMBER, LogName, ngp->Name, "hi", l, himark);	if (!FormatLong(f2, himark, f3 - f2 - 1)) {	    syslog(L_NOTICE, NORENUMBER, LogName, ngp->Name, "hi");	    return FALSE;	}	ngp->Last = himark;	ICDactivedirty++;    }    l = atol(f3);    if (lomark != l) {	if (lomark < l)	    syslog(L_NOTICE, RENUMBER, LogName, ngp->Name, "lo", l, lomark);	if (!FormatLong(f3, lomark, f4 - f3)) {	    syslog(L_NOTICE, NORENUMBER, LogName, ngp->Name, "lo");	    return FALSE;	}	ICDactivedirty++;    }    return TRUE;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性猛片aaaaaaa做受| 久久久亚洲高清| 欧美成人猛片aaaaaaa| 中文字幕精品三区| 日日摸夜夜添夜夜添国产精品 | 国产精品亚洲视频| 91日韩在线专区| 欧美成人女星排行榜| 亚洲一区二区五区| 国产精品香蕉一区二区三区| 欧美日韩在线免费视频| 国产精品午夜在线观看| 男人的天堂久久精品| 欧美特级限制片免费在线观看| 国产视频不卡一区| 免费视频一区二区| 欧美日韩成人综合在线一区二区| 中文字幕一区二区5566日韩| 国产精品中文字幕欧美| 91精品国产一区二区| 一二三区精品福利视频| 成人福利在线看| 国产午夜精品美女毛片视频| 久久99日本精品| 精品三级在线观看| 奇米一区二区三区| 7777精品伊人久久久大香线蕉完整版 | 亚洲激情图片qvod| 波多野结衣一区二区三区| 久久中文字幕电影| 国产高清在线观看免费不卡| 91精品欧美福利在线观看| 亚洲一区二区四区蜜桃| 99精品欧美一区二区蜜桃免费| 精品日韩在线一区| 狠狠色丁香久久婷婷综合丁香| 日韩午夜激情视频| 看国产成人h片视频| 日韩女优制服丝袜电影| 另类成人小视频在线| 日韩亚洲欧美一区| 久国产精品韩国三级视频| 精品国内二区三区| 国产呦萝稀缺另类资源| 国产日韩精品视频一区| 成人一级黄色片| 亚洲天堂a在线| 欧美在线观看一区二区| 亚洲国产人成综合网站| 欧美一级艳片视频免费观看| 老色鬼精品视频在线观看播放| 精品国产污网站| 成人毛片老司机大片| 亚洲欧美日韩中文字幕一区二区三区| 色婷婷综合久久久中文字幕| 亚洲午夜久久久| 51精品视频一区二区三区| 人妖欧美一区二区| 久久久久久久久久电影| 成人app在线| 一区二区三区 在线观看视频| 欧美日韩国产高清一区二区三区 | 日韩一卡二卡三卡四卡| 激情六月婷婷综合| 最新热久久免费视频| 欧美日韩高清不卡| 国产成人啪午夜精品网站男同| 亚洲天堂免费在线观看视频| 欧美日韩国产综合一区二区三区| 极品美女销魂一区二区三区免费| 国产精品久久久久久久久久久免费看| 欧美日韩一区三区| 国产成人午夜99999| 亚洲h动漫在线| 中文一区在线播放| 欧美精品精品一区| 成人免费三级在线| 男人的天堂亚洲一区| 亚洲日本欧美天堂| 欧美成人三级在线| 在线免费观看日本一区| 国产一区二区三区免费在线观看| 亚洲乱码国产乱码精品精小说 | 亚洲乱码日产精品bd| 精品美女一区二区| 色哟哟国产精品| 国内国产精品久久| 午夜日韩在线电影| 中文字幕制服丝袜一区二区三区| 日韩亚洲欧美一区二区三区| 91麻豆免费观看| 国产成人精品网址| 日av在线不卡| 午夜精品国产更新| 亚洲欧美成aⅴ人在线观看| 久久蜜桃一区二区| 欧美一区二区国产| 欧美午夜精品久久久久久孕妇 | 欧美色中文字幕| eeuss国产一区二区三区| 老司机午夜精品| 日韩av高清在线观看| 亚洲另类春色校园小说| 亚洲国产精品激情在线观看| 日韩免费成人网| 91精品国产全国免费观看 | 99久久精品国产观看| 国产麻豆精品95视频| 麻豆精品一二三| 人妖欧美一区二区| 日本成人中文字幕在线视频| 亚瑟在线精品视频| 亚洲成人av在线电影| 一区二区日韩电影| 亚洲尤物在线视频观看| 一区二区三区四区视频精品免费 | 欧美老年两性高潮| 欧美日韩五月天| 欧美日韩精品免费| 欧美日韩精品欧美日韩精品一 | 日韩成人伦理电影在线观看| 亚洲一区二区三区美女| 亚洲高清免费在线| 日韩电影网1区2区| 狠狠色丁香婷婷综合| 国产精品一品二品| 丁香六月综合激情| av在线不卡观看免费观看| 成人福利电影精品一区二区在线观看 | 极品少妇xxxx偷拍精品少妇| 国产在线播放一区| 大白屁股一区二区视频| 91丨九色丨尤物| 色噜噜狠狠成人中文综合| 欧美三级视频在线播放| 欧美一区二区三区影视| 久久久青草青青国产亚洲免观| 中文字幕巨乱亚洲| 亚洲一区二区三区在线看| 蜜桃视频一区二区三区在线观看| 国产九色精品成人porny| 北条麻妃国产九九精品视频| 欧洲精品视频在线观看| 欧美精品xxxxbbbb| 久久精品视频在线看| 亚洲欧美日韩国产手机在线| 亚洲6080在线| 国产一区三区三区| 一本久久a久久精品亚洲| 欧美欧美欧美欧美| 久久久亚洲精品一区二区三区| 亚洲人xxxx| 国内欧美视频一区二区| 色就色 综合激情| 日韩免费高清av| 亚洲精品欧美在线| 国产老女人精品毛片久久| 91色乱码一区二区三区| 精品国产一二三| 亚洲午夜久久久久久久久久久| 国产一区福利在线| 欧美猛男gaygay网站| 国产亚洲精品久| 亚洲国产成人av网| 成人爽a毛片一区二区免费| 欧美猛男超大videosgay| 国产精品五月天| 久久福利资源站| 欧美美女一区二区| 亚洲欧美日韩国产一区二区三区| 国产一区二区三区四区五区入口| 欧美亚洲动漫精品| 国产精品久久久久久久久免费相片 | 久久久久久亚洲综合影院红桃 | 国产老肥熟一区二区三区| 欧美日韩国产另类不卡| 国产精品视频观看| 激情五月婷婷综合网| 欧美精品aⅴ在线视频| 国产精品国产三级国产aⅴ无密码| 日韩高清一区在线| 欧美视频一区二区三区在线观看| 中文字幕国产一区| 国产精品一区免费视频| 欧美一区二区三区在线观看| 亚洲无线码一区二区三区| 99re视频精品| 国产一二三精品| 亚洲人精品一区| 成人动漫视频在线| 亚洲国产精品av| 成人欧美一区二区三区视频网页| 理论片日本一区| 欧美理论在线播放| 一区二区三区在线播| 色天使色偷偷av一区二区| 国产精品久久久久久久蜜臀| 国产成人午夜电影网| 欧美激情一二三区| 福利91精品一区二区三区|