diff options
Diffstat (limited to 'src/fr-process.c')
-rw-r--r-- | src/fr-process.c | 88 |
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) { |