snadd() function;

master
Alexander Vdolainen 5 years ago
parent f5c0db55ac
commit e78adae9d6

@ -97,6 +97,17 @@ extern "C" {
*/
CSTRING *sadd(CSTRING *s, char *a);
/**
* Concatenate the len bytes of the second argument to the CSTRING
* passed in the first.
* A NULL return value indicates that something went wrong and that
* sexp_errno should be checked for the cause. The contents of s are
* left alone. As such, the caller should check the pointer returned
* before overwriting the value of s, as this may result in a memory
* leak if an error condition occurs.
*/
CSTRING *snadd(CSTRING *s, char *a, size_t len);
/**
* Append a character to the end of the CSTRING.
* A NULL return value indicates that something went wrong and that

@ -86,7 +86,18 @@ CSTRING *snew(size_t s) {
return cs;
}
CSTRING *sadd(CSTRING *s, char *a) {
CSTRING *sadd(CSTRING *s, char *a)
{
size_t len = strlen(a);
if(!s) return NULL;
if(!a || !len) return s;
return snadd(s, a, len);
}
CSTRING *snadd(CSTRING *s, char *a, size_t len)
{
size_t alen;
char *newbase;
@ -100,7 +111,7 @@ CSTRING *sadd(CSTRING *s, char *a) {
return s;
}
alen = strlen(a);
alen = len;
if (s->curlen + alen >= s->len) {
#ifdef __cplusplus
@ -128,6 +139,7 @@ CSTRING *sadd(CSTRING *s, char *a) {
memcpy(&s->base[s->curlen], a, alen);
s->curlen += alen;
s->base[s->curlen] = 0;
return s;
}

Loading…
Cancel
Save