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

📄 vstring.c

📁 ctags-5.5.4.tar.gz,一个很好的代码开发以及编辑源码
💻 C
字号:
/**   $Id: vstring.c,v 1.8 2002/09/30 04:30:47 darren Exp $**   Copyright (c) 1998-2002, Darren Hiebert**   This source code is released for free distribution under the terms of the*   GNU General Public License.**   This module contains functions supporting resizeable strings.*//**   INCLUDE FILES*/#include "general.h"	/* must always come first */#include <limits.h>	/* to define INT_MAX */#include <string.h>#include <ctype.h>#include "debug.h"#include "routines.h"#include "vstring.h"/**   DATA DEFINITIONS*/static const size_t vStringInitialSize = 32;/**   FUNCTION DEFINITIONS*/static void vStringResize (vString *const string, const size_t newSize){    char *const newBuffer = xRealloc (string->buffer, newSize, char);    string->size = newSize;    string->buffer = newBuffer;}/**   External interface*/extern boolean vStringAutoResize (vString *const string){    boolean ok = TRUE;    if (string->size <= INT_MAX / 2)    {	const size_t newSize = string->size * 2;	vStringResize (string, newSize);    }    return ok;}extern void vStringClear (vString *const string){    string->length = 0;    string->buffer [0] = '\0';    DebugStatement ( clearString (string->buffer, string->size); )}extern void vStringDelete (vString *const string){    if (string != NULL)    {	if (string->buffer != NULL)	    eFree (string->buffer);	eFree (string);    }}extern vString *vStringNew (void){    vString *const string = xMalloc (1, vString);    string->length = 0;    string->size   = vStringInitialSize;    string->buffer = xMalloc (string->size, char);    vStringClear (string);    return string;}#ifndef VSTRING_PUTC_MACROextern void vStringPut (vString *const string, const int c){    if (string->length == string->size)		/*  check for buffer overflow */	vStringAutoResize (string);    string->buffer [string->length] = c;    if (c != '\0')	string->length++;}#endifextern void vStringCatS (vString *const string, const char *const s){#if 1    const size_t len = strlen (s);    while (string->length + len >= string->size)/*  check for buffer overflow */	vStringAutoResize (string);    strcpy (string->buffer + string->length, s);    string->length += len;#else    const char *p = s;    do	vStringPut (string, *p);    while (*p++ != '\0');#endif}extern vString *vStringNewCopy (vString *const string){    vString *vs = vStringNew ();    vStringCatS (vs, string->buffer);    return vs;}extern vString *vStringNewInit (const char *const s){    vString *vs = vStringNew ();    vStringCatS (vs, s);    return vs;}extern void vStringNCatS (vString *const string, const char *const s,			  const size_t length){    const char *p = s;    size_t remain = length;    while (*p != '\0'  &&  remain > 0)    {	vStringPut (string, *p);	--remain;	++p;    }    vStringTerminate (string);}/*  Strip trailing newline from string. */extern void vStringStripNewline (vString *const string){    const size_t final = string->length - 1;    if (string->buffer [final] == '\n')    {	string->buffer [final] = '\0';	string->length--;    }}/*  Strip leading white space from string. */extern void vStringStripLeading (vString *const string){    while (isspace ((int) string->buffer [0]) && string->length > 0)    {	size_t i;	for (i = 1  ;  i < string->length  ;  ++i)	    string->buffer [i - 1] = string->buffer [i];	--string->length;	string->buffer [string->length] = '\0';    }}/*  Strip trailing white space from string. */extern void vStringStripTrailing (vString *const string){    while (isspace ((int) string->buffer [string->length - 1]) &&	   string->length > 0)    {	string->length--;	string->buffer [string->length] = '\0';    }}/*  Chop last character from string. */extern void vStringChop (vString *const string){    if (string->length > 0)    {	--string->length;	string->buffer [string->length] = '\0';    }}extern void vStringCopyS (vString *const string, const char *const s){    vStringClear (string);    vStringCatS (string, s);}extern void vStringNCopyS (vString *const string, const char *const s,			   const size_t length){    vStringClear (string);    vStringNCatS (string, s, length);}extern void vStringCopyToLower (vString *const dest, const vString *const src){    const size_t length = src->length;    const char *s = src->buffer;    char *d;    size_t i;    if (dest->size < src->size)	vStringResize (dest, src->size);    d = dest->buffer;    for (i = 0  ;  i < length  ;  ++i)    {	int c = s [i];	d [i] = tolower (c);    }    d [i] = '\0';}extern void vStringSetLength (vString *const string){    string->length = strlen (string->buffer);}/* vi:set tabstop=8 shiftwidth=4: */

⌨️ 快捷键说明

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