X-Git-Url: http://git.silcnet.org/gitweb/?p=crypto.git;a=blobdiff_plain;f=lib%2Fsilcutil%2Fsilcsnprintf.c;h=d49b6d1fa85df441aef677f93d99f3340432b281;hp=501625abf21704d2fde80b45c65947fe00f2f165;hb=54262ed0902a67f8e5335d73594fbcc12cf892ba;hpb=3a8b0fb742bba6cbb7f7f56744fafd43714e07cf diff --git a/lib/silcutil/silcsnprintf.c b/lib/silcutil/silcsnprintf.c index 501625ab..d49b6d1f 100644 --- a/lib/silcutil/silcsnprintf.c +++ b/lib/silcutil/silcsnprintf.c @@ -128,6 +128,7 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, int cflags; size_t currlen; va_list args; + SilcSnprintfRender render; silc_va_copy(args, args_in); @@ -354,6 +355,23 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, /* not supported yet, treat as next char */ ch = *format++; break; + case '@': + /* Renderer function */ + render = va_arg (args, SilcSnprintfRender); + if (render) { + void *ptr = va_arg (args, void *); + if (ptr) { + strvalue = render (ptr); + if (strvalue) { + if (max == -1) + max = strlen(strvalue); + if (min > 0 && max >= 0 && min > max) max = min; + fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max); + silc_free(strvalue); + } + } + } + break; default: /* Unknown, skip */ break;