char *format = (char*)malloc((sizeof(PACKAGE_NAME) + sizeof(PACKAGE_VERSION) + sizeof(msg)) * sizeof(arguments));
У вас выделяется (и к тому же не освобождается) буфер совершенно рандомного размера. У меня работает и так, но это вопрос везения. Даже если написать
char format[200];
будет лучше.
1. Более точно (запас допустим, нехватка — нет) высчитать длину буфера.
2. Освободить его, наконец!
static const char* FORMAT1 = "[%s-%s]: %s\n";
char *format = (char*)malloc(strlen(FORMAT1) + strlen(msg) + strlen(PACKAGE_NAME) + strlen(PACKAGE_VERSION) + 1);
sprintf(format, "[%s-%s]: %s\n", PACKAGE_NAME, PACKAGE_VERSION, msg);
va_start(arguments, msg);
vprintf(format, arguments);
va_end(arguments);
free(format);
Более удачное, но менее универсальное решение — printf заголовок, vprintf строку.
printf("[%s-%s]: ", PACKAGE_NAME, PACKAGE_VERSION);
va_list arguments;
va_start(arguments, msg);
vprintf(msg, arguments);
va_end(arguments);
putchar('\n');
UPD1.
Ваша новая ошибка — в коде
char *msgbuf = (char*)malloc(strlen(msg) * sizeof(arguments));
Раз уж хотите так, решение — вычислить длину буфера через snprintf.