libopkg: fix merging PKG_CONFFILES in pkg_merge()
[oweals/opkg-lede.git] / libopkg / opkg_message.c
index e5324e6abf4b4560dda2cd7cea58e9ffb4187e0d..4cc49c3cfd7cdeaceb385836405168d203389715 100644 (file)
@@ -27,12 +27,11 @@ struct errlist {
 
 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;
 
@@ -44,8 +43,7 @@ push_error_list(char *msg)
        }
 }
 
-void
-free_error_list(void)
+void free_error_list(void)
 {
        struct errlist *err, *err_tmp;
 
@@ -58,23 +56,21 @@ free_error_list(void)
        }
 }
 
-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;
 
@@ -83,24 +79,37 @@ opkg_message (message_level_t level, const char *fmt, ...)
 
        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 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);
 }