[MINOR] buffers: inline buffer_si_putchar()

By inlining this function and slightly reordering it, we can double
the getchar/putchar test throughput, and reduce its footprint by about
40 bytes. Also, it was the only non-inlined char-based function, which
now makes it more consistent this time.
diff --git a/include/proto/buffers.h b/include/proto/buffers.h
index 3cde209..66bee89 100644
--- a/include/proto/buffers.h
+++ b/include/proto/buffers.h
@@ -389,6 +389,40 @@
 		return -2;
 }
 
+/* Try to write character <c> into buffer <buf> after length controls. This
+ * work like buffer_feed(buf, &c, 1).
+ * Returns non-zero in case of success, 0 if the buffer was full.
+ * The send limit is automatically adjusted with the amount of data written.
+ */
+static inline int buffer_si_putchar(struct buffer *buf, char c)
+{
+	if (buf->flags & BF_FULL)
+		return 0;
+
+	if (buf->flags & BF_EMPTY) {
+		buf->flags &= ~BF_EMPTY;
+		buf->r = buf->w = buf->lr = buf->data;
+	}
+
+	*buf->r = c;
+
+	buf->l++;
+	if (buf->l >= buf->max_len)
+		buf->flags |= BF_FULL;
+
+	buf->r++;
+	if (buf->r - buf->data == buf->size)
+		buf->r -= buf->size;
+
+	if ((signed)(buf->to_forward - 1) >= 0) {
+		buf->to_forward--;
+		buf->send_max++;
+	}
+
+	buf->total++;
+	return 1;
+}
+
 int buffer_write(struct buffer *buf, const char *msg, int len);
 int buffer_feed(struct buffer *buf, const char *str, int len);
 int buffer_si_putchar(struct buffer *buf, char c);
diff --git a/src/buffers.c b/src/buffers.c
index ee7a5dc..edda459 100644
--- a/src/buffers.c
+++ b/src/buffers.c
@@ -119,38 +119,6 @@
 	return -1;
 }
 
-/* Try to write character <c> into buffer <buf> after length controls. This
- * work like buffer_feed(buf, &c, 1).
- * Returns non-zero in case of success, 0 if the buffer was full.
- * The send limit is automatically adjusted with the amount of data written.
- */
-int buffer_si_putchar(struct buffer *buf, char c)
-{
-	if (buf->flags & BF_FULL)
-		return 0;
-
-	if (!buf->l)
-		buf->r = buf->w = buf->lr = buf->data;
-
-	*buf->r++ = c;
-	buf->l++;
-	buf->total++;
-
-	if (buf->to_forward) {
-		buf->send_max++;
-		buf->to_forward--;
-	}
-
-	if (buf->r == buf->data + buf->size)
-		buf->r = buf->data;
-
-	buf->flags &= ~(BF_EMPTY|BF_FULL);
-	if (buf->l >= buf->max_len)
-		buf->flags |= BF_FULL;
-
-	return 1;
-}
-
 /* Get one text line out of a buffer from a stream interface.
  * Return values :
  *   >0 : number of bytes read. Includes the \n if present before len or end.