Jan Zeleny cf0b5e3
--- gawk-3.1.7/builtin.c.orig	2010-04-01 15:52:45.000000000 +0200
Jan Zeleny cf0b5e3
+++ gawk-3.1.7/builtin.c	2010-04-01 15:57:17.000000000 +0200
Jan Zeleny cf0b5e3
@@ -1218,9 +1218,18 @@ check_pos:
Jan Zeleny cf0b5e3
 			if (fw == 0 && ! have_prec)
Jan Zeleny cf0b5e3
 				;
Jan Zeleny cf0b5e3
 			else if (gawk_mb_cur_max > 1 && (cs1 == 's' || cs1 == 'c')) {
Jan Zeleny cf0b5e3
+				int nchars_needed = 0;
Jan Zeleny cf0b5e3
+
Jan Zeleny cf0b5e3
 				assert(cp == arg->stptr || cp == cpbuf);
Jan Zeleny cf0b5e3
-				copy_count = mbc_byte_count(arg->stptr,
Jan Zeleny cf0b5e3
-						cs1 == 's' ? arg->stlen : 1);
Jan Zeleny cf0b5e3
+
Jan Zeleny cf0b5e3
+				if (cs1 == 'c')
Jan Zeleny cf0b5e3
+					nchars_needed = 1;
Jan Zeleny cf0b5e3
+				else if (have_prec)
Jan Zeleny cf0b5e3
+					nchars_needed = prec;
Jan Zeleny cf0b5e3
+				else
Jan Zeleny b957b98
+					nchars_needed = arg->stlen;
Jan Zeleny cf0b5e3
+
Jan Zeleny b957b98
+				copy_count = mbc_byte_count(arg->stptr, nchars_needed);
Jan Zeleny cf0b5e3
 			}
Jan Zeleny cf0b5e3
 			bchunk(cp, copy_count);
Jan Zeleny cf0b5e3
 			while (fw > prec) {