#include "php.h"
#include "phpstr.h"
-#ifndef PHPSTR_DEFAULT_SIZE
-#define PHPSTR_DEFAULT_SIZE 256
-#endif
-
PHPSTR_API phpstr *phpstr_init_ex(phpstr *buf, size_t chunk_size, zend_bool pre_alloc)
{
if (!buf) {
- buf = ecalloc(1, sizeof(phpstr));
+ buf = emalloc(sizeof(phpstr));
}
buf->size = chunk_size > 0 ? chunk_size : PHPSTR_DEFAULT_SIZE;
return buf;
}
-PHPSTR_API phpstr *phpstr_from_string_ex(phpstr *buf, char *string, size_t length)
+PHPSTR_API phpstr *phpstr_from_string_ex(phpstr *buf, const char *string, size_t length)
{
buf = phpstr_init(buf);
phpstr_append(buf, string, length);
}
}
-PHPSTR_API void phpstr_append(phpstr *buf, const char *append, size_t append_len)
+PHPSTR_API size_t phpstr_append(phpstr *buf, const char *append, size_t append_len)
{
phpstr_resize(buf, append_len);
memcpy(buf->data + buf->used, append, append_len);
buf->used += append_len;
buf->free -= append_len;
+ return append_len;
}
PHPSTR_API size_t phpstr_appendf(phpstr *buf, const char *format, ...)
return append_len;
}
-PHPSTR_API void phpstr_insert(phpstr *buf, const char *insert, size_t insert_len, size_t offset)
+PHPSTR_API size_t phpstr_insert(phpstr *buf, const char *insert, size_t insert_len, size_t offset)
{
phpstr_resize(buf, insert_len);
memmove(buf->data + offset + insert_len, buf->data + offset, insert_len);
memcpy(buf->data + offset, insert, insert_len);
buf->used += insert_len;
buf->free -= insert_len;
+ return insert_len;
}
PHPSTR_API size_t phpstr_insertf(phpstr *buf, size_t offset, const char *format, ...)
return insert_len;
}
-PHPSTR_API void phpstr_prepend(phpstr *buf, const char *prepend, size_t prepend_len)
+PHPSTR_API size_t phpstr_prepend(phpstr *buf, const char *prepend, size_t prepend_len)
{
phpstr_resize(buf, prepend_len);
memmove(buf->data + prepend_len, buf->data, buf->used);
memcpy(buf->data, prepend, prepend_len);
buf->used += prepend_len;
buf->free -= prepend_len;
+ return prepend_len;
}
PHPSTR_API size_t phpstr_prependf(phpstr *buf, const char *format, ...)
PHPSTR_API void phpstr_dtor(phpstr *buf)
{
- if (buf->data) {
- efree(buf->data);
- buf->data = NULL;
- }
+ STR_SET(buf->data, NULL);
buf->used = 0;
buf->free = 0;
}
-PHPSTR_API void phpstr_free(phpstr *buf)
+PHPSTR_API void phpstr_free(phpstr **buf)
{
- if (buf) {
- phpstr_dtor(buf);
- efree(buf);
+ if (*buf) {
+ phpstr_dtor(*buf);
+ efree(*buf);
+ *buf = NULL;
}
}