summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--journal-notify.c63
-rw-r--r--journal-notify.h4
2 files changed, 38 insertions, 29 deletions
diff --git a/journal-notify.c b/journal-notify.c
index d05cd9d..73af0f5 100644
--- a/journal-notify.c
+++ b/journal-notify.c
@@ -26,11 +26,33 @@ const static struct option options_long[] = {
};
/*** notify ***/
-int notify(const char * identifier, const char * message, const char * icon,
- int timeout, uint8_t urgency) {
+int notify(const char * identifier, const char * message, uint8_t priority,
+ const char * icon, int timeout) {
NotifyNotification * notification;
+ char * identifier_markup = NULL, * message_markup = NULL;
+ uint8_t urgency;
int rc = -1;
+ if ((message_markup = g_markup_escape_text(message, -1)) == NULL)
+ goto out10;
+ if ((identifier_markup = g_markup_escape_text(identifier, -1)) == NULL)
+ goto out10;
+
+ switch(priority) {
+ case 0:
+ case 1:
+ case 2:
+ urgency = NOTIFY_URGENCY_CRITICAL;
+ break;
+ case 3:
+ case 4:
+ urgency = NOTIFY_URGENCY_NORMAL;
+ break;
+ default: /* this catches priority 5, 6 and 7 */
+ urgency = NOTIFY_URGENCY_LOW;
+ break;
+ }
+
notification =
#if NOTIFY_CHECK_VERSION(0, 7, 0)
notify_notification_new(identifier, message, icon);
@@ -39,7 +61,7 @@ int notify(const char * identifier, const char * message, const char * icon,
#endif
if (notification == NULL)
- return rc;
+ goto out10;
/* NOTIFY_EXPIRES_NEVER == 0 */
if (timeout >= 0)
@@ -48,13 +70,19 @@ int notify(const char * identifier, const char * message, const char * icon,
notify_notification_set_urgency(notification, urgency);
if (notify_notification_show(notification, NULL) == FALSE)
- goto out;
+ goto out20;
rc = 0;
-out:
+out20:
g_object_unref(G_OBJECT(notification));
+out10:
+ if (message_markup)
+ free(message_markup);
+ if (identifier_markup)
+ free(identifier_markup);
+
return rc;
}
@@ -72,9 +100,8 @@ int main(int argc, char **argv) {
const void * data;
size_t length;
- char * identifier, * message,
- * identifier_markup, * message_markup;
- uint8_t priority, urgency;
+ char * identifier, * message;
+ uint8_t priority;
const char * icon = DEFAULTICON;
int timeout = -1;
@@ -223,7 +250,6 @@ int main(int argc, char **argv) {
message = malloc(length - 8 + 1);
memcpy(message, data + 8, length - 8);
message[length - 8] = 0;
- message_markup = g_markup_escape_text(message, -1);
/* get SYSLOG_IDENTIFIER field */
if ((rc = sd_journal_get_data(journal, "SYSLOG_IDENTIFIER", &data, &length)) < 0) {
@@ -233,7 +259,6 @@ int main(int argc, char **argv) {
identifier = malloc(length - 18 + 1);
memcpy(identifier, data + 18, length - 18);
identifier[length - 18] = 0;
- identifier_markup = g_markup_escape_text(identifier, -1);
/* get PRIORITY field */
if ((rc = sd_journal_get_data(journal, "PRIORITY", &data, &length)) < 0) {
@@ -241,20 +266,6 @@ int main(int argc, char **argv) {
continue;
}
priority = atoi(data + 9);
- switch(priority) {
- case 0:
- case 1:
- case 2:
- urgency = NOTIFY_URGENCY_CRITICAL;
- break;
- case 3:
- case 4:
- urgency = NOTIFY_URGENCY_NORMAL;
- break;
- default: /* this catches priority 5, 6 and 7 */
- urgency = NOTIFY_URGENCY_LOW;
- break;
- }
if (verbose > 2)
printf("Received message from journal: %s\n", message);
@@ -265,7 +276,7 @@ int main(int argc, char **argv) {
if (verbose > 0)
printf("Showing notification: %s: %s\n", identifier, message);
- if ((rc = notify(identifier_markup, message_markup, icon, timeout, urgency)) == 0)
+ if ((rc = notify(identifier, message, priority, icon, timeout)) == 0)
break;
fprintf(stderr, "Failed to show notification, reinitializing libnotify.\n");
@@ -281,9 +292,7 @@ int main(int argc, char **argv) {
}
free(identifier);
- free(identifier_markup);
free(message);
- free(message_markup);
}
rc = EXIT_SUCCESS;
diff --git a/journal-notify.h b/journal-notify.h
index 159b2fe..ee18b7b 100644
--- a/journal-notify.h
+++ b/journal-notify.h
@@ -26,8 +26,8 @@
#define DEFAULTICON "dialog-information"
/*** notify ***/
-int notify(const char * identifier, const char * message, const char * icon,
- int timeout, uint8_t urgency);
+int notify(const char * identifier, const char * message, uint8_t priority,
+ const char * icon, int timeout);
/*** main ***/
int main(int argc, char **argv);