oops
diff --git a/src/lib9/fmt/dofmt.c b/src/lib9/fmt/dofmt.c index 74697eb..e4e32bf4 100644 --- a/src/lib9/fmt/dofmt.c +++ b/src/lib9/fmt/dofmt.c
@@ -252,9 +252,17 @@ return __fmtcpy(f, "<nil>", 5, 5); /* if precision is specified, make sure we don't wander off the end */ if(f->flags & FmtPrec){ +#ifdef PLAN9PORT i = 0; for(j=0; j<f->prec && s[i]; j++) i += chartorune(&r, s+i); +#else + /* ANSI requires precision in bytes, not Runes */ + for(i=0; i<f->prec; i++) + if(s[i] == 0) + break; + j = utfnlen(s, i); /* won't print partial at end */ +#endif return __fmtcpy(f, s, j, i); } return __fmtcpy(f, s, utflen(s), strlen(s));
diff --git a/src/lib9/fmt/fmtquote.c b/src/lib9/fmt/fmtquote.c index 5b8f9fd..8c8daae 100644 --- a/src/lib9/fmt/fmtquote.c +++ b/src/lib9/fmt/fmtquote.c
@@ -91,6 +91,11 @@ /* advance output */ q->nbytesout += w; q->nrunesout++; + +#ifndef PLAN9PORT + /* ANSI requires precision in bytes, not Runes. */ + nin-= w-1; /* and then n-- in the loop */ +#endif } }
diff --git a/src/lib9/fmt/runevseprint.c b/src/lib9/fmt/runevseprint.c index d789cbe..24e2f17 100644 --- a/src/lib9/fmt/runevseprint.c +++ b/src/lib9/fmt/runevseprint.c
@@ -20,6 +20,7 @@ f.farg = nil; f.nfmt = 0; VA_COPY(f.args,args); + fmtlocaleinit(&f, nil, nil, nil); dofmt(&f, fmt); VA_END(f.args); *(Rune*)f.to = '\0';
diff --git a/src/lib9/fmt/vseprint.c b/src/lib9/fmt/vseprint.c index 0f7ba9d..1b92d2a 100644 --- a/src/lib9/fmt/vseprint.c +++ b/src/lib9/fmt/vseprint.c
@@ -19,6 +19,7 @@ f.farg = nil; f.nfmt = 0; VA_COPY(f.args,args); + fmtlocaleinit(&f, nil, nil, nil); dofmt(&f, fmt); VA_END(f.args); *(char*)f.to = '\0';