diff --git a/src/modules/sprintf/sprintf.c b/src/modules/sprintf/sprintf.c index b65f852714c18ab3b8807168b22107e6e9ea7e60..60525b2e352e372548eef244ee2bc924144c4a30 100644 --- a/src/modules/sprintf/sprintf.c +++ b/src/modules/sprintf/sprintf.c @@ -320,9 +320,15 @@ INLINE static int do_one(struct format_info *f) rest=f->b; for(d=0;rest[d] && e;d++) { +#if 0 + if(rest != f->b) + fix_field(" ",1,0,1," ",1,0); +#endif + while(rest[d] && rest[d]!='\n') d++; fix_field(rest,d,f->flags,f->column_width,f->pad_string, f->pad_length,f->pos_pad); + e--; rest+=d; d=-1; @@ -340,6 +346,11 @@ INLINE static int do_one(struct format_info *f) rest=f->b; for(d=0;*rest && d<col;d++) { +#if 0 + if(rest != f->b) + fix_field(" ",1,0,1," ",1,0); +#endif + for(e=0;rest[e] && rest[e]!='\n';e++); fix_field(rest,e,f->flags,f->column_width, f->pad_string,f->pad_length,f->pos_pad); @@ -718,11 +729,13 @@ static string low_pike_sprintf(char *format, for(f=fsp;f>start;f--) { if(f->flags & WIDTH_OF_DATA) f->width=f->len; + if(((f->flags & INVERSE_COLUMN_MODE) && !f->column_width) || (f->flags & COLUMN_MODE)) { int max_len,nr,columns; - for(max_len=nr=tmp=e=0;e<f->len;e++) + tmp=1; + for(max_len=nr=e=0;e<f->len;e++) { if(f->b[e]=='\n') { diff --git a/src/modules/sprintf/testsuite.in b/src/modules/sprintf/testsuite.in index cb17979af2d684f43a425ad71f1a8c74b42b34d1..a1681e4b011a12d19411892211843f0b0fb89a70 100644 --- a/src/modules/sprintf/testsuite.in +++ b/src/modules/sprintf/testsuite.in @@ -39,8 +39,10 @@ test_eq(sprintf("%-2d",2),"2 ") test_eq(sprintf("%|3d",2)," 2 ") test_eq(sprintf("%-=3s","f o bar gaz"),"f o\nbar\ngaz") dnl test_eq(sprintf("%/3s","f o bargaz"),"f o\nbar\ngaz") -dnl test_true(stringp(sprintf("%3#s","f\no\nbargaz\nonk"))) -dnl test_true(stringp(sprintf("%3$s","f\no\nbargaz\nonk"))) +test_true(stringp(sprintf("%3#s","f\no\nbargaz\nonk"))) +test_true(stringp(sprintf("%3$s","f\no\nbargaz\nonk"))) +test_eq(sprintf("%-$79s\n","foo\nbar\ngazonk"),"foo bar gazonk\n") + test_eq(sprintf("%*d",3,3)," 3") test_eq(sprintf("%'FOO'10s","BAR"),"FOOFOOFBAR") test_eq(sprintf("%d %<d %<d",2),"2 2 2")