aboutsummaryrefslogtreecommitdiffstats
path: root/community/freerdp/freerdp-args.patch
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2017-10-31 12:04:51 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2017-10-31 12:04:51 +0000
commitf30ca0c6f5b6cadc7b7a9f4610a96b53b6353154 (patch)
tree8b2274011772eae20ac7ad3d034d1c96c273ed4a /community/freerdp/freerdp-args.patch
parenta34c5e0d77f5c39e3875afda62db0894d515d5bf (diff)
downloadaports-f30ca0c6f5b6cadc7b7a9f4610a96b53b6353154.tar.bz2
aports-f30ca0c6f5b6cadc7b7a9f4610a96b53b6353154.tar.xz
community/freerdp: move from main
Diffstat (limited to 'community/freerdp/freerdp-args.patch')
-rw-r--r--community/freerdp/freerdp-args.patch186
1 files changed, 186 insertions, 0 deletions
diff --git a/community/freerdp/freerdp-args.patch b/community/freerdp/freerdp-args.patch
new file mode 100644
index 0000000000..d9b7eca16a
--- /dev/null
+++ b/community/freerdp/freerdp-args.patch
@@ -0,0 +1,186 @@
+diff --git a/client/common/cmdline.c b/client/common/cmdline.c
+index f1f9640..72bbd12 100644
+--- a/client/common/cmdline.c
++++ b/client/common/cmdline.c
+@@ -1078,8 +1078,10 @@ BOOL freerdp_client_detect_command_line(int argc, char** argv, DWORD* flags)
+ if (posix_cli_status <= COMMAND_LINE_STATUS_PRINT)
+ return compatibility;
+
+- if (windows_cli_count >= posix_cli_count)
++ /* Check, if this may be windows style syntax... */
++ if ((windows_cli_count && (windows_cli_count >= posix_cli_count)) || (windows_cli_status <= COMMAND_LINE_STATUS_PRINT))
+ {
++ windows_cli_count = 1;
+ *flags = COMMAND_LINE_SEPARATOR_COLON;
+ *flags |= COMMAND_LINE_SIGIL_SLASH | COMMAND_LINE_SIGIL_PLUS_MINUS;
+ }
+diff --git a/client/common/compatibility.c b/client/common/compatibility.c
+index 3a7d0da..d6efe50 100644
+--- a/client/common/compatibility.c
++++ b/client/common/compatibility.c
+@@ -122,16 +122,20 @@ void freerdp_client_old_parse_hostname(char* str, char** ServerHostname, UINT32*
+
+ int freerdp_client_old_process_plugin(rdpSettings* settings, ADDIN_ARGV* args)
+ {
++ int args_handled = 0;
+ if (strcmp(args->argv[0], "cliprdr") == 0)
+ {
++ args_handled++;
+ settings->RedirectClipboard = TRUE;
+ WLog_WARN(TAG, "--plugin cliprdr -> +clipboard");
+ }
+ else if (strcmp(args->argv[0], "rdpdr") == 0)
+ {
++ args_handled++;
+ if (args->argc < 2)
+- return -1;
++ return 1;
+
++ args_handled++;
+ if ((strcmp(args->argv[1], "disk") == 0) ||
+ (strcmp(args->argv[1], "drive") == 0))
+ {
+@@ -159,21 +163,26 @@ int freerdp_client_old_process_plugin(rdpSettings* settings, ADDIN_ARGV* args)
+ }
+ else if (strcmp(args->argv[0], "drdynvc") == 0)
+ {
++ args_handled++;
+ freerdp_client_add_dynamic_channel(settings, args->argc - 1, &args->argv[1]);
+ }
+ else if (strcmp(args->argv[0], "rdpsnd") == 0)
+ {
++ args_handled++;
+ if (args->argc < 2)
+- return -1;
++ return 1;
+
++ args_handled++;
+ freerdp_addin_replace_argument_value(args, args->argv[1], "sys", args->argv[1]);
+ freerdp_client_add_static_channel(settings, args->argc, args->argv);
+ }
+ else if (strcmp(args->argv[0], "rail") == 0)
+ {
++ args_handled++;
+ if (args->argc < 2)
+- return -1;
++ return 1;
+
++ args_handled++;
+ settings->RemoteApplicationProgram = _strdup(args->argv[1]);
+ }
+ else
+@@ -181,14 +190,12 @@ int freerdp_client_old_process_plugin(rdpSettings* settings, ADDIN_ARGV* args)
+ freerdp_client_add_static_channel(settings, args->argc, args->argv);
+ }
+
+- return 1;
++ return args_handled;
+ }
+
+ int freerdp_client_old_command_line_pre_filter(void* context, int index, int argc, LPCSTR* argv)
+ {
+- rdpSettings* settings;
+-
+- settings = (rdpSettings*) context;
++ rdpSettings* settings = (rdpSettings*) context;
+
+ if (index == (argc - 1))
+ {
+@@ -204,11 +211,10 @@ int freerdp_client_old_command_line_pre_filter(void* context, int index, int arg
+ return -1;
+ }
+
+- if (settings)
+- {
+- freerdp_client_old_parse_hostname((char*) argv[index],
+- &settings->ServerHostname, &settings->ServerPort);
+- }
++ freerdp_client_old_parse_hostname((char*) argv[index],
++ &settings->ServerHostname, &settings->ServerPort);
++
++ return 2;
+ }
+ else
+ {
+@@ -218,6 +224,7 @@ int freerdp_client_old_command_line_pre_filter(void* context, int index, int arg
+
+ if (strcmp("--plugin", argv[index]) == 0)
+ {
++ int args_handled = 0;
+ int length;
+ char *a, *p;
+ int i, j, t;
+@@ -233,20 +240,19 @@ int freerdp_client_old_command_line_pre_filter(void* context, int index, int arg
+ return -1;
+
+ args = (ADDIN_ARGV*) malloc(sizeof(ADDIN_ARGV));
+- args->argv = (char**) malloc(sizeof(char*) * 5);
++ args->argv = (char**) calloc(argc, sizeof(char*));
+ args->argc = 1;
+
+- args->argv[0] = _strdup(argv[t]);
+-
+ if ((index < argc - 1) && strcmp("--data", argv[index + 1]) == 0)
+ {
+ i = 0;
+ index += 2;
+- args->argc = 1;
+
+ while ((index < argc) && (strcmp("--", argv[index]) != 0))
+ {
++ args_handled ++;
+ args->argc = 1;
++ args->argv[0] = _strdup(argv[t]);
+
+ for (j = 0, p = (char*) argv[index]; (j < 4) && (p != NULL); j++)
+ {
+@@ -267,6 +273,9 @@ int freerdp_client_old_command_line_pre_filter(void* context, int index, int arg
+ if (p != NULL)
+ {
+ p = strchr(p, ':');
++ }
++ if (p != NULL)
++ {
+ length = (int) (p - a);
+ args->argv[j + 1] = (char*) malloc(length + 1);
+ CopyMemory(args->argv[j + 1], a, length);
+@@ -281,11 +290,14 @@ int freerdp_client_old_command_line_pre_filter(void* context, int index, int arg
+ args->argc++;
+ }
+
+- if (settings->instance)
++ if (settings)
+ {
+ freerdp_client_old_process_plugin(settings, args);
+ }
+
++ for (i = 0; i < args->argc; i++)
++ free(args->argv[i]);
++ memset(args->argv, 0, argc * sizeof(char*));
+ index++;
+ i++;
+ }
+@@ -294,19 +306,16 @@ int freerdp_client_old_command_line_pre_filter(void* context, int index, int arg
+ {
+ if (settings)
+ {
+- if (settings->instance)
+- {
+- freerdp_client_old_process_plugin(settings, args);
+- }
++ args->argv[0] = _strdup(argv[t]);
++ args_handled = freerdp_client_old_process_plugin(settings, args);
++ free (args->argv[0]);
+ }
+ }
+
+- for (i = 0; i < args->argc; i++)
+- free(args->argv[i]);
+ free(args->argv);
+ free(args);
+
+- return (index - old_index);
++ return (index - old_index) + args_handled;
+ }
+
+ return 0;