mirror of
https://github.com/profanity-im/profanity.git
synced 2024-09-22 19:45:54 -04:00
Merge pull request #1748 from nandesu-utils/fix/issue1742
Fix https://github.com/profanity-im/profanity/issues/1742
This commit is contained in:
commit
359e2614ff
49
src/common.c
49
src/common.c
@ -445,9 +445,10 @@ get_mentions(gboolean whole_word, gboolean case_sensitive, const char* const mes
|
|||||||
gboolean
|
gboolean
|
||||||
call_external(gchar** argv, gchar** std_out, gchar** std_err)
|
call_external(gchar** argv, gchar** std_out, gchar** std_err)
|
||||||
{
|
{
|
||||||
GError *spawn_error, *status_error;
|
GError* spawn_error = NULL;
|
||||||
gboolean spawn_result;
|
GError* exit_error = NULL;
|
||||||
gint exit_status;
|
gboolean is_successful;
|
||||||
|
gint wait_status;
|
||||||
|
|
||||||
GSpawnFlags flags = G_SPAWN_SEARCH_PATH;
|
GSpawnFlags flags = G_SPAWN_SEARCH_PATH;
|
||||||
if (std_out == NULL)
|
if (std_out == NULL)
|
||||||
@ -455,30 +456,34 @@ call_external(gchar** argv, gchar** std_out, gchar** std_err)
|
|||||||
if (std_err == NULL)
|
if (std_err == NULL)
|
||||||
flags |= G_SPAWN_STDERR_TO_DEV_NULL;
|
flags |= G_SPAWN_STDERR_TO_DEV_NULL;
|
||||||
|
|
||||||
spawn_result = g_spawn_sync(NULL, // Inherit the parent PWD.
|
is_successful = g_spawn_sync(NULL, // Inherit the parent PWD.
|
||||||
argv,
|
argv,
|
||||||
NULL, // Inherit the parent environment.
|
NULL, // Inherit the parent environment.
|
||||||
flags,
|
flags,
|
||||||
NULL, NULL, // No func. before exec() in child.
|
NULL, NULL, // No func. before exec() in child.
|
||||||
std_out, std_err,
|
std_out, std_err,
|
||||||
&exit_status, &spawn_error);
|
&wait_status, &spawn_error);
|
||||||
|
|
||||||
if (!spawn_result || !g_spawn_check_exit_status(exit_status, &status_error)) {
|
if (!is_successful) {
|
||||||
gchar* cmd = g_strjoinv(" ", argv);
|
gchar* cmd = g_strjoinv(" ", argv);
|
||||||
if (spawn_error && spawn_error->message) {
|
log_error("Spawning '%s' failed with with error '%s'", cmd, spawn_error ? spawn_error->message : "Unknown, spawn_error is NULL");
|
||||||
log_error("Spawning '%s' failed with '%s'.", cmd, spawn_error->message);
|
;
|
||||||
g_error_free(spawn_error);
|
|
||||||
} else if (status_error && status_error->message) {
|
g_error_free(spawn_error);
|
||||||
log_error("Spawning '%s' failed with '%s'.", cmd, status_error->message);
|
|
||||||
g_error_free(status_error);
|
|
||||||
spawn_result = FALSE;
|
|
||||||
} else {
|
|
||||||
log_error("Spawning '%s' failed with.", cmd);
|
|
||||||
}
|
|
||||||
g_free(cmd);
|
g_free(cmd);
|
||||||
|
} else {
|
||||||
|
is_successful = g_spawn_check_exit_status(wait_status, &exit_error);
|
||||||
|
|
||||||
|
if (!is_successful) {
|
||||||
|
gchar* cmd = g_strjoinv(" ", argv);
|
||||||
|
log_error("'%s' exited with error '%s'", cmd, exit_error->message);
|
||||||
|
|
||||||
|
g_error_free(exit_error);
|
||||||
|
g_free(cmd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return spawn_result;
|
return is_successful;
|
||||||
}
|
}
|
||||||
|
|
||||||
gchar**
|
gchar**
|
||||||
|
@ -339,10 +339,20 @@ _avatar_request_item_result_handler(xmpp_stanza_t* const stanza, void* const use
|
|||||||
|
|
||||||
// if we shall open it
|
// if we shall open it
|
||||||
if (g_hash_table_contains(shall_open, from_attr)) {
|
if (g_hash_table_contains(shall_open, from_attr)) {
|
||||||
gchar* argv[] = { prefs_get_string(PREF_AVATAR_CMD), filename->str, NULL };
|
gchar* cmdtemplate = prefs_get_string(PREF_AVATAR_CMD);
|
||||||
if (!call_external(argv, NULL, NULL)) {
|
|
||||||
cons_show_error("Unable to display avatar: check the logs for more information.");
|
if (cmdtemplate == NULL) {
|
||||||
|
cons_show_error("No default `avatar open` command found in executables preferences.");
|
||||||
|
} else {
|
||||||
|
gchar** argv = format_call_external_argv(cmdtemplate, NULL, filename->str);
|
||||||
|
|
||||||
|
if (!call_external(argv, NULL, NULL)) {
|
||||||
|
cons_show_error("Unable to display avatar: check the logs for more information.");
|
||||||
|
}
|
||||||
|
|
||||||
|
g_strfreev(argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_hash_table_remove(shall_open, from_attr);
|
g_hash_table_remove(shall_open, from_attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user