summaryrefslogtreecommitdiff
path: root/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test1/test.c
blob: bddbba79402799cba2d2a3ccf934ba977a06cdb8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

/*============================================================
**
** Source: test.c
**
** Purpose:
** Set an environment variable and check to ensure success was returned.  Then
** get the environment variable and compare to the correct value.  Also, check
** that calling the function again, resets the variable properly.  And that
** calling with NULL deletes the variable.
**
**
**=========================================================*/

#define UNICODE
#define BUF_SIZE 128

#include <palsuite.h>

/* Depends on GetEnvironmentVariable */

int __cdecl main(int argc, char *argv[]) 
{
  
    /* Define some buffers needed for the function */
    WCHAR VariableBuffer[] = {'P','A','L','T','E','S','T','\0'};
    WCHAR ValueBuffer[] = {'T','e','s','t','i','n','g','\0'};
    WCHAR SecondValueBuffer[] = {'S','e','c','o','n','d','T','e','s','t','\0'};
    WCHAR NewValue[BUF_SIZE];
    int SetResult = 0;

    /*
     * Initialize the PAL and return FAILURE if this fails
     */

    if(0 != (PAL_Initialize(argc, argv)))
    {
        return FAIL;
    }

    SetResult = SetEnvironmentVariable(VariableBuffer,
                                       ValueBuffer);
 
    /* If result is 0, the SetEnviron function failed */
    if(SetResult == 0) 
    {
        Fail("ERROR: SetEnvironmentVariable returned 0, which indicates that "
             "it failed, even though it should have succeeded in setting the "
             "variable PALTEST.\n");    
    }

  
    /* Grab the Environment variable we just set */
    if(GetEnvironmentVariable(VariableBuffer,NewValue,BUF_SIZE) <= 0)
    {
        Fail("ERROR: GetEnvironmentVariable returned 0 or less, which "
             "indicates that no value was read in from the given variable.");
    }
  
    /* Make sure that the value put into NewValue was indeed the environment 
       variable we set. 
    */
 
    if(memcmp(NewValue,ValueBuffer,wcslen(ValueBuffer)*sizeof(WCHAR)+2) != 0) 
    {
        Fail("ERROR:  When retrieving the variable that was just set, a "
             "difference was found. Instead of the value being '%s' it "
             "was instead '%s'.\n",convertC(ValueBuffer),convertC(NewValue));
    }
    
    /* If we set the same environment variable with a different value, the
       old value should be replaced.
    */

    SetResult = SetEnvironmentVariable(VariableBuffer,
                                       SecondValueBuffer);
 
    /* If result is 0, the SetEnviron function failed */
    if(SetResult == 0) 
    {
        Fail("ERROR: SetEnvironmentVariable returned 0, which indicates that "
             "it failed, even though it should have succeeded in re-setting "
             "the variable PALTEST.\n");    
    }

    memset(NewValue,0,BUF_SIZE);

    /* Grab the Environment variable we just set */
    if(GetEnvironmentVariable(VariableBuffer,NewValue,BUF_SIZE) <= 0)
    {
        Fail("ERROR: GetEnvironmentVariable returned 0 or less, which "
             "indicates that no value was read in from the given variable.");
    }

    /* Make sure that the value put into NewValue was indeed the environment 
       variable we set. 
    */
    
    if(memcmp(NewValue,SecondValueBuffer,
              wcslen(SecondValueBuffer)*sizeof(WCHAR)+2) != 0) 
    {
        Fail("ERROR:  When retrieving the variable that was just set, a "
             "difference was found. Instead of the value being '%s' it "
             "was instead '%s'.\n",
             convertC(SecondValueBuffer),convertC(NewValue));
    }

    /* Finally, set this variable with NULL, which should delete it from the
       current environment.
    */

    SetResult = SetEnvironmentVariable(VariableBuffer, NULL);
    
    /* If result is 0, the SetEnviron function failed */
    if(SetResult == 0) 
    {
        Fail("ERROR: SetEnvironmentVariable returned 0, which indicates that "
             "it failed, even though it should have succeeded in deleting "
             "the variable PALTEST.\n");    
    }

    memset(NewValue,0,BUF_SIZE);
    
    /* Grab the Environment variable we just set, ensure that it's 
       empty now.
    */
    if(GetEnvironmentVariable(VariableBuffer,NewValue,BUF_SIZE) != 0)
    {
        Fail("ERROR: GetEnvironmentVariable returned a non-zero value, "
             "even though the environment variable which was checked should "
             "have been empty.");
    }

    PAL_Terminate();
    return PASS;
}