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

📄 strbuf.c

📁 libbt-1.01 BT应用软件 是BT客户端的源代码
💻 C
字号:
#include "config.h"#ifdef WITH_DMALLOC#include <dmalloc.h>#endif /* WITH_DMALLOC */#include <string.h>#ifdef HAVE_STRINGS_H#include <strings.h>#endif#include "strbuf.h"#ifndef max#define max(x,y) ((x)>(y)?(x):(y))#endif#if WIN32#   define vsnprintf _vsnprintf#endifkStringBuffer*kStringBuffer_create( kStringBuffer* _sb) {    kStringBuffer *sb;    if (_sb) {	sb = _sb;    } else {	sb = malloc( sizeof( kStringBuffer));    }    memset( sb, 0, sizeof( kStringBuffer));    return sb;}voidkStringBuffer_finit( kStringBuffer* sb) {    if (sb) {	if ( sb->buf)	    free( sb->buf);	sb->buf = NULL;	sb->bufsize = 0;	sb->cpos = 0;    }}intkStringBuffer_grow( kStringBuffer *sb, int len) {    sb->bufsize += len;    sb->buf = realloc( sb->buf, sb->bufsize);    assert(sb->buf);    return 0;}voidsbclear( kStringBuffer* sb) {    kStringBuffer_finit( sb);}intvsbprintf( kStringBuffer *sb, char *fmt, va_list va) {    int len;    len = vsnprintf( sb->buf + sb->cpos, sb->bufsize - sb->cpos, fmt, va);    if (len < 0 || sb->cpos+len >= sb->bufsize) {        kStringBuffer_grow( sb, max(len+1, 1024));	if (!sb->buf) return -1;	len = vsnprintf( sb->buf + sb->cpos, sb->bufsize - sb->cpos, fmt, va);    }    sb->cpos += len;    assert( sb->cpos < sb->bufsize);    return len;}intsbprintf( kStringBuffer *sb, char *fmt, ...) {    int len;    va_list va;    va_start( va, fmt);    len = vsbprintf( sb, fmt, va);    va_end( va);    return len;}int sbputc( kStringBuffer *sb, char c) {    if (sb->cpos + 1 >= sb->bufsize) {	kStringBuffer_grow( sb, 1024);	if (!sb->buf) return -1;    }    sb->buf[sb->cpos++] = c;    sb->buf[sb->cpos] = 0;    return 0;}intsbstrcat( kStringBuffer *sb, char *str) {    return sbcat( sb, str, strlen(str));}intsbcat( kStringBuffer *sb, char *str, int len) {    assert( len >= 0);    if (sb->cpos + len >= sb->bufsize) {	kStringBuffer_grow( sb, max( len+1, 1024));	if (!sb->buf) return -1;    }    memcpy(sb->buf + sb->cpos, str, len);    sb->cpos += len;    sb->buf[sb->cpos] = 0;    return 0;}intsbtail( kStringBuffer *sb, int start_char) {    memmove( sb->buf, sb->buf + start_char, sb->cpos - start_char);    sb->cpos -= start_char;    sb->buf[sb->cpos] = 0;    return 0;}int sbindex( kStringBuffer *sb, int ch) {    int count=0;    char *s = sb->buf;    while (count < sb->cpos && *s != ch) s++, count++;    if (count < sb->cpos) return count;    return -1;}

⌨️ 快捷键说明

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