1 /*************************************************************************** 2 * _ _ ____ _ 3 * Project ___| | | | _ \| | 4 * / __| | | | |_) | | 5 * | (__| |_| | _ <| |___ 6 * \___|\___/|_| \_\_____| 7 * 8 * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel (at) haxx.se>, et al. 9 * 10 * This software is licensed as described in the file COPYING, which 11 * you should have received as part of this distribution. The terms 12 * are also available at https://curl.haxx.se/docs/copyright.html. 13 * 14 * You may opt to use, copy, modify, merge, publish, distribute and/or sell 15 * copies of the Software, and permit persons to whom the Software is 16 * furnished to do so, under the terms of the COPYING file. 17 * 18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19 * KIND, either express or implied. 20 * 21 ***************************************************************************/ 22 23 /* 24 * The purpose of this test is to minimally exercise libcurl's internal 25 * curl_m*printf formatting capabilities and handling of some data types. 26 */ 27 28 #include "test.h" 29 30 #include <limits.h> 31 32 #ifdef HAVE_LOCALE_H 33 # include <locale.h> /* for setlocale() */ 34 #endif 35 36 #include "memdebug.h" 37 38 #if (SIZEOF_CURL_OFF_T > SIZEOF_LONG) 39 # define MPRNT_SUFFIX_CURL_OFF_T LL 40 #else 41 # define MPRNT_SUFFIX_CURL_OFF_T L 42 #endif 43 44 45 #ifdef CURL_ISOCPP 46 # define MPRNT_OFF_T_C_HELPER2(Val,Suffix) Val ## Suffix 47 #else 48 # define MPRNT_OFF_T_C_HELPER2(Val,Suffix) Val/**/Suffix 49 #endif 50 #define MPRNT_OFF_T_C_HELPER1(Val,Suffix) MPRNT_OFF_T_C_HELPER2(Val,Suffix) 51 #define MPRNT_OFF_T_C(Val) MPRNT_OFF_T_C_HELPER1(Val,MPRNT_SUFFIX_CURL_OFF_T) 52 53 54 #define BUFSZ 256 55 #define USHORT_TESTS_ARRSZ 1 + 100 56 #define SSHORT_TESTS_ARRSZ 1 + 100 57 #define UINT_TESTS_ARRSZ 1 + 100 58 #define SINT_TESTS_ARRSZ 1 + 100 59 #define ULONG_TESTS_ARRSZ 1 + 100 60 #define SLONG_TESTS_ARRSZ 1 + 100 61 #define COFFT_TESTS_ARRSZ 1 + 100 62 63 64 struct unsshort_st { 65 unsigned short num; /* unsigned short */ 66 const char *expected; /* expected string */ 67 char result[BUFSZ]; /* result string */ 68 }; 69 70 71 struct sigshort_st { 72 short num; /* signed short */ 73 const char *expected; /* expected string */ 74 char result[BUFSZ]; /* result string */ 75 }; 76 77 78 struct unsint_st { 79 unsigned int num; /* unsigned int */ 80 const char *expected; /* expected string */ 81 char result[BUFSZ]; /* result string */ 82 }; 83 84 85 struct sigint_st { 86 int num; /* signed int */ 87 const char *expected; /* expected string */ 88 char result[BUFSZ]; /* result string */ 89 }; 90 91 92 struct unslong_st { 93 unsigned long num; /* unsigned long */ 94 const char *expected; /* expected string */ 95 char result[BUFSZ]; /* result string */ 96 }; 97 98 99 struct siglong_st { 100 long num; /* signed long */ 101 const char *expected; /* expected string */ 102 char result[BUFSZ]; /* result string */ 103 }; 104 105 106 struct curloff_st { 107 curl_off_t num; /* curl_off_t */ 108 const char *expected; /* expected string */ 109 char result[BUFSZ]; /* result string */ 110 }; 111 112 113 static struct unsshort_st us_test[USHORT_TESTS_ARRSZ]; 114 static struct sigshort_st ss_test[SSHORT_TESTS_ARRSZ]; 115 static struct unsint_st ui_test[UINT_TESTS_ARRSZ]; 116 static struct sigint_st si_test[SINT_TESTS_ARRSZ]; 117 static struct unslong_st ul_test[ULONG_TESTS_ARRSZ]; 118 static struct siglong_st sl_test[SLONG_TESTS_ARRSZ]; 119 static struct curloff_st co_test[COFFT_TESTS_ARRSZ]; 120 121 122 static int test_unsigned_short_formatting(void) 123 { 124 int i, j; 125 int num_ushort_tests; 126 int failed = 0; 127 128 #if (SIZEOF_SHORT == 1) 129 130 i = 1; us_test[i].num = 0xFFU; us_test[i].expected = "256"; 131 i++; us_test[i].num = 0xF0U; us_test[i].expected = "240"; 132 i++; us_test[i].num = 0x0FU; us_test[i].expected = "15"; 133 134 i++; us_test[i].num = 0xE0U; us_test[i].expected = "224"; 135 i++; us_test[i].num = 0x0EU; us_test[i].expected = "14"; 136 137 i++; us_test[i].num = 0xC0U; us_test[i].expected = "192"; 138 i++; us_test[i].num = 0x0CU; us_test[i].expected = "12"; 139 140 i++; us_test[i].num = 0x01U; us_test[i].expected = "1"; 141 i++; us_test[i].num = 0x00U; us_test[i].expected = "0"; 142 143 num_ushort_tests = i; 144 145 #elif (SIZEOF_SHORT == 2) 146 147 i = 1; us_test[i].num = 0xFFFFU; us_test[i].expected = "65535"; 148 i++; us_test[i].num = 0xFF00U; us_test[i].expected = "65280"; 149 i++; us_test[i].num = 0x00FFU; us_test[i].expected = "255"; 150 151 i++; us_test[i].num = 0xF000U; us_test[i].expected = "61440"; 152 i++; us_test[i].num = 0x0F00U; us_test[i].expected = "3840"; 153 i++; us_test[i].num = 0x00F0U; us_test[i].expected = "240"; 154 i++; us_test[i].num = 0x000FU; us_test[i].expected = "15"; 155 156 i++; us_test[i].num = 0xC000U; us_test[i].expected = "49152"; 157 i++; us_test[i].num = 0x0C00U; us_test[i].expected = "3072"; 158 i++; us_test[i].num = 0x00C0U; us_test[i].expected = "192"; 159 i++; us_test[i].num = 0x000CU; us_test[i].expected = "12"; 160 161 i++; us_test[i].num = 0x0001U; us_test[i].expected = "1"; 162 i++; us_test[i].num = 0x0000U; us_test[i].expected = "0"; 163 164 num_ushort_tests = i; 165 166 #elif (SIZEOF_SHORT == 4) 167 168 i = 1; us_test[i].num = 0xFFFFFFFFU; us_test[i].expected = "4294967295"; 169 i++; us_test[i].num = 0xFFFF0000U; us_test[i].expected = "4294901760"; 170 i++; us_test[i].num = 0x0000FFFFU; us_test[i].expected = "65535"; 171 172 i++; us_test[i].num = 0xFF000000U; us_test[i].expected = "4278190080"; 173 i++; us_test[i].num = 0x00FF0000U; us_test[i].expected = "16711680"; 174 i++; us_test[i].num = 0x0000FF00U; us_test[i].expected = "65280"; 175 i++; us_test[i].num = 0x000000FFU; us_test[i].expected = "255"; 176 177 i++; us_test[i].num = 0xF0000000U; us_test[i].expected = "4026531840"; 178 i++; us_test[i].num = 0x0F000000U; us_test[i].expected = "251658240"; 179 i++; us_test[i].num = 0x00F00000U; us_test[i].expected = "15728640"; 180 i++; us_test[i].num = 0x000F0000U; us_test[i].expected = "983040"; 181 i++; us_test[i].num = 0x0000F000U; us_test[i].expected = "61440"; 182 i++; us_test[i].num = 0x00000F00U; us_test[i].expected = "3840"; 183 i++; us_test[i].num = 0x000000F0U; us_test[i].expected = "240"; 184 i++; us_test[i].num = 0x0000000FU; us_test[i].expected = "15"; 185 186 i++; us_test[i].num = 0xC0000000U; us_test[i].expected = "3221225472"; 187 i++; us_test[i].num = 0x0C000000U; us_test[i].expected = "201326592"; 188 i++; us_test[i].num = 0x00C00000U; us_test[i].expected = "12582912"; 189 i++; us_test[i].num = 0x000C0000U; us_test[i].expected = "786432"; 190 i++; us_test[i].num = 0x0000C000U; us_test[i].expected = "49152"; 191 i++; us_test[i].num = 0x00000C00U; us_test[i].expected = "3072"; 192 i++; us_test[i].num = 0x000000C0U; us_test[i].expected = "192"; 193 i++; us_test[i].num = 0x0000000CU; us_test[i].expected = "12"; 194 195 i++; us_test[i].num = 0x00000001U; us_test[i].expected = "1"; 196 i++; us_test[i].num = 0x00000000U; us_test[i].expected = "0"; 197 198 num_ushort_tests = i; 199 200 #endif 201 202 for(i = 1; i <= num_ushort_tests; i++) { 203 204 for(j = 0; j<BUFSZ; j++) 205 us_test[i].result[j] = 'X'; 206 us_test[i].result[BUFSZ-1] = '\0'; 207 208 (void)curl_msprintf(us_test[i].result, "%hu", us_test[i].num); 209 210 if(memcmp(us_test[i].result, 211 us_test[i].expected, 212 strlen(us_test[i].expected))) { 213 printf("unsigned short test #%.2d: Failed (Expected: %s Got: %s)\n", 214 i, us_test[i].expected, us_test[i].result); 215 failed++; 216 } 217 218 } 219 220 if(!failed) 221 printf("All curl_mprintf() unsigned short tests OK!\n"); 222 else 223 printf("Some curl_mprintf() unsigned short tests Failed!\n"); 224 225 return failed; 226 } 227 228 229 static int test_signed_short_formatting(void) 230 { 231 int i, j; 232 int num_sshort_tests; 233 int failed = 0; 234 235 #if (SIZEOF_SHORT == 1) 236 237 i = 1; ss_test[i].num = 0x7F; ss_test[i].expected = "127"; 238 239 i++; ss_test[i].num = 0x70; ss_test[i].expected = "112"; 240 i++; ss_test[i].num = 0x07; ss_test[i].expected = "7"; 241 242 i++; ss_test[i].num = 0x50; ss_test[i].expected = "80"; 243 i++; ss_test[i].num = 0x05; ss_test[i].expected = "5"; 244 245 i++; ss_test[i].num = 0x01; ss_test[i].expected = "1"; 246 i++; ss_test[i].num = 0x00; ss_test[i].expected = "0"; 247 248 i++; ss_test[i].num = -0x7F -1; ss_test[i].expected = "-128"; 249 250 i++; ss_test[i].num = -0x70 -1; ss_test[i].expected = "-113"; 251 i++; ss_test[i].num = -0x07 -1; ss_test[i].expected = "-8"; 252 253 i++; ss_test[i].num = -0x50 -1; ss_test[i].expected = "-81"; 254 i++; ss_test[i].num = -0x05 -1; ss_test[i].expected = "-6"; 255 256 i++; ss_test[i].num = 0x00 -1; ss_test[i].expected = "-1"; 257 258 num_sshort_tests = i; 259 260 #elif (SIZEOF_SHORT == 2) 261 262 i = 1; ss_test[i].num = 0x7FFF; ss_test[i].expected = "32767"; 263 i++; ss_test[i].num = 0x7FFE; ss_test[i].expected = "32766"; 264 i++; ss_test[i].num = 0x7FFD; ss_test[i].expected = "32765"; 265 i++; ss_test[i].num = 0x7F00; ss_test[i].expected = "32512"; 266 i++; ss_test[i].num = 0x07F0; ss_test[i].expected = "2032"; 267 i++; ss_test[i].num = 0x007F; ss_test[i].expected = "127"; 268 269 i++; ss_test[i].num = 0x7000; ss_test[i].expected = "28672"; 270 i++; ss_test[i].num = 0x0700; ss_test[i].expected = "1792"; 271 i++; ss_test[i].num = 0x0070; ss_test[i].expected = "112"; 272 i++; ss_test[i].num = 0x0007; ss_test[i].expected = "7"; 273 274 i++; ss_test[i].num = 0x5000; ss_test[i].expected = "20480"; 275 i++; ss_test[i].num = 0x0500; ss_test[i].expected = "1280"; 276 i++; ss_test[i].num = 0x0050; ss_test[i].expected = "80"; 277 i++; ss_test[i].num = 0x0005; ss_test[i].expected = "5"; 278 279 i++; ss_test[i].num = 0x0001; ss_test[i].expected = "1"; 280 i++; ss_test[i].num = 0x0000; ss_test[i].expected = "0"; 281 282 i++; ss_test[i].num = -0x7FFF -1; ss_test[i].expected = "-32768"; 283 i++; ss_test[i].num = -0x7FFE -1; ss_test[i].expected = "-32767"; 284 i++; ss_test[i].num = -0x7FFD -1; ss_test[i].expected = "-32766"; 285 i++; ss_test[i].num = -0x7F00 -1; ss_test[i].expected = "-32513"; 286 i++; ss_test[i].num = -0x07F0 -1; ss_test[i].expected = "-2033"; 287 i++; ss_test[i].num = -0x007F -1; ss_test[i].expected = "-128"; 288 289 i++; ss_test[i].num = -0x7000 -1; ss_test[i].expected = "-28673"; 290 i++; ss_test[i].num = -0x0700 -1; ss_test[i].expected = "-1793"; 291 i++; ss_test[i].num = -0x0070 -1; ss_test[i].expected = "-113"; 292 i++; ss_test[i].num = -0x0007 -1; ss_test[i].expected = "-8"; 293 294 i++; ss_test[i].num = -0x5000 -1; ss_test[i].expected = "-20481"; 295 i++; ss_test[i].num = -0x0500 -1; ss_test[i].expected = "-1281"; 296 i++; ss_test[i].num = -0x0050 -1; ss_test[i].expected = "-81"; 297 i++; ss_test[i].num = -0x0005 -1; ss_test[i].expected = "-6"; 298 299 i++; ss_test[i].num = 0x0000 -1; ss_test[i].expected = "-1"; 300 301 num_sshort_tests = i; 302 303 #elif (SIZEOF_SHORT == 4) 304 305 i = 1; ss_test[i].num = 0x7FFFFFFF; ss_test[i].expected = "2147483647"; 306 i++; ss_test[i].num = 0x7FFFFFFE; ss_test[i].expected = "2147483646"; 307 i++; ss_test[i].num = 0x7FFFFFFD; ss_test[i].expected = "2147483645"; 308 i++; ss_test[i].num = 0x7FFF0000; ss_test[i].expected = "2147418112"; 309 i++; ss_test[i].num = 0x00007FFF; ss_test[i].expected = "32767"; 310 311 i++; ss_test[i].num = 0x7F000000; ss_test[i].expected = "2130706432"; 312 i++; ss_test[i].num = 0x007F0000; ss_test[i].expected = "8323072"; 313 i++; ss_test[i].num = 0x00007F00; ss_test[i].expected = "32512"; 314 i++; ss_test[i].num = 0x0000007F; ss_test[i].expected = "127"; 315 316 i++; ss_test[i].num = 0x70000000; ss_test[i].expected = "1879048192"; 317 i++; ss_test[i].num = 0x07000000; ss_test[i].expected = "117440512"; 318 i++; ss_test[i].num = 0x00700000; ss_test[i].expected = "7340032"; 319 i++; ss_test[i].num = 0x00070000; ss_test[i].expected = "458752"; 320 i++; ss_test[i].num = 0x00007000; ss_test[i].expected = "28672"; 321 i++; ss_test[i].num = 0x00000700; ss_test[i].expected = "1792"; 322 i++; ss_test[i].num = 0x00000070; ss_test[i].expected = "112"; 323 i++; ss_test[i].num = 0x00000007; ss_test[i].expected = "7"; 324 325 i++; ss_test[i].num = 0x50000000; ss_test[i].expected = "1342177280"; 326 i++; ss_test[i].num = 0x05000000; ss_test[i].expected = "83886080"; 327 i++; ss_test[i].num = 0x00500000; ss_test[i].expected = "5242880"; 328 i++; ss_test[i].num = 0x00050000; ss_test[i].expected = "327680"; 329 i++; ss_test[i].num = 0x00005000; ss_test[i].expected = "20480"; 330 i++; ss_test[i].num = 0x00000500; ss_test[i].expected = "1280"; 331 i++; ss_test[i].num = 0x00000050; ss_test[i].expected = "80"; 332 i++; ss_test[i].num = 0x00000005; ss_test[i].expected = "5"; 333 334 i++; ss_test[i].num = 0x00000001; ss_test[i].expected = "1"; 335 i++; ss_test[i].num = 0x00000000; ss_test[i].expected = "0"; 336 337 i++; ss_test[i].num = -0x7FFFFFFF -1; ss_test[i].expected = "-2147483648"; 338 i++; ss_test[i].num = -0x7FFFFFFE -1; ss_test[i].expected = "-2147483647"; 339 i++; ss_test[i].num = -0x7FFFFFFD -1; ss_test[i].expected = "-2147483646"; 340 i++; ss_test[i].num = -0x7FFF0000 -1; ss_test[i].expected = "-2147418113"; 341 i++; ss_test[i].num = -0x00007FFF -1; ss_test[i].expected = "-32768"; 342 343 i++; ss_test[i].num = -0x7F000000 -1; ss_test[i].expected = "-2130706433"; 344 i++; ss_test[i].num = -0x007F0000 -1; ss_test[i].expected = "-8323073"; 345 i++; ss_test[i].num = -0x00007F00 -1; ss_test[i].expected = "-32513"; 346 i++; ss_test[i].num = -0x0000007F -1; ss_test[i].expected = "-128"; 347 348 i++; ss_test[i].num = -0x70000000 -1; ss_test[i].expected = "-1879048193"; 349 i++; ss_test[i].num = -0x07000000 -1; ss_test[i].expected = "-117440513"; 350 i++; ss_test[i].num = -0x00700000 -1; ss_test[i].expected = "-7340033"; 351 i++; ss_test[i].num = -0x00070000 -1; ss_test[i].expected = "-458753"; 352 i++; ss_test[i].num = -0x00007000 -1; ss_test[i].expected = "-28673"; 353 i++; ss_test[i].num = -0x00000700 -1; ss_test[i].expected = "-1793"; 354 i++; ss_test[i].num = -0x00000070 -1; ss_test[i].expected = "-113"; 355 i++; ss_test[i].num = -0x00000007 -1; ss_test[i].expected = "-8"; 356 357 i++; ss_test[i].num = -0x50000000 -1; ss_test[i].expected = "-1342177281"; 358 i++; ss_test[i].num = -0x05000000 -1; ss_test[i].expected = "-83886081"; 359 i++; ss_test[i].num = -0x00500000 -1; ss_test[i].expected = "-5242881"; 360 i++; ss_test[i].num = -0x00050000 -1; ss_test[i].expected = "-327681"; 361 i++; ss_test[i].num = -0x00005000 -1; ss_test[i].expected = "-20481"; 362 i++; ss_test[i].num = -0x00000500 -1; ss_test[i].expected = "-1281"; 363 i++; ss_test[i].num = -0x00000050 -1; ss_test[i].expected = "-81"; 364 i++; ss_test[i].num = -0x00000005 -1; ss_test[i].expected = "-6"; 365 366 i++; ss_test[i].num = 0x00000000 -1; ss_test[i].expected = "-1"; 367 368 num_sshort_tests = i; 369 370 #endif 371 372 for(i = 1; i <= num_sshort_tests; i++) { 373 374 for(j = 0; j<BUFSZ; j++) 375 ss_test[i].result[j] = 'X'; 376 ss_test[i].result[BUFSZ-1] = '\0'; 377 378 (void)curl_msprintf(ss_test[i].result, "%hd", ss_test[i].num); 379 380 if(memcmp(ss_test[i].result, 381 ss_test[i].expected, 382 strlen(ss_test[i].expected))) { 383 printf("signed short test #%.2d: Failed (Expected: %s Got: %s)\n", 384 i, ss_test[i].expected, ss_test[i].result); 385 failed++; 386 } 387 388 } 389 390 if(!failed) 391 printf("All curl_mprintf() signed short tests OK!\n"); 392 else 393 printf("Some curl_mprintf() signed short tests Failed!\n"); 394 395 return failed; 396 } 397 398 399 static int test_unsigned_int_formatting(void) 400 { 401 int i, j; 402 int num_uint_tests; 403 int failed = 0; 404 405 #if (SIZEOF_INT == 2) 406 407 i = 1; ui_test[i].num = 0xFFFFU; ui_test[i].expected = "65535"; 408 i++; ui_test[i].num = 0xFF00U; ui_test[i].expected = "65280"; 409 i++; ui_test[i].num = 0x00FFU; ui_test[i].expected = "255"; 410 411 i++; ui_test[i].num = 0xF000U; ui_test[i].expected = "61440"; 412 i++; ui_test[i].num = 0x0F00U; ui_test[i].expected = "3840"; 413 i++; ui_test[i].num = 0x00F0U; ui_test[i].expected = "240"; 414 i++; ui_test[i].num = 0x000FU; ui_test[i].expected = "15"; 415 416 i++; ui_test[i].num = 0xC000U; ui_test[i].expected = "49152"; 417 i++; ui_test[i].num = 0x0C00U; ui_test[i].expected = "3072"; 418 i++; ui_test[i].num = 0x00C0U; ui_test[i].expected = "192"; 419 i++; ui_test[i].num = 0x000CU; ui_test[i].expected = "12"; 420 421 i++; ui_test[i].num = 0x0001U; ui_test[i].expected = "1"; 422 i++; ui_test[i].num = 0x0000U; ui_test[i].expected = "0"; 423 424 num_uint_tests = i; 425 426 #elif (SIZEOF_INT == 4) 427 428 i = 1; ui_test[i].num = 0xFFFFFFFFU; ui_test[i].expected = "4294967295"; 429 i++; ui_test[i].num = 0xFFFF0000U; ui_test[i].expected = "4294901760"; 430 i++; ui_test[i].num = 0x0000FFFFU; ui_test[i].expected = "65535"; 431 432 i++; ui_test[i].num = 0xFF000000U; ui_test[i].expected = "4278190080"; 433 i++; ui_test[i].num = 0x00FF0000U; ui_test[i].expected = "16711680"; 434 i++; ui_test[i].num = 0x0000FF00U; ui_test[i].expected = "65280"; 435 i++; ui_test[i].num = 0x000000FFU; ui_test[i].expected = "255"; 436 437 i++; ui_test[i].num = 0xF0000000U; ui_test[i].expected = "4026531840"; 438 i++; ui_test[i].num = 0x0F000000U; ui_test[i].expected = "251658240"; 439 i++; ui_test[i].num = 0x00F00000U; ui_test[i].expected = "15728640"; 440 i++; ui_test[i].num = 0x000F0000U; ui_test[i].expected = "983040"; 441 i++; ui_test[i].num = 0x0000F000U; ui_test[i].expected = "61440"; 442 i++; ui_test[i].num = 0x00000F00U; ui_test[i].expected = "3840"; 443 i++; ui_test[i].num = 0x000000F0U; ui_test[i].expected = "240"; 444 i++; ui_test[i].num = 0x0000000FU; ui_test[i].expected = "15"; 445 446 i++; ui_test[i].num = 0xC0000000U; ui_test[i].expected = "3221225472"; 447 i++; ui_test[i].num = 0x0C000000U; ui_test[i].expected = "201326592"; 448 i++; ui_test[i].num = 0x00C00000U; ui_test[i].expected = "12582912"; 449 i++; ui_test[i].num = 0x000C0000U; ui_test[i].expected = "786432"; 450 i++; ui_test[i].num = 0x0000C000U; ui_test[i].expected = "49152"; 451 i++; ui_test[i].num = 0x00000C00U; ui_test[i].expected = "3072"; 452 i++; ui_test[i].num = 0x000000C0U; ui_test[i].expected = "192"; 453 i++; ui_test[i].num = 0x0000000CU; ui_test[i].expected = "12"; 454 455 i++; ui_test[i].num = 0x00000001U; ui_test[i].expected = "1"; 456 i++; ui_test[i].num = 0x00000000U; ui_test[i].expected = "0"; 457 458 num_uint_tests = i; 459 460 #elif (SIZEOF_INT == 8) 461 462 /* !checksrc! disable LONGLINE all */ 463 i = 1; ui_test[i].num = 0xFFFFFFFFFFFFFFFFU; ui_test[i].expected = "18446744073709551615"; 464 i++; ui_test[i].num = 0xFFFFFFFF00000000U; ui_test[i].expected = "18446744069414584320"; 465 i++; ui_test[i].num = 0x00000000FFFFFFFFU; ui_test[i].expected = "4294967295"; 466 467 i++; ui_test[i].num = 0xFFFF000000000000U; ui_test[i].expected = "18446462598732840960"; 468 i++; ui_test[i].num = 0x0000FFFF00000000U; ui_test[i].expected = "281470681743360"; 469 i++; ui_test[i].num = 0x00000000FFFF0000U; ui_test[i].expected = "4294901760"; 470 i++; ui_test[i].num = 0x000000000000FFFFU; ui_test[i].expected = "65535"; 471 472 i++; ui_test[i].num = 0xFF00000000000000U; ui_test[i].expected = "18374686479671623680"; 473 i++; ui_test[i].num = 0x00FF000000000000U; ui_test[i].expected = "71776119061217280"; 474 i++; ui_test[i].num = 0x0000FF0000000000U; ui_test[i].expected = "280375465082880"; 475 i++; ui_test[i].num = 0x000000FF00000000U; ui_test[i].expected = "1095216660480"; 476 i++; ui_test[i].num = 0x00000000FF000000U; ui_test[i].expected = "4278190080"; 477 i++; ui_test[i].num = 0x0000000000FF0000U; ui_test[i].expected = "16711680"; 478 i++; ui_test[i].num = 0x000000000000FF00U; ui_test[i].expected = "65280"; 479 i++; ui_test[i].num = 0x00000000000000FFU; ui_test[i].expected = "255"; 480 481 i++; ui_test[i].num = 0xF000000000000000U; ui_test[i].expected = "17293822569102704640"; 482 i++; ui_test[i].num = 0x0F00000000000000U; ui_test[i].expected = "1080863910568919040"; 483 i++; ui_test[i].num = 0x00F0000000000000U; ui_test[i].expected = "67553994410557440"; 484 i++; ui_test[i].num = 0x000F000000000000U; ui_test[i].expected = "4222124650659840"; 485 i++; ui_test[i].num = 0x0000F00000000000U; ui_test[i].expected = "263882790666240"; 486 i++; ui_test[i].num = 0x00000F0000000000U; ui_test[i].expected = "16492674416640"; 487 i++; ui_test[i].num = 0x000000F000000000U; ui_test[i].expected = "1030792151040"; 488 i++; ui_test[i].num = 0x0000000F00000000U; ui_test[i].expected = "64424509440"; 489 i++; ui_test[i].num = 0x00000000F0000000U; ui_test[i].expected = "4026531840"; 490 i++; ui_test[i].num = 0x000000000F000000U; ui_test[i].expected = "251658240"; 491 i++; ui_test[i].num = 0x0000000000F00000U; ui_test[i].expected = "15728640"; 492 i++; ui_test[i].num = 0x00000000000F0000U; ui_test[i].expected = "983040"; 493 i++; ui_test[i].num = 0x000000000000F000U; ui_test[i].expected = "61440"; 494 i++; ui_test[i].num = 0x0000000000000F00U; ui_test[i].expected = "3840"; 495 i++; ui_test[i].num = 0x00000000000000F0U; ui_test[i].expected = "240"; 496 i++; ui_test[i].num = 0x000000000000000FU; ui_test[i].expected = "15"; 497 498 i++; ui_test[i].num = 0xC000000000000000U; ui_test[i].expected = "13835058055282163712"; 499 i++; ui_test[i].num = 0x0C00000000000000U; ui_test[i].expected = "864691128455135232"; 500 i++; ui_test[i].num = 0x00C0000000000000U; ui_test[i].expected = "54043195528445952"; 501 i++; ui_test[i].num = 0x000C000000000000U; ui_test[i].expected = "3377699720527872"; 502 i++; ui_test[i].num = 0x0000C00000000000U; ui_test[i].expected = "211106232532992"; 503 i++; ui_test[i].num = 0x00000C0000000000U; ui_test[i].expected = "13194139533312"; 504 i++; ui_test[i].num = 0x000000C000000000U; ui_test[i].expected = "824633720832"; 505 i++; ui_test[i].num = 0x0000000C00000000U; ui_test[i].expected = "51539607552"; 506 i++; ui_test[i].num = 0x00000000C0000000U; ui_test[i].expected = "3221225472"; 507 i++; ui_test[i].num = 0x000000000C000000U; ui_test[i].expected = "201326592"; 508 i++; ui_test[i].num = 0x0000000000C00000U; ui_test[i].expected = "12582912"; 509 i++; ui_test[i].num = 0x00000000000C0000U; ui_test[i].expected = "786432"; 510 i++; ui_test[i].num = 0x000000000000C000U; ui_test[i].expected = "49152"; 511 i++; ui_test[i].num = 0x0000000000000C00U; ui_test[i].expected = "3072"; 512 i++; ui_test[i].num = 0x00000000000000C0U; ui_test[i].expected = "192"; 513 i++; ui_test[i].num = 0x000000000000000CU; ui_test[i].expected = "12"; 514 515 i++; ui_test[i].num = 0x00000001U; ui_test[i].expected = "1"; 516 i++; ui_test[i].num = 0x00000000U; ui_test[i].expected = "0"; 517 518 num_uint_tests = i; 519 520 #endif 521 522 for(i = 1; i <= num_uint_tests; i++) { 523 524 for(j = 0; j<BUFSZ; j++) 525 ui_test[i].result[j] = 'X'; 526 ui_test[i].result[BUFSZ-1] = '\0'; 527 528 (void)curl_msprintf(ui_test[i].result, "%u", ui_test[i].num); 529 530 if(memcmp(ui_test[i].result, 531 ui_test[i].expected, 532 strlen(ui_test[i].expected))) { 533 printf("unsigned int test #%.2d: Failed (Expected: %s Got: %s)\n", 534 i, ui_test[i].expected, ui_test[i].result); 535 failed++; 536 } 537 538 } 539 540 if(!failed) 541 printf("All curl_mprintf() unsigned int tests OK!\n"); 542 else 543 printf("Some curl_mprintf() unsigned int tests Failed!\n"); 544 545 return failed; 546 } 547 548 549 static int test_signed_int_formatting(void) 550 { 551 int i, j; 552 int num_sint_tests; 553 int failed = 0; 554 555 #if (SIZEOF_INT == 2) 556 557 i = 1; si_test[i].num = 0x7FFF; si_test[i].expected = "32767"; 558 i++; si_test[i].num = 0x7FFE; si_test[i].expected = "32766"; 559 i++; si_test[i].num = 0x7FFD; si_test[i].expected = "32765"; 560 i++; si_test[i].num = 0x7F00; si_test[i].expected = "32512"; 561 i++; si_test[i].num = 0x07F0; si_test[i].expected = "2032"; 562 i++; si_test[i].num = 0x007F; si_test[i].expected = "127"; 563 564 i++; si_test[i].num = 0x7000; si_test[i].expected = "28672"; 565 i++; si_test[i].num = 0x0700; si_test[i].expected = "1792"; 566 i++; si_test[i].num = 0x0070; si_test[i].expected = "112"; 567 i++; si_test[i].num = 0x0007; si_test[i].expected = "7"; 568 569 i++; si_test[i].num = 0x5000; si_test[i].expected = "20480"; 570 i++; si_test[i].num = 0x0500; si_test[i].expected = "1280"; 571 i++; si_test[i].num = 0x0050; si_test[i].expected = "80"; 572 i++; si_test[i].num = 0x0005; si_test[i].expected = "5"; 573 574 i++; si_test[i].num = 0x0001; si_test[i].expected = "1"; 575 i++; si_test[i].num = 0x0000; si_test[i].expected = "0"; 576 577 i++; si_test[i].num = -0x7FFF -1; si_test[i].expected = "-32768"; 578 i++; si_test[i].num = -0x7FFE -1; si_test[i].expected = "-32767"; 579 i++; si_test[i].num = -0x7FFD -1; si_test[i].expected = "-32766"; 580 i++; si_test[i].num = -0x7F00 -1; si_test[i].expected = "-32513"; 581 i++; si_test[i].num = -0x07F0 -1; si_test[i].expected = "-2033"; 582 i++; si_test[i].num = -0x007F -1; si_test[i].expected = "-128"; 583 584 i++; si_test[i].num = -0x7000 -1; si_test[i].expected = "-28673"; 585 i++; si_test[i].num = -0x0700 -1; si_test[i].expected = "-1793"; 586 i++; si_test[i].num = -0x0070 -1; si_test[i].expected = "-113"; 587 i++; si_test[i].num = -0x0007 -1; si_test[i].expected = "-8"; 588 589 i++; si_test[i].num = -0x5000 -1; si_test[i].expected = "-20481"; 590 i++; si_test[i].num = -0x0500 -1; si_test[i].expected = "-1281"; 591 i++; si_test[i].num = -0x0050 -1; si_test[i].expected = "-81"; 592 i++; si_test[i].num = -0x0005 -1; si_test[i].expected = "-6"; 593 594 i++; si_test[i].num = 0x0000 -1; si_test[i].expected = "-1"; 595 596 num_sint_tests = i; 597 598 #elif (SIZEOF_INT == 4) 599 600 i = 1; si_test[i].num = 0x7FFFFFFF; si_test[i].expected = "2147483647"; 601 i++; si_test[i].num = 0x7FFFFFFE; si_test[i].expected = "2147483646"; 602 i++; si_test[i].num = 0x7FFFFFFD; si_test[i].expected = "2147483645"; 603 i++; si_test[i].num = 0x7FFF0000; si_test[i].expected = "2147418112"; 604 i++; si_test[i].num = 0x00007FFF; si_test[i].expected = "32767"; 605 606 i++; si_test[i].num = 0x7F000000; si_test[i].expected = "2130706432"; 607 i++; si_test[i].num = 0x007F0000; si_test[i].expected = "8323072"; 608 i++; si_test[i].num = 0x00007F00; si_test[i].expected = "32512"; 609 i++; si_test[i].num = 0x0000007F; si_test[i].expected = "127"; 610 611 i++; si_test[i].num = 0x70000000; si_test[i].expected = "1879048192"; 612 i++; si_test[i].num = 0x07000000; si_test[i].expected = "117440512"; 613 i++; si_test[i].num = 0x00700000; si_test[i].expected = "7340032"; 614 i++; si_test[i].num = 0x00070000; si_test[i].expected = "458752"; 615 i++; si_test[i].num = 0x00007000; si_test[i].expected = "28672"; 616 i++; si_test[i].num = 0x00000700; si_test[i].expected = "1792"; 617 i++; si_test[i].num = 0x00000070; si_test[i].expected = "112"; 618 i++; si_test[i].num = 0x00000007; si_test[i].expected = "7"; 619 620 i++; si_test[i].num = 0x50000000; si_test[i].expected = "1342177280"; 621 i++; si_test[i].num = 0x05000000; si_test[i].expected = "83886080"; 622 i++; si_test[i].num = 0x00500000; si_test[i].expected = "5242880"; 623 i++; si_test[i].num = 0x00050000; si_test[i].expected = "327680"; 624 i++; si_test[i].num = 0x00005000; si_test[i].expected = "20480"; 625 i++; si_test[i].num = 0x00000500; si_test[i].expected = "1280"; 626 i++; si_test[i].num = 0x00000050; si_test[i].expected = "80"; 627 i++; si_test[i].num = 0x00000005; si_test[i].expected = "5"; 628 629 i++; si_test[i].num = 0x00000001; si_test[i].expected = "1"; 630 i++; si_test[i].num = 0x00000000; si_test[i].expected = "0"; 631 632 i++; si_test[i].num = -0x7FFFFFFF -1; si_test[i].expected = "-2147483648"; 633 i++; si_test[i].num = -0x7FFFFFFE -1; si_test[i].expected = "-2147483647"; 634 i++; si_test[i].num = -0x7FFFFFFD -1; si_test[i].expected = "-2147483646"; 635 i++; si_test[i].num = -0x7FFF0000 -1; si_test[i].expected = "-2147418113"; 636 i++; si_test[i].num = -0x00007FFF -1; si_test[i].expected = "-32768"; 637 638 i++; si_test[i].num = -0x7F000000 -1; si_test[i].expected = "-2130706433"; 639 i++; si_test[i].num = -0x007F0000 -1; si_test[i].expected = "-8323073"; 640 i++; si_test[i].num = -0x00007F00 -1; si_test[i].expected = "-32513"; 641 i++; si_test[i].num = -0x0000007F -1; si_test[i].expected = "-128"; 642 643 i++; si_test[i].num = -0x70000000 -1; si_test[i].expected = "-1879048193"; 644 i++; si_test[i].num = -0x07000000 -1; si_test[i].expected = "-117440513"; 645 i++; si_test[i].num = -0x00700000 -1; si_test[i].expected = "-7340033"; 646 i++; si_test[i].num = -0x00070000 -1; si_test[i].expected = "-458753"; 647 i++; si_test[i].num = -0x00007000 -1; si_test[i].expected = "-28673"; 648 i++; si_test[i].num = -0x00000700 -1; si_test[i].expected = "-1793"; 649 i++; si_test[i].num = -0x00000070 -1; si_test[i].expected = "-113"; 650 i++; si_test[i].num = -0x00000007 -1; si_test[i].expected = "-8"; 651 652 i++; si_test[i].num = -0x50000000 -1; si_test[i].expected = "-1342177281"; 653 i++; si_test[i].num = -0x05000000 -1; si_test[i].expected = "-83886081"; 654 i++; si_test[i].num = -0x00500000 -1; si_test[i].expected = "-5242881"; 655 i++; si_test[i].num = -0x00050000 -1; si_test[i].expected = "-327681"; 656 i++; si_test[i].num = -0x00005000 -1; si_test[i].expected = "-20481"; 657 i++; si_test[i].num = -0x00000500 -1; si_test[i].expected = "-1281"; 658 i++; si_test[i].num = -0x00000050 -1; si_test[i].expected = "-81"; 659 i++; si_test[i].num = -0x00000005 -1; si_test[i].expected = "-6"; 660 661 i++; si_test[i].num = 0x00000000 -1; si_test[i].expected = "-1"; 662 663 num_sint_tests = i; 664 665 #elif (SIZEOF_INT == 8) 666 667 i = 1; si_test[i].num = 0x7FFFFFFFFFFFFFFF; si_test[i].expected = "9223372036854775807"; 668 i++; si_test[i].num = 0x7FFFFFFFFFFFFFFE; si_test[i].expected = "9223372036854775806"; 669 i++; si_test[i].num = 0x7FFFFFFFFFFFFFFD; si_test[i].expected = "9223372036854775805"; 670 i++; si_test[i].num = 0x7FFFFFFF00000000; si_test[i].expected = "9223372032559808512"; 671 i++; si_test[i].num = 0x000000007FFFFFFF; si_test[i].expected = "2147483647"; 672 673 i++; si_test[i].num = 0x7FFF000000000000; si_test[i].expected = "9223090561878065152"; 674 i++; si_test[i].num = 0x00007FFF00000000; si_test[i].expected = "140733193388032"; 675 i++; si_test[i].num = 0x000000007FFF0000; si_test[i].expected = "2147418112"; 676 i++; si_test[i].num = 0x0000000000007FFF; si_test[i].expected = "32767"; 677 678 i++; si_test[i].num = 0x7F00000000000000; si_test[i].expected = "9151314442816847872"; 679 i++; si_test[i].num = 0x007F000000000000; si_test[i].expected = "35747322042253312"; 680 i++; si_test[i].num = 0x00007F0000000000; si_test[i].expected = "139637976727552"; 681 i++; si_test[i].num = 0x0000007F00000000; si_test[i].expected = "545460846592"; 682 i++; si_test[i].num = 0x000000007F000000; si_test[i].expected = "2130706432"; 683 i++; si_test[i].num = 0x00000000007F0000; si_test[i].expected = "8323072"; 684 i++; si_test[i].num = 0x0000000000007F00; si_test[i].expected = "32512"; 685 i++; si_test[i].num = 0x000000000000007F; si_test[i].expected = "127"; 686 687 i++; si_test[i].num = 0x7000000000000000; si_test[i].expected = "8070450532247928832"; 688 i++; si_test[i].num = 0x0700000000000000; si_test[i].expected = "504403158265495552"; 689 i++; si_test[i].num = 0x0070000000000000; si_test[i].expected = "31525197391593472"; 690 i++; si_test[i].num = 0x0007000000000000; si_test[i].expected = "1970324836974592"; 691 i++; si_test[i].num = 0x0000700000000000; si_test[i].expected = "123145302310912"; 692 i++; si_test[i].num = 0x0000070000000000; si_test[i].expected = "7696581394432"; 693 i++; si_test[i].num = 0x0000007000000000; si_test[i].expected = "481036337152"; 694 i++; si_test[i].num = 0x0000000700000000; si_test[i].expected = "30064771072"; 695 i++; si_test[i].num = 0x0000000070000000; si_test[i].expected = "1879048192"; 696 i++; si_test[i].num = 0x0000000007000000; si_test[i].expected = "117440512"; 697 i++; si_test[i].num = 0x0000000000700000; si_test[i].expected = "7340032"; 698 i++; si_test[i].num = 0x0000000000070000; si_test[i].expected = "458752"; 699 i++; si_test[i].num = 0x0000000000007000; si_test[i].expected = "28672"; 700 i++; si_test[i].num = 0x0000000000000700; si_test[i].expected = "1792"; 701 i++; si_test[i].num = 0x0000000000000070; si_test[i].expected = "112"; 702 i++; si_test[i].num = 0x0000000000000007; si_test[i].expected = "7"; 703 704 i++; si_test[i].num = 0x0000000000000001; si_test[i].expected = "1"; 705 i++; si_test[i].num = 0x0000000000000000; si_test[i].expected = "0"; 706 707 i++; si_test[i].num = -0x7FFFFFFFFFFFFFFF -1; si_test[i].expected = "-9223372036854775808"; 708 i++; si_test[i].num = -0x7FFFFFFFFFFFFFFE -1; si_test[i].expected = "-9223372036854775807"; 709 i++; si_test[i].num = -0x7FFFFFFFFFFFFFFD -1; si_test[i].expected = "-9223372036854775806"; 710 i++; si_test[i].num = -0x7FFFFFFF00000000 -1; si_test[i].expected = "-9223372032559808513"; 711 i++; si_test[i].num = -0x000000007FFFFFFF -1; si_test[i].expected = "-2147483648"; 712 713 i++; si_test[i].num = -0x7FFF000000000000 -1; si_test[i].expected = "-9223090561878065153"; 714 i++; si_test[i].num = -0x00007FFF00000000 -1; si_test[i].expected = "-140733193388033"; 715 i++; si_test[i].num = -0x000000007FFF0000 -1; si_test[i].expected = "-2147418113"; 716 i++; si_test[i].num = -0x0000000000007FFF -1; si_test[i].expected = "-32768"; 717 718 i++; si_test[i].num = -0x7F00000000000000 -1; si_test[i].expected = "-9151314442816847873"; 719 i++; si_test[i].num = -0x007F000000000000 -1; si_test[i].expected = "-35747322042253313"; 720 i++; si_test[i].num = -0x00007F0000000000 -1; si_test[i].expected = "-139637976727553"; 721 i++; si_test[i].num = -0x0000007F00000000 -1; si_test[i].expected = "-545460846593"; 722 i++; si_test[i].num = -0x000000007F000000 -1; si_test[i].expected = "-2130706433"; 723 i++; si_test[i].num = -0x00000000007F0000 -1; si_test[i].expected = "-8323073"; 724 i++; si_test[i].num = -0x0000000000007F00 -1; si_test[i].expected = "-32513"; 725 i++; si_test[i].num = -0x000000000000007F -1; si_test[i].expected = "-128"; 726 727 i++; si_test[i].num = -0x7000000000000000 -1; si_test[i].expected = "-8070450532247928833"; 728 i++; si_test[i].num = -0x0700000000000000 -1; si_test[i].expected = "-504403158265495553"; 729 i++; si_test[i].num = -0x0070000000000000 -1; si_test[i].expected = "-31525197391593473"; 730 i++; si_test[i].num = -0x0007000000000000 -1; si_test[i].expected = "-1970324836974593"; 731 i++; si_test[i].num = -0x0000700000000000 -1; si_test[i].expected = "-123145302310913"; 732 i++; si_test[i].num = -0x0000070000000000 -1; si_test[i].expected = "-7696581394433"; 733 i++; si_test[i].num = -0x0000007000000000 -1; si_test[i].expected = "-481036337153"; 734 i++; si_test[i].num = -0x0000000700000000 -1; si_test[i].expected = "-30064771073"; 735 i++; si_test[i].num = -0x0000000070000000 -1; si_test[i].expected = "-1879048193"; 736 i++; si_test[i].num = -0x0000000007000000 -1; si_test[i].expected = "-117440513"; 737 i++; si_test[i].num = -0x0000000000700000 -1; si_test[i].expected = "-7340033"; 738 i++; si_test[i].num = -0x0000000000070000 -1; si_test[i].expected = "-458753"; 739 i++; si_test[i].num = -0x0000000000007000 -1; si_test[i].expected = "-28673"; 740 i++; si_test[i].num = -0x0000000000000700 -1; si_test[i].expected = "-1793"; 741 i++; si_test[i].num = -0x0000000000000070 -1; si_test[i].expected = "-113"; 742 i++; si_test[i].num = -0x0000000000000007 -1; si_test[i].expected = "-8"; 743 744 i++; si_test[i].num = 0x0000000000000000 -1; si_test[i].expected = "-1"; 745 746 num_sint_tests = i; 747 748 #endif 749 750 for(i = 1; i <= num_sint_tests; i++) { 751 752 for(j = 0; j<BUFSZ; j++) 753 si_test[i].result[j] = 'X'; 754 si_test[i].result[BUFSZ-1] = '\0'; 755 756 (void)curl_msprintf(si_test[i].result, "%d", si_test[i].num); 757 758 if(memcmp(si_test[i].result, 759 si_test[i].expected, 760 strlen(si_test[i].expected))) { 761 printf("signed int test #%.2d: Failed (Expected: %s Got: %s)\n", 762 i, si_test[i].expected, si_test[i].result); 763 failed++; 764 } 765 766 } 767 768 if(!failed) 769 printf("All curl_mprintf() signed int tests OK!\n"); 770 else 771 printf("Some curl_mprintf() signed int tests Failed!\n"); 772 773 return failed; 774 } 775 776 777 static int test_unsigned_long_formatting(void) 778 { 779 int i, j; 780 int num_ulong_tests; 781 int failed = 0; 782 783 #if (SIZEOF_LONG == 2) 784 785 i = 1; ul_test[i].num = 0xFFFFUL; ul_test[i].expected = "65535"; 786 i++; ul_test[i].num = 0xFF00UL; ul_test[i].expected = "65280"; 787 i++; ul_test[i].num = 0x00FFUL; ul_test[i].expected = "255"; 788 789 i++; ul_test[i].num = 0xF000UL; ul_test[i].expected = "61440"; 790 i++; ul_test[i].num = 0x0F00UL; ul_test[i].expected = "3840"; 791 i++; ul_test[i].num = 0x00F0UL; ul_test[i].expected = "240"; 792 i++; ul_test[i].num = 0x000FUL; ul_test[i].expected = "15"; 793 794 i++; ul_test[i].num = 0xC000UL; ul_test[i].expected = "49152"; 795 i++; ul_test[i].num = 0x0C00UL; ul_test[i].expected = "3072"; 796 i++; ul_test[i].num = 0x00C0UL; ul_test[i].expected = "192"; 797 i++; ul_test[i].num = 0x000CUL; ul_test[i].expected = "12"; 798 799 i++; ul_test[i].num = 0x0001UL; ul_test[i].expected = "1"; 800 i++; ul_test[i].num = 0x0000UL; ul_test[i].expected = "0"; 801 802 num_ulong_tests = i; 803 804 #elif (SIZEOF_LONG == 4) 805 806 i = 1; ul_test[i].num = 0xFFFFFFFFUL; ul_test[i].expected = "4294967295"; 807 i++; ul_test[i].num = 0xFFFF0000UL; ul_test[i].expected = "4294901760"; 808 i++; ul_test[i].num = 0x0000FFFFUL; ul_test[i].expected = "65535"; 809 810 i++; ul_test[i].num = 0xFF000000UL; ul_test[i].expected = "4278190080"; 811 i++; ul_test[i].num = 0x00FF0000UL; ul_test[i].expected = "16711680"; 812 i++; ul_test[i].num = 0x0000FF00UL; ul_test[i].expected = "65280"; 813 i++; ul_test[i].num = 0x000000FFUL; ul_test[i].expected = "255"; 814 815 i++; ul_test[i].num = 0xF0000000UL; ul_test[i].expected = "4026531840"; 816 i++; ul_test[i].num = 0x0F000000UL; ul_test[i].expected = "251658240"; 817 i++; ul_test[i].num = 0x00F00000UL; ul_test[i].expected = "15728640"; 818 i++; ul_test[i].num = 0x000F0000UL; ul_test[i].expected = "983040"; 819 i++; ul_test[i].num = 0x0000F000UL; ul_test[i].expected = "61440"; 820 i++; ul_test[i].num = 0x00000F00UL; ul_test[i].expected = "3840"; 821 i++; ul_test[i].num = 0x000000F0UL; ul_test[i].expected = "240"; 822 i++; ul_test[i].num = 0x0000000FUL; ul_test[i].expected = "15"; 823 824 i++; ul_test[i].num = 0xC0000000UL; ul_test[i].expected = "3221225472"; 825 i++; ul_test[i].num = 0x0C000000UL; ul_test[i].expected = "201326592"; 826 i++; ul_test[i].num = 0x00C00000UL; ul_test[i].expected = "12582912"; 827 i++; ul_test[i].num = 0x000C0000UL; ul_test[i].expected = "786432"; 828 i++; ul_test[i].num = 0x0000C000UL; ul_test[i].expected = "49152"; 829 i++; ul_test[i].num = 0x00000C00UL; ul_test[i].expected = "3072"; 830 i++; ul_test[i].num = 0x000000C0UL; ul_test[i].expected = "192"; 831 i++; ul_test[i].num = 0x0000000CUL; ul_test[i].expected = "12"; 832 833 i++; ul_test[i].num = 0x00000001UL; ul_test[i].expected = "1"; 834 i++; ul_test[i].num = 0x00000000UL; ul_test[i].expected = "0"; 835 836 num_ulong_tests = i; 837 838 #elif (SIZEOF_LONG == 8) 839 840 i = 1; ul_test[i].num = 0xFFFFFFFFFFFFFFFFUL; ul_test[i].expected = "18446744073709551615"; 841 i++; ul_test[i].num = 0xFFFFFFFF00000000UL; ul_test[i].expected = "18446744069414584320"; 842 i++; ul_test[i].num = 0x00000000FFFFFFFFUL; ul_test[i].expected = "4294967295"; 843 844 i++; ul_test[i].num = 0xFFFF000000000000UL; ul_test[i].expected = "18446462598732840960"; 845 i++; ul_test[i].num = 0x0000FFFF00000000UL; ul_test[i].expected = "281470681743360"; 846 i++; ul_test[i].num = 0x00000000FFFF0000UL; ul_test[i].expected = "4294901760"; 847 i++; ul_test[i].num = 0x000000000000FFFFUL; ul_test[i].expected = "65535"; 848 849 i++; ul_test[i].num = 0xFF00000000000000UL; ul_test[i].expected = "18374686479671623680"; 850 i++; ul_test[i].num = 0x00FF000000000000UL; ul_test[i].expected = "71776119061217280"; 851 i++; ul_test[i].num = 0x0000FF0000000000UL; ul_test[i].expected = "280375465082880"; 852 i++; ul_test[i].num = 0x000000FF00000000UL; ul_test[i].expected = "1095216660480"; 853 i++; ul_test[i].num = 0x00000000FF000000UL; ul_test[i].expected = "4278190080"; 854 i++; ul_test[i].num = 0x0000000000FF0000UL; ul_test[i].expected = "16711680"; 855 i++; ul_test[i].num = 0x000000000000FF00UL; ul_test[i].expected = "65280"; 856 i++; ul_test[i].num = 0x00000000000000FFUL; ul_test[i].expected = "255"; 857 858 i++; ul_test[i].num = 0xF000000000000000UL; ul_test[i].expected = "17293822569102704640"; 859 i++; ul_test[i].num = 0x0F00000000000000UL; ul_test[i].expected = "1080863910568919040"; 860 i++; ul_test[i].num = 0x00F0000000000000UL; ul_test[i].expected = "67553994410557440"; 861 i++; ul_test[i].num = 0x000F000000000000UL; ul_test[i].expected = "4222124650659840"; 862 i++; ul_test[i].num = 0x0000F00000000000UL; ul_test[i].expected = "263882790666240"; 863 i++; ul_test[i].num = 0x00000F0000000000UL; ul_test[i].expected = "16492674416640"; 864 i++; ul_test[i].num = 0x000000F000000000UL; ul_test[i].expected = "1030792151040"; 865 i++; ul_test[i].num = 0x0000000F00000000UL; ul_test[i].expected = "64424509440"; 866 i++; ul_test[i].num = 0x00000000F0000000UL; ul_test[i].expected = "4026531840"; 867 i++; ul_test[i].num = 0x000000000F000000UL; ul_test[i].expected = "251658240"; 868 i++; ul_test[i].num = 0x0000000000F00000UL; ul_test[i].expected = "15728640"; 869 i++; ul_test[i].num = 0x00000000000F0000UL; ul_test[i].expected = "983040"; 870 i++; ul_test[i].num = 0x000000000000F000UL; ul_test[i].expected = "61440"; 871 i++; ul_test[i].num = 0x0000000000000F00UL; ul_test[i].expected = "3840"; 872 i++; ul_test[i].num = 0x00000000000000F0UL; ul_test[i].expected = "240"; 873 i++; ul_test[i].num = 0x000000000000000FUL; ul_test[i].expected = "15"; 874 875 i++; ul_test[i].num = 0xC000000000000000UL; ul_test[i].expected = "13835058055282163712"; 876 i++; ul_test[i].num = 0x0C00000000000000UL; ul_test[i].expected = "864691128455135232"; 877 i++; ul_test[i].num = 0x00C0000000000000UL; ul_test[i].expected = "54043195528445952"; 878 i++; ul_test[i].num = 0x000C000000000000UL; ul_test[i].expected = "3377699720527872"; 879 i++; ul_test[i].num = 0x0000C00000000000UL; ul_test[i].expected = "211106232532992"; 880 i++; ul_test[i].num = 0x00000C0000000000UL; ul_test[i].expected = "13194139533312"; 881 i++; ul_test[i].num = 0x000000C000000000UL; ul_test[i].expected = "824633720832"; 882 i++; ul_test[i].num = 0x0000000C00000000UL; ul_test[i].expected = "51539607552"; 883 i++; ul_test[i].num = 0x00000000C0000000UL; ul_test[i].expected = "3221225472"; 884 i++; ul_test[i].num = 0x000000000C000000UL; ul_test[i].expected = "201326592"; 885 i++; ul_test[i].num = 0x0000000000C00000UL; ul_test[i].expected = "12582912"; 886 i++; ul_test[i].num = 0x00000000000C0000UL; ul_test[i].expected = "786432"; 887 i++; ul_test[i].num = 0x000000000000C000UL; ul_test[i].expected = "49152"; 888 i++; ul_test[i].num = 0x0000000000000C00UL; ul_test[i].expected = "3072"; 889 i++; ul_test[i].num = 0x00000000000000C0UL; ul_test[i].expected = "192"; 890 i++; ul_test[i].num = 0x000000000000000CUL; ul_test[i].expected = "12"; 891 892 i++; ul_test[i].num = 0x00000001UL; ul_test[i].expected = "1"; 893 i++; ul_test[i].num = 0x00000000UL; ul_test[i].expected = "0"; 894 895 num_ulong_tests = i; 896 897 #endif 898 899 for(i = 1; i <= num_ulong_tests; i++) { 900 901 for(j = 0; j<BUFSZ; j++) 902 ul_test[i].result[j] = 'X'; 903 ul_test[i].result[BUFSZ-1] = '\0'; 904 905 (void)curl_msprintf(ul_test[i].result, "%lu", ul_test[i].num); 906 907 if(memcmp(ul_test[i].result, 908 ul_test[i].expected, 909 strlen(ul_test[i].expected))) { 910 printf("unsigned long test #%.2d: Failed (Expected: %s Got: %s)\n", 911 i, ul_test[i].expected, ul_test[i].result); 912 failed++; 913 } 914 915 } 916 917 if(!failed) 918 printf("All curl_mprintf() unsigned long tests OK!\n"); 919 else 920 printf("Some curl_mprintf() unsigned long tests Failed!\n"); 921 922 return failed; 923 } 924 925 926 static int test_signed_long_formatting(void) 927 { 928 int i, j; 929 int num_slong_tests; 930 int failed = 0; 931 932 #if (SIZEOF_LONG == 2) 933 934 i = 1; sl_test[i].num = 0x7FFFL; sl_test[i].expected = "32767"; 935 i++; sl_test[i].num = 0x7FFEL; sl_test[i].expected = "32766"; 936 i++; sl_test[i].num = 0x7FFDL; sl_test[i].expected = "32765"; 937 i++; sl_test[i].num = 0x7F00L; sl_test[i].expected = "32512"; 938 i++; sl_test[i].num = 0x07F0L; sl_test[i].expected = "2032"; 939 i++; sl_test[i].num = 0x007FL; sl_test[i].expected = "127"; 940 941 i++; sl_test[i].num = 0x7000L; sl_test[i].expected = "28672"; 942 i++; sl_test[i].num = 0x0700L; sl_test[i].expected = "1792"; 943 i++; sl_test[i].num = 0x0070L; sl_test[i].expected = "112"; 944 i++; sl_test[i].num = 0x0007L; sl_test[i].expected = "7"; 945 946 i++; sl_test[i].num = 0x5000L; sl_test[i].expected = "20480"; 947 i++; sl_test[i].num = 0x0500L; sl_test[i].expected = "1280"; 948 i++; sl_test[i].num = 0x0050L; sl_test[i].expected = "80"; 949 i++; sl_test[i].num = 0x0005L; sl_test[i].expected = "5"; 950 951 i++; sl_test[i].num = 0x0001L; sl_test[i].expected = "1"; 952 i++; sl_test[i].num = 0x0000L; sl_test[i].expected = "0"; 953 954 i++; sl_test[i].num = -0x7FFFL -1L; sl_test[i].expected = "-32768"; 955 i++; sl_test[i].num = -0x7FFEL -1L; sl_test[i].expected = "-32767"; 956 i++; sl_test[i].num = -0x7FFDL -1L; sl_test[i].expected = "-32766"; 957 i++; sl_test[i].num = -0x7F00L -1L; sl_test[i].expected = "-32513"; 958 i++; sl_test[i].num = -0x07F0L -1L; sl_test[i].expected = "-2033"; 959 i++; sl_test[i].num = -0x007FL -1L; sl_test[i].expected = "-128"; 960 961 i++; sl_test[i].num = -0x7000L -1L; sl_test[i].expected = "-28673"; 962 i++; sl_test[i].num = -0x0700L -1L; sl_test[i].expected = "-1793"; 963 i++; sl_test[i].num = -0x0070L -1L; sl_test[i].expected = "-113"; 964 i++; sl_test[i].num = -0x0007L -1L; sl_test[i].expected = "-8"; 965 966 i++; sl_test[i].num = -0x5000L -1L; sl_test[i].expected = "-20481"; 967 i++; sl_test[i].num = -0x0500L -1L; sl_test[i].expected = "-1281"; 968 i++; sl_test[i].num = -0x0050L -1L; sl_test[i].expected = "-81"; 969 i++; sl_test[i].num = -0x0005L -1L; sl_test[i].expected = "-6"; 970 971 i++; sl_test[i].num = 0x0000L -1L; sl_test[i].expected = "-1"; 972 973 num_slong_tests = i; 974 975 #elif (SIZEOF_LONG == 4) 976 977 i = 1; sl_test[i].num = 0x7FFFFFFFL; sl_test[i].expected = "2147483647"; 978 i++; sl_test[i].num = 0x7FFFFFFEL; sl_test[i].expected = "2147483646"; 979 i++; sl_test[i].num = 0x7FFFFFFDL; sl_test[i].expected = "2147483645"; 980 i++; sl_test[i].num = 0x7FFF0000L; sl_test[i].expected = "2147418112"; 981 i++; sl_test[i].num = 0x00007FFFL; sl_test[i].expected = "32767"; 982 983 i++; sl_test[i].num = 0x7F000000L; sl_test[i].expected = "2130706432"; 984 i++; sl_test[i].num = 0x007F0000L; sl_test[i].expected = "8323072"; 985 i++; sl_test[i].num = 0x00007F00L; sl_test[i].expected = "32512"; 986 i++; sl_test[i].num = 0x0000007FL; sl_test[i].expected = "127"; 987 988 i++; sl_test[i].num = 0x70000000L; sl_test[i].expected = "1879048192"; 989 i++; sl_test[i].num = 0x07000000L; sl_test[i].expected = "117440512"; 990 i++; sl_test[i].num = 0x00700000L; sl_test[i].expected = "7340032"; 991 i++; sl_test[i].num = 0x00070000L; sl_test[i].expected = "458752"; 992 i++; sl_test[i].num = 0x00007000L; sl_test[i].expected = "28672"; 993 i++; sl_test[i].num = 0x00000700L; sl_test[i].expected = "1792"; 994 i++; sl_test[i].num = 0x00000070L; sl_test[i].expected = "112"; 995 i++; sl_test[i].num = 0x00000007L; sl_test[i].expected = "7"; 996 997 i++; sl_test[i].num = 0x50000000L; sl_test[i].expected = "1342177280"; 998 i++; sl_test[i].num = 0x05000000L; sl_test[i].expected = "83886080"; 999 i++; sl_test[i].num = 0x00500000L; sl_test[i].expected = "5242880"; 1000 i++; sl_test[i].num = 0x00050000L; sl_test[i].expected = "327680"; 1001 i++; sl_test[i].num = 0x00005000L; sl_test[i].expected = "20480"; 1002 i++; sl_test[i].num = 0x00000500L; sl_test[i].expected = "1280"; 1003 i++; sl_test[i].num = 0x00000050L; sl_test[i].expected = "80"; 1004 i++; sl_test[i].num = 0x00000005L; sl_test[i].expected = "5"; 1005 1006 i++; sl_test[i].num = 0x00000001L; sl_test[i].expected = "1"; 1007 i++; sl_test[i].num = 0x00000000L; sl_test[i].expected = "0"; 1008 1009 i++; sl_test[i].num = -0x7FFFFFFFL -1L; sl_test[i].expected = "-2147483648"; 1010 i++; sl_test[i].num = -0x7FFFFFFEL -1L; sl_test[i].expected = "-2147483647"; 1011 i++; sl_test[i].num = -0x7FFFFFFDL -1L; sl_test[i].expected = "-2147483646"; 1012 i++; sl_test[i].num = -0x7FFF0000L -1L; sl_test[i].expected = "-2147418113"; 1013 i++; sl_test[i].num = -0x00007FFFL -1L; sl_test[i].expected = "-32768"; 1014 1015 i++; sl_test[i].num = -0x7F000000L -1L; sl_test[i].expected = "-2130706433"; 1016 i++; sl_test[i].num = -0x007F0000L -1L; sl_test[i].expected = "-8323073"; 1017 i++; sl_test[i].num = -0x00007F00L -1L; sl_test[i].expected = "-32513"; 1018 i++; sl_test[i].num = -0x0000007FL -1L; sl_test[i].expected = "-128"; 1019 1020 i++; sl_test[i].num = -0x70000000L -1L; sl_test[i].expected = "-1879048193"; 1021 i++; sl_test[i].num = -0x07000000L -1L; sl_test[i].expected = "-117440513"; 1022 i++; sl_test[i].num = -0x00700000L -1L; sl_test[i].expected = "-7340033"; 1023 i++; sl_test[i].num = -0x00070000L -1L; sl_test[i].expected = "-458753"; 1024 i++; sl_test[i].num = -0x00007000L -1L; sl_test[i].expected = "-28673"; 1025 i++; sl_test[i].num = -0x00000700L -1L; sl_test[i].expected = "-1793"; 1026 i++; sl_test[i].num = -0x00000070L -1L; sl_test[i].expected = "-113"; 1027 i++; sl_test[i].num = -0x00000007L -1L; sl_test[i].expected = "-8"; 1028 1029 i++; sl_test[i].num = -0x50000000L -1L; sl_test[i].expected = "-1342177281"; 1030 i++; sl_test[i].num = -0x05000000L -1L; sl_test[i].expected = "-83886081"; 1031 i++; sl_test[i].num = -0x00500000L -1L; sl_test[i].expected = "-5242881"; 1032 i++; sl_test[i].num = -0x00050000L -1L; sl_test[i].expected = "-327681"; 1033 i++; sl_test[i].num = -0x00005000L -1L; sl_test[i].expected = "-20481"; 1034 i++; sl_test[i].num = -0x00000500L -1L; sl_test[i].expected = "-1281"; 1035 i++; sl_test[i].num = -0x00000050L -1L; sl_test[i].expected = "-81"; 1036 i++; sl_test[i].num = -0x00000005L -1L; sl_test[i].expected = "-6"; 1037 1038 i++; sl_test[i].num = 0x00000000L -1L; sl_test[i].expected = "-1"; 1039 1040 num_slong_tests = i; 1041 1042 #elif (SIZEOF_LONG == 8) 1043 1044 i = 1; sl_test[i].num = 0x7FFFFFFFFFFFFFFFL; sl_test[i].expected = "9223372036854775807"; 1045 i++; sl_test[i].num = 0x7FFFFFFFFFFFFFFEL; sl_test[i].expected = "9223372036854775806"; 1046 i++; sl_test[i].num = 0x7FFFFFFFFFFFFFFDL; sl_test[i].expected = "9223372036854775805"; 1047 i++; sl_test[i].num = 0x7FFFFFFF00000000L; sl_test[i].expected = "9223372032559808512"; 1048 i++; sl_test[i].num = 0x000000007FFFFFFFL; sl_test[i].expected = "2147483647"; 1049 1050 i++; sl_test[i].num = 0x7FFF000000000000L; sl_test[i].expected = "9223090561878065152"; 1051 i++; sl_test[i].num = 0x00007FFF00000000L; sl_test[i].expected = "140733193388032"; 1052 i++; sl_test[i].num = 0x000000007FFF0000L; sl_test[i].expected = "2147418112"; 1053 i++; sl_test[i].num = 0x0000000000007FFFL; sl_test[i].expected = "32767"; 1054 1055 i++; sl_test[i].num = 0x7F00000000000000L; sl_test[i].expected = "9151314442816847872"; 1056 i++; sl_test[i].num = 0x007F000000000000L; sl_test[i].expected = "35747322042253312"; 1057 i++; sl_test[i].num = 0x00007F0000000000L; sl_test[i].expected = "139637976727552"; 1058 i++; sl_test[i].num = 0x0000007F00000000L; sl_test[i].expected = "545460846592"; 1059 i++; sl_test[i].num = 0x000000007F000000L; sl_test[i].expected = "2130706432"; 1060 i++; sl_test[i].num = 0x00000000007F0000L; sl_test[i].expected = "8323072"; 1061 i++; sl_test[i].num = 0x0000000000007F00L; sl_test[i].expected = "32512"; 1062 i++; sl_test[i].num = 0x000000000000007FL; sl_test[i].expected = "127"; 1063 1064 i++; sl_test[i].num = 0x7000000000000000L; sl_test[i].expected = "8070450532247928832"; 1065 i++; sl_test[i].num = 0x0700000000000000L; sl_test[i].expected = "504403158265495552"; 1066 i++; sl_test[i].num = 0x0070000000000000L; sl_test[i].expected = "31525197391593472"; 1067 i++; sl_test[i].num = 0x0007000000000000L; sl_test[i].expected = "1970324836974592"; 1068 i++; sl_test[i].num = 0x0000700000000000L; sl_test[i].expected = "123145302310912"; 1069 i++; sl_test[i].num = 0x0000070000000000L; sl_test[i].expected = "7696581394432"; 1070 i++; sl_test[i].num = 0x0000007000000000L; sl_test[i].expected = "481036337152"; 1071 i++; sl_test[i].num = 0x0000000700000000L; sl_test[i].expected = "30064771072"; 1072 i++; sl_test[i].num = 0x0000000070000000L; sl_test[i].expected = "1879048192"; 1073 i++; sl_test[i].num = 0x0000000007000000L; sl_test[i].expected = "117440512"; 1074 i++; sl_test[i].num = 0x0000000000700000L; sl_test[i].expected = "7340032"; 1075 i++; sl_test[i].num = 0x0000000000070000L; sl_test[i].expected = "458752"; 1076 i++; sl_test[i].num = 0x0000000000007000L; sl_test[i].expected = "28672"; 1077 i++; sl_test[i].num = 0x0000000000000700L; sl_test[i].expected = "1792"; 1078 i++; sl_test[i].num = 0x0000000000000070L; sl_test[i].expected = "112"; 1079 i++; sl_test[i].num = 0x0000000000000007L; sl_test[i].expected = "7"; 1080 1081 i++; sl_test[i].num = 0x0000000000000001L; sl_test[i].expected = "1"; 1082 i++; sl_test[i].num = 0x0000000000000000L; sl_test[i].expected = "0"; 1083 1084 i++; sl_test[i].num = -0x7FFFFFFFFFFFFFFFL -1L; sl_test[i].expected = "-9223372036854775808"; 1085 i++; sl_test[i].num = -0x7FFFFFFFFFFFFFFEL -1L; sl_test[i].expected = "-9223372036854775807"; 1086 i++; sl_test[i].num = -0x7FFFFFFFFFFFFFFDL -1L; sl_test[i].expected = "-9223372036854775806"; 1087 i++; sl_test[i].num = -0x7FFFFFFF00000000L -1L; sl_test[i].expected = "-9223372032559808513"; 1088 i++; sl_test[i].num = -0x000000007FFFFFFFL -1L; sl_test[i].expected = "-2147483648"; 1089 1090 i++; sl_test[i].num = -0x7FFF000000000000L -1L; sl_test[i].expected = "-9223090561878065153"; 1091 i++; sl_test[i].num = -0x00007FFF00000000L -1L; sl_test[i].expected = "-140733193388033"; 1092 i++; sl_test[i].num = -0x000000007FFF0000L -1L; sl_test[i].expected = "-2147418113"; 1093 i++; sl_test[i].num = -0x0000000000007FFFL -1L; sl_test[i].expected = "-32768"; 1094 1095 i++; sl_test[i].num = -0x7F00000000000000L -1L; sl_test[i].expected = "-9151314442816847873"; 1096 i++; sl_test[i].num = -0x007F000000000000L -1L; sl_test[i].expected = "-35747322042253313"; 1097 i++; sl_test[i].num = -0x00007F0000000000L -1L; sl_test[i].expected = "-139637976727553"; 1098 i++; sl_test[i].num = -0x0000007F00000000L -1L; sl_test[i].expected = "-545460846593"; 1099 i++; sl_test[i].num = -0x000000007F000000L -1L; sl_test[i].expected = "-2130706433"; 1100 i++; sl_test[i].num = -0x00000000007F0000L -1L; sl_test[i].expected = "-8323073"; 1101 i++; sl_test[i].num = -0x0000000000007F00L -1L; sl_test[i].expected = "-32513"; 1102 i++; sl_test[i].num = -0x000000000000007FL -1L; sl_test[i].expected = "-128"; 1103 1104 i++; sl_test[i].num = -0x7000000000000000L -1L; sl_test[i].expected = "-8070450532247928833"; 1105 i++; sl_test[i].num = -0x0700000000000000L -1L; sl_test[i].expected = "-504403158265495553"; 1106 i++; sl_test[i].num = -0x0070000000000000L -1L; sl_test[i].expected = "-31525197391593473"; 1107 i++; sl_test[i].num = -0x0007000000000000L -1L; sl_test[i].expected = "-1970324836974593"; 1108 i++; sl_test[i].num = -0x0000700000000000L -1L; sl_test[i].expected = "-123145302310913"; 1109 i++; sl_test[i].num = -0x0000070000000000L -1L; sl_test[i].expected = "-7696581394433"; 1110 i++; sl_test[i].num = -0x0000007000000000L -1L; sl_test[i].expected = "-481036337153"; 1111 i++; sl_test[i].num = -0x0000000700000000L -1L; sl_test[i].expected = "-30064771073"; 1112 i++; sl_test[i].num = -0x0000000070000000L -1L; sl_test[i].expected = "-1879048193"; 1113 i++; sl_test[i].num = -0x0000000007000000L -1L; sl_test[i].expected = "-117440513"; 1114 i++; sl_test[i].num = -0x0000000000700000L -1L; sl_test[i].expected = "-7340033"; 1115 i++; sl_test[i].num = -0x0000000000070000L -1L; sl_test[i].expected = "-458753"; 1116 i++; sl_test[i].num = -0x0000000000007000L -1L; sl_test[i].expected = "-28673"; 1117 i++; sl_test[i].num = -0x0000000000000700L -1L; sl_test[i].expected = "-1793"; 1118 i++; sl_test[i].num = -0x0000000000000070L -1L; sl_test[i].expected = "-113"; 1119 i++; sl_test[i].num = -0x0000000000000007L -1L; sl_test[i].expected = "-8"; 1120 1121 i++; sl_test[i].num = 0x0000000000000000L -1L; sl_test[i].expected = "-1"; 1122 1123 num_slong_tests = i; 1124 1125 #endif 1126 1127 for(i = 1; i <= num_slong_tests; i++) { 1128 1129 for(j = 0; j<BUFSZ; j++) 1130 sl_test[i].result[j] = 'X'; 1131 sl_test[i].result[BUFSZ-1] = '\0'; 1132 1133 (void)curl_msprintf(sl_test[i].result, "%ld", sl_test[i].num); 1134 1135 if(memcmp(sl_test[i].result, 1136 sl_test[i].expected, 1137 strlen(sl_test[i].expected))) { 1138 printf("signed long test #%.2d: Failed (Expected: %s Got: %s)\n", 1139 i, sl_test[i].expected, sl_test[i].result); 1140 failed++; 1141 } 1142 1143 } 1144 1145 if(!failed) 1146 printf("All curl_mprintf() signed long tests OK!\n"); 1147 else 1148 printf("Some curl_mprintf() signed long tests Failed!\n"); 1149 1150 return failed; 1151 } 1152 1153 1154 static int test_curl_off_t_formatting(void) 1155 { 1156 int i, j; 1157 int num_cofft_tests; 1158 int failed = 0; 1159 1160 #if (SIZEOF_CURL_OFF_T == 2) 1161 1162 i = 1; co_test[i].num = MPRNT_OFF_T_C(0x7FFF); co_test[i].expected = "32767"; 1163 i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFE); co_test[i].expected = "32766"; 1164 i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFD); co_test[i].expected = "32765"; 1165 i++; co_test[i].num = MPRNT_OFF_T_C(0x7F00); co_test[i].expected = "32512"; 1166 i++; co_test[i].num = MPRNT_OFF_T_C(0x07F0); co_test[i].expected = "2032"; 1167 i++; co_test[i].num = MPRNT_OFF_T_C(0x007F); co_test[i].expected = "127"; 1168 1169 i++; co_test[i].num = MPRNT_OFF_T_C(0x7000); co_test[i].expected = "28672"; 1170 i++; co_test[i].num = MPRNT_OFF_T_C(0x0700); co_test[i].expected = "1792"; 1171 i++; co_test[i].num = MPRNT_OFF_T_C(0x0070); co_test[i].expected = "112"; 1172 i++; co_test[i].num = MPRNT_OFF_T_C(0x0007); co_test[i].expected = "7"; 1173 1174 i++; co_test[i].num = MPRNT_OFF_T_C(0x5000); co_test[i].expected = "20480"; 1175 i++; co_test[i].num = MPRNT_OFF_T_C(0x0500); co_test[i].expected = "1280"; 1176 i++; co_test[i].num = MPRNT_OFF_T_C(0x0050); co_test[i].expected = "80"; 1177 i++; co_test[i].num = MPRNT_OFF_T_C(0x0005); co_test[i].expected = "5"; 1178 1179 i++; co_test[i].num = MPRNT_OFF_T_C(0x0001); co_test[i].expected = "1"; 1180 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000); co_test[i].expected = "0"; 1181 1182 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32768"; 1183 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFE) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32767"; 1184 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFD) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32766"; 1185 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7F00) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32513"; 1186 i++; co_test[i].num = -MPRNT_OFF_T_C(0x07F0) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2033"; 1187 i++; co_test[i].num = -MPRNT_OFF_T_C(0x007F) -MPRNT_OFF_T_C(1); co_test[i].expected = "-128"; 1188 1189 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-28673"; 1190 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0700) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1793"; 1191 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0070) -MPRNT_OFF_T_C(1); co_test[i].expected = "-113"; 1192 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0007) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8"; 1193 1194 i++; co_test[i].num = -MPRNT_OFF_T_C(0x5000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-20481"; 1195 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0500) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1281"; 1196 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0050) -MPRNT_OFF_T_C(1); co_test[i].expected = "-81"; 1197 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0005) -MPRNT_OFF_T_C(1); co_test[i].expected = "-6"; 1198 1199 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1"; 1200 1201 num_cofft_tests = i; 1202 1203 #elif (SIZEOF_CURL_OFF_T == 4) 1204 1205 i = 1; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFF); co_test[i].expected = "2147483647"; 1206 i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFE); co_test[i].expected = "2147483646"; 1207 i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFD); co_test[i].expected = "2147483645"; 1208 i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFF0000); co_test[i].expected = "2147418112"; 1209 i++; co_test[i].num = MPRNT_OFF_T_C(0x00007FFF); co_test[i].expected = "32767"; 1210 1211 i++; co_test[i].num = MPRNT_OFF_T_C(0x7F000000); co_test[i].expected = "2130706432"; 1212 i++; co_test[i].num = MPRNT_OFF_T_C(0x007F0000); co_test[i].expected = "8323072"; 1213 i++; co_test[i].num = MPRNT_OFF_T_C(0x00007F00); co_test[i].expected = "32512"; 1214 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000007F); co_test[i].expected = "127"; 1215 1216 i++; co_test[i].num = MPRNT_OFF_T_C(0x70000000); co_test[i].expected = "1879048192"; 1217 i++; co_test[i].num = MPRNT_OFF_T_C(0x07000000); co_test[i].expected = "117440512"; 1218 i++; co_test[i].num = MPRNT_OFF_T_C(0x00700000); co_test[i].expected = "7340032"; 1219 i++; co_test[i].num = MPRNT_OFF_T_C(0x00070000); co_test[i].expected = "458752"; 1220 i++; co_test[i].num = MPRNT_OFF_T_C(0x00007000); co_test[i].expected = "28672"; 1221 i++; co_test[i].num = MPRNT_OFF_T_C(0x00000700); co_test[i].expected = "1792"; 1222 i++; co_test[i].num = MPRNT_OFF_T_C(0x00000070); co_test[i].expected = "112"; 1223 i++; co_test[i].num = MPRNT_OFF_T_C(0x00000007); co_test[i].expected = "7"; 1224 1225 i++; co_test[i].num = MPRNT_OFF_T_C(0x50000000); co_test[i].expected = "1342177280"; 1226 i++; co_test[i].num = MPRNT_OFF_T_C(0x05000000); co_test[i].expected = "83886080"; 1227 i++; co_test[i].num = MPRNT_OFF_T_C(0x00500000); co_test[i].expected = "5242880"; 1228 i++; co_test[i].num = MPRNT_OFF_T_C(0x00050000); co_test[i].expected = "327680"; 1229 i++; co_test[i].num = MPRNT_OFF_T_C(0x00005000); co_test[i].expected = "20480"; 1230 i++; co_test[i].num = MPRNT_OFF_T_C(0x00000500); co_test[i].expected = "1280"; 1231 i++; co_test[i].num = MPRNT_OFF_T_C(0x00000050); co_test[i].expected = "80"; 1232 i++; co_test[i].num = MPRNT_OFF_T_C(0x00000005); co_test[i].expected = "5"; 1233 1234 i++; co_test[i].num = MPRNT_OFF_T_C(0x00000001); co_test[i].expected = "1"; 1235 i++; co_test[i].num = MPRNT_OFF_T_C(0x00000000); co_test[i].expected = "0"; 1236 1237 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483648"; 1238 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFE) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483647"; 1239 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFD) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483646"; 1240 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFF0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147418113"; 1241 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007FFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32768"; 1242 1243 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7F000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2130706433"; 1244 i++; co_test[i].num = -MPRNT_OFF_T_C(0x007F0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8323073"; 1245 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007F00) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32513"; 1246 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000007F) -MPRNT_OFF_T_C(1); co_test[i].expected = "-128"; 1247 1248 i++; co_test[i].num = -MPRNT_OFF_T_C(0x70000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1879048193"; 1249 i++; co_test[i].num = -MPRNT_OFF_T_C(0x07000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-117440513"; 1250 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00700000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-7340033"; 1251 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00070000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-458753"; 1252 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-28673"; 1253 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000700) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1793"; 1254 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000070) -MPRNT_OFF_T_C(1); co_test[i].expected = "-113"; 1255 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000007) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8"; 1256 1257 i++; co_test[i].num = -MPRNT_OFF_T_C(0x50000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1342177281"; 1258 i++; co_test[i].num = -MPRNT_OFF_T_C(0x05000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-83886081"; 1259 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00500000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-5242881"; 1260 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00050000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-327681"; 1261 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00005000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-20481"; 1262 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000500) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1281"; 1263 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000050) -MPRNT_OFF_T_C(1); co_test[i].expected = "-81"; 1264 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000005) -MPRNT_OFF_T_C(1); co_test[i].expected = "-6"; 1265 1266 i++; co_test[i].num = MPRNT_OFF_T_C(0x00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1"; 1267 1268 num_cofft_tests = i; 1269 1270 #elif (SIZEOF_CURL_OFF_T == 8) 1271 1272 i = 1; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFF); co_test[i].expected = "9223372036854775807"; 1273 i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFE); co_test[i].expected = "9223372036854775806"; 1274 i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFD); co_test[i].expected = "9223372036854775805"; 1275 i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFF00000000); co_test[i].expected = "9223372032559808512"; 1276 i++; co_test[i].num = MPRNT_OFF_T_C(0x000000007FFFFFFF); co_test[i].expected = "2147483647"; 1277 1278 i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFF000000000000); co_test[i].expected = "9223090561878065152"; 1279 i++; co_test[i].num = MPRNT_OFF_T_C(0x00007FFF00000000); co_test[i].expected = "140733193388032"; 1280 i++; co_test[i].num = MPRNT_OFF_T_C(0x000000007FFF0000); co_test[i].expected = "2147418112"; 1281 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000007FFF); co_test[i].expected = "32767"; 1282 1283 i++; co_test[i].num = MPRNT_OFF_T_C(0x7F00000000000000); co_test[i].expected = "9151314442816847872"; 1284 i++; co_test[i].num = MPRNT_OFF_T_C(0x007F000000000000); co_test[i].expected = "35747322042253312"; 1285 i++; co_test[i].num = MPRNT_OFF_T_C(0x00007F0000000000); co_test[i].expected = "139637976727552"; 1286 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000007F00000000); co_test[i].expected = "545460846592"; 1287 i++; co_test[i].num = MPRNT_OFF_T_C(0x000000007F000000); co_test[i].expected = "2130706432"; 1288 i++; co_test[i].num = MPRNT_OFF_T_C(0x00000000007F0000); co_test[i].expected = "8323072"; 1289 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000007F00); co_test[i].expected = "32512"; 1290 i++; co_test[i].num = MPRNT_OFF_T_C(0x000000000000007F); co_test[i].expected = "127"; 1291 1292 i++; co_test[i].num = MPRNT_OFF_T_C(0x7000000000000000); co_test[i].expected = "8070450532247928832"; 1293 i++; co_test[i].num = MPRNT_OFF_T_C(0x0700000000000000); co_test[i].expected = "504403158265495552"; 1294 i++; co_test[i].num = MPRNT_OFF_T_C(0x0070000000000000); co_test[i].expected = "31525197391593472"; 1295 i++; co_test[i].num = MPRNT_OFF_T_C(0x0007000000000000); co_test[i].expected = "1970324836974592"; 1296 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000700000000000); co_test[i].expected = "123145302310912"; 1297 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000070000000000); co_test[i].expected = "7696581394432"; 1298 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000007000000000); co_test[i].expected = "481036337152"; 1299 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000700000000); co_test[i].expected = "30064771072"; 1300 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000070000000); co_test[i].expected = "1879048192"; 1301 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000007000000); co_test[i].expected = "117440512"; 1302 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000700000); co_test[i].expected = "7340032"; 1303 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000070000); co_test[i].expected = "458752"; 1304 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000007000); co_test[i].expected = "28672"; 1305 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000700); co_test[i].expected = "1792"; 1306 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000070); co_test[i].expected = "112"; 1307 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000007); co_test[i].expected = "7"; 1308 1309 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000001); co_test[i].expected = "1"; 1310 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000000); co_test[i].expected = "0"; 1311 1312 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223372036854775808"; 1313 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFE) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223372036854775807"; 1314 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFD) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223372036854775806"; 1315 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFF00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223372032559808513"; 1316 i++; co_test[i].num = -MPRNT_OFF_T_C(0x000000007FFFFFFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483648"; 1317 1318 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFF000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223090561878065153"; 1319 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007FFF00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-140733193388033"; 1320 i++; co_test[i].num = -MPRNT_OFF_T_C(0x000000007FFF0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147418113"; 1321 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000007FFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32768"; 1322 1323 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7F00000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9151314442816847873"; 1324 i++; co_test[i].num = -MPRNT_OFF_T_C(0x007F000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-35747322042253313"; 1325 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007F0000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-139637976727553"; 1326 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000007F00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-545460846593"; 1327 i++; co_test[i].num = -MPRNT_OFF_T_C(0x000000007F000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2130706433"; 1328 i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000000007F0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8323073"; 1329 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000007F00) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32513"; 1330 i++; co_test[i].num = -MPRNT_OFF_T_C(0x000000000000007F) -MPRNT_OFF_T_C(1); co_test[i].expected = "-128"; 1331 1332 i++; co_test[i].num = -MPRNT_OFF_T_C(0x7000000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8070450532247928833"; 1333 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0700000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-504403158265495553"; 1334 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0070000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-31525197391593473"; 1335 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0007000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1970324836974593"; 1336 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000700000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-123145302310913"; 1337 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000070000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-7696581394433"; 1338 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000007000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-481036337153"; 1339 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000700000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-30064771073"; 1340 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000070000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1879048193"; 1341 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000007000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-117440513"; 1342 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000700000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-7340033"; 1343 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000070000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-458753"; 1344 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000007000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-28673"; 1345 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000000700) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1793"; 1346 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000000070) -MPRNT_OFF_T_C(1); co_test[i].expected = "-113"; 1347 i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000000007) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8"; 1348 1349 i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1"; 1350 1351 num_cofft_tests = i; 1352 1353 #endif 1354 1355 for(i = 1; i <= num_cofft_tests; i++) { 1356 1357 for(j = 0; j<BUFSZ; j++) 1358 co_test[i].result[j] = 'X'; 1359 co_test[i].result[BUFSZ-1] = '\0'; 1360 1361 (void)curl_msprintf(co_test[i].result, "%" CURL_FORMAT_CURL_OFF_T, 1362 co_test[i].num); 1363 1364 if(memcmp(co_test[i].result, 1365 co_test[i].expected, 1366 strlen(co_test[i].expected))) { 1367 printf("curl_off_t test #%.2d: Failed (Expected: %s Got: %s)\n", 1368 i, co_test[i].expected, co_test[i].result); 1369 failed++; 1370 } 1371 1372 } 1373 1374 if(!failed) 1375 printf("All curl_mprintf() curl_off_t tests OK!\n"); 1376 else 1377 printf("Some curl_mprintf() curl_off_t tests Failed!\n"); 1378 1379 return failed; 1380 } 1381 1382 static int _string_check(int linenumber, char *buf, const char *buf2) 1383 { 1384 if(strcmp(buf, buf2)) { 1385 /* they shouldn't differ */ 1386 printf("sprintf line %d failed:\nwe '%s'\nsystem: '%s'\n", 1387 linenumber, buf, buf2); 1388 return 1; 1389 } 1390 return 0; 1391 } 1392 #define string_check(x,y) _string_check(__LINE__, x, y) 1393 1394 static int _strlen_check(int linenumber, char *buf, size_t len) 1395 { 1396 size_t buflen = strlen(buf); 1397 if(len != buflen) { 1398 /* they shouldn't differ */ 1399 printf("sprintf strlen:%d failed:\nwe '%zu'\nsystem: '%zu'\n", 1400 linenumber, buflen, len); 1401 return 1; 1402 } 1403 return 0; 1404 } 1405 1406 #define strlen_check(x,y) _strlen_check(__LINE__, x, y) 1407 1408 /* 1409 * The output strings in this test need to have been verified with a system 1410 * sprintf() before used here. 1411 */ 1412 static int test_string_formatting(void) 1413 { 1414 int errors = 0; 1415 char buf[256]; 1416 curl_msnprintf(buf, sizeof(buf), "%0*d%s", 2, 9, "foo"); 1417 errors += string_check(buf, "09foo"); 1418 1419 curl_msnprintf(buf, sizeof(buf), "%*.*s", 5, 2, "foo"); 1420 errors += string_check(buf, " fo"); 1421 1422 curl_msnprintf(buf, sizeof(buf), "%*.*s", 2, 5, "foo"); 1423 errors += string_check(buf, "foo"); 1424 1425 curl_msnprintf(buf, sizeof(buf), "%*.*s", 0, 10, "foo"); 1426 errors += string_check(buf, "foo"); 1427 1428 curl_msnprintf(buf, sizeof(buf), "%-10s", "foo"); 1429 errors += string_check(buf, "foo "); 1430 1431 curl_msnprintf(buf, sizeof(buf), "%10s", "foo"); 1432 errors += string_check(buf, " foo"); 1433 1434 curl_msnprintf(buf, sizeof(buf), "%*.*s", -10, -10, "foo"); 1435 errors += string_check(buf, "foo "); 1436 1437 if(!errors) 1438 printf("All curl_mprintf() strings tests OK!\n"); 1439 else 1440 printf("Some curl_mprintf() string tests Failed!\n"); 1441 1442 return errors; 1443 } 1444 1445 static int test_weird_arguments(void) 1446 { 1447 int errors = 0; 1448 char buf[256]; 1449 int rc; 1450 1451 /* MAX_PARAMETERS is 128, try exact 128! */ 1452 rc = curl_msnprintf(buf, sizeof(buf), 1453 "%d%d%d%d%d%d%d%d%d%d" /* 10 */ 1454 "%d%d%d%d%d%d%d%d%d%d" /* 10 1 */ 1455 "%d%d%d%d%d%d%d%d%d%d" /* 10 2 */ 1456 "%d%d%d%d%d%d%d%d%d%d" /* 10 3 */ 1457 "%d%d%d%d%d%d%d%d%d%d" /* 10 4 */ 1458 "%d%d%d%d%d%d%d%d%d%d" /* 10 5 */ 1459 "%d%d%d%d%d%d%d%d%d%d" /* 10 6 */ 1460 "%d%d%d%d%d%d%d%d%d%d" /* 10 7 */ 1461 "%d%d%d%d%d%d%d%d%d%d" /* 10 8 */ 1462 "%d%d%d%d%d%d%d%d%d%d" /* 10 9 */ 1463 "%d%d%d%d%d%d%d%d%d%d" /* 10 10 */ 1464 "%d%d%d%d%d%d%d%d%d%d" /* 10 11 */ 1465 "%d%d%d%d%d%d%d%d" /* 8 */ 1466 , 1467 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 */ 1468 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 1 */ 1469 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 2 */ 1470 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 3 */ 1471 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 4 */ 1472 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 5 */ 1473 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 6 */ 1474 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 7 */ 1475 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 8 */ 1476 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 9 */ 1477 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 10 */ 1478 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 11 */ 1479 0, 1, 2, 3, 4, 5, 6, 7); /* 8 */ 1480 1481 if(rc != 128) { 1482 printf("curl_mprintf() returned %d and not 128!\n", rc); 1483 errors++; 1484 } 1485 1486 errors += string_check(buf, 1487 "0123456789" /* 10 */ 1488 "0123456789" /* 10 1 */ 1489 "0123456789" /* 10 2 */ 1490 "0123456789" /* 10 3 */ 1491 "0123456789" /* 10 4 */ 1492 "0123456789" /* 10 5 */ 1493 "0123456789" /* 10 6 */ 1494 "0123456789" /* 10 7 */ 1495 "0123456789" /* 10 8 */ 1496 "0123456789" /* 10 9 */ 1497 "0123456789" /* 10 10*/ 1498 "0123456789" /* 10 11 */ 1499 "01234567" /* 8 */ 1500 ); 1501 1502 /* MAX_PARAMETERS is 128, try more! */ 1503 buf[0] = 0; 1504 rc = curl_msnprintf(buf, sizeof(buf), 1505 "%d%d%d%d%d%d%d%d%d%d" /* 10 */ 1506 "%d%d%d%d%d%d%d%d%d%d" /* 10 1 */ 1507 "%d%d%d%d%d%d%d%d%d%d" /* 10 2 */ 1508 "%d%d%d%d%d%d%d%d%d%d" /* 10 3 */ 1509 "%d%d%d%d%d%d%d%d%d%d" /* 10 4 */ 1510 "%d%d%d%d%d%d%d%d%d%d" /* 10 5 */ 1511 "%d%d%d%d%d%d%d%d%d%d" /* 10 6 */ 1512 "%d%d%d%d%d%d%d%d%d%d" /* 10 7 */ 1513 "%d%d%d%d%d%d%d%d%d%d" /* 10 8 */ 1514 "%d%d%d%d%d%d%d%d%d%d" /* 10 9 */ 1515 "%d%d%d%d%d%d%d%d%d%d" /* 10 10 */ 1516 "%d%d%d%d%d%d%d%d%d%d" /* 10 11 */ 1517 "%d%d%d%d%d%d%d%d%d" /* 9 */ 1518 , 1519 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 */ 1520 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 1 */ 1521 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 2 */ 1522 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 3 */ 1523 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 4 */ 1524 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 5 */ 1525 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 6 */ 1526 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 7 */ 1527 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 8 */ 1528 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 9 */ 1529 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 10 */ 1530 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 11 */ 1531 0, 1, 2, 3, 4, 5, 6, 7, 8); /* 9 */ 1532 1533 if(rc != -1) { 1534 printf("curl_mprintf() returned %d and not -1!\n", rc); 1535 errors++; 1536 } 1537 1538 errors += string_check(buf, ""); 1539 1540 if(errors) 1541 printf("Some curl_mprintf() weird arguments tests failed!\n"); 1542 1543 return errors; 1544 } 1545 1546 /* DBL_MAX value from Linux */ 1547 /* !checksrc! disable PLUSNOSPACE 1 */ 1548 #define MAXIMIZE -1.7976931348623157081452E+308 1549 1550 static int test_float_formatting(void) 1551 { 1552 int errors = 0; 1553 char buf[512]; /* larger than max float size */ 1554 curl_msnprintf(buf, sizeof(buf), "%f", 9.0); 1555 errors += string_check(buf, "9.000000"); 1556 1557 curl_msnprintf(buf, sizeof(buf), "%.1f", 9.1); 1558 errors += string_check(buf, "9.1"); 1559 1560 curl_msnprintf(buf, sizeof(buf), "%.2f", 9.1); 1561 errors += string_check(buf, "9.10"); 1562 1563 curl_msnprintf(buf, sizeof(buf), "%.0f", 9.1); 1564 errors += string_check(buf, "9"); 1565 1566 curl_msnprintf(buf, sizeof(buf), "%0f", 9.1); 1567 errors += string_check(buf, "9.100000"); 1568 1569 curl_msnprintf(buf, sizeof(buf), "%10f", 9.1); 1570 errors += string_check(buf, " 9.100000"); 1571 1572 curl_msnprintf(buf, sizeof(buf), "%10.3f", 9.1); 1573 errors += string_check(buf, " 9.100"); 1574 1575 curl_msnprintf(buf, sizeof(buf), "%-10.3f", 9.1); 1576 errors += string_check(buf, "9.100 "); 1577 1578 curl_msnprintf(buf, sizeof(buf), "%-10.3f", 9.123456); 1579 errors += string_check(buf, "9.123 "); 1580 1581 curl_msnprintf(buf, sizeof(buf), "%.-2f", 9.1); 1582 errors += string_check(buf, "9.100000"); 1583 1584 curl_msnprintf(buf, sizeof(buf), "%*f", 10, 9.1); 1585 errors += string_check(buf, " 9.100000"); 1586 1587 curl_msnprintf(buf, sizeof(buf), "%*f", 3, 9.1); 1588 errors += string_check(buf, "9.100000"); 1589 1590 curl_msnprintf(buf, sizeof(buf), "%*f", 6, 9.2987654); 1591 errors += string_check(buf, "9.298765"); 1592 1593 curl_msnprintf(buf, sizeof(buf), "%*f", 6, 9.298765); 1594 errors += string_check(buf, "9.298765"); 1595 1596 curl_msnprintf(buf, sizeof(buf), "%*f", 6, 9.29876); 1597 errors += string_check(buf, "9.298760"); 1598 1599 curl_msnprintf(buf, sizeof(buf), "%.*f", 6, 9.2987654); 1600 errors += string_check(buf, "9.298765"); 1601 curl_msnprintf(buf, sizeof(buf), "%.*f", 5, 9.2987654); 1602 errors += string_check(buf, "9.29877"); 1603 curl_msnprintf(buf, sizeof(buf), "%.*f", 4, 9.2987654); 1604 errors += string_check(buf, "9.2988"); 1605 curl_msnprintf(buf, sizeof(buf), "%.*f", 3, 9.2987654); 1606 errors += string_check(buf, "9.299"); 1607 curl_msnprintf(buf, sizeof(buf), "%.*f", 2, 9.2987654); 1608 errors += string_check(buf, "9.30"); 1609 curl_msnprintf(buf, sizeof(buf), "%.*f", 1, 9.2987654); 1610 errors += string_check(buf, "9.3"); 1611 curl_msnprintf(buf, sizeof(buf), "%.*f", 0, 9.2987654); 1612 errors += string_check(buf, "9"); 1613 1614 /* very large precisions easily turn into system specific outputs so we only 1615 check the output buffer length here as we know the internal limit */ 1616 1617 curl_msnprintf(buf, sizeof(buf), "%.*f", (1<<30), 9.2987654); 1618 errors += strlen_check(buf, 325); 1619 1620 curl_msnprintf(buf, sizeof(buf), "%10000.10000f", 9.2987654); 1621 errors += strlen_check(buf, 325); 1622 1623 curl_msnprintf(buf, sizeof(buf), "%240.10000f", 1624 123456789123456789123456789.2987654); 1625 errors += strlen_check(buf, 325); 1626 1627 /* check negative when used signed */ 1628 curl_msnprintf(buf, sizeof(buf), "%*f", INT_MIN, 9.1); 1629 errors += string_check(buf, "9.100000"); 1630 1631 /* curl_msnprintf() limits a single float output to 325 bytes maximum 1632 width */ 1633 curl_msnprintf(buf, sizeof(buf), "%*f", (1<<30), 9.1); 1634 errors += string_check(buf, " 9.100000"); 1635 curl_msnprintf(buf, sizeof(buf), "%100000f", 9.1); 1636 errors += string_check(buf, " 9.100000"); 1637 1638 curl_msnprintf(buf, sizeof(buf), "%f", MAXIMIZE); 1639 errors += strlen_check(buf, 317); 1640 1641 curl_msnprintf(buf, 2, "%f", MAXIMIZE); 1642 errors += strlen_check(buf, 1); 1643 curl_msnprintf(buf, 3, "%f", MAXIMIZE); 1644 errors += strlen_check(buf, 2); 1645 curl_msnprintf(buf, 4, "%f", MAXIMIZE); 1646 errors += strlen_check(buf, 3); 1647 curl_msnprintf(buf, 5, "%f", MAXIMIZE); 1648 errors += strlen_check(buf, 4); 1649 curl_msnprintf(buf, 6, "%f", MAXIMIZE); 1650 errors += strlen_check(buf, 5); 1651 1652 if(!errors) 1653 printf("All float strings tests OK!\n"); 1654 else 1655 printf("test_float_formatting Failed!\n"); 1656 1657 return errors; 1658 } 1659 /* !checksrc! enable LONGLINE */ 1660 1661 int test(char *URL) 1662 { 1663 int errors = 0; 1664 (void)URL; /* not used */ 1665 1666 #ifdef HAVE_SETLOCALE 1667 /* 1668 * The test makes assumptions about the numeric locale (specifically, 1669 * RADIXCHAR) so set it to a known working (and portable) one. 1670 */ 1671 setlocale(LC_NUMERIC, "C"); 1672 #endif 1673 1674 errors += test_weird_arguments(); 1675 1676 errors += test_unsigned_short_formatting(); 1677 1678 errors += test_signed_short_formatting(); 1679 1680 errors += test_unsigned_int_formatting(); 1681 1682 errors += test_signed_int_formatting(); 1683 1684 errors += test_unsigned_long_formatting(); 1685 1686 errors += test_signed_long_formatting(); 1687 1688 errors += test_curl_off_t_formatting(); 1689 1690 errors += test_string_formatting(); 1691 1692 errors += test_float_formatting(); 1693 1694 if(errors) 1695 return TEST_ERR_MAJOR_BAD; 1696 else 1697 return 0; 1698 } 1699