diff options
author | Christian Pointner <equinox@anytun.org> | 2007-06-18 16:27:43 +0000 |
---|---|---|
committer | Christian Pointner <equinox@anytun.org> | 2007-06-18 16:27:43 +0000 |
commit | a535453d0378fc6674b5af9eac8e608d907a8f9f (patch) | |
tree | 18f9bb1e7ef1d27a7f9e7763d23b9d0c30dea361 /buffer.cpp | |
parent | I-D anytun some typos (diff) |
bugfix @buffer resize
added buffer resizefront & back
added package
Diffstat (limited to 'buffer.cpp')
-rw-r--r-- | buffer.cpp | 31 |
1 files changed, 29 insertions, 2 deletions
@@ -85,7 +85,7 @@ void Buffer::operator=(const Buffer &src) length_ = 0; } -u_int32_t Buffer::resize(u_int32_t new_length) +u_int32_t Buffer::resizeFront(u_int32_t new_length) { if(length_ == new_length) return length_; @@ -96,7 +96,34 @@ u_int32_t Buffer::resize(u_int32_t new_length) if(buf_) { - std::memcpy(tmp, buf_, length_); + u_int8_t *src=buf_, *dest=tmp; + if(length_ < new_length) + dest = &dest[new_length - length_]; + else + src = &src[length_ - new_length]; + u_int32_t len = length_ < new_length ? length_ : new_length; + std::memcpy(dest, src, len); + delete[] buf_; + } + + length_ = new_length; + buf_ = tmp; + return length_; +} + +u_int32_t Buffer::resizeBack(u_int32_t new_length) +{ + if(length_ == new_length) + return length_; + + u_int8_t *tmp = new u_int8_t[new_length]; + if(!tmp) + return length_; + + if(buf_) + { + u_int32_t len = length_ < new_length ? length_ : new_length; + std::memcpy(tmp, buf_, len); delete[] buf_; } |