]> sigrok.org Git - libsigrokdecode.git/blobdiff - log.c
srd: free all decoder instances when unloading decoders
[libsigrokdecode.git] / log.c
diff --git a/log.c b/log.c
index a2633f43d91fb1f6d5724c1b4abc6e67a755095d..829bc156acfe72e37b9a306f6bf7a6cc2f0292e4 100644 (file)
--- a/log.c
+++ b/log.c
@@ -38,6 +38,11 @@ static srd_log_handler_t srd_handler = srd_logv;
  */
 static void *srd_handler_data = NULL;
 
+/* Log domain (a short string that is used as prefix for all messages). */
+#define LOGDOMAIN_MAXLEN 30
+#define LOGDOMAIN_DEFAULT "srd: "
+static char srd_log_domain[LOGDOMAIN_MAXLEN + 1] = LOGDOMAIN_DEFAULT;
+
 /**
  * Set the libsigrokdecode loglevel.
  *
@@ -58,7 +63,7 @@ int srd_set_loglevel(int loglevel)
 
        srd_loglevel = loglevel;
 
-       srd_dbg("srd: loglevel set to %d", loglevel);
+       srd_dbg("libsigrokdecode loglevel set to %d.", loglevel);
 
        return SRD_OK;
 }
@@ -73,6 +78,37 @@ int srd_get_loglevel(void)
        return srd_loglevel;
 }
 
+/**
+ * TODO.
+ *
+ * @param logdomain TODO
+ * @return TODO.
+ */
+int srd_log_set_logdomain(const char *logdomain)
+{
+       if (!logdomain) {
+               srd_err("log: %s: logdomain was NULL", __func__);
+               return SRD_ERR_ARG;
+       }
+
+       /* TODO: Error handling. */
+       snprintf((char *)&srd_log_domain, LOGDOMAIN_MAXLEN, "%s", logdomain);
+
+       srd_dbg("log domain set to '%s'", (const char *)&srd_log_domain);
+
+       return SRD_OK;
+}
+
+/**
+ * TODO.
+ *
+ * @return TODO.
+ */
+char *srd_log_get_logdomain(void)
+{
+       return g_strdup((char *)srd_log_domain);
+}
+
 /**
  * Set the libsigrokdecode log handler to the specified function.
  *
@@ -129,6 +165,8 @@ static int srd_logv(void *data, int loglevel, const char *format, va_list args)
        if (loglevel > srd_loglevel)
                return SRD_OK; /* TODO? */
 
+       if (srd_log_domain[0] != '\0')
+               fprintf(stderr, "%s", srd_log_domain);
        ret = vfprintf(stderr, format, args);
        fprintf(stderr, "\n");