Normally buffer_get copies data to x, x, ...,
x[len-1] from the beginning of a string stored in
preallocated space; removes these len bytes from the string; and
If, however, the string has fewer than len (but more than 0)
bytes, buffer_get copies only that many bytes, and returns that number.
If the string is empty, buffer_get first uses a read operation to
feed data into the string. The read operation may indicate end of
input, in which case buffer_get returns 0; or a read error, in which
case buffer_get returns -1, setting errno approporiately.
The preallocated space and the read operation are specified by
b. You must initialize b using buffer_init before calling
buffer_get (or use the pre-initialized buffer_0).