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 )
++(status->current);
}
}
- if ( status->i >= status->n )
+ if ( status->i >= status->n && status->n > 0 )
{
status->s[status->n - 1] = '\0';
}
}
#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, ... )
{
#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;
}