Add a message callback function to the config struct for libopkg users.
authorgraham.gower <graham.gower@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>
Thu, 17 Dec 2009 06:42:43 +0000 (06:42 +0000)
committergraham.gower <graham.gower@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>
Thu, 17 Dec 2009 06:42:43 +0000 (06:42 +0000)
git-svn-id: http://opkg.googlecode.com/svn/trunk@496 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358

libopkg/opkg_conf.h
libopkg/opkg_message.c

index 67b660fda5061fe1ab8799c4d9b249132ec82d89..52498f58eb15284fd10b1cb30a1b77ef51343792 100644 (file)
@@ -57,6 +57,9 @@ struct opkg_conf
 
      uint pfm; /* package field mask */
 
+     /* For libopkg users to capture messages. */
+     void (*opkg_vmessage)(int, const char *fmt, va_list ap);
+
      /* options */
      int autoremove;
      int force_depends;
index a21a1a239cc0a428ba4e41b7b918f3accd6737b2..81afc97eaace49998de2895d0156da26e67c1f2f 100644 (file)
@@ -78,14 +78,26 @@ opkg_message (message_level_t level, const char *fmt, ...)
 {
        va_list ap;
 
-       if (conf && (conf->verbosity < level))
+       if (conf->verbosity < level)
                return;
 
+       if (conf->opkg_vmessage) {
+               /* Pass the message to libopkg users. */
+               va_start (ap, fmt);
+               conf->opkg_vmessage(level, fmt, ap);
+               va_end (ap);
+               return;
+       }
+
        va_start (ap, fmt);
 
        if (level == ERROR) {
-               char msg[256];
-               vsnprintf(msg, 256, fmt, ap);
+#define MSG_LEN 256
+               char msg[MSG_LEN];
+               if (vsnprintf(msg, MSG_LEN, fmt, ap) >= MSG_LEN) {
+                       fprintf(stderr, "%s: Message truncated!\n",
+                                       __FUNCTION__);
+               }
                push_error_list(msg);
        } else
                vprintf(fmt, ap);