[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/build/uClibc/libc/stdio/fputc.c b/ap/build/uClibc/libc/stdio/fputc.c
new file mode 100644
index 0000000..b49f868
--- /dev/null
+++ b/ap/build/uClibc/libc/stdio/fputc.c
@@ -0,0 +1,106 @@
+/* Copyright (C) 2004       Manuel Novoa III    <mjn3@codepoet.org>
+ *
+ * GNU Library General Public License (LGPL) version 2 or later.
+ *
+ * Dedicated to Toni.  See uClibc/DEDICATION.mjn3 for details.
+ */
+
+#include "_stdio.h"
+
+#undef fputc
+#undef fputc_unlocked
+#undef putc
+#undef putc_unlocked
+
+
+#ifdef __DO_UNLOCKED
+
+int __fputc_unlocked(int c, register FILE *stream)
+{
+	__STDIO_STREAM_VALIDATE(stream);
+
+	/* First the fast path.  We're good to go if putc macro enabled. */
+	if (__STDIO_STREAM_CAN_USE_BUFFER_ADD(stream)) {
+		__STDIO_STREAM_BUFFER_ADD(stream, ((unsigned char) c));
+		return (unsigned char) c;
+	}
+
+	/* Next quickest... writing and narrow oriented, but macro
+	 * disabled and/or buffer is full. */
+	if (__STDIO_STREAM_IS_NARROW_WRITING(stream)
+		|| !__STDIO_STREAM_TRANS_TO_WRITE(stream, __FLAG_NARROW)
+		) {
+		if (__STDIO_STREAM_IS_FAKE_VSNPRINTF(stream)) {
+			return (unsigned char) c;
+		}
+
+		if (__STDIO_STREAM_BUFFER_SIZE(stream)) { /* Do we have a buffer? */
+			/* The buffer is full and/or the stream is line buffered. */
+			if (!__STDIO_STREAM_BUFFER_WAVAIL(stream) /* Buffer full? */
+				&& __STDIO_COMMIT_WRITE_BUFFER(stream) /* Commit failed! */
+				) {
+				goto BAD;
+			}
+#ifdef __UCLIBC_MJN3_ONLY__
+#warning CONSIDER: Should we fail if the commit fails but we now have room?
+#endif
+
+			__STDIO_STREAM_BUFFER_ADD(stream, ((unsigned char) c));
+
+			if (__STDIO_STREAM_IS_LBF(stream)) {
+				if ((((unsigned char) c) == '\n')
+					&& __STDIO_COMMIT_WRITE_BUFFER(stream)) {
+					/* Commit failed! */
+					__STDIO_STREAM_BUFFER_UNADD(stream); /* Undo the write! */
+					goto BAD;
+				}
+			}
+		} else {
+			/* NOTE: Do not try to save space by moving uc to the top of
+			 * the file, as that dramaticly increases runtime. */
+			unsigned char uc = (unsigned char) c;
+			if (! __stdio_WRITE(stream, &uc, 1)) {
+				goto BAD;
+			}
+		}
+		return (unsigned char) c;
+	}
+
+ BAD:
+	return EOF;
+}
+libc_hidden_def(__fputc_unlocked)
+
+strong_alias(__fputc_unlocked,fputc_unlocked)
+libc_hidden_def(fputc_unlocked)
+
+strong_alias(__fputc_unlocked,putc_unlocked)
+libc_hidden_def(putc_unlocked)
+#ifndef __UCLIBC_HAS_THREADS__
+strong_alias(__fputc_unlocked,fputc)
+libc_hidden_def(fputc)
+
+strong_alias(__fputc_unlocked,putc)
+libc_hidden_def(putc)
+#endif
+
+#elif defined __UCLIBC_HAS_THREADS__
+
+int fputc(int c, register FILE *stream)
+{
+	if (stream->__user_locking != 0) {
+		return __PUTC_UNLOCKED_MACRO(c, stream);
+	} else {
+		int retval;
+		__STDIO_ALWAYS_THREADLOCK(stream);
+		retval = __PUTC_UNLOCKED_MACRO(c, stream);
+		__STDIO_ALWAYS_THREADUNLOCK(stream);
+		return retval;
+	}
+}
+libc_hidden_def(fputc)
+
+strong_alias(fputc,putc)
+libc_hidden_def(putc)
+
+#endif