summaryrefslogtreecommitdiff
path: root/src/pal/tests/palsuite/miscellaneous/GetEnvironmentVariableW/test1/test.cpp
blob: cb5fc00554f661710b99d4aef7383dd7c00b5241 (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
// 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: Test for GetEnvironmentVariable() function
**
**
**=========================================================*/

#define UNICODE
#include <palsuite.h>

int __cdecl main(int argc, char *argv[]) 
{

    /* Define some buffers needed for the function */
    WCHAR * pResultBuffer = NULL;
    int size = 0;
  
    /* A place to stash the returned values */
    int ReturnValueForLargeBuffer = 0;
  
    /*
     * Initialize the PAL and return FAILURE if this fails
     */

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

    /* Recieve and allocate the correct amount of memory for the buffer */
    size = ReturnValueForLargeBuffer = 
        GetEnvironmentVariable(convert("PATH"),    
                               pResultBuffer,  
                               0);
  
    pResultBuffer = (WCHAR*)malloc(size*sizeof(WCHAR));
    if ( pResultBuffer == NULL )
    {
	Fail("ERROR: Failed to allocate memory for pResultBuffer pointer. "
             "Can't properly exec test case without this.\n");
    }
  
  
    /* Normal case, PATH should fit into this buffer */
    ReturnValueForLargeBuffer = GetEnvironmentVariable(convert("PATH"),        
                                                       pResultBuffer,  
                                                       size); 
    free(pResultBuffer); 
  
    /* Ensure that it returned a positive value */
    if(ReturnValueForLargeBuffer <= 0)
    {
        Fail("The return was %d, which indicates that the function failed.\n",
             ReturnValueForLargeBuffer);
    }
  
    /* Ensure that it succeeded and copied the correct number of characters.
       If this is true, then the return value should be one less of the 
       size of the buffer.  (Doesn't include that NULL byte)
    */
    if(ReturnValueForLargeBuffer != size-1)
    {
        Fail("The value returned was %d when it should have been %d.  This "
             "should be the number of characters copied, "
	     "minus the NULL byte.\n", ReturnValueForLargeBuffer, size-1);
    }
  
    PAL_Terminate();
    return PASS;
}