1/* 2 * Copyright (C)2022 D. R. Commander. All Rights Reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * 7 * - Redistributions of source code must retain the above copyright notice, 8 * this list of conditions and the following disclaimer. 9 * - Redistributions in binary form must reproduce the above copyright notice, 10 * this list of conditions and the following disclaimer in the documentation 11 * and/or other materials provided with the distribution. 12 * - Neither the name of the libjpeg-turbo Project nor the names of its 13 * contributors may be used to endorse or promote products derived from this 14 * software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#include "jinclude.h" 30#include <errno.h> 31 32 33#define CHECK_VALUE(actual, expected, desc) \ 34 if (actual != expected) { \ 35 printf("ERROR in line %d: " desc " is %d, should be %d\n", \ 36 __LINE__, actual, expected); \ 37 return -1; \ 38 } 39 40#define CHECK_ERRNO(errno_return, expected_errno) \ 41 CHECK_VALUE(errno_return, expected_errno, "Return value") \ 42 CHECK_VALUE(errno, expected_errno, "errno") \ 43 44 45#ifdef _MSC_VER 46 47void invalid_parameter_handler(const wchar_t *expression, 48 const wchar_t *function, const wchar_t *file, 49 unsigned int line, uintptr_t pReserved) 50{ 51} 52 53#endif 54 55 56int main(int argc, char **argv) 57{ 58 int err; 59 char env[3]; 60 61#ifdef _MSC_VER 62 _set_invalid_parameter_handler(invalid_parameter_handler); 63#endif 64 65 /***************************************************************************/ 66 67#ifndef NO_PUTENV 68 69 printf("PUTENV_S():\n"); 70 71 errno = 0; 72 err = PUTENV_S(NULL, "12"); 73 CHECK_ERRNO(err, EINVAL); 74 75 errno = 0; 76 err = PUTENV_S("TESTENV", NULL); 77 CHECK_ERRNO(err, EINVAL); 78 79 errno = 0; 80 err = PUTENV_S("TESTENV", "12"); 81 CHECK_ERRNO(err, 0); 82 83 printf("SUCCESS!\n\n"); 84 85#endif 86 87 /***************************************************************************/ 88 89#ifndef NO_GETENV 90 91 printf("GETENV_S():\n"); 92 93 errno = 0; 94 env[0] = 1; 95 env[1] = 2; 96 env[2] = 3; 97 err = GETENV_S(env, 3, NULL); 98 CHECK_ERRNO(err, 0); 99 CHECK_VALUE(env[0], 0, "env[0]"); 100 CHECK_VALUE(env[1], 2, "env[1]"); 101 CHECK_VALUE(env[2], 3, "env[2]"); 102 103 errno = 0; 104 env[0] = 1; 105 env[1] = 2; 106 env[2] = 3; 107 err = GETENV_S(env, 3, "TESTENV2"); 108 CHECK_ERRNO(err, 0); 109 CHECK_VALUE(env[0], 0, "env[0]"); 110 CHECK_VALUE(env[1], 2, "env[1]"); 111 CHECK_VALUE(env[2], 3, "env[2]"); 112 113 errno = 0; 114 err = GETENV_S(NULL, 3, "TESTENV"); 115 CHECK_ERRNO(err, EINVAL); 116 117 errno = 0; 118 err = GETENV_S(NULL, 0, "TESTENV"); 119 CHECK_ERRNO(err, 0); 120 121 errno = 0; 122 env[0] = 1; 123 err = GETENV_S(env, 0, "TESTENV"); 124 CHECK_ERRNO(err, EINVAL); 125 CHECK_VALUE(env[0], 1, "env[0]"); 126 127 errno = 0; 128 env[0] = 1; 129 env[1] = 2; 130 env[2] = 3; 131 err = GETENV_S(env, 1, "TESTENV"); 132 CHECK_VALUE(err, ERANGE, "Return value"); 133 CHECK_VALUE(errno, 0, "errno"); 134 CHECK_VALUE(env[0], 0, "env[0]"); 135 CHECK_VALUE(env[1], 2, "env[1]"); 136 CHECK_VALUE(env[2], 3, "env[2]"); 137 138 errno = 0; 139 env[0] = 1; 140 env[1] = 2; 141 env[2] = 3; 142 err = GETENV_S(env, 2, "TESTENV"); 143 CHECK_VALUE(err, ERANGE, "Return value"); 144 CHECK_VALUE(errno, 0, "errno"); 145 CHECK_VALUE(env[0], 0, "env[0]"); 146 CHECK_VALUE(env[1], 2, "env[1]"); 147 CHECK_VALUE(env[2], 3, "env[2]"); 148 149 errno = 0; 150 env[0] = 1; 151 env[1] = 2; 152 env[2] = 3; 153 err = GETENV_S(env, 3, "TESTENV"); 154 CHECK_ERRNO(err, 0); 155 CHECK_VALUE(env[0], '1', "env[0]"); 156 CHECK_VALUE(env[1], '2', "env[1]"); 157 CHECK_VALUE(env[2], 0, "env[2]"); 158 159 printf("SUCCESS!\n\n"); 160 161#endif 162 163 /***************************************************************************/ 164 165 return 0; 166} 167