Added '%@' formatting to silc_snprintf and friends.
[crypto.git] / lib / silcutil / silcsnprintf.c
index 501625abf21704d2fde80b45c65947fe00f2f165..d49b6d1fa85df441aef677f93d99f3340432b281 100644 (file)
@@ -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;