* buf. Note that this can allocate a new buffer, or
* change geometry of the orignial buffer. The new buffer
* is returned in the (new_buf).
* buf. Note that this can allocate a new buffer, or
* change geometry of the orignial buffer. The new buffer
* is returned in the (new_buf).