Set environment variables for scripts
This commit is contained in:
parent
293d71264e
commit
0d5cbfcfce
@ -133,6 +133,26 @@ void notification_run_script(struct notification *n)
|
||||
if (pid2) {
|
||||
exit(0);
|
||||
} else {
|
||||
// Set environment variables
|
||||
gchar *n_id_str = g_strdup_printf("%i", n->id);
|
||||
gchar *n_progress_str = g_strdup_printf("%i", n->progress);
|
||||
gchar *n_timeout_str = g_strdup_printf("%li", n->timeout/1000);
|
||||
gchar *n_timestamp_str = g_strdup_printf("%li", n->timestamp / 1000);
|
||||
char* icon_path = get_path_from_icon_name(icon);
|
||||
safe_setenv("DUNST_APP_NAME", appname);
|
||||
safe_setenv("DUNST_SUMMARY", summary);
|
||||
safe_setenv("DUNST_BODY", body);
|
||||
safe_setenv("DUNST_ICON_PATH", icon_path);
|
||||
safe_setenv("DUNST_URGENCY", urgency);
|
||||
safe_setenv("DUNST_ID", n_id_str);
|
||||
safe_setenv("DUNST_PROGRESS", n_progress_str);
|
||||
safe_setenv("DUNST_CATEGORY", n->category);
|
||||
safe_setenv("DUNST_STACK_TAG", n->stack_tag);
|
||||
safe_setenv("DUNST_URLS", n->urls);
|
||||
safe_setenv("DUNST_TIMEOUT", n_timeout_str);
|
||||
safe_setenv("DUNST_TIMESTAMP", n_timestamp_str);
|
||||
safe_setenv("DUNST_STACK_TAG", n->stack_tag);
|
||||
|
||||
int ret = execlp(script,
|
||||
script,
|
||||
appname,
|
||||
@ -142,7 +162,7 @@ void notification_run_script(struct notification *n)
|
||||
urgency,
|
||||
(char *)NULL);
|
||||
if (ret != 0) {
|
||||
LOG_W("Unable to run script: %s", strerror(errno));
|
||||
LOG_W("Unable to run script %s: %s", n->scripts[i], strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
@ -55,9 +55,9 @@ struct notification {
|
||||
char *iconname; /**< plain icon information (may be a path or just a name)
|
||||
Use this to compare the icon name with rules.*/
|
||||
|
||||
gint64 start; /**< begin of current display */
|
||||
gint64 timestamp; /**< arrival time */
|
||||
gint64 timeout; /**< time to display */
|
||||
gint64 start; /**< begin of current display (in milliseconds) */
|
||||
gint64 timestamp; /**< arrival time (in milliseconds) */
|
||||
gint64 timeout; /**< time to display (in milliseconds) */
|
||||
int locked; /**< If non-zero the notification is locked **/
|
||||
|
||||
GHashTable *actions;
|
||||
|
12
src/utils.c
12
src/utils.c
@ -247,4 +247,16 @@ const char *user_get_home(void)
|
||||
return home_directory;
|
||||
}
|
||||
|
||||
bool safe_setenv(const char* key, const char* value){
|
||||
if (!key)
|
||||
return false;
|
||||
|
||||
if (!value)
|
||||
setenv(key, "", 1);
|
||||
else
|
||||
setenv(key, value, 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set ft=c tabstop=8 shiftwidth=8 expandtab textwidth=0: */
|
||||
|
12
src/utils.h
12
src/utils.h
@ -4,6 +4,7 @@
|
||||
|
||||
#include <glib.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
//! Test if a string is NULL or empty
|
||||
#define STR_EMPTY(s) (!s || (*s == '\0'))
|
||||
@ -137,5 +138,16 @@ gint64 time_monotonic_now(void);
|
||||
*/
|
||||
const char *user_get_home(void);
|
||||
|
||||
/**
|
||||
* Try to set an environment variable safely. If an environment variable with
|
||||
* name `key` exists, it will be overwritten.
|
||||
* If `value` is null, `key` will be set to an empty string.
|
||||
*
|
||||
* @param key (nullable) The environment variable to change
|
||||
* @param value (nullable) The value to change it to.
|
||||
* @returns: A bool that is true when it succeeds
|
||||
*/
|
||||
bool safe_setenv(const char* key, const char* value);
|
||||
|
||||
#endif
|
||||
/* vim: set ft=c tabstop=8 shiftwidth=8 expandtab textwidth=0: */
|
||||
|
Loading…
x
Reference in New Issue
Block a user