Reworked scanf() testing. General cleanups.
[fw/pdclib] / functions / _PDCLIB / print.c
index 8d19fe57e856ad3c6c564f81b758de4157febba2..5027c5fa8e5aaada9972292fa590a1c40b359a95 100644 (file)
    i - pointer to number of characters already delivered in this call
    n - pointer to maximum number of characters to be delivered in this call
    s - the buffer into which the character shall be delivered
-   TODO: ref. fputs() for a better way to buffer handling
 */
 #define DELIVER( x ) \
 do { \
+    int character = x; \
     if ( status->i < status->n ) { \
         if ( status->stream != NULL ) \
-            putc( x, status->stream ); \
+            putc( character, status->stream ); \
         else \
-            status->s[status->i] = x; \
+            status->s[status->i] = character; \
     } \
     ++(status->i); \
 } while ( 0 )
@@ -498,7 +498,7 @@ const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status
                 ++(status->current);
             }
         }
-        if ( status->i >= status->n )
+        if ( status->i >= status->n && status->n > 0 )
         {
             status->s[status->n - 1] = '\0';
         }
@@ -507,10 +507,10 @@ const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status
 }
 
 #ifdef TEST
-#include <_PDCLIB_test.h>
+#define _PDCLIB_FILEID "_PDCLIB/print.c"
+#define _PDCLIB_STRINGIO
 
-#include <limits.h>
-#include <string.h>
+#include <_PDCLIB_test.h>
 
 static int testprintf( char * buffer, const char * format, ... )
 {
@@ -538,13 +538,10 @@ static int testprintf( char * buffer, const char * format, ... )
 
 #define TEST_CONVERSION_ONLY
 
-#define TESTCASE_SPRINTF( x ) if ( strcmp( target, x ) == 0 ) {} \
-                              else { TEST_RESULTS += 1; printf( "FAILED: " __FILE__ ", line %d - \"%s\" != %s\n", __LINE__, target, #x ); }
-
 int main( void )
 {
     char target[100];
-#include "printf_testcases.incl"
+#include "printf_testcases.h"
     return TEST_RESULTS;
 }