diff options
author | Tim Kientzle <kientzle@FreeBSD.org> | 2008-12-06 05:56:43 +0000 |
---|---|---|
committer | Tim Kientzle <kientzle@FreeBSD.org> | 2008-12-06 05:56:43 +0000 |
commit | 0a68927a88dc461977e8a67ce377554bf3202eac (patch) | |
tree | b6fff11ba29c6315c8d2134e75272455cf71b80b /lib | |
parent | fe7350cb225dbf5ba2abb241baa09739e0dbe50b (diff) | |
download | src-0a68927a88dc461977e8a67ce377554bf3202eac.tar.gz src-0a68927a88dc461977e8a67ce377554bf3202eac.zip |
New internal archive_string_concat utility function.
Notes
Notes:
svn path=/head/; revision=185667
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libarchive/archive_string.c | 12 | ||||
-rw-r--r-- | lib/libarchive/archive_string.h | 6 |
2 files changed, 18 insertions, 0 deletions
diff --git a/lib/libarchive/archive_string.c b/lib/libarchive/archive_string.c index d06b72a2e96f..fc6a344e9479 100644 --- a/lib/libarchive/archive_string.c +++ b/lib/libarchive/archive_string.c @@ -70,6 +70,18 @@ __archive_string_copy(struct archive_string *dest, struct archive_string *src) } void +__archive_string_concat(struct archive_string *dest, struct archive_string *src) +{ + if (src->length > 0) { + if (__archive_string_ensure(dest, dest->length + src->length + 1) == NULL) + __archive_errx(1, "Out of memory"); + memcpy(dest->s + dest->length, src->s, src->length); + dest->length += src->length; + dest->s[dest->length] = 0; + } +} + +void __archive_string_free(struct archive_string *as) { as->length = 0; diff --git a/lib/libarchive/archive_string.h b/lib/libarchive/archive_string.h index 819be757fa59..73e527dee71a 100644 --- a/lib/libarchive/archive_string.h +++ b/lib/libarchive/archive_string.h @@ -92,6 +92,12 @@ __archive_string_copy(struct archive_string *dest, struct archive_string *src); #define archive_string_copy(dest, src) \ __archive_string_copy(dest, src) +/* Concatenate one archive_string to another */ +void +__archive_string_concat(struct archive_string *dest, struct archive_string *src); +#define archive_string_concat(dest, src) \ + __archive_string_concat(dest, src) + /* Ensure that the underlying buffer is at least as large as the request. */ struct archive_string * __archive_string_ensure(struct archive_string *, size_t); |