add posix %z flag. (also add zero left padding) Reference: /n/atom/patch/applied/zfmt Date: Wed Sep 9 07:24:40 CES 2015 Signed-off-by: quanstro@quanstro.net --- /sys/src/libc/fmt/dofmt.c Wed Sep 9 07:23:59 2015 +++ /sys/src/libc/fmt/dofmt.c Wed Sep 9 07:24:00 2015 @@ -87,13 +87,14 @@ int _fmtpad(Fmt *f, int n) { - char *t, *s; + char *t, *s, c; int i; t = f->to; s = f->stop; + c = f->flags&FmtZero? '0': ' '; for(i = 0; i < n; i++) - FMTCHAR(f, t, s, ' '); + FMTCHAR(f, t, s, c); f->nfmt += t - (char *)f->to; f->to = t; return 0; @@ -102,13 +103,14 @@ int _rfmtpad(Fmt *f, int n) { - Rune *t, *s; + Rune *t, *s, r; int i; t = f->to; s = f->stop; + r = f->flags&FmtZero? '0': ' '; for(i = 0; i < n; i++) - FMTRCHAR(f, t, s, ' '); + FMTRCHAR(f, t, s, r); f->nfmt += t - (Rune *)f->to; f->to = t; return 0; @@ -314,10 +316,11 @@ int _ifmt(Fmt *f) { - char buf[Maxintwidth + 1], *p, *conv; + char buf[Maxintwidth], *p, *conv; uvlong vu; ulong u; uintptr pu; + usize uu; int neg, base, i, n, fl, w, isv; neg = 0; @@ -340,6 +343,14 @@ vu = va_arg(f->args, uvlong); else vu = va_arg(f->args, vlong); + }else if(fl & FmtUsize){ + uu = va_arg(f->args, usize); + if(sizeof(usize) == sizeof(uvlong)){ + vu = uu; + isv = 1; + }else + u = uu; + fl |= FmtUnsigned; }else if(fl & FmtLong){ if(fl & FmtUnsigned) u = va_arg(f->args, ulong); @@ -518,6 +529,9 @@ if(f->flags & FmtLong) f->flags |= FmtVLong; f->flags |= FmtLong; + break; + case 'z': + f->flags |= FmtUsize; break; } return 1; --- /sys/include/libc.h Wed Sep 9 07:24:03 2015 +++ /sys/include/libc.h Wed Sep 9 07:24:04 2015 @@ -145,8 +145,10 @@ FmtVLong = FmtLong << 1, FmtComma = FmtVLong << 1, FmtByte = FmtComma << 1, + FmtUsize = FmtByte << 1, + FmtPtrdiff = FmtUsize << 1, - FmtFlag = FmtByte << 1 + FmtFlag = FmtPtrdiff << 1 }; extern int print(char*, ...); @@ -195,6 +197,10 @@ #pragma varargck type "llo" uvlong #pragma varargck type "llx" uvlong #pragma varargck type "llb" uvlong +#pragma varargck type "zd" usize +#pragma varargck type "zo" usize +#pragma varargck type "zx" usize +#pragma varargck type "zb" usize #pragma varargck type "ld" long #pragma varargck type "lo" long #pragma varargck type "lx" long --- /sys/src/9/port/lib.h Wed Sep 9 07:24:06 2015 +++ /sys/src/9/port/lib.h Wed Sep 9 07:24:07 2015 @@ -88,8 +88,10 @@ FmtVLong = FmtLong<<1, FmtComma = FmtVLong<<1, FmtByte = FmtComma<<1, + FmtUsize = FmtByte << 1, + FmtPtrdiff = FmtUsize << 1, - FmtFlag = FmtByte<<1 + FmtFlag = FmtPtrdiff << 1 }; extern int print(char*, ...); extern char* seprint(char*, char*, char*, ...); @@ -111,7 +113,10 @@ #pragma varargck type "llb" uvlong #pragma varargck type "lld" uvlong #pragma varargck type "llx" uvlong -#pragma varargck type "lx" void* +#pragma varargck type "zd" usize +#pragma varargck type "zo" usize +#pragma varargck type "zx" usize +#pragma varargck type "zb" usize #pragma varargck type "lb" long #pragma varargck type "ld" long #pragma varargck type "lx" long --- /sys/src/nix/port/lib.h Wed Sep 9 07:24:09 2015 +++ /sys/src/nix/port/lib.h Wed Sep 9 07:24:11 2015 @@ -98,9 +98,11 @@ FmtLong = FmtShort<<1, FmtVLong = FmtLong<<1, FmtComma = FmtVLong<<1, - FmtByte = FmtComma<<1, + FmtByte = FmtComma << 1, + FmtUsize = FmtByte << 1, + FmtPtrdiff = FmtUsize << 1, - FmtFlag = FmtByte<<1 + FmtFlag = FmtPtrdiff << 1 }; extern int print(char*, ...); @@ -121,6 +123,10 @@ #pragma varargck type "lld" uvlong #pragma varargck type "llx" uvlong #pragma varargck type "llb" uvlong +#pragma varargck type "zd" usize +#pragma varargck type "zo" usize +#pragma varargck type "zx" usize +#pragma varargck type "zb" usize #pragma varargck type "ld" long #pragma varargck type "lx" long #pragma varargck type "lb" long @@ -154,6 +160,7 @@ #pragma varargck flag ',' #pragma varargck flag ' ' #pragma varargck flag 'h' +#pragma varargck flag 'z' extern int fmtinstall(int, int (*)(Fmt*)); extern int fmtprint(Fmt*, char*, ...); --- /sys/src/fs/port/lib.h Wed Sep 9 07:24:12 2015 +++ /sys/src/fs/port/lib.h Wed Sep 9 07:24:13 2015 @@ -65,8 +65,10 @@ FmtVLong = FmtLong << 1, FmtComma = FmtVLong << 1, FmtByte = FmtComma << 1, + FmtUsize = FmtByte << 1, + FmtPtrdiff = FmtUsize << 1, - FmtFlag = FmtByte << 1 + FmtFlag = FmtPtrdiff << 1 }; typedef struct Fmt Fmt; @@ -107,6 +109,10 @@ #pragma varargck type "llx" vlong #pragma varargck type "lld" uvlong #pragma varargck type "llx" uvlong +#pragma varargck type "zd" usize +#pragma varargck type "zo" usize +#pragma varargck type "zx" usize +#pragma varargck type "zb" usize #pragma varargck type "ld" long #pragma varargck type "lx" long #pragma varargck type "ld" ulong