class raw_char : public raw {
public:
raw_char(unsigned l) : raw(l) {
- data = new char[len];
+ if (len)
+ data = new char[len];
+ else
+ data = 0;
inc_total_alloc(len);
}
~raw_char() {
}
}
void append(const ptr& bp) {
- push_back(bp);
+ if (bp.length())
+ push_back(bp);
}
void append(const ptr& bp, unsigned off, unsigned len) {
assert(len+off <= bp.length());
{
__u32 len = bp.length();
encode(len, bl);
- bl.append(bp);
+ if (len)
+ bl.append(bp);
}
inline void decode(buffer::ptr& bp, bufferlist::iterator& p)
{
bufferlist s;
p.copy(len, s);
- if (s.buffers().size() == 1)
- bp = s.buffers().front();
- else
- bp = buffer::copy(s.c_str(), s.length());
+ if (len) {
+ if (s.buffers().size() == 1)
+ bp = s.buffers().front();
+ else
+ bp = buffer::copy(s.c_str(), s.length());
+ }
}
// bufferlist (encapsulated)