diff --git a/include/common/buf.h b/include/common/buf.h
index 33830f7..ad2e2ba 100644
--- a/include/common/buf.h
+++ b/include/common/buf.h
@@ -311,6 +311,38 @@
 	return right - left;
 }
 
+/* b_getblk() : gets one full block of data at once from a buffer, starting
+ * from offset <offset> after the buffer's head, and limited to no more than
+ * <len> bytes. The caller is responsible for ensuring that neither <offset>
+ * nor <offset>+<len> exceed the total number of bytes available in the buffer.
+ * Return values :
+ *   >0 : number of bytes read, equal to requested size.
+ *   =0 : not enough data available. <blk> is left undefined.
+ * The buffer is left unaffected.
+ */
+static inline size_t b_getblk(const struct buffer *buf, char *blk, size_t len, size_t offset)
+{
+	size_t firstblock;
+
+	if (len + offset > b_data(buf))
+		return 0;
+
+	firstblock = b_wrap(buf) - b_head(buf);
+	if (firstblock > offset) {
+		if (firstblock >= len + offset) {
+			memcpy(blk, b_head(buf) + offset, len);
+			return len;
+		}
+
+		memcpy(blk, b_head(buf) + offset, firstblock - offset);
+		memcpy(blk + firstblock - offset, b_orig(buf), len - firstblock + offset);
+		return len;
+	}
+
+	memcpy(blk, b_orig(buf) + offset - firstblock, len);
+	return len;
+}
+
 
 /*********************************************/
 /* Functions used to modify the buffer state */
diff --git a/include/common/buffer.h b/include/common/buffer.h
index 10ff640..896e050 100644
--- a/include/common/buffer.h
+++ b/include/common/buffer.h
@@ -326,35 +326,6 @@
 	return bo_putblk(b, chk->str, chk->len);
 }
 
-/* Gets one full block of data at once from a buffer's output, optionally
- * starting at a specific offset. Return values :
- *   >0 : number of bytes read, equal to requested size.
- *   =0 : not enough data available. <blk> is left undefined.
- * The buffer is left unaffected.
- */
-static inline int bo_getblk(const struct buffer *buf, char *blk, int len, int offset)
-{
-	int firstblock;
-
-	if (len + offset > buf->o)
-		return 0;
-
-	firstblock = buf->data + buf->size - b_head(buf);
-	if (firstblock > offset) {
-		if (firstblock >= len + offset) {
-			memcpy(blk, b_head(buf) + offset, len);
-			return len;
-		}
-
-		memcpy(blk, b_head(buf) + offset, firstblock - offset);
-		memcpy(blk + firstblock - offset, buf->data, len - firstblock + offset);
-		return len;
-	}
-
-	memcpy(blk, buf->data + offset - firstblock, len);
-	return len;
-}
-
 /* Gets one or two blocks of data at once from a buffer's output.
  * Return values :
  *   >0 : number of blocks filled (1 or 2). blk1 is always filled before blk2.
diff --git a/src/channel.c b/src/channel.c
index fc1bf12..4251417 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -295,13 +295,13 @@
 	if (chn->flags & CF_SHUTW)
 		return -1;
 
-	if (len + offset > chn->buf->o) {
+	if (len + offset > co_data(chn)) {
 		if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW))
 			return -1;
 		return 0;
 	}
 
-	return bo_getblk(chn->buf, blk, len, offset);
+	return b_getblk(chn->buf, blk, len, offset);
 }
 
 /* Gets one or two blocks of data at once from a channel's output buffer.
