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

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

?? entry.c

?? ctags的最新版5.7,可以比較5.6版看看,免費下載
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**   $Id: entry.c 443 2006-05-30 04:37:13Z darren $**   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)					addPseudoTags ();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩三区| 洋洋av久久久久久久一区| 久久久激情视频| 亚洲愉拍自拍另类高清精品| 免费在线观看精品| 99re成人精品视频| 久久久久国产一区二区三区四区 | 丝袜亚洲另类欧美| 豆国产96在线|亚洲| 欧美一级欧美一级在线播放| 中文字幕中文乱码欧美一区二区| 日本不卡1234视频| 欧美私模裸体表演在线观看| 国产欧美一区在线| 国产精品一区二区不卡| 日韩三级伦理片妻子的秘密按摩| 亚洲综合色噜噜狠狠| 成人av在线一区二区| 久久婷婷国产综合精品青草| 日韩有码一区二区三区| 91福利在线免费观看| **性色生活片久久毛片| 国产激情偷乱视频一区二区三区| 日韩女优制服丝袜电影| 日韩精品色哟哟| 欧美电影一区二区三区| 亚洲午夜久久久久久久久电影院 | 国产一区二区三区免费| 欧美一区二区精美| 免费在线视频一区| 欧美大片在线观看一区| 久久丁香综合五月国产三级网站 | 国产欧美一区二区三区在线看蜜臀 | 欧美色区777第一页| 亚洲免费观看高清在线观看| 99综合电影在线视频| 国产精品理伦片| 不卡视频在线看| 亚洲色图欧美激情| 欧洲精品中文字幕| 亚洲成a人片在线观看中文| 欧洲视频一区二区| 亚洲国产成人高清精品| 欧美一级艳片视频免费观看| 麻豆一区二区在线| 国产午夜精品一区二区三区视频 | 欧美一区三区四区| 免费不卡在线观看| 国产欧美一区二区精品婷婷| www.欧美日韩| 亚洲午夜一二三区视频| 日韩三级伦理片妻子的秘密按摩| 国产在线精品一区二区夜色| 欧美高清在线精品一区| 91麻豆高清视频| 午夜精品一区二区三区电影天堂| 91精品国产综合久久精品性色| 国内精品嫩模私拍在线| 国产精品福利一区二区| 欧美在线观看你懂的| 久久99国产精品麻豆| 国产精品午夜久久| 精品视频资源站| 国产精品一区二区免费不卡| 亚洲最色的网站| 精品三级av在线| 色哟哟一区二区三区| 日本不卡不码高清免费观看| 中文在线免费一区三区高中清不卡| 色老汉av一区二区三区| 久久99国产精品麻豆| 洋洋av久久久久久久一区| 久久久久久亚洲综合影院红桃| 在线国产电影不卡| 国产一区二三区| 午夜在线成人av| 国产欧美日韩精品在线| 欧美精品色综合| av在线不卡免费看| 另类小说欧美激情| 亚洲网友自拍偷拍| 欧美韩国日本不卡| 日韩欧美三级在线| 欧美亚洲综合久久| 成人av电影免费观看| 久久国产精品免费| 午夜精品爽啪视频| 亚洲另类色综合网站| 久久精品一区二区三区av| 欧美男同性恋视频网站| 99久久久精品| 国产成人高清视频| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲国产精品久久人人爱| 国产精品福利影院| 中文字幕+乱码+中文字幕一区| 日韩欧美一区电影| 欧美一区二区三区喷汁尤物| 欧美中文字幕一区二区三区 | 韩国三级在线一区| 三级欧美在线一区| 亚洲最新在线观看| 一区二区三区高清不卡| 国产精品美女一区二区三区 | 午夜一区二区三区视频| 日韩毛片视频在线看| 亚洲精品一区二区三区影院| 制服丝袜亚洲播放| 91 com成人网| 欧美精品久久一区二区三区| 欧美日韩久久久久久| 在线国产亚洲欧美| 欧美网站一区二区| 99久久99精品久久久久久| 不卡av电影在线播放| 国产成人啪免费观看软件| 国产成人精品1024| k8久久久一区二区三区| 95精品视频在线| 色偷偷久久人人79超碰人人澡 | 欧美一级夜夜爽| 日韩欧美一区在线| 精品成a人在线观看| 国产午夜精品一区二区三区嫩草| 久久网站热最新地址| 欧美激情在线免费观看| 国产精品久久久久婷婷二区次 | 精品久久久久久久久久久院品网| 日韩欧美国产一区在线观看| 欧美xxx久久| 中文字幕一区二区三区在线观看| 中文字幕一区av| 亚洲亚洲精品在线观看| 日韩中文字幕区一区有砖一区| 麻豆91免费看| 粉嫩av一区二区三区粉嫩 | 一区二区三区成人| 午夜激情一区二区三区| 精品伊人久久久久7777人| 丰满岳乱妇一区二区三区| 91久久久免费一区二区| 91麻豆精品国产91久久久久久| 337p日本欧洲亚洲大胆色噜噜| 国产精品免费网站在线观看| 亚洲综合久久久久| 精品中文av资源站在线观看| 白白色亚洲国产精品| 欧美人伦禁忌dvd放荡欲情| 久久色在线观看| 亚洲最新视频在线观看| 国产乱码精品一区二区三区忘忧草| 99久久99久久久精品齐齐| 日韩视频123| 亚洲男帅同性gay1069| 免费观看一级特黄欧美大片| 成人av网址在线| 日韩一区和二区| 亚洲丝袜精品丝袜在线| 美女脱光内衣内裤视频久久影院| 成人午夜激情影院| 日韩视频一区二区三区| 亚洲激情成人在线| 国产精品一区二区久久不卡| 欧美日韩激情在线| 综合久久给合久久狠狠狠97色| 美女网站一区二区| 欧美日韩精品欧美日韩精品一| 亚洲国产精品成人综合色在线婷婷 | 7777精品伊人久久久大香线蕉的| 国产日韩欧美在线一区| 日本成人在线看| 欧美午夜免费电影| 日韩美女久久久| 成人午夜视频在线观看| 久久综合色婷婷| 青青草精品视频| 欧美日韩中文一区| 亚洲一区二区高清| 99久久婷婷国产精品综合| 久久综合九色综合欧美亚洲| 午夜av区久久| 欧美三级午夜理伦三级中视频| 中文字幕不卡一区| 成人免费视频视频| 久久伊人蜜桃av一区二区| 日产国产欧美视频一区精品| 91极品视觉盛宴| 亚洲一二三四区不卡| 91在线视频观看| 亚洲少妇最新在线视频| 成人性生交大片免费看视频在线| 国产亚洲精品bt天堂精选| 精品无码三级在线观看视频| 欧美一级爆毛片| 裸体歌舞表演一区二区| 日韩欧美另类在线| 国产一区二区三区综合| 亚洲国产精品成人综合| aaa国产一区| 亚洲一区二区三区在线看|