summaryrefslogtreecommitdiff
path: root/src/fr-process.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fr-process.c')
-rw-r--r--src/fr-process.c88
1 files changed, 13 insertions, 75 deletions
diff --git a/src/fr-process.c b/src/fr-process.c
index 892aaae..7876190 100644
--- a/src/fr-process.c
+++ b/src/fr-process.c
@@ -53,7 +53,6 @@ static void fr_process_class_init (FrProcessClass *class);
static void fr_process_init (FrProcess *process);
static void fr_process_finalize (GObject *object);
-
typedef struct {
GList *args; /* command to execute */
char *dir; /* working directory */
@@ -71,7 +70,6 @@ typedef struct {
gpointer end_data;
} FrCommandInfo;
-
static FrCommandInfo *
fr_command_info_new (void)
{
@@ -86,27 +84,19 @@ fr_command_info_new (void)
return info;
}
-
static void
-fr_command_info_free (FrCommandInfo *info)
+fr_command_info_free (gpointer data)
{
+ FrCommandInfo *info = data;
+
if (info == NULL)
return;
- if (info->args != NULL) {
- g_list_free_full (info->args, g_free);
- info->args = NULL;
- }
-
- if (info->dir != NULL) {
- g_free (info->dir);
- info->dir = NULL;
- }
-
- g_free (info);
+ g_list_free_full (info->args, g_free);
+ g_free (info->dir);
+ g_clear_pointer (&info, g_free);
}
-
static void
fr_channel_data_init (FrChannelData *channel)
{
@@ -116,7 +106,6 @@ fr_channel_data_init (FrChannelData *channel)
channel->error = NULL;
}
-
static void
fr_channel_data_close_source (FrChannelData *channel)
{
@@ -127,7 +116,6 @@ fr_channel_data_close_source (FrChannelData *channel)
}
}
-
static GIOStatus
fr_channel_data_read (FrChannelData *channel)
{
@@ -153,7 +141,6 @@ fr_channel_data_read (FrChannelData *channel)
return channel->status;
}
-
static GIOStatus
fr_channel_data_flush (FrChannelData *channel)
{
@@ -166,7 +153,6 @@ fr_channel_data_flush (FrChannelData *channel)
return status;
}
-
static void
fr_channel_data_reset (FrChannelData *channel)
{
@@ -178,14 +164,12 @@ fr_channel_data_reset (FrChannelData *channel)
}
}
-
static void
fr_channel_data_free (FrChannelData *channel)
{
fr_channel_data_reset (channel);
}
-
static void
fr_channel_data_set_fd (FrChannelData *channel,
int fd,
@@ -200,11 +184,9 @@ fr_channel_data_set_fd (FrChannelData *channel,
g_io_channel_set_encoding (channel->source, charset, NULL);
}
-
const char *try_charsets[] = { "UTF-8", "ISO-8859-1", "WINDOW-1252" };
int n_charsets = G_N_ELEMENTS (try_charsets);
-
struct _FrProcessPrivate {
GPtrArray *comm; /* FrCommandInfo elements. */
gint n_comm; /* total number of commands */
@@ -227,7 +209,6 @@ struct _FrProcessPrivate {
int current_charset;
};
-
GType
fr_process_get_type (void)
{
@@ -256,7 +237,6 @@ fr_process_get_type (void)
return type;
}
-
static void
fr_process_class_init (FrProcessClass *class)
{
@@ -296,7 +276,6 @@ fr_process_class_init (FrProcessClass *class)
class->done = NULL;
}
-
static void
fr_process_init (FrProcess *process)
{
@@ -304,7 +283,7 @@ fr_process_init (FrProcess *process)
process->term_on_stop = TRUE;
- process->priv->comm = g_ptr_array_new ();
+ process->priv->comm = g_ptr_array_new_with_free_func (fr_command_info_free);
process->priv->n_comm = -1;
process->priv->current_comm = -1;
@@ -325,14 +304,12 @@ fr_process_init (FrProcess *process)
process->priv->use_standard_locale = FALSE;
}
-
FrProcess *
fr_process_new (void)
{
return FR_PROCESS (g_object_new (FR_TYPE_PROCESS, NULL));
}
-
static void fr_process_stop_priv (FrProcess *process, gboolean emit_signal);
static int fr_switch_process_state (FrProcess *process);
@@ -347,9 +324,8 @@ fr_process_finalize (GObject *object)
process = FR_PROCESS (object);
fr_process_stop_priv (process, FALSE);
- fr_process_clear (process);
- g_ptr_array_free (process->priv->comm, FALSE);
+ g_ptr_array_free (process->priv->comm, TRUE);
fr_channel_data_free (&process->out);
fr_channel_data_free (&process->err);
@@ -365,7 +341,6 @@ fr_process_finalize (GObject *object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
-
void
fr_process_begin_command (FrProcess *process,
const char *arg)
@@ -383,7 +358,6 @@ fr_process_begin_command (FrProcess *process,
process->priv->current_comm = process->priv->n_comm;
}
-
void
fr_process_begin_command_at (FrProcess *process,
const char *arg,
@@ -397,9 +371,7 @@ fr_process_begin_command_at (FrProcess *process,
process->priv->current_comm = index;
old_c_info = g_ptr_array_index (process->priv->comm, index);
-
- if (old_c_info != NULL)
- fr_command_info_free (old_c_info);
+ fr_command_info_free (old_c_info);
info = fr_command_info_new ();
info->args = g_list_prepend (NULL, g_strdup (arg));
@@ -407,7 +379,6 @@ fr_process_begin_command_at (FrProcess *process,
g_ptr_array_index (process->priv->comm, index) = info;
}
-
void
fr_process_set_working_dir (FrProcess *process,
const char *dir)
@@ -423,7 +394,6 @@ fr_process_set_working_dir (FrProcess *process,
info->dir = g_strdup (dir);
}
-
void
fr_process_set_sticky (FrProcess *process,
gboolean sticky)
@@ -434,10 +404,9 @@ fr_process_set_sticky (FrProcess *process,
g_return_if_fail (process->priv->current_comm >= 0);
info = g_ptr_array_index (process->priv->comm, process->priv->current_comm);
- info->sticky = sticky;
+ info->sticky = (sticky != FALSE);
}
-
void
fr_process_set_ignore_error (FrProcess *process,
gboolean ignore_error)
@@ -448,10 +417,9 @@ fr_process_set_ignore_error (FrProcess *process,
g_return_if_fail (process->priv->current_comm >= 0);
info = g_ptr_array_index (process->priv->comm, process->priv->current_comm);
- info->ignore_error = ignore_error;
+ info->ignore_error = (ignore_error != FALSE);
}
-
void
fr_process_add_arg (FrProcess *process,
const char *arg)
@@ -465,7 +433,6 @@ fr_process_add_arg (FrProcess *process,
info->args = g_list_prepend (info->args, g_strdup (arg));
}
-
void
fr_process_add_arg_concat (FrProcess *process,
const char *arg1,
@@ -486,7 +453,6 @@ fr_process_add_arg_concat (FrProcess *process,
g_string_free (arg, TRUE);
}
-
void
fr_process_add_arg_printf (FrProcess *fr_proc,
const char *format,
@@ -504,7 +470,6 @@ fr_process_add_arg_printf (FrProcess *fr_proc,
g_free (arg);
}
-
void
fr_process_set_arg_at (FrProcess *process,
int n_comm,
@@ -524,7 +489,6 @@ fr_process_set_arg_at (FrProcess *process,
arg->data = g_strdup (arg_value);
}
-
void
fr_process_set_begin_func (FrProcess *process,
ProcFunc func,
@@ -539,7 +503,6 @@ fr_process_set_begin_func (FrProcess *process,
info->begin_data = func_data;
}
-
void
fr_process_set_end_func (FrProcess *process,
ProcFunc func,
@@ -554,7 +517,6 @@ fr_process_set_end_func (FrProcess *process,
info->end_data = func_data;
}
-
void
fr_process_set_continue_func (FrProcess *process,
ContinueFunc func,
@@ -572,7 +534,6 @@ fr_process_set_continue_func (FrProcess *process,
info->continue_data = func_data;
}
-
void
fr_process_end_command (FrProcess *process)
{
@@ -584,7 +545,6 @@ fr_process_end_command (FrProcess *process)
info->args = g_list_reverse (info->args);
}
-
void
fr_process_clear (FrProcess *process)
{
@@ -592,14 +552,6 @@ fr_process_clear (FrProcess *process)
g_return_if_fail (process != NULL);
- for (i = 0; i <= process->priv->n_comm; i++) {
- FrCommandInfo *info;
-
- info = g_ptr_array_index (process->priv->comm, i);
- fr_command_info_free (info);
- g_ptr_array_index (process->priv->comm, i) = NULL;
- }
-
for (i = 0; i <= process->priv->n_comm; i++)
g_ptr_array_remove_index_fast (process->priv->comm, 0);
@@ -607,7 +559,6 @@ fr_process_clear (FrProcess *process)
process->priv->current_comm = -1;
}
-
void
fr_process_set_out_line_func (FrProcess *process,
LineFunc func,
@@ -619,7 +570,6 @@ fr_process_set_out_line_func (FrProcess *process,
process->out.line_data = data;
}
-
void
fr_process_set_err_line_func (FrProcess *process,
LineFunc func,
@@ -631,10 +581,8 @@ fr_process_set_err_line_func (FrProcess *process,
process->err.line_data = data;
}
-
static gboolean check_child (gpointer data);
-
static void
child_setup (gpointer user_data)
{
@@ -656,7 +604,6 @@ child_setup (gpointer user_data)
setpgid (0, 0);
}
-
static const char *
fr_process_get_charset (FrProcess *process)
{
@@ -670,7 +617,6 @@ fr_process_get_charset (FrProcess *process)
return charset;
}
-
static void
start_current_command (FrProcess *process)
{
@@ -804,7 +750,6 @@ start_current_command (FrProcess *process)
process);
}
-
static gboolean
command_is_sticky (FrProcess *process,
int i)
@@ -815,7 +760,6 @@ command_is_sticky (FrProcess *process,
return info->sticky;
}
-
static void
allow_sticky_processes_only (FrProcess *process,
gboolean emit_signal)
@@ -837,7 +781,6 @@ allow_sticky_processes_only (FrProcess *process,
0);
}
-
static void
fr_process_set_error (FrProcess *process,
FrProcErrorType type,
@@ -853,7 +796,6 @@ fr_process_set_error (FrProcess *process,
}
}
-
static gint
check_child (gpointer data)
{
@@ -900,10 +842,9 @@ check_child (gpointer data)
process->error.type = FR_PROC_ERROR_NONE;
else if (WEXITSTATUS (status) == 255)
process->error.type = FR_PROC_ERROR_COMMAND_NOT_FOUND;
- else {
+ else
process->error.type = FR_PROC_ERROR_COMMAND_ERROR;
- process->error.status = WEXITSTATUS (status);
- }
+ process->error.status = WEXITSTATUS (status);
}
else {
process->error.type = FR_PROC_ERROR_EXITED_ABNORMALLY;
@@ -1008,7 +949,6 @@ check_child (gpointer data)
return FALSE;
}
-
void
fr_process_use_standard_locale (FrProcess *process,
gboolean use_stand_locale)
@@ -1017,7 +957,6 @@ fr_process_use_standard_locale (FrProcess *process,
process->priv->use_standard_locale = use_stand_locale;
}
-
void
fr_process_start (FrProcess *process)
{
@@ -1141,7 +1080,6 @@ fr_process_stop_priv (FrProcess *process,
}
}
-
void
fr_process_stop (FrProcess *process)
{