[gnome-commander] parse_command returns the length of resulting string now.
- From: Uwe Scholz <uwescholz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-commander] parse_command returns the length of resulting string now.
- Date: Sun, 8 Feb 2015 19:34:18 +0000 (UTC)
commit 41b357b45e34b3c3e6f6ba0194b00cc3ed29663f
Author: Uwe Scholz <uwescholz src gnome org>
Date: Sun Feb 8 15:38:35 2015 +0100
parse_command returns the length of resulting string now.
This is used to check if the parsed string is valid, i.e. the number of
letters in the returned string is > 0. Trailing white spaces are
omitted.
src/gnome-cmd-user-actions.cc | 138 +++++++++++++++++++++++++----------------
1 files changed, 84 insertions(+), 54 deletions(-)
---
diff --git a/src/gnome-cmd-user-actions.cc b/src/gnome-cmd-user-actions.cc
index 090b948..14d0015 100644
--- a/src/gnome-cmd-user-actions.cc
+++ b/src/gnome-cmd-user-actions.cc
@@ -108,7 +108,7 @@ inline gboolean append_real_path (string &s, GnomeCmdFile *f)
}
-void parse_command(string *cmd, gchar * command);
+int parse_command(string *cmd, gchar * command);
GnomeCmdUserActions gcmd_user_actions;
@@ -777,31 +777,35 @@ void file_edit (GtkMenuItem *menuitem, gpointer not_used)
gnome_cmd_file_selector_show_new_textfile_dialog (get_fs (ACTIVE));
else
{
- gchar *command;
+ GnomeCmdDir *dir = NULL;
+ gchar *command;
command = g_strdup (gnome_cmd_data.options.editor);
g_return_if_fail (command != NULL);
- g_return_if_fail (command[0] != '\0');
- DEBUG ('g', "Invoking 'Edit file': %s\n", command);
-
- GnomeCmdDir *dir = NULL;
+
string dir_path;
string cmd;
cmd.reserve(2000);
- parse_command(&cmd, command);
- DEBUG ('g', "Edit file: %s\n", cmd.c_str());
-
- gint argc;
- gchar **argv;
- GError *error = NULL;
-
- g_shell_parse_argv (cmd.c_str(), &argc, &argv, NULL);
- if (!g_spawn_async (gnome_cmd_dir_is_local (dir) ? dir_path.c_str() : NULL, argv, NULL,
G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error))
- gnome_cmd_error_message (_("Unable to execute command."), error);
-
- g_strfreev (argv);
- g_free (command);
+ if (parse_command(&cmd, command) == 0)
+ {
+ DEBUG ('g', "Edit file command is not valid.\n");
+ return;
+ }
+ else
+ {
+ gint argc;
+ gchar **argv = NULL;
+ GError *error = NULL;
+ DEBUG ('g', "Edit file: %s\n", cmd.c_str());
+
+ g_shell_parse_argv (cmd.c_str(), &argc, &argv, NULL);
+ if (!g_spawn_async (gnome_cmd_dir_is_local (dir) ? dir_path.c_str() : NULL, argv, NULL,
G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error))
+ gnome_cmd_error_message (_("Unable to execute command."), error);
+
+ g_strfreev (argv);
+ g_free (command);
+ }
}
}
@@ -917,31 +921,33 @@ void file_advrename (GtkMenuItem *menuitem, gpointer not_used)
void file_sendto (GtkMenuItem *menuitem, gpointer not_used)
{
- gchar *command;
+ GnomeCmdDir *dir = NULL;
+ gchar *command = NULL;
+ string dir_path;
+ string cmd;
command = g_strdup (gnome_cmd_data.options.sendto);
g_return_if_fail (command != NULL);
- g_return_if_fail (command[0] != '\0');
- DEBUG ('g', "Invoking 'Send files': %s\n", command);
-
- GnomeCmdDir *dir = NULL;
- string dir_path;
- string cmd;
-
+
cmd.reserve(2000);
- parse_command(&cmd, g_strdup(gnome_cmd_data.options.sendto));
- DEBUG ('g', "Send files: %s\n", cmd.c_str());
- gint argc;
- gchar **argv;
- GError *error = NULL;
-
- g_shell_parse_argv (cmd.c_str(), &argc, &argv, NULL);
- if (!g_spawn_async (gnome_cmd_dir_is_local (dir) ? dir_path.c_str() : NULL, argv, NULL,
G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error))
- gnome_cmd_error_message (_("Unable to execute command."), error);
-
- g_strfreev (argv);
- g_free (command);
+ if (parse_command(&cmd, g_strdup(gnome_cmd_data.options.sendto)) == 0)
+ {
+ DEBUG ('g', "Sendto command is not valid.\n");
+ return;
+ }
+ else
+ {
+ gint argc;
+ gchar **argv = NULL;
+ GError *error = NULL;
+ DEBUG ('g', "Invoking 'Send files': %s\n", cmd.c_str());
+ g_shell_parse_argv (cmd.c_str(), &argc, &argv, NULL);
+ if (!g_spawn_async (gnome_cmd_dir_is_local (dir) ? dir_path.c_str() : NULL, argv, NULL,
G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error))
+ gnome_cmd_error_message (_("Unable to execute command."), error);
+ g_free (command);
+ g_strfreev (argv);
+ }
}
@@ -1127,6 +1133,7 @@ void command_execute (GtkMenuItem *menuitem, gpointer command)
string dir_path;
string quoted_dir_path;
+ string cmd;
GnomeCmdDir *dir = NULL;
@@ -1151,22 +1158,27 @@ void command_execute (GtkMenuItem *menuitem, gpointer command)
stringify (quoted_dir_path, gnome_cmd_file_get_quoted_real_path (GNOME_CMD_FILE (dir)));
}
- string cmd;
cmd.reserve(2000);
- parse_command(&cmd, (gchar*) command);
-
- DEBUG ('g', "running: %s\n", cmd.c_str());
-
- gint argc;
- gchar **argv;
- GError *error = NULL;
+ if (parse_command(&cmd, (gchar*) command) == 0)
+ {
+ DEBUG ('g', "Command is not valid.\n");
+ return;
+ }
+ else
+ {
+ gint argc;
+ gchar **argv;
+ GError *error = NULL;
+
+ DEBUG ('g', "Running: %s\n", cmd.c_str());
- g_shell_parse_argv (cmd.c_str(), &argc, &argv, NULL);
- if (!g_spawn_async (gnome_cmd_dir_is_local (dir) ? dir_path.c_str() : NULL, argv, NULL,
G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error))
- gnome_cmd_error_message (_("Unable to execute command."), error);
+ g_shell_parse_argv (cmd.c_str(), &argc, &argv, NULL);
+ if (!g_spawn_async (gnome_cmd_dir_is_local (dir) ? dir_path.c_str() : NULL, argv, NULL,
G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error))
+ gnome_cmd_error_message (_("Unable to execute command."), error);
- g_strfreev (argv);
- g_list_free (sfl);
+ g_strfreev (argv);
+ g_list_free (sfl);
+ }
}
@@ -2083,13 +2095,16 @@ void help_about (GtkMenuItem *menuitem, gpointer not_used)
* \li \%d: full path to the directory containing file
* \li \%D: quoted full path to the directory containg file
* \li \%%: percent sign
+ * Trailing blanks are removed.
*
* \param[in] command A char array to be parsed
* \param[out] cmd A string with parsed symbols listed above
+ * \returns Length of the cmd string
*/
-void parse_command(string *cmd, gchar *command)
+int parse_command(string *cmd, gchar *command)
{
gboolean percent = FALSE;
+ gboolean blcheck = FALSE;
string filename;
string quoted_filename;
string file_path;
@@ -2119,7 +2134,20 @@ void parse_command(string *cmd, gchar *command)
cmd->reserve(cmdlen +1);
cmdcap = cmd->capacity();
}
- *cmd += *s;
+ if (blcheck) // copy letter by letter, but remove trailing blanks
+ *cmd += *s;
+ else
+ {
+ if (*s == ' ' || *s == '\t')
+ {
+ continue;
+ }
+ else
+ {
+ blcheck = TRUE;
+ *cmd += *s;
+ }
+ }
cmdlen = cmd->length();
}
@@ -2233,4 +2261,6 @@ void parse_command(string *cmd, gchar *command)
if (percent)
*cmd += '%';
+
+ return cmd->length();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]