mirror of
https://github.com/davatorium/rofi.git
synced 2024-11-25 13:55:34 -05:00
Possible fix for issue #90.
* Escape the argument passed to the script. * Escape '\"
This commit is contained in:
parent
66349a00dc
commit
18c6186501
1 changed files with 39 additions and 2 deletions
|
@ -99,12 +99,49 @@ static char **get_script_output ( char *command, unsigned int *length )
|
|||
return retv;
|
||||
}
|
||||
|
||||
// There should be a glib version for this.
|
||||
// Fixing.
|
||||
char *escape_string ( const char *string )
|
||||
{
|
||||
int new_length = 0;
|
||||
int length = strlen ( string );
|
||||
|
||||
// Characters to escape
|
||||
const char echars[] = "'\\ \"";
|
||||
const char num_echars = sizeof ( echars ) / sizeof ( char );
|
||||
|
||||
// Count strings, Calculate new length.
|
||||
for ( int i = 0; i < length; i++ ) {
|
||||
for ( int j = 0; j < num_echars; j++ ) {
|
||||
if ( echars[j] == string[i] ) {
|
||||
new_length++;
|
||||
}
|
||||
}
|
||||
new_length++;
|
||||
}
|
||||
// Create escaped string.
|
||||
char *retv = g_malloc0 ( ( new_length + 1 ) * sizeof ( char ) );
|
||||
new_length = 0;
|
||||
for ( int i = 0; i < length; i++ ) {
|
||||
for ( int j = 0; j < num_echars; j++ ) {
|
||||
if ( echars[j] == string[i] ) {
|
||||
retv[new_length++] = '\\';
|
||||
}
|
||||
}
|
||||
retv[new_length++] = string[i];
|
||||
}
|
||||
return retv;
|
||||
}
|
||||
|
||||
char **execute_executor ( ScriptOptions *options, const char *result, unsigned int *length )
|
||||
{
|
||||
char **retv = NULL;
|
||||
char *command = g_strdup_printf ( "%s '%s'", options->script_path, result );
|
||||
|
||||
char *arg = escape_string ( result );
|
||||
char *command = g_strdup_printf ( "%s %s", options->script_path, arg );
|
||||
retv = get_script_output ( command, length );
|
||||
g_free ( command );
|
||||
g_free ( arg );
|
||||
return retv;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue