Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/neutrinolabs/xrdp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKoichiro IWAO <meta@vmeta.jp>2022-10-28 19:48:03 +0300
committerKoichiro IWAO <meta@vmeta.jp>2022-11-01 13:24:02 +0300
commit791f055e18ff5cab29b1f27fa1c338ca49bf236a (patch)
tree28d43d6c309226afeac5dfa1cc370fd685610c2f
parentece8fd2946f1183ac163ee51e6e5a6dddebf5782 (diff)
common: add function to convert from Microsoft's GUID to string
-rw-r--r--common/guid.c18
-rw-r--r--common/guid.h13
-rw-r--r--tests/common/Makefile.am3
-rw-r--r--tests/common/test_common.h1
-rw-r--r--tests/common/test_common_main.c1
-rw-r--r--tests/common/test_guid.c71
-rw-r--r--tests/common/test_string_calls.c1
7 files changed, 106 insertions, 2 deletions
diff --git a/common/guid.c b/common/guid.c
index 21611a47..ae0386d4 100644
--- a/common/guid.c
+++ b/common/guid.c
@@ -70,3 +70,21 @@ const char *guid_to_str(const struct guid *guid, char *str)
g_bytes_to_hexstr(guid->g, GUID_SIZE, str, GUID_STR_SIZE);
return str;
}
+
+const char *ms_guid_to_str(const char *src, char *dest)
+{
+ const unsigned char *guid = (const unsigned char *)src;
+
+ /*
+ * Flipping integers into little-endian
+ * See also: https://devblogs.microsoft.com/oldnewthing/20220928-00/?p=107221
+ */
+ g_sprintf(dest, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
+ guid[3], guid[2], guid[1], guid[0],
+ guid[5], guid[4],
+ guid[7], guid[6],
+ guid[8], guid[9],
+ guid[10], guid[11], guid[12], guid[13], guid[14], guid[15]);
+
+ return dest;
+}
diff --git a/common/guid.h b/common/guid.h
index 546788c6..060e9a03 100644
--- a/common/guid.h
+++ b/common/guid.h
@@ -28,7 +28,8 @@
#include "arch.h"
#define GUID_SIZE 16 /* bytes */
-#define GUID_STR_SIZE (GUID_SIZE * 2 + 1) /* Size for string representation */
+#define GUID_STR_SIZE (GUID_SIZE * 2 + 4 + 1) /* w/ 4 hyphens + null terminator */
+
/**
* Use a struct for the guid so we can easily copy by assignment
@@ -72,4 +73,14 @@ guid_is_set(const struct guid *guid);
*/
const char *guid_to_str(const struct guid *guid, char *str);
+
+/**
+ * Converts a Microsoft's COM GUID to a string representation
+ *
+ * @param src GUID to represent
+ * @param dest pointer to at least GUID_STR_SIZE bytes to store the
+ * representation
+ */
+const char *ms_guid_to_str(const char *src, char *dest);
#endif
+
diff --git a/tests/common/Makefile.am b/tests/common/Makefile.am
index e6686e31..f7dbbe28 100644
--- a/tests/common/Makefile.am
+++ b/tests/common/Makefile.am
@@ -17,7 +17,8 @@ test_common_SOURCES = \
test_string_calls.c \
test_os_calls.c \
test_ssl_calls.c \
- test_base64.c
+ test_base64.c \
+ test_guid.c
test_common_CFLAGS = \
@CHECK_CFLAGS@ \
diff --git a/tests/common/test_common.h b/tests/common/test_common.h
index ed422ab4..1878bafb 100644
--- a/tests/common/test_common.h
+++ b/tests/common/test_common.h
@@ -11,5 +11,6 @@ Suite *make_suite_test_string(void);
Suite *make_suite_test_os_calls(void);
Suite *make_suite_test_ssl_calls(void);
Suite *make_suite_test_base64(void);
+Suite *make_suite_test_guid(void);
#endif /* TEST_COMMON_H */
diff --git a/tests/common/test_common_main.c b/tests/common/test_common_main.c
index a08bc7f7..37adaa3f 100644
--- a/tests/common/test_common_main.c
+++ b/tests/common/test_common_main.c
@@ -49,6 +49,7 @@ int main (void)
srunner_add_suite(sr, make_suite_test_os_calls());
srunner_add_suite(sr, make_suite_test_ssl_calls());
srunner_add_suite(sr, make_suite_test_base64());
+ srunner_add_suite(sr, make_suite_test_guid());
// srunner_add_suite(sr, make_list_suite());
srunner_set_tap(sr, "-");
diff --git a/tests/common/test_guid.c b/tests/common/test_guid.c
new file mode 100644
index 00000000..c39152de
--- /dev/null
+++ b/tests/common/test_guid.c
@@ -0,0 +1,71 @@
+
+#if defined(HAVE_CONFIG_H)
+#include "config_ac.h"
+#endif
+
+#include "guid.h"
+#include "string_calls.h"
+#include "ms-rdpbcgr.h"
+
+#include "test_common.h"
+
+/******************************************************************************/
+
+START_TEST(test_ms_guid_to_str_remotefx)
+{
+ /* setup */
+ char dest[GUID_STR_SIZE];
+
+ /* test */
+ ms_guid_to_str(XR_CODEC_GUID_REMOTEFX, dest);
+
+ /* verify */
+ ck_assert_str_eq(dest, "76772F12-BD72-4463-AFB3-B73C9C6F7886");
+}
+END_TEST
+
+START_TEST(test_ms_guid_to_str_nscodec)
+{
+
+ /* setup */
+ char dest[GUID_STR_SIZE];
+
+ /* test */
+ ms_guid_to_str(XR_CODEC_GUID_NSCODEC, dest);
+
+ /* verify */
+ ck_assert_str_eq(dest, "CA8D1BB9-000F-154F-589F-AE2D1A87E2D6");
+}
+END_TEST
+
+START_TEST(test_ms_guid_to_str_ignore)
+{
+ /* setup */
+ char dest[GUID_STR_SIZE];
+
+ /* test */
+ ms_guid_to_str(XR_CODEC_GUID_IGNORE, dest);
+
+ /* verify */
+ ck_assert_str_eq(dest, "0C4351A6-3535-42AE-910C-CDFCE5760B58");
+}
+END_TEST
+
+/******************************************************************************/
+
+Suite *
+make_suite_test_guid(void)
+{
+ Suite *s;
+ TCase *tc_guid;
+
+ s = suite_create("GUID");
+
+ tc_guid = tcase_create("guid_to_str");
+ suite_add_tcase(s, tc_guid);
+ tcase_add_test(tc_guid, test_ms_guid_to_str_remotefx);
+ tcase_add_test(tc_guid, test_ms_guid_to_str_nscodec);
+ tcase_add_test(tc_guid, test_ms_guid_to_str_ignore);
+
+ return s;
+}
diff --git a/tests/common/test_string_calls.c b/tests/common/test_string_calls.c
index 6dc14a73..0f7d6268 100644
--- a/tests/common/test_string_calls.c
+++ b/tests/common/test_string_calls.c
@@ -4,6 +4,7 @@
#endif
#include "string_calls.h"
+#include "ms-rdpbcgr.h"
#include "test_common.h"