/* 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; } }