* device/lib/printf_large.c: fixed bug 1193299
authormaartenbrock <maartenbrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 15 May 2005 19:18:08 +0000 (19:18 +0000)
committermaartenbrock <maartenbrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 15 May 2005 19:18:08 +0000 (19:18 +0000)
* support/regression/tests/bug1057979.c: added test %3.3s

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3762 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
device/lib/printf_large.c
support/regression/tests/bug1057979.c

index 630baf5bbaa83f41ec6610198039bb709f12b17b..ff698de01e376cd35f586a394ba5153b22e1153f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-05-15 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * device/lib/printf_large.c: fixed bug 1193299
+       * support/regression/tests/bug1057979.c: added test %3.3s
+
 2005-05-15 Frieder Ferlemann <Frieder.Ferlemann AT web.de>
 
        * device/include/mcs51/8051.h,
index 1dfb9bd6d2237aeeaf8ce368b262f51c28096955..e087f64d95f3873336d00b01c3ddda5fda90ba5d 100644 (file)
@@ -464,6 +464,10 @@ get_conversion_spec:
 #else
         length = strlen(PTR);
 #endif
+        if ( decimals == -1 )
+        {
+          decimals = length;
+        }
         if ( ( !left_justify ) && (length < width) )
         {
           width -= length;
@@ -474,7 +478,7 @@ get_conversion_spec:
           }
         }
 
-        while ( *PTR )
+        while ( *PTR  && (decimals-- > 0))
         {
           output_char( *PTR++, p );
           charsOutputted++;
index 70d1e2c144c970827622d82247dafe3474ff0642..2493f2773dcd17c67aa60381988459f1abb569e0 100644 (file)
@@ -27,5 +27,16 @@ test_sprintf(void)
   sprintf( s, "%04X", 0x8765u );
   ASSERT( 0 == strcmp( s, "8765" ) );
 
+  //and from bug 1193299
+  sprintf( s, "%3.3s", "abcd" );
+  LOG((s));
+  ASSERT( 0 == strcmp( s, "abc" ) );
+  sprintf( s, "%-3.3s", "abcd" );
+  ASSERT( 0 == strcmp( s, "abc" ) );
+  sprintf( s, "%3.3s", "ab" );
+  ASSERT( 0 == strcmp( s, " ab" ) );
+  sprintf( s, "%-3.3s", "ab" );
+  ASSERT( 0 == strcmp( s, "ab " ) );
+
   ASSERT( s[12]==0x12 );
 }