diff --git a/include/common/buf.h b/include/common/buf.h
index c38d65d..a7bbb1f 100644
--- a/include/common/buf.h
+++ b/include/common/buf.h
@@ -447,6 +447,53 @@
 	b->head = b_size(b) - output;
 }
 
+/* b_putchar() : tries to append char <c> at the end of buffer <b>. Supports
+ * wrapping. Data are truncated if buffer is full.
+ */
+static inline void b_putchr(struct buffer *b, char c)
+{
+	if (b_full(b))
+		return;
+	*b_tail(b) = c;
+	b->len++;
+}
+
+/* b_putblk() : tries to append block <blk> at the end of buffer <b>. Supports
+ * wrapping. Data are truncated if buffer is too short. It returns the number
+ * of bytes copied.
+ */
+static inline size_t b_putblk(struct buffer *b, const char *blk, size_t len)
+{
+	size_t half;
+
+	if (len > b_room(b))
+		len = b_room(b);
+	if (!len)
+		return 0;
+
+	half = b_contig_space(b);
+	if (half > len)
+		half = len;
+
+	memcpy(b_tail(b), blk, half);
+	b->len += half;
+	if (len > half) {
+		memcpy(b_tail(b), blk + half, len - half);
+		b->len += len - half;
+	}
+	return len;
+}
+
+/* b_putstr() : tries to copy string <str> into output data at buffer <b>.
+ * Supports wrapping. Data are truncated if buffer is too short. It returns the
+ * number of bytes copied.
+ */
+static inline size_t b_putstr(struct buffer *b, const char *str)
+{
+	return b_putblk(b, str, strlen(str));
+}
+
+
 #endif /* _COMMON_BUF_H */
 
 /*
diff --git a/include/common/buffer.h b/include/common/buffer.h
index d7bfb96..d76bc01 100644
--- a/include/common/buffer.h
+++ b/include/common/buffer.h
@@ -116,116 +116,6 @@
 	return buffer_replace2(b, pos, end, str, strlen(str));
 }
 
-/* Tries to append char <c> at the end of buffer <b>. Supports wrapping. Data
- * are truncated if buffer is full.
- */
-static inline void bo_putchr(struct buffer *b, char c)
-{
-	if (b_data(b) == b->size)
-		return;
-	*b_tail(b) = c;
-	b->len++;
-}
-
-/* Tries to append block <blk> at the end of buffer <b>. Supports wrapping.
- * Data are truncated if buffer is too short. It returns the number of bytes
- * copied.
- */
-static inline unsigned int bo_putblk(struct buffer *b, const char *blk, unsigned int len)
-{
-	unsigned int half;
-
-	if (len > b_room(b))
-		len = b_room(b);
-	if (!len)
-		return 0;
-
-	half = b_contig_space(b);
-	if (half > len)
-		half = len;
-
-	memcpy(b_tail(b), blk, half);
-	b->len += half;
-	if (len > half) {
-		memcpy(b_tail(b), blk + half, len - half);
-		b->len += len - half;
-	}
-	return len;
-}
-
-/* Tries to copy string <str> into output data at buffer <b>. Supports wrapping.
- * Data are truncated if buffer is too short. It returns the number of bytes
- * copied.
- */
-static inline int bo_putstr(struct buffer *b, const char *str)
-{
-	return bo_putblk(b, str, strlen(str));
-}
-
-/* Tries to copy chunk <chk> into output data at buffer <b>. Supports wrapping.
- * Data are truncated if buffer is too short. It returns the number of bytes
- * copied.
- */
-static inline int bo_putchk(struct buffer *b, const struct chunk *chk)
-{
-	return bo_putblk(b, chk->str, chk->len);
-}
-
-/* Tries to write char <c> into input data at buffer <b>. Supports wrapping.
- * Data are truncated if buffer is full.
- */
-static inline void bi_putchr(struct buffer *b, char c)
-{
-	if (b_data(b) == b->size)
-		return;
-	*b_tail(b) = c;
-	b->len++;
-}
-
-/* Tries to append block <blk> at the end of buffer <b>. Supports wrapping.
- * Data are truncated if buffer is too short. It returns the number of bytes
- * copied.
- */
-static inline unsigned int bi_putblk(struct buffer *b, const char *blk, unsigned int len)
-{
-	int half;
-
-	if (len > b_room(b))
-		len = b_room(b);
-	if (!len)
-		return 0;
-
-	half = b_contig_space(b);
-	if (half > len)
-		half = len;
-
-	memcpy(b_tail(b), blk, half);
-	b->len += half;
-	if (len > half) {
-		memcpy(b_tail(b), blk + half, len - half);
-		b->len += len - half;
-	}
-	return len;
-}
-
-/* Tries to copy string <str> into input data at buffer <b>. Supports wrapping.
- * Data are truncated if buffer is too short. It returns the number of bytes
- * copied.
- */
-static inline int bi_putstr(struct buffer *b, const char *str)
-{
-	return bi_putblk(b, str, strlen(str));
-}
-
-/* Tries to copy chunk <chk> into input data at buffer <b>. Supports wrapping.
- * Data are truncated if buffer is too short. It returns the number of bytes
- * copied.
- */
-static inline int bi_putchk(struct buffer *b, const struct chunk *chk)
-{
-	return bi_putblk(b, chk->str, chk->len);
-}
-
 /* Allocates a buffer and replaces *buf with this buffer. If no memory is
  * available, &buf_wanted is used instead. No control is made to check if *buf
  * already pointed to another buffer. The allocated buffer is returned, or
