diff --git a/src/modules/sprintf/sprintf.c b/src/modules/sprintf/sprintf.c
index b1b603e3fab92a81a28cd371788e427e67a0adc8..0c3bdbc4a59e7a2dc9ff33acbaad3f2e229ead09 100644
--- a/src/modules/sprintf/sprintf.c
+++ b/src/modules/sprintf/sprintf.c
@@ -102,7 +102,7 @@
 */
 
 #include "global.h"
-RCSID("$Id: sprintf.c,v 1.57 1999/10/30 23:35:53 noring Exp $");
+RCSID("$Id: sprintf.c,v 1.58 1999/11/01 13:58:46 mirar Exp $");
 #include "error.h"
 #include "array.h"
 #include "svalue.h"
@@ -1044,7 +1044,7 @@ static void low_pike_sprintf(struct format_stack *fs,
 
       case 'c':
       {
-        INT32 l,tmp;
+        INT32 l,tmp,n;
 	char *x;
         DO_OP();
 	CHECK_OBJECT_SPRINTF()
@@ -1057,7 +1057,24 @@ static void low_pike_sprintf(struct format_stack *fs,
 	  else  fs->fsp->b=MKPCHARP(x,2);
 	  SET_INDEX_PCHARP(fs->fsp->b,0,tmp);
 	  fs->fsp->len=1;
-	}else{
+	}
+	else if ( (fs->fsp->flags&FIELD_LEFT) )
+	{
+	  l=1;
+	  if(fs->fsp->width > 0) l=fs->fsp->width;
+	  x=(char *)alloca(l);
+	  fs->fsp->b=MKPCHARP(x,0);
+	  fs->fsp->len=l;
+	  GET_INT(tmp);
+	  n=0;
+	  while(n<l)
+	  {
+	    x[n++]=tmp & 0xff;
+	    tmp>>=8;
+	  }
+	}
+	else 
+	{
 	  l=1;
 	  if(fs->fsp->width > 0) l=fs->fsp->width;
 	  x=(char *)alloca(l);