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

📄 strlist.c

📁 ctags-5.5.4.tar.gz,一个很好的代码开发以及编辑源码
💻 C
字号:
/**   $Id: strlist.c,v 1.4 2002/02/17 06:04:32 darren Exp $**   Copyright (c) 1999-2002, Darren Hiebert**   This source code is released for free distribution under the terms of the*   GNU General Public License.**   This module contains functions managing resizable string lists.*//**   INCLUDE FILES*/#include "general.h"	/* must always come first */#include <string.h>#ifdef HAVE_FNMATCH_H# include <fnmatch.h>#endif#include "debug.h"#include "read.h"#include "routines.h"#include "strlist.h"/**   FUNCTION DEFINITIONS*/extern stringList *stringListNew (void){    stringList* const result = xMalloc (1, stringList);    result->max   = 0;    result->count = 0;    result->list  = NULL;    return result;}extern void stringListAdd (stringList *const current, vString *string){    enum { incrementalIncrease = 10 };    Assert (current != NULL);    if (current->list == NULL)    {	Assert (current->max == 0);	current->count = 0;	current->max   = incrementalIncrease;	current->list  = xMalloc (current->max, vString*);    }    else if (current->count == current->max)    {	current->max += incrementalIncrease;	current->list = xRealloc (current->list, current->max, vString*);    }    current->list [current->count++] = string;}/* Combine list `from' into `current', deleting `from' */extern void stringListCombine (stringList *const current, stringList *const from){    unsigned int i;    Assert (current != NULL);    Assert (from != NULL);    for (i = 0  ;  i < from->count  ;  ++i)    {	stringListAdd (current, from->list [i]);	from->list [i] = NULL;    }    stringListDelete (from);}extern stringList* stringListNewFromArgv (const char* const* const argv){    stringList* const result = stringListNew ();    const char *const *p;    Assert (argv != NULL);    for (p = argv  ;  *p != NULL  ;  ++p)	stringListAdd (result, vStringNewInit (*p));    return result;}extern stringList* stringListNewFromFile (const char* const fileName){    stringList* result = NULL;    FILE* const fp = fopen (fileName, "r");    if (fp != NULL)    {	result = stringListNew ();	while (! feof (fp))	{	    vString* const str = vStringNew ();	    readLine (str, fp);	    vStringStripTrailing (str);	    if (vStringLength (str) > 0)		stringListAdd (result, str);	    else		vStringDelete (str);	}    }    return result;}extern unsigned int stringListCount (const stringList *const current){    Assert (current != NULL);    return current->count;}extern vString* stringListItem (const stringList *const current,				const unsigned int indx){    Assert (current != NULL);    return current->list [indx];}extern void stringListClear (stringList *const current){    unsigned int i;    Assert (current != NULL);    for (i = 0  ;  i < current->count  ;  ++i)    {	vStringDelete (current->list [i]);	current->list [i] = NULL;    }    current->count = 0;}extern void stringListDelete (stringList *const current){    if (current != NULL)    {	if (current->list != NULL)	{	    stringListClear (current);	    eFree (current->list);	    current->list = NULL;	}	current->max   = 0;	current->count = 0;	eFree (current);    }}extern boolean stringListHas (const stringList *const current,			      const char *const str){    boolean result = FALSE;    unsigned int i;    Assert (current != NULL);    for (i = 0  ;  ! result  &&  i < current->count  ;  ++i)	result = (boolean) (strcmp (str, vStringValue (current->list [i]))==0);    return result;}extern boolean stringListHasInsensitive (const stringList *const current,					 const char *const str){    boolean result = FALSE;    unsigned int i;    Assert (current != NULL);    for (i = 0  ;  ! result  &&  i < current->count  ;  ++i)	result = (boolean) (strcasecmp (str, vStringValue (current->list [i]))==0);    return result;}extern boolean stringListHasTest (const stringList *const current,				  boolean (*test)(const char *s)){    boolean result = FALSE;    unsigned int i;    Assert (current != NULL);    for (i = 0  ;  ! result  &&  i < current->count  ;  ++i)	result = (*test)(vStringValue (current->list [i]));    return result;}extern boolean stringListExtensionMatched (const stringList* const list,					   const char* const extension){#ifdef CASE_INSENSITIVE_FILENAMES    return stringListHasInsensitive (list, extension);#else    return stringListHas (list, extension);#endif}static boolean fileNameMatched (const vString* const vpattern,				const char* const fileName){    const char* const pattern = vStringValue (vpattern);#if defined (HAVE_FNMATCH)    return (boolean) (fnmatch (pattern, fileName, 0) == 0);#elif defined (CASE_INSENSITIVE_FILENAMES)    return (boolean) (strcasecmp (pattern, fileName) == 0);#else    return (boolean) (strcmp (pattern, fileName) == 0);#endif}extern boolean stringListFileMatched (const stringList* const list,				      const char* const fileName){    boolean result = FALSE;    unsigned int i;    for (i = 0  ;  ! result  &&  i < stringListCount (list)  ;  ++i)	result = fileNameMatched (stringListItem (list, i), fileName);    return result;}extern void stringListPrint (const stringList *const current){    unsigned int i;    Assert (current != NULL);    for (i = 0  ;  i < current->count  ;  ++i)	printf ("%s%s", (i > 0) ? ", " : "", vStringValue (current->list [i]));}/* vi:set tabstop=8 shiftwidth=4: */

⌨️ 快捷键说明

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