libfreerdp-client: start splitting termination and printing logic for CLI parsing
This commit is contained in:
parent
b5bb3619b8
commit
95a129eb69
@ -27,12 +27,14 @@
|
||||
#include <winpr/thread.h>
|
||||
|
||||
#include <freerdp/freerdp.h>
|
||||
#include <freerdp/client/cmdline.h>
|
||||
|
||||
#include "xf_client.h"
|
||||
#include "xfreerdp.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
int status;
|
||||
HANDLE thread;
|
||||
xfContext* xfc;
|
||||
DWORD dwExitCode;
|
||||
@ -51,20 +53,17 @@ int main(int argc, char* argv[])
|
||||
settings = context->settings;
|
||||
xfc = (xfContext*) context;
|
||||
|
||||
if (freerdp_client_parse_command_line(context, argc, argv) < 0)
|
||||
{
|
||||
if (settings->ConnectionFile)
|
||||
{
|
||||
freerdp_client_parse_connection_file(context, settings->ConnectionFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (settings->ListMonitors)
|
||||
xf_list_monitors(xfc);
|
||||
status = freerdp_client_parse_command_line(context, argc, argv);
|
||||
|
||||
freerdp_client_context_free(context);
|
||||
return 0;
|
||||
}
|
||||
status = freerdp_client_command_line_status_print(argc, argv, settings, status);
|
||||
|
||||
if (status)
|
||||
{
|
||||
if (settings->ListMonitors)
|
||||
xf_list_monitors(xfc);
|
||||
|
||||
freerdp_client_context_free(context);
|
||||
return 0;
|
||||
}
|
||||
|
||||
freerdp_client_start(context);
|
||||
|
@ -667,9 +667,6 @@ BOOL xf_pre_connect(freerdp* instance)
|
||||
instance->OnChannelConnected = xf_on_channel_connected;
|
||||
instance->OnChannelDisconnected = xf_on_channel_disconnected;
|
||||
|
||||
//if (status < 0)
|
||||
// exit(XF_EXIT_PARSE_ARGUMENTS);
|
||||
|
||||
freerdp_client_load_addins(channels, instance->settings);
|
||||
|
||||
freerdp_channels_pre_connect(channels, instance);
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include <winpr/crt.h>
|
||||
#include <winpr/synch.h>
|
||||
#include <winpr/thread.h>
|
||||
#include <winpr/collections.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
@ -949,32 +949,10 @@ BOOL freerdp_client_detect_command_line(int argc, char** argv, DWORD* flags)
|
||||
return compatibility;
|
||||
}
|
||||
|
||||
int freerdp_client_parse_command_line_arguments(int argc, char** argv, rdpSettings* settings)
|
||||
int freerdp_client_command_line_status_print(int argc, char** argv, rdpSettings* settings, int status)
|
||||
{
|
||||
char* p;
|
||||
char* str;
|
||||
int length;
|
||||
int status;
|
||||
DWORD flags;
|
||||
BOOL compatibility;
|
||||
COMMAND_LINE_ARGUMENT_A* arg;
|
||||
|
||||
freerdp_register_addin_provider(freerdp_channels_load_static_addin_entry, 0);
|
||||
|
||||
compatibility = freerdp_client_detect_command_line(argc, argv, &flags);
|
||||
|
||||
if (compatibility)
|
||||
{
|
||||
fprintf(stderr, "WARNING: Using deprecated command-line interface!\n");
|
||||
return freerdp_client_parse_old_command_line_arguments(argc, argv, settings);
|
||||
}
|
||||
else
|
||||
{
|
||||
CommandLineClearArgumentsA(args);
|
||||
status = CommandLineParseArgumentsA(argc, (const char**) argv, args, flags, settings,
|
||||
freerdp_client_command_line_pre_filter, freerdp_client_command_line_post_filter);
|
||||
}
|
||||
|
||||
if (status == COMMAND_LINE_STATUS_PRINT_HELP)
|
||||
{
|
||||
freerdp_client_print_command_line_help(argc, argv);
|
||||
@ -1025,13 +1003,36 @@ int freerdp_client_parse_command_line_arguments(int argc, char** argv, rdpSettin
|
||||
return COMMAND_LINE_STATUS_PRINT;
|
||||
}
|
||||
|
||||
arg = CommandLineFindArgumentA(args, "v");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!settings->ConnectionFile && !(arg->Flags & COMMAND_LINE_VALUE_PRESENT))
|
||||
int freerdp_client_parse_command_line_arguments(int argc, char** argv, rdpSettings* settings)
|
||||
{
|
||||
char* p;
|
||||
char* str;
|
||||
int length;
|
||||
int status;
|
||||
DWORD flags;
|
||||
BOOL compatibility;
|
||||
COMMAND_LINE_ARGUMENT_A* arg;
|
||||
|
||||
freerdp_register_addin_provider(freerdp_channels_load_static_addin_entry, 0);
|
||||
|
||||
compatibility = freerdp_client_detect_command_line(argc, argv, &flags);
|
||||
|
||||
if (compatibility)
|
||||
{
|
||||
//fprintf(stderr, "error: server hostname was not specified with /v:<server>[:port]\n");
|
||||
//return COMMAND_LINE_ERROR_MISSING_ARGUMENT;
|
||||
fprintf(stderr, "WARNING: Using deprecated command-line interface!\n");
|
||||
return freerdp_client_parse_old_command_line_arguments(argc, argv, settings);
|
||||
}
|
||||
else
|
||||
{
|
||||
CommandLineClearArgumentsA(args);
|
||||
status = CommandLineParseArgumentsA(argc, (const char**) argv, args, flags, settings,
|
||||
freerdp_client_command_line_pre_filter, freerdp_client_command_line_post_filter);
|
||||
}
|
||||
|
||||
arg = CommandLineFindArgumentA(args, "v");
|
||||
|
||||
arg = args;
|
||||
|
||||
|
@ -28,6 +28,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
FREERDP_API int freerdp_client_parse_command_line_arguments(int argc, char** argv, rdpSettings* settings);
|
||||
FREERDP_API int freerdp_client_command_line_status_print(int argc, char** argv, rdpSettings* settings, int status);
|
||||
FREERDP_API int freerdp_client_load_addins(rdpChannels* channels, rdpSettings* settings);
|
||||
|
||||
FREERDP_API int freerdp_client_print_version(void);
|
||||
|
@ -49,6 +49,7 @@ int CommandLineParseArgumentsA(int argc, LPCSTR* argv, COMMAND_LINE_ARGUMENT_A*
|
||||
void* context, COMMAND_LINE_PRE_FILTER_FN_A preFilter, COMMAND_LINE_POST_FILTER_FN_A postFilter)
|
||||
{
|
||||
int i, j;
|
||||
int status;
|
||||
int count;
|
||||
int length;
|
||||
int index;
|
||||
@ -67,11 +68,16 @@ int CommandLineParseArgumentsA(int argc, LPCSTR* argv, COMMAND_LINE_ARGUMENT_A*
|
||||
int value_index;
|
||||
int toggle;
|
||||
|
||||
status = 0;
|
||||
|
||||
if (!argv)
|
||||
return 0;
|
||||
return status;
|
||||
|
||||
if (argc == 1)
|
||||
return COMMAND_LINE_STATUS_PRINT_HELP;
|
||||
{
|
||||
status = COMMAND_LINE_STATUS_PRINT_HELP;
|
||||
return status;
|
||||
}
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
@ -82,7 +88,10 @@ int CommandLineParseArgumentsA(int argc, LPCSTR* argv, COMMAND_LINE_ARGUMENT_A*
|
||||
count = preFilter(context, i, argc, argv);
|
||||
|
||||
if (count < 0)
|
||||
return COMMAND_LINE_ERROR;
|
||||
{
|
||||
status = COMMAND_LINE_ERROR;
|
||||
return status;
|
||||
}
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
@ -257,7 +266,10 @@ int CommandLineParseArgumentsA(int argc, LPCSTR* argv, COMMAND_LINE_ARGUMENT_A*
|
||||
}
|
||||
|
||||
if (!value && (options[j].Flags & COMMAND_LINE_VALUE_REQUIRED))
|
||||
return COMMAND_LINE_ERROR_MISSING_VALUE;
|
||||
{
|
||||
status = COMMAND_LINE_ERROR_MISSING_VALUE;
|
||||
return status;
|
||||
}
|
||||
|
||||
options[j].Flags |= COMMAND_LINE_ARGUMENT_PRESENT;
|
||||
|
||||
@ -311,7 +323,7 @@ int CommandLineParseArgumentsA(int argc, LPCSTR* argv, COMMAND_LINE_ARGUMENT_A*
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return status;
|
||||
}
|
||||
|
||||
int CommandLineParseArgumentsW(int argc, LPCWSTR* argv, COMMAND_LINE_ARGUMENT_W* options, DWORD flags,
|
||||
|
Loading…
x
Reference in New Issue
Block a user