- argv[k] = silc_calloc(x_len + 1, sizeof(unsigned char));
- memcpy(argv[k], x, x_len);
- argv_lens[k] = x_len;
- argv_types[k] = x_type;
- k++;
+ if (argc) {
+ argv = silc_calloc(argc, sizeof(unsigned char *));
+ argv_lens = silc_calloc(argc, sizeof(SilcUInt32));
+ argv_types = silc_calloc(argc, sizeof(SilcUInt32));
+
+ for (i = 0, k = 0; i < argc; i++) {
+ x_type = va_arg(ap, SilcUInt32);
+ x = va_arg(ap, unsigned char *);
+ x_len = va_arg(ap, SilcUInt32);
+
+ if (!x_type || !x || !x_len)
+ continue;
+
+ argv[k] = silc_memdup(x, x_len);
+ argv_lens[k] = x_len;
+ argv_types[k] = x_type;
+ k++;
+ }