+ 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;