diff options
Diffstat (limited to 'libfreerdp/common/settings_str.c')
-rw-r--r-- | libfreerdp/common/settings_str.c | 477 |
1 files changed, 477 insertions, 0 deletions
diff --git a/libfreerdp/common/settings_str.c b/libfreerdp/common/settings_str.c new file mode 100644 index 0000000..5072951 --- /dev/null +++ b/libfreerdp/common/settings_str.c @@ -0,0 +1,477 @@ +/* Generated by */ + +#include "../core/settings.h" +#include "settings_str.h" + +BOOL freerdp_settings_clone_keys(rdpSettings* dst, const rdpSettings* src) +{ + WINPR_ASSERT(dst); + WINPR_ASSERT(src); + + for (size_t x = 0; x < ARRAYSIZE(settings_map); x++) + { + const struct settings_str_entry* cur = &settings_map[x]; + switch (cur->type) + { + case FREERDP_SETTINGS_TYPE_BOOL: /* bool */ + { + BOOL sval = freerdp_settings_get_bool(src, (FreeRDP_Settings_Keys_Bool)cur->id); + if (!freerdp_settings_set_bool(dst, (FreeRDP_Settings_Keys_Bool)cur->id, sval)) + return FALSE; + } + break; + case FREERDP_SETTINGS_TYPE_UINT16: /* UINT16 */ + { + UINT16 sval = + freerdp_settings_get_uint16(src, (FreeRDP_Settings_Keys_UInt16)cur->id); + if (!freerdp_settings_set_uint16(dst, (FreeRDP_Settings_Keys_UInt16)cur->id, sval)) + return FALSE; + } + break; + case FREERDP_SETTINGS_TYPE_INT16: /* INT16 */ + { + INT16 sval = freerdp_settings_get_int16(src, (FreeRDP_Settings_Keys_Int16)cur->id); + if (!freerdp_settings_set_int16(dst, (FreeRDP_Settings_Keys_Int16)cur->id, sval)) + return FALSE; + } + break; + case FREERDP_SETTINGS_TYPE_UINT32: /* UINT32 */ + { + UINT32 sval = + freerdp_settings_get_uint32(src, (FreeRDP_Settings_Keys_UInt32)cur->id); + if (!freerdp_settings_set_uint32(dst, (FreeRDP_Settings_Keys_UInt32)cur->id, sval)) + return FALSE; + } + break; + case FREERDP_SETTINGS_TYPE_INT32: /* INT32 */ + { + INT32 sval = freerdp_settings_get_int32(src, (FreeRDP_Settings_Keys_Int32)cur->id); + if (!freerdp_settings_set_int32(dst, (FreeRDP_Settings_Keys_Int32)cur->id, sval)) + return FALSE; + } + break; + case FREERDP_SETTINGS_TYPE_UINT64: /* UINT64 */ + { + UINT64 sval = + freerdp_settings_get_uint64(src, (FreeRDP_Settings_Keys_UInt64)cur->id); + if (!freerdp_settings_set_uint64(dst, (FreeRDP_Settings_Keys_UInt64)cur->id, sval)) + return FALSE; + } + break; + case FREERDP_SETTINGS_TYPE_INT64: /* INT64 */ + { + INT64 sval = freerdp_settings_get_int64(src, (FreeRDP_Settings_Keys_Int64)cur->id); + if (!freerdp_settings_set_int64(dst, (FreeRDP_Settings_Keys_Int64)cur->id, sval)) + return FALSE; + } + break; + case FREERDP_SETTINGS_TYPE_STRING: /* strings */ + { + const char* sval = + freerdp_settings_get_string(src, (FreeRDP_Settings_Keys_String)cur->id); + size_t len = 0; + if (sval) + len = strlen(sval); + if (!freerdp_settings_set_string_copy_(dst, (FreeRDP_Settings_Keys_String)cur->id, + sval, len, FALSE)) + return FALSE; + } + break; + case FREERDP_SETTINGS_TYPE_POINTER: /* pointer */ + { + const void* sval = + freerdp_settings_get_pointer(src, (FreeRDP_Settings_Keys_Pointer)cur->id); + if (!freerdp_settings_set_pointer(dst, (FreeRDP_Settings_Keys_Pointer)cur->id, + sval)) + return FALSE; + } + break; + } + } + return TRUE; +} + +BOOL freerdp_settings_print_diff(wLog* log, DWORD level, const rdpSettings* settings, + const rdpSettings* other) +{ + BOOL rc = FALSE; + + WINPR_ASSERT(log); + WINPR_ASSERT(settings); + WINPR_ASSERT(other); + + for (size_t x = 0; x < ARRAYSIZE(settings_map); x++) + { + const struct settings_str_entry* cur = &settings_map[x]; + switch (cur->type) + { + case FREERDP_SETTINGS_TYPE_BOOL: /* bool */ + { + BOOL sval = + freerdp_settings_get_bool(settings, (FreeRDP_Settings_Keys_Bool)cur->id); + BOOL cval = freerdp_settings_get_bool(other, (FreeRDP_Settings_Keys_Bool)cur->id); + if (sval != cval) + { + rc = TRUE; + WLog_Print(log, level, "%s [BOOL]: %s -> %s", cur->str, sval ? "TRUE" : "FALSE", + cval ? "TRUE" : "FALSE"); + } + } + break; + case FREERDP_SETTINGS_TYPE_UINT16: /* UINT16 */ + { + UINT16 sval = + freerdp_settings_get_uint16(settings, (FreeRDP_Settings_Keys_UInt16)cur->id); + UINT16 cval = + freerdp_settings_get_uint16(other, (FreeRDP_Settings_Keys_UInt16)cur->id); + if (sval != cval) + { + rc = TRUE; + WLog_Print(log, level, "%s [UINT16]: %" PRIu16 " -> %" PRIu16, cur->str, sval, + cval); + } + } + break; + case FREERDP_SETTINGS_TYPE_INT16: /* INT16 */ + { + INT16 sval = + freerdp_settings_get_int16(settings, (FreeRDP_Settings_Keys_Int16)cur->id); + INT16 cval = + freerdp_settings_get_int16(other, (FreeRDP_Settings_Keys_Int16)cur->id); + if (sval != cval) + { + rc = TRUE; + WLog_Print(log, level, "%s [INT16]: %" PRId16 " -> %" PRId16, cur->str, sval, + cval); + } + } + break; + case FREERDP_SETTINGS_TYPE_UINT32: /* UINT32 */ + { + UINT32 sval = + freerdp_settings_get_uint32(settings, (FreeRDP_Settings_Keys_UInt32)cur->id); + UINT32 cval = + freerdp_settings_get_uint32(other, (FreeRDP_Settings_Keys_UInt32)cur->id); + if (sval != cval) + { + rc = TRUE; + WLog_Print(log, level, "%s [UINT32]: %" PRIu32 " -> %" PRIu32, cur->str, sval, + cval); + } + } + break; + case FREERDP_SETTINGS_TYPE_INT32: /* INT32 */ + { + INT32 sval = + freerdp_settings_get_int32(settings, (FreeRDP_Settings_Keys_Int32)cur->id); + INT32 cval = + freerdp_settings_get_int32(other, (FreeRDP_Settings_Keys_Int32)cur->id); + if (sval != cval) + { + rc = TRUE; + WLog_Print(log, level, "%s [INT32]: %" PRId32 " -> %" PRId32, cur->str, sval, + cval); + } + } + break; + case FREERDP_SETTINGS_TYPE_UINT64: /* UINT64 */ + { + UINT64 sval = + freerdp_settings_get_uint64(settings, (FreeRDP_Settings_Keys_UInt64)cur->id); + UINT64 cval = + freerdp_settings_get_uint64(other, (FreeRDP_Settings_Keys_UInt64)cur->id); + if (sval != cval) + { + rc = TRUE; + WLog_Print(log, level, "%s [UINT64]: %" PRIu64 " -> %" PRIu64, cur->str, sval, + cval); + } + } + break; + case FREERDP_SETTINGS_TYPE_INT64: /* INT64 */ + { + INT64 sval = + freerdp_settings_get_int64(settings, (FreeRDP_Settings_Keys_Int64)cur->id); + INT64 cval = + freerdp_settings_get_int64(other, (FreeRDP_Settings_Keys_Int64)cur->id); + if (sval != cval) + { + rc = TRUE; + WLog_Print(log, level, "%s [INT64]: %" PRId64 " -> %" PRId64, cur->str, sval, + cval); + } + } + break; + case FREERDP_SETTINGS_TYPE_STRING: /* strings */ + { + const char* sval = + freerdp_settings_get_string(settings, (FreeRDP_Settings_Keys_String)cur->id); + const char* cval = + freerdp_settings_get_string(other, (FreeRDP_Settings_Keys_String)cur->id); + if (sval != cval) + { + if (!sval || !cval || (strcmp(sval, cval) != 0)) + { + rc = TRUE; + WLog_Print(log, level, "%s [STRING]: '%s' -> '%s'", cur->str, sval, cval); + } + } + } + break; + case FREERDP_SETTINGS_TYPE_POINTER: /* pointer */ + { + const void* sval = + freerdp_settings_get_pointer(settings, (FreeRDP_Settings_Keys_Pointer)cur->id); + const void* cval = + freerdp_settings_get_pointer(other, (FreeRDP_Settings_Keys_Pointer)cur->id); + if (sval != cval) + { + if ((sval && !cval) || (!sval && cval)) + { + rc = TRUE; + WLog_Print(log, level, "%s [POINTER]: '%p' -> '%p'", cur->str, sval, cval); + } + } + } + break; + } + } + return rc; +} + +void freerdp_settings_dump(wLog* log, DWORD level, const rdpSettings* settings) +{ + WINPR_ASSERT(log); + WINPR_ASSERT(settings); + + for (size_t x = 0; x < ARRAYSIZE(settings_map); x++) + { + const struct settings_str_entry* cur = &settings_map[x]; + switch (cur->type) + { + case FREERDP_SETTINGS_TYPE_BOOL: /* bool */ + { + BOOL sval = + freerdp_settings_get_bool(settings, (FreeRDP_Settings_Keys_Bool)cur->id); + WLog_Print(log, level, "%s [BOOL]: %s", cur->str, sval ? "TRUE" : "FALSE"); + } + break; + case FREERDP_SETTINGS_TYPE_UINT16: /* UINT16 */ + { + UINT16 sval = + freerdp_settings_get_uint16(settings, (FreeRDP_Settings_Keys_UInt16)cur->id); + WLog_Print(log, level, "%s [UINT16]: %" PRIu16, cur->str, sval); + } + break; + case FREERDP_SETTINGS_TYPE_INT16: /* INT16 */ + { + INT16 sval = + freerdp_settings_get_int16(settings, (FreeRDP_Settings_Keys_Int16)cur->id); + WLog_Print(log, level, "%s [INT16]: %" PRId16, cur->str, sval); + } + break; + case FREERDP_SETTINGS_TYPE_UINT32: /* UINT32 */ + { + UINT32 sval = + freerdp_settings_get_uint32(settings, (FreeRDP_Settings_Keys_UInt32)cur->id); + WLog_Print(log, level, "%s [UINT32]: %" PRIu32, cur->str, sval); + } + break; + case FREERDP_SETTINGS_TYPE_INT32: /* INT32 */ + { + INT32 sval = + freerdp_settings_get_int32(settings, (FreeRDP_Settings_Keys_Int32)cur->id); + WLog_Print(log, level, "%s [INT32]: %" PRId32, cur->str, sval); + } + break; + case FREERDP_SETTINGS_TYPE_UINT64: /* UINT64 */ + { + UINT64 sval = + freerdp_settings_get_uint64(settings, (FreeRDP_Settings_Keys_UInt64)cur->id); + WLog_Print(log, level, "%s [UINT64]: %" PRIu64, cur->str, sval); + } + break; + case FREERDP_SETTINGS_TYPE_INT64: /* INT64 */ + { + INT64 sval = + freerdp_settings_get_int64(settings, (FreeRDP_Settings_Keys_Int64)cur->id); + WLog_Print(log, level, "%s [INT64]: %" PRId64, cur->str, sval); + } + break; + case FREERDP_SETTINGS_TYPE_STRING: /* strings */ + { + const char* sval = + freerdp_settings_get_string(settings, (FreeRDP_Settings_Keys_String)cur->id); + WLog_Print(log, level, "%s [STRING]: '%s'", cur->str, sval); + } + break; + case FREERDP_SETTINGS_TYPE_POINTER: /* pointer */ + { + const void* sval = + freerdp_settings_get_pointer(settings, (FreeRDP_Settings_Keys_Pointer)cur->id); + WLog_Print(log, level, "%s [POINTER]: '%p'", cur->str, sval); + } + break; + } + } +} + +void freerdp_settings_free_keys(rdpSettings* dst, BOOL cleanup) +{ + WINPR_ASSERT(dst); + + for (size_t x = 0; x < ARRAYSIZE(settings_map); x++) + { + const struct settings_str_entry* cur = &settings_map[x]; + switch (cur->type) + { + case FREERDP_SETTINGS_TYPE_STRING: /* strings */ + freerdp_settings_set_string_copy_(dst, (FreeRDP_Settings_Keys_String)cur->id, NULL, + 0, cleanup); + break; + case FREERDP_SETTINGS_TYPE_POINTER: /* pointer */ + freerdp_settings_set_pointer_len(dst, (FreeRDP_Settings_Keys_Pointer)cur->id, NULL, + 0); + break; + } + } +} + +SSIZE_T freerdp_settings_get_key_for_name(const char* value) +{ + WINPR_ASSERT(value); + + for (size_t x = 0; x < ARRAYSIZE(settings_map); x++) + { + const struct settings_str_entry* cur = &settings_map[x]; + if (strcmp(value, cur->str) == 0) + return cur->id; + } + return -1; +} + +SSIZE_T freerdp_settings_get_type_for_name(const char* value) +{ + WINPR_ASSERT(value); + + for (size_t x = 0; x < ARRAYSIZE(settings_map); x++) + { + const struct settings_str_entry* cur = &settings_map[x]; + if (strcmp(value, cur->str) == 0) + return cur->type; + } + return -1; +} + +const char* freerdp_settings_get_type_name_for_key(SSIZE_T key) +{ + const SSIZE_T type = freerdp_settings_get_type_for_key(key); + return freerdp_settings_get_type_name_for_type(type); +} + +const char* freerdp_settings_get_type_name_for_type(SSIZE_T type) +{ + switch (type) + { + case FREERDP_SETTINGS_TYPE_BOOL: + return "FREERDP_SETTINGS_TYPE_BOOL"; + case FREERDP_SETTINGS_TYPE_UINT16: + return "FREERDP_SETTINGS_TYPE_UINT16"; + case FREERDP_SETTINGS_TYPE_INT16: + return "FREERDP_SETTINGS_TYPE_INT16"; + case FREERDP_SETTINGS_TYPE_UINT32: + return "FREERDP_SETTINGS_TYPE_UINT32"; + case FREERDP_SETTINGS_TYPE_INT32: + return "FREERDP_SETTINGS_TYPE_INT32"; + case FREERDP_SETTINGS_TYPE_UINT64: + return "FREERDP_SETTINGS_TYPE_UINT64"; + case FREERDP_SETTINGS_TYPE_INT64: + return "FREERDP_SETTINGS_TYPE_INT64"; + case FREERDP_SETTINGS_TYPE_STRING: + return "FREERDP_SETTINGS_TYPE_STRING"; + case FREERDP_SETTINGS_TYPE_POINTER: + return "FREERDP_SETTINGS_TYPE_POINTER"; + default: + return "FREERDP_SETTINGS_TYPE_UNKNOWN"; + } +} + +SSIZE_T freerdp_settings_get_type_for_key(SSIZE_T key) +{ + for (size_t x = 0; x < ARRAYSIZE(settings_map); x++) + { + const struct settings_str_entry* cur = &settings_map[x]; + if (cur->id == key) + return cur->type; + } + return -1; +} + +const char* freerdp_settings_get_name_for_key(SSIZE_T key) +{ + for (size_t x = 0; x < ARRAYSIZE(settings_map); x++) + { + const struct settings_str_entry* cur = &settings_map[x]; + if (cur->id == key) + return cur->str; + } + return NULL; +} + +BOOL freerdp_settings_copy_item(rdpSettings* dst, const rdpSettings* src, SSIZE_T id) +{ + WINPR_ASSERT(dst); + WINPR_ASSERT(src); + + const SSIZE_T key = freerdp_settings_get_type_for_key(id); + switch (key) + { + case FREERDP_SETTINGS_TYPE_BOOL: + { + const BOOL val = freerdp_settings_get_bool(src, (FreeRDP_Settings_Keys_Bool)id); + return freerdp_settings_set_bool(dst, (FreeRDP_Settings_Keys_Bool)id, val); + } + case FREERDP_SETTINGS_TYPE_INT16: + { + const INT16 val = freerdp_settings_get_int16(src, (FreeRDP_Settings_Keys_Int16)id); + return freerdp_settings_set_int16(dst, (FreeRDP_Settings_Keys_Int16)id, val); + } + case FREERDP_SETTINGS_TYPE_INT32: + { + const INT32 val = freerdp_settings_get_int32(src, (FreeRDP_Settings_Keys_Int32)id); + return freerdp_settings_set_int32(dst, (FreeRDP_Settings_Keys_Int32)id, val); + } + case FREERDP_SETTINGS_TYPE_INT64: + { + const INT64 val = freerdp_settings_get_int64(src, (FreeRDP_Settings_Keys_Int64)id); + return freerdp_settings_set_int64(dst, (FreeRDP_Settings_Keys_Int64)id, val); + } + case FREERDP_SETTINGS_TYPE_UINT16: + { + const UINT16 val = freerdp_settings_get_uint16(src, (FreeRDP_Settings_Keys_UInt16)id); + return freerdp_settings_set_uint16(dst, (FreeRDP_Settings_Keys_UInt16)id, val); + } + case FREERDP_SETTINGS_TYPE_UINT32: + { + const UINT32 val = freerdp_settings_get_uint32(src, (FreeRDP_Settings_Keys_UInt32)id); + return freerdp_settings_set_uint32(dst, (FreeRDP_Settings_Keys_UInt32)id, val); + } + case FREERDP_SETTINGS_TYPE_UINT64: + { + const UINT64 val = freerdp_settings_get_uint64(src, (FreeRDP_Settings_Keys_UInt64)id); + return freerdp_settings_set_uint64(dst, (FreeRDP_Settings_Keys_UInt64)id, val); + } + case FREERDP_SETTINGS_TYPE_STRING: + { + const char* val = freerdp_settings_get_string(src, (FreeRDP_Settings_Keys_String)id); + return freerdp_settings_set_string(dst, (FreeRDP_Settings_Keys_String)id, val); + } + case FREERDP_SETTINGS_TYPE_POINTER: + { + const void* val = freerdp_settings_get_pointer(src, (FreeRDP_Settings_Keys_Pointer)id); + return freerdp_settings_set_pointer(dst, (FreeRDP_Settings_Keys_Pointer)id, val); + } + default: + return FALSE; + } +} |