* @param plugin_user_data pointer to be passed to the plugin_callback function.
* @param ui_callback function to be called when a UI-specific argument is being processed.
* @param ui_user_data pointer to be passed to the ui_callback function.
- * @return number of arguments that has been parsed, or 0 if error occurred.
+ * @return number of arguments that were parsed, or FREERDP_ARGS_PARSE_RESULT on failure or --version/--help
*/
int freerdp_parse_args(rdpSettings* settings, int argc, char** argv,
ProcessPluginArgs plugin_callback, void* plugin_user_data,
" --sec: force protocol security (rdp, tls or nla)\n"
" --version: print version information\n"
"\n", argv[0]);
- return -1; //TODO: What is the correct return
+ return FREERDP_ARGS_PARSE_HELP; //TODO: What is the correct return
}
else if (strcmp("-a", argv[index]) == 0)
{
if (index == argc)
{
printf("missing color depth\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
settings->color_depth = atoi(argv[index]);
}
if (index == argc)
{
printf("missing username\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
settings->username = xstrdup(argv[index]);
}
if (index == argc)
{
printf("missing password\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
settings->password = xstrdup(argv[index]);
settings->autologon = 1;
if (index == argc)
{
printf("missing domain\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
settings->domain = xstrdup(argv[index]);
}
if (index == argc)
{
printf("missing shell\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
settings->shell = xstrdup(argv[index]);
}
if (index == argc)
{
printf("missing directory\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
settings->directory = xstrdup(argv[index]);
}
if (index == argc)
{
printf("missing dimensions\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
if (strncmp("workarea", argv[index], 1) == 0)
if (settings->percent_screen <= 0 || settings->percent_screen > 100)
{
printf("invalid geometry percentage\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
}
else
if (index == argc)
{
printf("missing window title\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
settings->window_title = xstrdup(argv[index]);
if (index == argc)
{
printf("missing port number\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
settings->port = atoi(argv[index]);
}
if (index == argc)
{
printf("missing keyboard layout id\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
sscanf(argv[index], "%X", &(settings->kbd_layout));
}
if (index == argc)
{
printf("missing client hostname\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
strncpy(settings->client_hostname, argv[index], sizeof(settings->client_hostname) - 1);
settings->client_hostname[sizeof(settings->client_hostname) - 1] = 0;
if (index == argc)
{
printf("missing GDI backend\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
if (strncmp("sw", argv[index], 1) == 0) /* software */
{
else
{
printf("unknown GDI backend\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
}
else if (strcmp("--rfx", argv[index]) == 0)
if (index == argc)
{
printf("missing RemoteFX mode flag\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
if (argv[index][0] == 'v') /* video */
{
else
{
printf("unknown RemoteFX mode flag\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
}
else if (strcmp("--nsc", argv[index]) == 0)
if (index == argc)
{
printf("missing file name\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
settings->dump_rfx_file = xstrdup(argv[index]);
settings->dump_rfx = true;
if (index == argc)
{
printf("missing file name\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
settings->play_rfx_file = xstrdup(argv[index]);
settings->play_rfx = true;
if (index == argc)
{
printf("missing performance flag\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
if (argv[index][0] == 'm') /* modem */
{
if (index == argc)
{
printf("missing parent window XID\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
settings->parent_window_xid = strtoul(argv[index], NULL, 16);
if (settings->parent_window_xid == 0)
{
printf("invalid parent window XID\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
}
else if (strcmp("--no-rdp", argv[index]) == 0)
if (index == argc)
{
printf("missing protocol security\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
if (strncmp("rdp", argv[index], 1) == 0) /* Standard RDP */
{
else
{
printf("unknown protocol security\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
}
else if (strcmp("--plugin", argv[index]) == 0)
if (index == argc)
{
printf("missing plugin name\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
plugin_data = NULL;
if (index < argc - 1 && strcmp("--data", argv[index + 1]) == 0)
if (plugin_callback != NULL)
{
if (!plugin_callback(settings, argv[t], plugin_data, plugin_user_data))
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
}
else if (strcmp("--ext", argv[index]) == 0)
if (index == argc)
{
printf("missing extension name\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
if (num_extensions >= sizeof(settings->extensions) / sizeof(struct rdp_ext_set))
{
printf("maximum extensions reached\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
snprintf(settings->extensions[num_extensions].name,
sizeof(settings->extensions[num_extensions].name),
else if (strcmp("--version", argv[index]) == 0)
{
printf("This is FreeRDP version %s\n", FREERDP_VERSION_FULL);
- return -1;
+ return FREERDP_ARGS_PARSE_VERSION;
}
else if (argv[index][0] != '-')
{
if (t == 0)
{
printf("invalid option: %s\n", argv[index]);
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}
index += t - 1;
}
index++;
}
printf("missing server name\n");
- return -1;
+ return FREERDP_ARGS_PARSE_FAILURE;
}