summaryrefslogtreecommitdiffstats
path: root/winpr/libwinpr/environment/test/TestEnvironmentGetSetEB.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--winpr/libwinpr/environment/test/TestEnvironmentGetSetEB.c138
1 files changed, 138 insertions, 0 deletions
diff --git a/winpr/libwinpr/environment/test/TestEnvironmentGetSetEB.c b/winpr/libwinpr/environment/test/TestEnvironmentGetSetEB.c
new file mode 100644
index 0000000..603b4c2
--- /dev/null
+++ b/winpr/libwinpr/environment/test/TestEnvironmentGetSetEB.c
@@ -0,0 +1,138 @@
+
+#include <stdio.h>
+#include <winpr/crt.h>
+#include <winpr/tchar.h>
+#include <winpr/environment.h>
+
+int TestEnvironmentGetSetEB(int argc, char* argv[])
+{
+ int rc = 0;
+#ifndef _WIN32
+ char test[1024];
+ TCHAR* p = NULL;
+ DWORD length = 0;
+ LPTCH lpszEnvironmentBlock = "SHELL=123\0test=1\0test1=2\0DISPLAY=WINPR_TEST_VALUE\0\0";
+ LPTCH lpszEnvironmentBlockNew = NULL;
+
+ WINPR_UNUSED(argc);
+ WINPR_UNUSED(argv);
+
+ rc = -1;
+ /* Get length of an variable */
+ length = GetEnvironmentVariableEBA(lpszEnvironmentBlock, "DISPLAY", NULL, 0);
+
+ if (0 == length)
+ return -1;
+
+ /* Get the variable itself */
+ p = (LPSTR)malloc(length);
+
+ if (!p)
+ goto fail;
+
+ if (GetEnvironmentVariableEBA(lpszEnvironmentBlock, "DISPLAY", p, length) != length - 1)
+ goto fail;
+
+ printf("GetEnvironmentVariableA(WINPR_TEST_VARIABLE) = %s\n", p);
+
+ if (strcmp(p, "WINPR_TEST_VALUE") != 0)
+ goto fail;
+
+ /* Get length of an non-existing variable */
+ length = GetEnvironmentVariableEBA(lpszEnvironmentBlock, "BLA", NULL, 0);
+
+ if (0 != length)
+ {
+ printf("Unset variable returned\n");
+ goto fail;
+ }
+
+ /* Get length of an similar called variables */
+ length = GetEnvironmentVariableEBA(lpszEnvironmentBlock, "XDISPLAY", NULL, 0);
+
+ if (0 != length)
+ {
+ printf("Similar named variable returned (XDISPLAY, length %d)\n", length);
+ goto fail;
+ }
+
+ length = GetEnvironmentVariableEBA(lpszEnvironmentBlock, "DISPLAYX", NULL, 0);
+
+ if (0 != length)
+ {
+ printf("Similar named variable returned (DISPLAYX, length %d)\n", length);
+ goto fail;
+ }
+
+ length = GetEnvironmentVariableEBA(lpszEnvironmentBlock, "DISPLA", NULL, 0);
+
+ if (0 != length)
+ {
+ printf("Similar named variable returned (DISPLA, length %d)\n", length);
+ goto fail;
+ }
+
+ length = GetEnvironmentVariableEBA(lpszEnvironmentBlock, "ISPLAY", NULL, 0);
+
+ if (0 != length)
+ {
+ printf("Similar named variable returned (ISPLAY, length %d)\n", length);
+ goto fail;
+ }
+
+ /* Set variable in empty environment block */
+ if (SetEnvironmentVariableEBA(&lpszEnvironmentBlockNew, "test", "5"))
+ {
+ if (GetEnvironmentVariableEBA(lpszEnvironmentBlockNew, "test", test, 1023))
+ {
+ if (strcmp(test, "5") != 0)
+ goto fail;
+ }
+ else
+ goto fail;
+ }
+
+ /* Clear variable */
+ if (SetEnvironmentVariableEBA(&lpszEnvironmentBlockNew, "test", NULL))
+ {
+ if (GetEnvironmentVariableEBA(lpszEnvironmentBlockNew, "test", test, 1023))
+ goto fail;
+ else
+ {
+ // not found .. this is expected
+ }
+ }
+
+ free(lpszEnvironmentBlockNew);
+ lpszEnvironmentBlockNew = (LPTCH)calloc(1024, sizeof(TCHAR));
+
+ if (!lpszEnvironmentBlockNew)
+ goto fail;
+
+ memcpy(lpszEnvironmentBlockNew, lpszEnvironmentBlock, length);
+
+ /* Set variable in empty environment block */
+ if (SetEnvironmentVariableEBA(&lpszEnvironmentBlockNew, "test", "5"))
+ {
+ if (0 != GetEnvironmentVariableEBA(lpszEnvironmentBlockNew, "testr", test, 1023))
+ {
+ printf("GetEnvironmentVariableEBA returned unset variable\n");
+ goto fail;
+ }
+
+ if (GetEnvironmentVariableEBA(lpszEnvironmentBlockNew, "test", test, 1023))
+ {
+ if (strcmp(test, "5") != 0)
+ goto fail;
+ }
+ else
+ goto fail;
+ }
+
+ rc = 0;
+fail:
+ free(p);
+ free(lpszEnvironmentBlockNew);
+#endif
+ return rc;
+}