strbuf.c

来自「libbt-1.01 BT应用软件 是BT客户端的源代码」· C语言 代码 · 共 126 行

C
126
字号
#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 + =
减小字号Ctrl + -
显示快捷键?