this uses bufferptr instead of bufferlist.  was that deliberate? usually we work in terms of bufferlists and any buffer flattening happens implicitly when you call c_str().