summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/utils.c25
-rw-r--r--src/common/utils.h2
2 files changed, 27 insertions, 0 deletions
diff --git a/src/common/utils.c b/src/common/utils.c
index d6a017c95..3dc7fea16 100644
--- a/src/common/utils.c
+++ b/src/common/utils.c
@@ -123,6 +123,31 @@ int StringBuf_Append(struct StringBuf *buf1,const struct StringBuf *buf2)
return (int)(buf1->ptr_ - buf1->buf_);
}
+// Appends str onto the end of buf
+int StringBuf_AppendStr(struct StringBuf* sbuf, const char* str)
+{
+ int available = sbuf->max_ - (sbuf->ptr_ - sbuf->buf_);
+ int size = (int)strlen(str);
+
+ if( size >= available )
+ {// not enough space, expand the buffer (minimum expansion = 1024)
+ int off = (int)(sbuf->ptr_ - sbuf->buf_);
+ sbuf->max_ += max(size, 1024);
+ sbuf->buf_ = (char *) aRealloc(sbuf->buf_, sbuf->max_ + 1);
+ sbuf->ptr_ = sbuf->buf_ + off;
+ }
+
+ memcpy(sbuf->ptr_, str, size);
+ sbuf->ptr_ += size;
+ return (int)(sbuf->ptr_ - sbuf->buf_);
+}
+
+// Returns the length of the data in a Stringbuf
+int StringBuf_Length(struct StringBuf *sbuf)
+{
+ return (int)(sbuf->ptr_ - sbuf->buf_);
+}
+
// Destroy a StringBuf [MouseJstr]
void StringBuf_Destroy(struct StringBuf *sbuf)
{
diff --git a/src/common/utils.h b/src/common/utils.h
index 3ee419c6f..ec9cb5416 100644
--- a/src/common/utils.h
+++ b/src/common/utils.h
@@ -23,6 +23,8 @@ void StringBuf_Init(struct StringBuf *);
int StringBuf_Vprintf(struct StringBuf *,const char *,va_list);
int StringBuf_Printf(struct StringBuf *,const char *,...);
int StringBuf_Append(struct StringBuf *,const struct StringBuf *);
+int StringBuf_AppendStr(struct StringBuf* sbuf, const char* str);
+int StringBuf_Length(struct StringBuf* sbuf);
char * StringBuf_Value(struct StringBuf *);
void StringBuf_Destroy(struct StringBuf *);
void StringBuf_Free(struct StringBuf *);