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

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

?? entry.c

?? ctags-5.5.4.tar.gz,一個很好的代碼開發以及編輯源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**   $Id: entry.c,v 1.9 2003/10/13 02:35:45 darren Exp $**   Copyright (c) 1996-2002, Darren Hiebert**   This source code is released for free distribution under the terms of the*   GNU General Public License.**   This module contains functions for creating tag entries.*//**   INCLUDE FILES*/#include "general.h"	/* must always come first */#include <string.h>#include <ctype.h>	/* to define isspace () */#include <errno.h>#if defined (HAVE_SYS_TYPES_H)# include <sys/types.h>	    /* to declare off_t on some hosts */#endif#if defined (HAVE_TYPES_H)# include <types.h>	    /* to declare off_t on some hosts */#endif#if defined (HAVE_UNISTD_H)# include <unistd.h>	/* to declare close (), ftruncate (), truncate () */#endif/*  These header files provide for the functions necessary to do file *  truncation. */#ifdef HAVE_FCNTL_H# include <fcntl.h>#endif#ifdef HAVE_IO_H# include <io.h>#endif#include "debug.h"#include "ctags.h"#include "entry.h"#include "main.h"#include "options.h"#include "read.h"#include "routines.h"#include "sort.h"#include "strlist.h"/**   MACROS*/#define PSEUDO_TAG_PREFIX	"!_"#define includeExtensionFlags()		(Option.tagFileFormat > 1)/* *  Portability defines */#if !defined(HAVE_TRUNCATE) && !defined(HAVE_FTRUNCATE) && !defined(HAVE_CHSIZE)# define USE_REPLACEMENT_TRUNCATE#endif/*  Hack for rediculous practice of Microsoft Visual C++. */#if defined (WIN32) && defined (_MSC_VER)# define chsize		_chsize# define open		_open# define close		_close# define O_RDWR 	_O_RDWR#endif/**   DATA DEFINITIONS*/tagFile TagFile = {    NULL,		/* tag file name */    NULL,		/* tag file directory (absolute) */    NULL,		/* file pointer */    { 0, 0 },		/* numTags */    { 0, 0, 0 },	/* max */    { NULL, NULL, 0 },	/* etags */    NULL		/* vLine */};static boolean TagsToStdout = FALSE;/**   FUNCTION PROTOTYPES*/#ifdef NEED_PROTO_TRUNCATEextern int truncate (const char *path, off_t length);#endif#ifdef NEED_PROTO_FTRUNCATEextern int ftruncate (int fd, off_t length);#endif/**   FUNCTION DEFINITIONS*/extern void freeTagFileResources (void){    if (TagFile.directory != NULL)	eFree (TagFile.directory);    vStringDelete (TagFile.vLine);}extern const char *tagFileName (void){    return TagFile.name;}/**   Pseudo tag support*/static void rememberMaxLengths (const size_t nameLength, const size_t lineLength){    if (nameLength > TagFile.max.tag)	TagFile.max.tag = nameLength;    if (lineLength > TagFile.max.line)	TagFile.max.line = lineLength;}static void writePseudoTag (const char *const tagName,			    const char *const fileName,			    const char *const pattern){    const int length = fprintf (TagFile.fp, "%s%s\t%s\t/%s/\n",			       PSEUDO_TAG_PREFIX, tagName, fileName, pattern);    ++TagFile.numTags.added;    rememberMaxLengths (strlen (tagName), (size_t) length);}static void addPseudoTags (void){    if (! Option.xref)    {	char format [11];	const char *formatComment = "unknown format";	sprintf (format, "%u", Option.tagFileFormat);	if (Option.tagFileFormat == 1)	    formatComment = "original ctags format";	else if (Option.tagFileFormat == 2)	    formatComment =		    "extended format; --format=1 will not append ;\" to lines";	writePseudoTag ("TAG_FILE_FORMAT", format, formatComment);	writePseudoTag ("TAG_FILE_SORTED",			Option.sorted == SO_FOLDSORTED ? "2" :			    (Option.sorted == SO_SORTED ? "1" : "0"),		       "0=unsorted, 1=sorted, 2=foldcase");	writePseudoTag ("TAG_PROGRAM_AUTHOR",	AUTHOR_NAME,  AUTHOR_EMAIL);	writePseudoTag ("TAG_PROGRAM_NAME",	PROGRAM_NAME, "");	writePseudoTag ("TAG_PROGRAM_URL",	PROGRAM_URL,  "official site");	writePseudoTag ("TAG_PROGRAM_VERSION",	PROGRAM_VERSION, "");    }}static void updateSortedFlag (const char *const line,			      FILE *const fp, fpos_t startOfLine){    const char *const tab = strchr (line, '\t');    if (tab != NULL)    {	const long boolOffset = tab - line + 1;		/* where it should be */	if (line [boolOffset] == '0'  ||  line [boolOffset] == '1')	{	    fpos_t nextLine;	    if (fgetpos (fp, &nextLine) == -1 || fsetpos (fp, &startOfLine) == -1)		error (WARNING, "Failed to update 'sorted' pseudo-tag");	    else	    {		fpos_t flagLocation;		int c, d;		do		    c = fgetc (fp);		while (c != '\t'  &&  c != '\n');		fgetpos (fp, &flagLocation);		d = fgetc (fp);		if (c == '\t'  &&  (d == '0'  ||  d == '1')  &&		    d != (int) Option.sorted)		{		    fsetpos (fp, &flagLocation);		    fputc (Option.sorted == SO_FOLDSORTED ? '2' :				(Option.sorted == SO_SORTED ? '1' : '0'), fp);		}		fsetpos (fp, &nextLine);	    }	}    }}/*  Look through all line beginning with "!_TAG_FILE", and update those which *  require it. */static long unsigned int updatePseudoTags (FILE *const fp){    enum { maxEntryLength = 20 };    char entry [maxEntryLength + 1];    unsigned long linesRead = 0;    fpos_t startOfLine;    size_t entryLength;    const char *line;    sprintf (entry, "%sTAG_FILE", PSEUDO_TAG_PREFIX);    entryLength = strlen (entry);    Assert (entryLength < maxEntryLength);    fgetpos (fp, &startOfLine);    line = readLine (TagFile.vLine, fp);    while (line != NULL  &&  line [0] == entry [0])    {	++linesRead;	if (strncmp (line, entry, entryLength) == 0)	{	    char tab, classType [16];	    if (sscanf (line + entryLength, "%15s%c", classType, &tab) == 2  &&		tab == '\t')	    {		if (strcmp (classType, "_SORTED") == 0)		    updateSortedFlag (line, fp, startOfLine);	    }	    fgetpos (fp, &startOfLine);	}	line = readLine (TagFile.vLine, fp);    }    while (line != NULL)			/* skip to end of file */    {	++linesRead;	line = readLine (TagFile.vLine, fp);    }    return linesRead;}/* *  Tag file management */static boolean isValidTagAddress (const char *const excmd){    boolean isValid = FALSE;    if (strchr ("/?", excmd [0]) != NULL)	isValid = TRUE;    else    {	char *address = xMalloc (strlen (excmd) + 1, char);	if (sscanf (excmd, "%[^;\n]", address) == 1  &&	    strspn (address,"0123456789") == strlen (address))		isValid = TRUE;	eFree (address);    }    return isValid;}static boolean isCtagsLine (const char *const line){    enum fieldList { TAG, TAB1, SRC_FILE, TAB2, EXCMD, NUM_FIELDS };    boolean ok = FALSE;			/* we assume not unless confirmed */    const size_t fieldLength = strlen (line) + 1;    char *const fields = xMalloc (NUM_FIELDS * fieldLength, char);    if (fields == NULL)	error (FATAL, "Cannot analyze tag file");    else    {#define field(x)	(fields + ((size_t) (x) * fieldLength))	const int numFields = sscanf (line, "%[^\t]%[\t]%[^\t]%[\t]%[^\r\n]",				     field (TAG), field (TAB1), field (SRC_FILE),				     field (TAB2), field (EXCMD));	/*  There must be exactly five fields: two tab fields containing	 *  exactly one tab each, the tag must not begin with "#", and the	 *  file name should not end with ";", and the excmd must be	 *  accceptable.	 *	 *  These conditions will reject tag-looking lines like:	 *      int	a;	<C-comment>	 *      #define	LABEL	<C-comment>	 */	if (numFields == NUM_FIELDS   &&	    strlen (field (TAB1)) == 1  &&	    strlen (field (TAB2)) == 1  &&	    field (TAG) [0] != '#'      &&	    field (SRC_FILE) [strlen (field (SRC_FILE)) - 1] != ';'  &&	    isValidTagAddress (field (EXCMD)))		ok = TRUE;	eFree (fields);    }    return ok;}static boolean isEtagsLine (const char *const line){    boolean result = FALSE;    if (line [0] == '\f')	result = (boolean) (line [1] == '\n'  ||  line [1] == '\r');    return result;}static boolean isTagFile (const char *const filename){    boolean ok = FALSE;			/* we assume not unless confirmed */    FILE *const fp = fopen (filename, "rb");    if (fp == NULL  &&  errno == ENOENT)	ok = TRUE;    else if (fp != NULL)    {	const char *line = readLine (TagFile.vLine, fp);	if (line == NULL)	    ok = TRUE;	else	    ok = (boolean) (isCtagsLine (line) || isEtagsLine (line));	fclose (fp);    }    return ok;}extern void copyBytes (FILE* const fromFp, FILE* const toFp, const long size){    enum { BufferSize = 1000 };    long toRead, numRead;    char* buffer = xMalloc (BufferSize, char);    long remaining = size;    do    {	toRead = (0 < remaining && remaining < BufferSize) ?		    remaining : (long) BufferSize;	numRead = fread (buffer, (size_t) 1, (size_t) toRead, fromFp);	if (fwrite (buffer, (size_t)1, (size_t)numRead, toFp) < (size_t)numRead)	    error (FATAL | PERROR, "cannot complete write");	if (remaining > 0)	    remaining -= numRead;    } while (numRead == toRead  &&  remaining != 0);    eFree (buffer);}extern void copyFile (const char *const from, const char *const to, const long size){    FILE* const fromFp = fopen (from, "rb");    if (fromFp == NULL)	error (FATAL | PERROR, "cannot open file to copy");    else    {	FILE* const toFp = fopen (to, "wb");	if (toFp == NULL)	    error (FATAL | PERROR, "cannot open copy destination");	else	{	    copyBytes (fromFp, toFp, size);	    fclose (toFp);	}	fclose (fromFp);    }}extern void openTagFile (void){    setDefaultTagFileName ();    TagsToStdout = isDestinationStdout ();    if (TagFile.vLine == NULL)	TagFile.vLine = vStringNew ();    /*  Open the tags file.     */    if (TagsToStdout)	TagFile.fp = tempFile ("w", &TagFile.name);    else    {	boolean fileExists;	setDefaultTagFileName ();	TagFile.name = eStrdup (Option.tagFileName);	fileExists = doesFileExist (TagFile.name);	if (fileExists  &&  ! isTagFile (TagFile.name))	    error (FATAL,	      "\"%s\" doesn't look like a tag file; I refuse to overwrite it.",		  TagFile.name);	if (Option.etags)	{	    if (Option.append  &&  fileExists)		TagFile.fp = fopen (TagFile.name, "a+b");	    else		TagFile.fp = fopen (TagFile.name, "w+b");	}	else	{	    if (Option.append  &&  fileExists)	    {		TagFile.fp = fopen (TagFile.name, "r+");		if (TagFile.fp != NULL)		{		    TagFile.numTags.prev = updatePseudoTags (TagFile.fp);		    fclose (TagFile.fp);		    TagFile.fp = fopen (TagFile.name, "a+");		}	    }	    else	    {		TagFile.fp = fopen (TagFile.name, "w");		if (TagFile.fp != NULL)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区二区三区蜜臀| 波波电影院一区二区三区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 国产精品一区三区| 视频一区二区国产| 午夜精品久久久久久久99水蜜桃| 亚洲乱码精品一二三四区日韩在线| 欧美国产精品专区| 欧美国产一区二区| 国产精品久线观看视频| 最新中文字幕一区二区三区| 亚洲精品日日夜夜| 午夜精品在线视频一区| 日韩在线观看一区二区| 麻豆国产精品777777在线| 麻豆精品在线看| 国产精品69毛片高清亚洲| 成人午夜激情在线| 一本大道久久a久久精品综合| 欧洲视频一区二区| 欧美一区二区黄| 欧美激情综合网| 亚洲国产乱码最新视频| 国内国产精品久久| 91性感美女视频| 91麻豆精品国产无毒不卡在线观看| 欧美一区在线视频| 国产精品美女久久久久高潮| 亚洲国产一区二区在线播放| 韩国欧美国产一区| 色婷婷精品大在线视频| 日韩一区二区三| 国产精品国产三级国产aⅴ中文| 亚洲国产精品自拍| 国产福利精品一区二区| 91成人国产精品| 久久亚洲精精品中文字幕早川悠里 | 亚洲精品中文在线| 久久精品国产99久久6| 菠萝蜜视频在线观看一区| 日韩精品一区二区三区在线| 国产精品免费久久| 毛片av中文字幕一区二区| www.亚洲激情.com| 精品国产伦一区二区三区观看体验| 亚洲欧洲精品天堂一级| 日本不卡不码高清免费观看| 成人免费观看视频| 欧美成人精品1314www| 一区二区三区国产精品| 成人污视频在线观看| 91精品国产aⅴ一区二区| 亚洲欧美日韩精品久久久久| 国产一区在线视频| 在线综合视频播放| 亚洲一二三四区不卡| 波多野结衣中文字幕一区| 精品999久久久| 首页欧美精品中文字幕| 在线观看国产精品网站| 一区二区中文视频| 欧美精品乱人伦久久久久久| 久久精品亚洲国产奇米99| 免费观看日韩av| 欧美视频在线不卡| 一区二区三区在线观看视频| 波多野结衣在线一区| 亚洲精品一区二区在线观看| 日本亚洲欧美天堂免费| 欧美欧美午夜aⅴ在线观看| 亚洲精品高清视频在线观看| a4yy欧美一区二区三区| 国产精品人人做人人爽人人添| 精东粉嫩av免费一区二区三区| 制服丝袜在线91| 青青草成人在线观看| 日韩一区二区三区视频| 免费不卡在线观看| 精品少妇一区二区三区| 精品综合久久久久久8888| 欧美成va人片在线观看| 麻豆国产91在线播放| 欧美sm美女调教| 国产精品自拍一区| 欧美国产精品一区二区三区| 国产精品一区二区不卡| 中文字幕一区二区三区色视频| zzijzzij亚洲日本少妇熟睡| 亚洲国产经典视频| 91看片淫黄大片一级在线观看| 亚洲色图欧美在线| 欧洲人成人精品| 日韩精品欧美精品| www日韩大片| 成人av小说网| 亚洲一区在线观看网站| 日韩免费一区二区三区在线播放| 国产精品毛片大码女人| 欧美视频在线观看一区| 久久99精品一区二区三区| 国产日韩欧美在线一区| 91黄色免费看| 美女免费视频一区二区| 中文字幕国产一区| 欧美精品一级二级| 国产精品99久久久久久久女警| 亚洲国产精品成人综合| 欧美私模裸体表演在线观看| 日韩精彩视频在线观看| 欧美国产一区二区| 欧美日韩电影一区| 激情另类小说区图片区视频区| 国产精品毛片高清在线完整版 | 亚洲午夜一区二区三区| 欧美成va人片在线观看| 色哟哟亚洲精品| 玖玖九九国产精品| 亚洲精品国产a久久久久久| 欧美一二三区精品| 91网站最新网址| 久久91精品国产91久久小草| 亚洲区小说区图片区qvod| 欧美成人女星排行榜| 在线观看网站黄不卡| 国产精品一区二区你懂的| 亚洲另类在线制服丝袜| 久久精品人人做人人爽97| 欧美一区二区三区视频| 欧美专区亚洲专区| 99久久精品免费看| 国产麻豆日韩欧美久久| 日韩av高清在线观看| 一区二区三区色| 欧美极品少妇xxxxⅹ高跟鞋| 欧美一区二区国产| 欧美精品自拍偷拍| 91网站最新地址| av中文字幕在线不卡| 国产精品自拍av| 久草在线在线精品观看| 日韩二区在线观看| 亚洲国产精品自拍| 亚洲同性同志一二三专区| 久久先锋影音av鲁色资源网| 日韩女优av电影| 日韩一区二区麻豆国产| 欧美精品黑人性xxxx| 色婷婷av一区二区三区之一色屋| 不卡一区在线观看| 成人av资源网站| 成人av免费在线播放| 成人免费观看视频| 岛国一区二区在线观看| 国产精品一品视频| 国产成人亚洲综合a∨婷婷 | 中文字幕一区av| 国产精品天美传媒| 亚洲欧美另类久久久精品| 综合欧美亚洲日本| 亚洲综合一区二区精品导航| 亚洲妇女屁股眼交7| 五月天激情综合| 日本视频在线一区| 精品一二三四区| 国产91综合一区在线观看| av电影在线不卡| 91黄色激情网站| 欧美一区二区精美| 久久品道一品道久久精品| 久久精品视频一区二区三区| 亚洲欧美影音先锋| 亚洲电影中文字幕在线观看| 五月综合激情网| 国产精品一品二品| 色噜噜狠狠色综合中国| 欧美日韩一区二区在线视频| 欧美夫妻性生活| 久久―日本道色综合久久| 成人欧美一区二区三区小说| 亚洲影院久久精品| 免费高清不卡av| 国产成人精品亚洲777人妖| av爱爱亚洲一区| 欧美日本免费一区二区三区| 精品久久人人做人人爱| 中文字幕五月欧美| 亚洲成人免费观看| 色狠狠色狠狠综合| 日韩欧美国产一区在线观看| 久久久美女艺术照精彩视频福利播放| 中文字幕一区二区日韩精品绯色| 香蕉乱码成人久久天堂爱免费| 狠狠色狠狠色综合系列| 国产成人在线视频播放| 91麻豆精品国产自产在线| 国产精品乱码人人做人人爱| 日本成人在线看| 国产成人啪午夜精品网站男同| 欧美人狂配大交3d怪物一区| 国产亚洲va综合人人澡精品|