diff packages/language/c/libc/current/src/stdio/output/fputc.cxx @ 26:4741a3c3496a ecos-sw-1999-07-23

Merge from eCos master repository on 1999-07-23-05:47:06-BST
author jlarmour
date Fri, 23 Jul 1999 15:20:15 +0000
parents 443894e2e912
children c38311975d4f
line wrap: on
line diff
--- a/packages/language/c/libc/current/src/stdio/output/fputc.cxx
+++ b/packages/language/c/libc/current/src/stdio/output/fputc.cxx
@@ -2,7 +2,7 @@
 //
 //      fputc.cxx
 //
-//      ANSI Stdio fputc() function
+//      ISO Standard I/O character output functions
 //
 //===========================================================================
 //####COPYRIGHTBEGIN####
@@ -29,10 +29,11 @@
 //===========================================================================
 //#####DESCRIPTIONBEGIN####
 //
-// Author(s):   jlarmour
-// Contributors:  jlarmour
-// Date:        1998-02-13
-// Purpose:     
+// Author(s):    jlarmour
+// Contributors: jlarmour
+// Date:         1999-07-16
+// Purpose:      Provide the fputc() function. Also provides the function
+//               versions of putc() and putchar()
 // Description: 
 // Usage:       
 //
@@ -44,46 +45,71 @@
 
 #include <pkgconf/libc.h>   // Configuration header
 
-// Include the C library? And do we want the stdio stuff?
-#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO)
+// Do we want the stdio stuff?
+#ifdef CYGPKG_LIBC_STDIO
 
 // INCLUDES
 
 #include <cyg/infra/cyg_type.h>     // Common project-wide type definitions
+#include <cyg/infra/cyg_ass.h>      // Standard eCos assertion support
+#include <cyg/infra/cyg_trac.h>     // Standard eCos tracing support
 #include <stddef.h>                 // NULL and size_t from compiler
 #include <stdio.h>                  // header for this file
 #include <errno.h>                  // error codes
-#include "clibincl/stdiosupp.hxx"   // Support functions for stdio
 #include "clibincl/stream.hxx"      // Cyg_StdioStream
 
-// EXPORTED SYMBOLS
-
-externC int
-fputc( int, FILE * ) CYGPRI_LIBC_WEAK_ALIAS("_fputc");
-
 // FUNCTIONS
 
 externC int
-_fputc( int c, FILE *stream )
+__fputc( int c, FILE *stream )
 {
     Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream;
     Cyg_ErrNo err;
     cyg_uint8 real_c = (cyg_uint8) c;
     
+    CYG_REPORT_FUNCNAMETYPE("__fputc", "wrote char %d");
+    CYG_REPORT_FUNCARG2( "c = %d, stream=%08x", c, stream );
+    
+    CYG_CHECK_DATA_PTR( stream, "stream is not a valid pointer" );
+
     err = real_stream->write_byte( real_c );
 
     if (err)
     {
         real_stream->set_error( err );
         errno = err;
+        CYG_REPORT_RETVAL(EOF);
         return EOF;
     } // if
     
-    
+    CYG_REPORT_RETVAL((int)real_c);
     return (int)real_c;
 
-} // _fputc()
+} // __fputc()
+
+
+externC int
+__putchar( int c )
+{
+    return fputc( c, stdout );
+} // __putchar()
+
+// EXPORTED SYMBOLS
 
-#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO)
+externC int
+fputc( int, FILE * ) CYGBLD_ATTRIB_WEAK_ALIAS(__fputc);
+
+// Also define putc() and putchar() even though they can be macros.
+// Undefine the macros first though
+#undef putc
+#undef putchar
+
+externC int
+putc( int, FILE * ) CYGBLD_ATTRIB_WEAK_ALIAS(__fputc);
+
+externC int
+putchar( int ) CYGBLD_ATTRIB_WEAK_ALIAS(__putchar);
+
+#endif // ifdef CYGPKG_LIBC_STDIO
 
 // EOF fputc.cxx