📄 strbuf.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 + -