diff --git a/Documentation/NuttxUserGuide.html b/Documentation/NuttxUserGuide.html
index 366b9ae97f..43a9667c72 100644
--- a/Documentation/NuttxUserGuide.html
+++ b/Documentation/NuttxUserGuide.html
@@ -8681,6 +8681,7 @@ int fsetpos(FILE *stream, fpos_t *pos);
long ftell(FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t n_items, FILE *stream);
char *gets(char *s);
+void setbuf(FAR FILE *stream, FAR char *buf);
int setvbuf(FAR FILE *stream, FAR char *buffer, int mode, size_t size);
int ungetc(int c, FAR FILE *stream);
diff --git a/include/stdio.h b/include/stdio.h
index c0aefded7f..5fc7a7c750 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -164,6 +164,7 @@ size_t fwrite(FAR const void *ptr, size_t size, size_t n_items,
FAR FILE *stream);
FAR char *gets(FAR char *s);
FAR char *gets_s(FAR char *s, rsize_t n);
+void setbuf(FAR FILE *stream, FAR char *buf);
int setvbuf(FAR FILE *stream, FAR char *buffer, int mode, size_t size);
int ungetc(int c, FAR FILE *stream);
diff --git a/libc/stdio/Make.defs b/libc/stdio/Make.defs
index 9a3a36ddb1..411fa98686 100644
--- a/libc/stdio/Make.defs
+++ b/libc/stdio/Make.defs
@@ -74,7 +74,7 @@ CSRCS += lib_tempnam.c lib_tmpnam.c
endif
ifneq ($(CONFIG_STDIO_DISABLE_BUFFERING),y)
-CSRCS += lib_setvbuf.c
+CSRCS += lib_setbuf.c lib_setvbuf.c
endif
endif
diff --git a/libc/stdio/lib_setbuf.c b/libc/stdio/lib_setbuf.c
new file mode 100644
index 0000000000..f5fb435192
--- /dev/null
+++ b/libc/stdio/lib_setbuf.c
@@ -0,0 +1,92 @@
+/****************************************************************************
+ * libc/stdio/lib_setbuf.c
+ *
+ * Copyright (C) 2017 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT will THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include
+
+#include
+#include
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: setbuf
+ *
+ * Description:
+ * Except that it returns no value, the function call setbuf(stream, buf)
+ * is equivalent to:
+ *
+ * setvbuf(stream, buf, _IOFBF, BUFSIZ)
+ *
+ * if buf is not a null pointer, or to:
+ *
+ * setvbuf(stream, buf, _IONBF, BUFSIZ)
+ *
+ * if buf is a null pointer.
+ *
+ * EXCEPTION: Currently, the NuttX setvbuf() expects the size argument to
+ * be zero if the mode is __INOBF. That is a descrepancy! What would a
+ * non-zero size mean in that case?
+ *
+ * Input Parameters:
+ * stream - The stream whose buffer will be modified
+ * buffer - If non-NULL, this is user allocated buffer of size BUFSIZ. If
+ * NULL, setvbuf will disable buffering
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+void setbuf(FAR FILE *stream, FAR char *buf)
+{
+ DEBUGASSERT(stream != NULL);
+
+#ifndef CONFIG_STDIO_DISABLE_BUFFERING
+ if (buf != NULL)
+ {
+ (void)setvbuf(stream, buf, _IOFBF, BUFSIZ);
+ }
+ else
+ {
+ (void)setvbuf(stream, NULL, _IONBF, 0);
+ }
+#endif
+}
diff --git a/libc/stdio/lib_setvbuf.c b/libc/stdio/lib_setvbuf.c
index 7d30a6ea88..65786cdedd 100644
--- a/libc/stdio/lib_setvbuf.c
+++ b/libc/stdio/lib_setvbuf.c
@@ -42,6 +42,7 @@
#include
#include
+#include
#include
#include
#include
@@ -74,17 +75,17 @@
* by the setvbuf() function. The contents of the array at any time are
* unspecified.
*
- * Parmeters:
- * stream - the stream to flush
- * buffer - the user allocate buffer. If NULL, will allocates a buffer of
- * specified size
- * mode - specifies a mode for file buffering
- * size - size of buffer
+ * Input Parameters:
+ * stream - the stream to flush
+ * buffer - the user allocate buffer. If NULL, will allocates a buffer of
+ * specified size
+ * mode - specifies a mode for file buffering
+ * size - size of buffer
*
- * Return:
- * Upon successful completion, setvbuf() will return 0. Otherwise, it will
- * return a non-zero value if an invalid value is given for type or if the
- * request cannot be honored, [CX] and may set errno to indicate the error
+ * Returned Value:
+ * Upon successful completion, setvbuf() will return 0. Otherwise, it will
+ * return a non-zero value if an invalid value is given for type or if the
+ * request cannot be honored, [CX] and may set errno to indicate the error
*
****************************************************************************/