static struct errlist *error_list_head, *error_list_tail;
-static void
-push_error_list(char *msg)
+static void push_error_list(char *msg)
{
struct errlist *e;
- e = xcalloc(1, sizeof(struct errlist));
+ e = xcalloc(1, sizeof(struct errlist));
e->errmsg = xstrdup(msg);
e->next = NULL;
}
}
-void
-free_error_list(void)
+void free_error_list(void)
{
struct errlist *err, *err_tmp;
}
}
-void
-print_error_list(void)
+void print_error_list(void)
{
struct errlist *err = error_list_head;
if (err) {
- printf("Collected errors:\n");
+ fprintf(stderr, "Collected errors:\n");
/* Here we print the errors collected and free the list */
while (err != NULL) {
- printf(" * %s", err->errmsg);
+ fprintf(stderr, " * %s", err->errmsg);
err = err->next;
}
}
}
-void
-opkg_message (message_level_t level, const char *fmt, ...)
+void opkg_message(message_level_t level, const char *fmt, ...)
{
va_list ap;
if (conf->opkg_vmessage) {
/* Pass the message to libopkg users. */
- va_start (ap, fmt);
+ va_start(ap, fmt);
conf->opkg_vmessage(level, fmt, ap);
- va_end (ap);
+ va_end(ap);
return;
}
- va_start (ap, fmt);
+ va_start(ap, fmt);
if (level == ERROR) {
-#define MSG_LEN 256
+#define MSG_LEN 4096
char msg[MSG_LEN];
- if (vsnprintf(msg, MSG_LEN, fmt, ap) >= MSG_LEN) {
- fprintf(stderr, "%s: Message truncated!\n",
- __FUNCTION__);
+ int ret;
+ ret = vsnprintf(msg, MSG_LEN, fmt, ap);
+ if (ret < 0) {
+ fprintf(stderr, "%s: encountered an output or encoding"
+ " error during vsnprintf.\n", __FUNCTION__);
+ va_end(ap);
+ exit(EXIT_FAILURE);
+ }
+ if (ret >= MSG_LEN) {
+ fprintf(stderr, "%s: Message truncated.\n",
+ __FUNCTION__);
}
push_error_list(msg);
- } else
- vprintf(fmt, ap);
+ } else {
+ if (vprintf(fmt, ap) < 0) {
+ fprintf(stderr, "%s: encountered an output or encoding"
+ " error during vprintf.\n", __FUNCTION__);
+ exit(EXIT_FAILURE);
+ }
+ }
- va_end (ap);
+ va_end(ap);
}