| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 Unix SMB/CIFS implementation. | |
| 3 | |
| 4 libreplace tests | |
| 5 | |
| 6 Copyright (C) Jelmer Vernooij 2006 | |
| 7 | |
| 8 ** NOTE! The following LGPL license applies to the talloc | |
| 9 ** library. This does NOT imply that all of Samba is released | |
| 10 ** under the LGPL | |
| 11 | |
| 12 This library is free software; you can redistribute it and/or | |
| 13 modify it under the terms of the GNU Lesser General Public | |
| 14 License as published by the Free Software Foundation; either | |
| 15 version 3 of the License, or (at your option) any later version. | |
| 16 | |
| 17 This library is distributed in the hope that it will be useful, | |
| 18 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 20 Lesser General Public License for more details. | |
| 21 | |
| 22 You should have received a copy of the GNU Lesser General Public | |
| 23 License along with this library; if not, see <http://www.gnu.org/licenses/>. | |
| 24 */ | |
| 25 | |
| 26 #include "replace.h" | |
| 27 | |
| 28 /* | |
| 29 we include all the system/ include files here so that libreplace tests | |
| 30 them in the build farm | |
| 31 */ | |
| 32 #include "system/capability.h" | |
| 33 #include "system/dir.h" | |
| 34 #include "system/filesys.h" | |
| 35 #include "system/glob.h" | |
| 36 #include "system/iconv.h" | |
| 37 #include "system/locale.h" | |
| 38 #include "system/network.h" | |
| 39 #include "system/passwd.h" | |
| 40 #include "system/readline.h" | |
| 41 #include "system/select.h" | |
| 42 #include "system/shmem.h" | |
| 43 #include "system/syslog.h" | |
| 44 #include "system/terminal.h" | |
| 45 #include "system/time.h" | |
| 46 #include "system/wait.h" | |
| 47 #include "system/aio.h" | |
| 48 | |
| 49 #define TESTFILE "testfile.dat" | |
| 50 | |
| 51 /* | |
| 52 test ftruncate() function | |
| 53 */ | |
| 54 static int test_ftruncate(void) | |
| 55 { | |
| 56 struct stat st; | |
| 57 int fd; | |
| 58 const int size = 1234; | |
| 59 printf("test: ftruncate\n"); | |
| 60 unlink(TESTFILE); | |
| 61 fd = open(TESTFILE, O_RDWR|O_CREAT, 0600); | |
| 62 if (fd == -1) { | |
| 63 printf("failure: ftruncate [\n" | |
| 64 "creating '%s' failed - %s\n]\n", TESTFILE, strerror(
errno)); | |
| 65 return false; | |
| 66 } | |
| 67 if (ftruncate(fd, size) != 0) { | |
| 68 printf("failure: ftruncate [\n%s\n]\n", strerror(errno)); | |
| 69 return false; | |
| 70 } | |
| 71 if (fstat(fd, &st) != 0) { | |
| 72 printf("failure: ftruncate [\nfstat failed - %s\n]\n", strerror(
errno)); | |
| 73 return false; | |
| 74 } | |
| 75 if (st.st_size != size) { | |
| 76 printf("failure: ftruncate [\ngave wrong size %d - expected %d\n
]\n", | |
| 77 (int)st.st_size, size); | |
| 78 return false; | |
| 79 } | |
| 80 unlink(TESTFILE); | |
| 81 printf("success: ftruncate\n"); | |
| 82 return true; | |
| 83 } | |
| 84 | |
| 85 /* | |
| 86 test strlcpy() function. | |
| 87 see http://www.gratisoft.us/todd/papers/strlcpy.html | |
| 88 */ | |
| 89 static int test_strlcpy(void) | |
| 90 { | |
| 91 char buf[4]; | |
| 92 const struct { | |
| 93 const char *src; | |
| 94 size_t result; | |
| 95 } tests[] = { | |
| 96 { "abc", 3 }, | |
| 97 { "abcdef", 6 }, | |
| 98 { "abcd", 4 }, | |
| 99 { "", 0 }, | |
| 100 { NULL, 0 } | |
| 101 }; | |
| 102 int i; | |
| 103 printf("test: strlcpy\n"); | |
| 104 for (i=0;tests[i].src;i++) { | |
| 105 if (strlcpy(buf, tests[i].src, sizeof(buf)) != tests[i].result)
{ | |
| 106 printf("failure: strlcpy [\ntest %d failed\n]\n", i); | |
| 107 return false; | |
| 108 } | |
| 109 } | |
| 110 printf("success: strlcpy\n"); | |
| 111 return true; | |
| 112 } | |
| 113 | |
| 114 static int test_strlcat(void) | |
| 115 { | |
| 116 char tmp[10]; | |
| 117 printf("test: strlcat\n"); | |
| 118 strlcpy(tmp, "", sizeof(tmp)); | |
| 119 if (strlcat(tmp, "bla", 3) != 3) { | |
| 120 printf("failure: strlcat [\ninvalid return code\n]\n"); | |
| 121 return false; | |
| 122 } | |
| 123 if (strcmp(tmp, "bl") != 0) { | |
| 124 printf("failure: strlcat [\nexpected \"bl\", got \"%s\"\n]\n", | |
| 125 tmp); | |
| 126 return false; | |
| 127 } | |
| 128 | |
| 129 strlcpy(tmp, "da", sizeof(tmp)); | |
| 130 if (strlcat(tmp, "me", 4) != 4) { | |
| 131 printf("failure: strlcat [\nexpected \"dam\", got \"%s\"\n]\n", | |
| 132 tmp); | |
| 133 return false; | |
| 134 } | |
| 135 | |
| 136 printf("success: strlcat\n"); | |
| 137 return true; | |
| 138 } | |
| 139 | |
| 140 static int test_mktime(void) | |
| 141 { | |
| 142 /* FIXME */ | |
| 143 return true; | |
| 144 } | |
| 145 | |
| 146 static int test_initgroups(void) | |
| 147 { | |
| 148 /* FIXME */ | |
| 149 return true; | |
| 150 } | |
| 151 | |
| 152 static int test_memmove(void) | |
| 153 { | |
| 154 /* FIXME */ | |
| 155 return true; | |
| 156 } | |
| 157 | |
| 158 static int test_strdup(void) | |
| 159 { | |
| 160 char *x; | |
| 161 printf("test: strdup\n"); | |
| 162 x = strdup("bla"); | |
| 163 if (strcmp("bla", x) != 0) { | |
| 164 printf("failure: strdup [\nfailed: expected \"bla\", got \"%s\"\
n]\n", | |
| 165 x); | |
| 166 return false; | |
| 167 } | |
| 168 free(x); | |
| 169 printf("success: strdup\n"); | |
| 170 return true; | |
| 171 } | |
| 172 | |
| 173 static int test_setlinebuf(void) | |
| 174 { | |
| 175 printf("test: setlinebuf\n"); | |
| 176 setlinebuf(stdout); | |
| 177 printf("success: setlinebuf\n"); | |
| 178 return true; | |
| 179 } | |
| 180 | |
| 181 static int test_vsyslog(void) | |
| 182 { | |
| 183 /* FIXME */ | |
| 184 return true; | |
| 185 } | |
| 186 | |
| 187 static int test_timegm(void) | |
| 188 { | |
| 189 /* FIXME */ | |
| 190 return true; | |
| 191 } | |
| 192 | |
| 193 static int test_setenv(void) | |
| 194 { | |
| 195 #define TEST_SETENV(key, value, overwrite, result) do { \ | |
| 196 int _ret; \ | |
| 197 char *_v; \ | |
| 198 _ret = setenv(key, value, overwrite); \ | |
| 199 if (_ret != 0) { \ | |
| 200 printf("failure: setenv [\n" \ | |
| 201 "setenv(%s, %s, %d) failed\n" \ | |
| 202 "]\n", \ | |
| 203 key, value, overwrite); \ | |
| 204 return false; \ | |
| 205 } \ | |
| 206 _v=getenv(key); \ | |
| 207 if (!_v) { \ | |
| 208 printf("failure: setenv [\n" \ | |
| 209 "getenv(%s) returned NULL\n" \ | |
| 210 "]\n", \ | |
| 211 key); \ | |
| 212 return false; \ | |
| 213 } \ | |
| 214 if (strcmp(result, _v) != 0) { \ | |
| 215 printf("failure: setenv [\n" \ | |
| 216 "getenv(%s): '%s' != '%s'\n" \ | |
| 217 "]\n", \ | |
| 218 key, result, _v); \ | |
| 219 return false; \ | |
| 220 } \ | |
| 221 } while(0) | |
| 222 | |
| 223 #define TEST_UNSETENV(key) do { \ | |
| 224 char *_v; \ | |
| 225 unsetenv(key); \ | |
| 226 _v=getenv(key); \ | |
| 227 if (_v) { \ | |
| 228 printf("failure: setenv [\n" \ | |
| 229 "getenv(%s): NULL != '%s'\n" \ | |
| 230 "]\n", \ | |
| 231 SETENVTEST_KEY, _v); \ | |
| 232 return false; \ | |
| 233 } \ | |
| 234 } while (0) | |
| 235 | |
| 236 #define SETENVTEST_KEY "SETENVTESTKEY" | |
| 237 #define SETENVTEST_VAL "SETENVTESTVAL" | |
| 238 | |
| 239 printf("test: setenv\n"); | |
| 240 TEST_SETENV(SETENVTEST_KEY, SETENVTEST_VAL"1", 0, SETENVTEST_VAL"1"); | |
| 241 TEST_SETENV(SETENVTEST_KEY, SETENVTEST_VAL"2", 0, SETENVTEST_VAL"1"); | |
| 242 TEST_SETENV(SETENVTEST_KEY, SETENVTEST_VAL"3", 1, SETENVTEST_VAL"3"); | |
| 243 TEST_SETENV(SETENVTEST_KEY, SETENVTEST_VAL"4", 1, SETENVTEST_VAL"4"); | |
| 244 TEST_UNSETENV(SETENVTEST_KEY); | |
| 245 TEST_UNSETENV(SETENVTEST_KEY); | |
| 246 TEST_SETENV(SETENVTEST_KEY, SETENVTEST_VAL"5", 0, SETENVTEST_VAL"5"); | |
| 247 TEST_UNSETENV(SETENVTEST_KEY); | |
| 248 TEST_UNSETENV(SETENVTEST_KEY); | |
| 249 printf("success: setenv\n"); | |
| 250 return true; | |
| 251 } | |
| 252 | |
| 253 static int test_strndup(void) | |
| 254 { | |
| 255 char *x; | |
| 256 printf("test: strndup\n"); | |
| 257 x = strndup("bla", 0); | |
| 258 if (strcmp(x, "") != 0) { | |
| 259 printf("failure: strndup [\ninvalid\n]\n"); | |
| 260 return false; | |
| 261 } | |
| 262 free(x); | |
| 263 x = strndup("bla", 2); | |
| 264 if (strcmp(x, "bl") != 0) { | |
| 265 printf("failure: strndup [\ninvalid\n]\n"); | |
| 266 return false; | |
| 267 } | |
| 268 free(x); | |
| 269 x = strndup("bla", 10); | |
| 270 if (strcmp(x, "bla") != 0) { | |
| 271 printf("failure: strndup [\ninvalid\n]\n"); | |
| 272 return false; | |
| 273 } | |
| 274 free(x); | |
| 275 printf("success: strndup\n"); | |
| 276 return true; | |
| 277 } | |
| 278 | |
| 279 static int test_strnlen(void) | |
| 280 { | |
| 281 printf("test: strnlen\n"); | |
| 282 if (strnlen("bla", 2) != 2) { | |
| 283 printf("failure: strnlen [\nunexpected length\n]\n"); | |
| 284 return false; | |
| 285 } | |
| 286 | |
| 287 if (strnlen("some text\n", 0) != 0) { | |
| 288 printf("failure: strnlen [\nunexpected length\n]\n"); | |
| 289 return false; | |
| 290 } | |
| 291 | |
| 292 if (strnlen("some text", 20) != 9) { | |
| 293 printf("failure: strnlen [\nunexpected length\n]\n"); | |
| 294 return false; | |
| 295 } | |
| 296 | |
| 297 printf("success: strnlen\n"); | |
| 298 return true; | |
| 299 } | |
| 300 | |
| 301 static int test_waitpid(void) | |
| 302 { | |
| 303 /* FIXME */ | |
| 304 return true; | |
| 305 } | |
| 306 | |
| 307 static int test_seteuid(void) | |
| 308 { | |
| 309 /* FIXME */ | |
| 310 return true; | |
| 311 } | |
| 312 | |
| 313 static int test_setegid(void) | |
| 314 { | |
| 315 /* FIXME */ | |
| 316 return true; | |
| 317 } | |
| 318 | |
| 319 static int test_asprintf(void) | |
| 320 { | |
| 321 char *x; | |
| 322 printf("test: asprintf\n"); | |
| 323 if (asprintf(&x, "%d", 9) != 1) { | |
| 324 printf("failure: asprintf [\ngenerate asprintf\n]\n"); | |
| 325 return false; | |
| 326 } | |
| 327 if (strcmp(x, "9") != 0) { | |
| 328 printf("failure: asprintf [\ngenerate asprintf\n]\n"); | |
| 329 return false; | |
| 330 } | |
| 331 if (asprintf(&x, "dat%s", "a") != 4) { | |
| 332 printf("failure: asprintf [\ngenerate asprintf\n]\n"); | |
| 333 return false; | |
| 334 } | |
| 335 if (strcmp(x, "data") != 0) { | |
| 336 printf("failure: asprintf [\ngenerate asprintf\n]\n"); | |
| 337 return false; | |
| 338 } | |
| 339 printf("success: asprintf\n"); | |
| 340 return true; | |
| 341 } | |
| 342 | |
| 343 static int test_snprintf(void) | |
| 344 { | |
| 345 char tmp[10]; | |
| 346 printf("test: snprintf\n"); | |
| 347 if (snprintf(tmp, 3, "foo%d", 9) != 4) { | |
| 348 printf("failure: snprintf [\nsnprintf return code failed\n]\n"); | |
| 349 return false; | |
| 350 } | |
| 351 | |
| 352 if (strcmp(tmp, "fo") != 0) { | |
| 353 printf("failure: snprintf [\nsnprintf failed\n]\n"); | |
| 354 return false; | |
| 355 } | |
| 356 | |
| 357 printf("success: snprintf\n"); | |
| 358 return true; | |
| 359 } | |
| 360 | |
| 361 static int test_vasprintf(void) | |
| 362 { | |
| 363 /* FIXME */ | |
| 364 return true; | |
| 365 } | |
| 366 | |
| 367 static int test_vsnprintf(void) | |
| 368 { | |
| 369 /* FIXME */ | |
| 370 return true; | |
| 371 } | |
| 372 | |
| 373 static int test_opendir(void) | |
| 374 { | |
| 375 /* FIXME */ | |
| 376 return true; | |
| 377 } | |
| 378 | |
| 379 extern int test_readdir_os2_delete(void); | |
| 380 | |
| 381 static int test_readdir(void) | |
| 382 { | |
| 383 printf("test: readdir\n"); | |
| 384 if (test_readdir_os2_delete() != 0) { | |
| 385 return false; | |
| 386 } | |
| 387 printf("success: readdir\n"); | |
| 388 return true; | |
| 389 } | |
| 390 | |
| 391 static int test_telldir(void) | |
| 392 { | |
| 393 /* FIXME */ | |
| 394 return true; | |
| 395 } | |
| 396 | |
| 397 static int test_seekdir(void) | |
| 398 { | |
| 399 /* FIXME */ | |
| 400 return true; | |
| 401 } | |
| 402 | |
| 403 static int test_dlopen(void) | |
| 404 { | |
| 405 /* FIXME: test dlopen, dlsym, dlclose, dlerror */ | |
| 406 return true; | |
| 407 } | |
| 408 | |
| 409 | |
| 410 static int test_chroot(void) | |
| 411 { | |
| 412 /* FIXME: chroot() */ | |
| 413 return true; | |
| 414 } | |
| 415 | |
| 416 static int test_bzero(void) | |
| 417 { | |
| 418 /* FIXME: bzero */ | |
| 419 return true; | |
| 420 } | |
| 421 | |
| 422 static int test_strerror(void) | |
| 423 { | |
| 424 /* FIXME */ | |
| 425 return true; | |
| 426 } | |
| 427 | |
| 428 static int test_errno(void) | |
| 429 { | |
| 430 printf("test: errno\n"); | |
| 431 errno = 3; | |
| 432 if (errno != 3) { | |
| 433 printf("failure: errno [\nerrno failed\n]\n"); | |
| 434 return false; | |
| 435 } | |
| 436 | |
| 437 printf("success: errno\n"); | |
| 438 return true; | |
| 439 } | |
| 440 | |
| 441 static int test_mkdtemp(void) | |
| 442 { | |
| 443 /* FIXME */ | |
| 444 return true; | |
| 445 } | |
| 446 | |
| 447 static int test_mkstemp(void) | |
| 448 { | |
| 449 /* FIXME */ | |
| 450 return true; | |
| 451 } | |
| 452 | |
| 453 static int test_pread(void) | |
| 454 { | |
| 455 /* FIXME */ | |
| 456 return true; | |
| 457 } | |
| 458 | |
| 459 static int test_pwrite(void) | |
| 460 { | |
| 461 /* FIXME */ | |
| 462 return true; | |
| 463 } | |
| 464 | |
| 465 static int test_getpass(void) | |
| 466 { | |
| 467 /* FIXME */ | |
| 468 return true; | |
| 469 } | |
| 470 | |
| 471 static int test_inet_ntoa(void) | |
| 472 { | |
| 473 /* FIXME */ | |
| 474 return true; | |
| 475 } | |
| 476 | |
| 477 #define TEST_STRTO_X(type,fmt,func,str,base,res,diff,rrnoo) do {\ | |
| 478 type _v; \ | |
| 479 char _s[64]; \ | |
| 480 char *_p = NULL;\ | |
| 481 char *_ep = NULL; \ | |
| 482 strlcpy(_s, str, sizeof(_s));\ | |
| 483 if (diff >= 0) { \ | |
| 484 _ep = &_s[diff]; \ | |
| 485 } \ | |
| 486 errno = 0; \ | |
| 487 _v = func(_s, &_p, base); \ | |
| 488 if (errno != rrnoo) { \ | |
| 489 printf("failure: %s [\n" \ | |
| 490 "\t%s\n" \ | |
| 491 "\t%s(\"%s\",%d,%d): " fmt " (=/!)= " fmt "\n" \ | |
| 492 "\terrno: %d != %d\n" \ | |
| 493 "]\n", \ | |
| 494 __STRING(func), __location__, __STRING(func), \ | |
| 495 str, diff, base, res, _v, rrnoo, errno); \ | |
| 496 return false; \ | |
| 497 } else if (_v != res) { \ | |
| 498 printf("failure: %s [\n" \ | |
| 499 "\t%s\n" \ | |
| 500 "\t%s(\"%s\",%d,%d): " fmt " != " fmt "\n" \ | |
| 501 "]\n", \ | |
| 502 __STRING(func), __location__, __STRING(func), \ | |
| 503 str, diff, base, res, _v); \ | |
| 504 return false; \ | |
| 505 } else if (_p != _ep) { \ | |
| 506 printf("failure: %s [\n" \ | |
| 507 "\t%s\n" \ | |
| 508 "\t%s(\"%s\",%d,%d): " fmt " (=/!)= " fmt "\n" \ | |
| 509 "\tptr: %p - %p = %d != %d\n" \ | |
| 510 "]\n", \ | |
| 511 __STRING(func), __location__, __STRING(func), \ | |
| 512 str, diff, base, res, _v, _ep, _p, (int)(diff - (_ep - _p
)), diff); \ | |
| 513 return false; \ | |
| 514 } \ | |
| 515 } while (0) | |
| 516 | |
| 517 static int test_strtoll(void) | |
| 518 { | |
| 519 printf("test: strtoll\n"); | |
| 520 | |
| 521 #define TEST_STRTOLL(str,base,res,diff,errnoo) TEST_STRTO_X(long long int, "%lld
", strtoll,str,base,res,diff,errnoo) | |
| 522 | |
| 523 TEST_STRTOLL("15", 10, 15LL, 2, 0); | |
| 524 TEST_STRTOLL(" 15", 10, 15LL, 4, 0); | |
| 525 TEST_STRTOLL("15", 0, 15LL, 2, 0); | |
| 526 TEST_STRTOLL(" 15 ", 0, 15LL, 3, 0); | |
| 527 TEST_STRTOLL("+15", 10, 15LL, 3, 0); | |
| 528 TEST_STRTOLL(" +15", 10, 15LL, 5, 0); | |
| 529 TEST_STRTOLL("+15", 0, 15LL, 3, 0); | |
| 530 TEST_STRTOLL(" +15 ", 0, 15LL, 4, 0); | |
| 531 TEST_STRTOLL("-15", 10, -15LL, 3, 0); | |
| 532 TEST_STRTOLL(" -15", 10, -15LL, 5, 0); | |
| 533 TEST_STRTOLL("-15", 0, -15LL, 3, 0); | |
| 534 TEST_STRTOLL(" -15 ", 0, -15LL, 4, 0); | |
| 535 TEST_STRTOLL("015", 10, 15LL, 3, 0); | |
| 536 TEST_STRTOLL(" 015", 10, 15LL, 5, 0); | |
| 537 TEST_STRTOLL("015", 0, 13LL, 3, 0); | |
| 538 TEST_STRTOLL(" 015", 0, 13LL, 5, 0); | |
| 539 TEST_STRTOLL("0x15", 10, 0LL, 1, 0); | |
| 540 TEST_STRTOLL(" 0x15", 10, 0LL, 3, 0); | |
| 541 TEST_STRTOLL("0x15", 0, 21LL, 4, 0); | |
| 542 TEST_STRTOLL(" 0x15", 0, 21LL, 6, 0); | |
| 543 | |
| 544 TEST_STRTOLL("10", 16, 16LL, 2, 0); | |
| 545 TEST_STRTOLL(" 10 ", 16, 16LL, 4, 0); | |
| 546 TEST_STRTOLL("0x10", 16, 16LL, 4, 0); | |
| 547 TEST_STRTOLL("0x10", 0, 16LL, 4, 0); | |
| 548 TEST_STRTOLL(" 0x10 ", 0, 16LL, 5, 0); | |
| 549 TEST_STRTOLL("+10", 16, 16LL, 3, 0); | |
| 550 TEST_STRTOLL(" +10 ", 16, 16LL, 5, 0); | |
| 551 TEST_STRTOLL("+0x10", 16, 16LL, 5, 0); | |
| 552 TEST_STRTOLL("+0x10", 0, 16LL, 5, 0); | |
| 553 TEST_STRTOLL(" +0x10 ", 0, 16LL, 6, 0); | |
| 554 TEST_STRTOLL("-10", 16, -16LL, 3, 0); | |
| 555 TEST_STRTOLL(" -10 ", 16, -16LL, 5, 0); | |
| 556 TEST_STRTOLL("-0x10", 16, -16LL, 5, 0); | |
| 557 TEST_STRTOLL("-0x10", 0, -16LL, 5, 0); | |
| 558 TEST_STRTOLL(" -0x10 ", 0, -16LL, 6, 0); | |
| 559 TEST_STRTOLL("010", 16, 16LL, 3, 0); | |
| 560 TEST_STRTOLL(" 010 ", 16, 16LL, 5, 0); | |
| 561 TEST_STRTOLL("-010", 16, -16LL, 4, 0); | |
| 562 | |
| 563 TEST_STRTOLL("11", 8, 9LL, 2, 0); | |
| 564 TEST_STRTOLL("011", 8, 9LL, 3, 0); | |
| 565 TEST_STRTOLL("011", 0, 9LL, 3, 0); | |
| 566 TEST_STRTOLL("-11", 8, -9LL, 3, 0); | |
| 567 TEST_STRTOLL("-011", 8, -9LL, 4, 0); | |
| 568 TEST_STRTOLL("-011", 0, -9LL, 4, 0); | |
| 569 | |
| 570 TEST_STRTOLL("011", 8, 9LL, 3, 0); | |
| 571 TEST_STRTOLL("011", 0, 9LL, 3, 0); | |
| 572 TEST_STRTOLL("-11", 8, -9LL, 3, 0); | |
| 573 TEST_STRTOLL("-011", 8, -9LL, 4, 0); | |
| 574 TEST_STRTOLL("-011", 0, -9LL, 4, 0); | |
| 575 | |
| 576 TEST_STRTOLL("Text", 0, 0LL, 0, 0); | |
| 577 | |
| 578 TEST_STRTOLL("9223372036854775807", 10, 9223372036854775807LL,
19, 0); | |
| 579 TEST_STRTOLL("9223372036854775807", 0, 9223372036854775807LL,
19, 0); | |
| 580 TEST_STRTOLL("9223372036854775808", 0, 9223372036854775807LL,
19, ERANGE); | |
| 581 TEST_STRTOLL("9223372036854775808", 10, 9223372036854775807LL,
19, ERANGE); | |
| 582 TEST_STRTOLL("0x7FFFFFFFFFFFFFFF", 0, 9223372036854775807LL,
18, 0); | |
| 583 TEST_STRTOLL("0x7FFFFFFFFFFFFFFF", 16, 9223372036854775807LL,
18, 0); | |
| 584 TEST_STRTOLL("7FFFFFFFFFFFFFFF", 16, 9223372036854775807LL,
16, 0); | |
| 585 TEST_STRTOLL("0x8000000000000000", 0, 9223372036854775807LL,
18, ERANGE); | |
| 586 TEST_STRTOLL("0x8000000000000000", 16, 9223372036854775807LL,
18, ERANGE); | |
| 587 TEST_STRTOLL("80000000000000000", 16, 9223372036854775807LL,
17, ERANGE); | |
| 588 TEST_STRTOLL("0777777777777777777777", 0, 9223372036854775807LL,
22, 0); | |
| 589 TEST_STRTOLL("0777777777777777777777", 8, 9223372036854775807LL,
22, 0); | |
| 590 TEST_STRTOLL("777777777777777777777", 8, 9223372036854775807LL,
21, 0); | |
| 591 TEST_STRTOLL("01000000000000000000000", 0, 9223372036854775807LL,
23, ERANGE); | |
| 592 TEST_STRTOLL("01000000000000000000000", 8, 9223372036854775807LL,
23, ERANGE); | |
| 593 TEST_STRTOLL("1000000000000000000000", 8, 9223372036854775807LL,
22, ERANGE); | |
| 594 | |
| 595 TEST_STRTOLL("-9223372036854775808", 10, -9223372036854775807LL -
1, 20, 0); | |
| 596 TEST_STRTOLL("-9223372036854775808", 0, -9223372036854775807LL -
1, 20, 0); | |
| 597 TEST_STRTOLL("-9223372036854775809", 0, -9223372036854775807LL -
1, 20, ERANGE); | |
| 598 TEST_STRTOLL("-9223372036854775809", 10, -9223372036854775807LL -
1, 20, ERANGE); | |
| 599 TEST_STRTOLL("-0x8000000000000000", 0, -9223372036854775807LL -
1, 19, 0); | |
| 600 TEST_STRTOLL("-0x8000000000000000", 16, -9223372036854775807LL -
1, 19, 0); | |
| 601 TEST_STRTOLL("-8000000000000000", 16, -9223372036854775807LL -
1, 17, 0); | |
| 602 TEST_STRTOLL("-0x8000000000000001", 0, -9223372036854775807LL -
1, 19, ERANGE); | |
| 603 TEST_STRTOLL("-0x8000000000000001", 16, -9223372036854775807LL -
1, 19, ERANGE); | |
| 604 TEST_STRTOLL("-80000000000000001", 16, -9223372036854775807LL -
1, 18, ERANGE); | |
| 605 TEST_STRTOLL("-01000000000000000000000",0, -9223372036854775807LL -
1, 24, 0); | |
| 606 TEST_STRTOLL("-01000000000000000000000",8, -9223372036854775807LL -
1, 24, 0); | |
| 607 TEST_STRTOLL("-1000000000000000000000", 8, -9223372036854775807LL -
1, 23, 0); | |
| 608 TEST_STRTOLL("-01000000000000000000001",0, -9223372036854775807LL -
1, 24, ERANGE); | |
| 609 TEST_STRTOLL("-01000000000000000000001",8, -9223372036854775807LL -
1, 24, ERANGE); | |
| 610 TEST_STRTOLL("-1000000000000000000001", 8, -9223372036854775807LL -
1, 23, ERANGE); | |
| 611 | |
| 612 printf("success: strtoll\n"); | |
| 613 return true; | |
| 614 } | |
| 615 | |
| 616 static int test_strtoull(void) | |
| 617 { | |
| 618 printf("test: strtoull\n"); | |
| 619 | |
| 620 #define TEST_STRTOULL(str,base,res,diff,errnoo) TEST_STRTO_X(long long unsigned
int,"%llu",strtoull,str,base,res,diff,errnoo) | |
| 621 | |
| 622 TEST_STRTOULL("15", 10, 15LLU, 2, 0); | |
| 623 TEST_STRTOULL(" 15", 10, 15LLU, 4, 0); | |
| 624 TEST_STRTOULL("15", 0, 15LLU, 2, 0); | |
| 625 TEST_STRTOULL(" 15 ", 0, 15LLU, 3, 0); | |
| 626 TEST_STRTOULL("+15", 10, 15LLU, 3, 0); | |
| 627 TEST_STRTOULL(" +15", 10, 15LLU, 5, 0); | |
| 628 TEST_STRTOULL("+15", 0, 15LLU, 3, 0); | |
| 629 TEST_STRTOULL(" +15 ", 0, 15LLU, 4, 0); | |
| 630 TEST_STRTOULL("-15", 10, 18446744073709551601LLU, 3, 0); | |
| 631 TEST_STRTOULL(" -15", 10, 18446744073709551601LLU, 5, 0); | |
| 632 TEST_STRTOULL("-15", 0, 18446744073709551601LLU, 3, 0); | |
| 633 TEST_STRTOULL(" -15 ", 0, 18446744073709551601LLU, 4, 0); | |
| 634 TEST_STRTOULL("015", 10, 15LLU, 3, 0); | |
| 635 TEST_STRTOULL(" 015", 10, 15LLU, 5, 0); | |
| 636 TEST_STRTOULL("015", 0, 13LLU, 3, 0); | |
| 637 TEST_STRTOULL(" 015", 0, 13LLU, 5, 0); | |
| 638 TEST_STRTOULL("0x15", 10, 0LLU, 1, 0); | |
| 639 TEST_STRTOULL(" 0x15", 10, 0LLU, 3, 0); | |
| 640 TEST_STRTOULL("0x15", 0, 21LLU, 4, 0); | |
| 641 TEST_STRTOULL(" 0x15", 0, 21LLU, 6, 0); | |
| 642 | |
| 643 TEST_STRTOULL("10", 16, 16LLU, 2, 0); | |
| 644 TEST_STRTOULL(" 10 ", 16, 16LLU, 4, 0); | |
| 645 TEST_STRTOULL("0x10", 16, 16LLU, 4, 0); | |
| 646 TEST_STRTOULL("0x10", 0, 16LLU, 4, 0); | |
| 647 TEST_STRTOULL(" 0x10 ", 0, 16LLU, 5, 0); | |
| 648 TEST_STRTOULL("+10", 16, 16LLU, 3, 0); | |
| 649 TEST_STRTOULL(" +10 ", 16, 16LLU, 5, 0); | |
| 650 TEST_STRTOULL("+0x10", 16, 16LLU, 5, 0); | |
| 651 TEST_STRTOULL("+0x10", 0, 16LLU, 5, 0); | |
| 652 TEST_STRTOULL(" +0x10 ", 0, 16LLU, 6, 0); | |
| 653 TEST_STRTOULL("-10", 16, -16LLU, 3, 0); | |
| 654 TEST_STRTOULL(" -10 ", 16, -16LLU, 5, 0); | |
| 655 TEST_STRTOULL("-0x10", 16, -16LLU, 5, 0); | |
| 656 TEST_STRTOULL("-0x10", 0, -16LLU, 5, 0); | |
| 657 TEST_STRTOULL(" -0x10 ", 0, -16LLU, 6, 0); | |
| 658 TEST_STRTOULL("010", 16, 16LLU, 3, 0); | |
| 659 TEST_STRTOULL(" 010 ", 16, 16LLU, 5, 0); | |
| 660 TEST_STRTOULL("-010", 16, -16LLU, 4, 0); | |
| 661 | |
| 662 TEST_STRTOULL("11", 8, 9LLU, 2, 0); | |
| 663 TEST_STRTOULL("011", 8, 9LLU, 3, 0); | |
| 664 TEST_STRTOULL("011", 0, 9LLU, 3, 0); | |
| 665 TEST_STRTOULL("-11", 8, -9LLU, 3, 0); | |
| 666 TEST_STRTOULL("-011", 8, -9LLU, 4, 0); | |
| 667 TEST_STRTOULL("-011", 0, -9LLU, 4, 0); | |
| 668 | |
| 669 TEST_STRTOULL("011", 8, 9LLU, 3, 0); | |
| 670 TEST_STRTOULL("011", 0, 9LLU, 3, 0); | |
| 671 TEST_STRTOULL("-11", 8, -9LLU, 3, 0); | |
| 672 TEST_STRTOULL("-011", 8, -9LLU, 4, 0); | |
| 673 TEST_STRTOULL("-011", 0, -9LLU, 4, 0); | |
| 674 | |
| 675 TEST_STRTOULL("Text", 0, 0LLU, 0, 0); | |
| 676 | |
| 677 TEST_STRTOULL("9223372036854775807", 10, 9223372036854775807LLU,
19, 0); | |
| 678 TEST_STRTOULL("9223372036854775807", 0, 9223372036854775807LLU,
19, 0); | |
| 679 TEST_STRTOULL("9223372036854775808", 0, 9223372036854775808LLU,
19, 0); | |
| 680 TEST_STRTOULL("9223372036854775808", 10, 9223372036854775808LLU,
19, 0); | |
| 681 TEST_STRTOULL("0x7FFFFFFFFFFFFFFF", 0, 9223372036854775807LLU,
18, 0); | |
| 682 TEST_STRTOULL("0x7FFFFFFFFFFFFFFF", 16, 9223372036854775807LLU,
18, 0); | |
| 683 TEST_STRTOULL("7FFFFFFFFFFFFFFF", 16, 9223372036854775807LLU,
16, 0); | |
| 684 TEST_STRTOULL("0x8000000000000000", 0, 9223372036854775808LLU,
18, 0); | |
| 685 TEST_STRTOULL("0x8000000000000000", 16, 9223372036854775808LLU,
18, 0); | |
| 686 TEST_STRTOULL("8000000000000000", 16, 9223372036854775808LLU,
16, 0); | |
| 687 TEST_STRTOULL("0777777777777777777777", 0, 9223372036854775807LLU,
22, 0); | |
| 688 TEST_STRTOULL("0777777777777777777777", 8, 9223372036854775807LLU,
22, 0); | |
| 689 TEST_STRTOULL("777777777777777777777", 8, 9223372036854775807LLU,
21, 0); | |
| 690 TEST_STRTOULL("01000000000000000000000",0, 9223372036854775808LLU,
23, 0); | |
| 691 TEST_STRTOULL("01000000000000000000000",8, 9223372036854775808LLU,
23, 0); | |
| 692 TEST_STRTOULL("1000000000000000000000", 8, 9223372036854775808LLU,
22, 0); | |
| 693 | |
| 694 TEST_STRTOULL("-9223372036854775808", 10, 9223372036854775808LLU,
20, 0); | |
| 695 TEST_STRTOULL("-9223372036854775808", 0, 9223372036854775808LLU,
20, 0); | |
| 696 TEST_STRTOULL("-9223372036854775809", 0, 9223372036854775807LLU,
20, 0); | |
| 697 TEST_STRTOULL("-9223372036854775809", 10, 9223372036854775807LLU,
20, 0); | |
| 698 TEST_STRTOULL("-0x8000000000000000", 0, 9223372036854775808LLU,
19, 0); | |
| 699 TEST_STRTOULL("-0x8000000000000000", 16, 9223372036854775808LLU,
19, 0); | |
| 700 TEST_STRTOULL("-8000000000000000", 16, 9223372036854775808LLU,
17, 0); | |
| 701 TEST_STRTOULL("-0x8000000000000001", 0, 9223372036854775807LLU,
19, 0); | |
| 702 TEST_STRTOULL("-0x8000000000000001", 16, 9223372036854775807LLU,
19, 0); | |
| 703 TEST_STRTOULL("-8000000000000001", 16, 9223372036854775807LLU,
17, 0); | |
| 704 TEST_STRTOULL("-01000000000000000000000",0, 9223372036854775808LLU,
24, 0); | |
| 705 TEST_STRTOULL("-01000000000000000000000",8, 9223372036854775808LLU,
24, 0); | |
| 706 TEST_STRTOULL("-1000000000000000000000",8, 9223372036854775808LLU,
23, 0); | |
| 707 TEST_STRTOULL("-01000000000000000000001",0, 9223372036854775807LLU,
24, 0); | |
| 708 TEST_STRTOULL("-01000000000000000000001",8, 9223372036854775807LLU,
24, 0); | |
| 709 TEST_STRTOULL("-1000000000000000000001",8, 9223372036854775807LLU,
23, 0); | |
| 710 | |
| 711 TEST_STRTOULL("18446744073709551615", 0, 18446744073709551615LLU,
20, 0); | |
| 712 TEST_STRTOULL("18446744073709551615", 10, 18446744073709551615LLU,
20, 0); | |
| 713 TEST_STRTOULL("18446744073709551616", 0, 18446744073709551615LLU,
20, ERANGE); | |
| 714 TEST_STRTOULL("18446744073709551616", 10, 18446744073709551615LLU,
20, ERANGE); | |
| 715 TEST_STRTOULL("0xFFFFFFFFFFFFFFFF", 0, 18446744073709551615LLU,
18, 0); | |
| 716 TEST_STRTOULL("0xFFFFFFFFFFFFFFFF", 16, 18446744073709551615LLU,
18, 0); | |
| 717 TEST_STRTOULL("FFFFFFFFFFFFFFFF", 16, 18446744073709551615LLU,
16, 0); | |
| 718 TEST_STRTOULL("0x10000000000000000", 0, 18446744073709551615LLU,
19, ERANGE); | |
| 719 TEST_STRTOULL("0x10000000000000000", 16, 18446744073709551615LLU,
19, ERANGE); | |
| 720 TEST_STRTOULL("10000000000000000", 16, 18446744073709551615LLU,
17, ERANGE); | |
| 721 TEST_STRTOULL("01777777777777777777777",0, 18446744073709551615LLU,
23, 0); | |
| 722 TEST_STRTOULL("01777777777777777777777",8, 18446744073709551615LLU,
23, 0); | |
| 723 TEST_STRTOULL("1777777777777777777777", 8, 18446744073709551615LLU,
22, 0); | |
| 724 TEST_STRTOULL("02000000000000000000000",0, 18446744073709551615LLU,
23, ERANGE); | |
| 725 TEST_STRTOULL("02000000000000000000000",8, 18446744073709551615LLU,
23, ERANGE); | |
| 726 TEST_STRTOULL("2000000000000000000000", 8, 18446744073709551615LLU,
22, ERANGE); | |
| 727 | |
| 728 TEST_STRTOULL("-18446744073709551615", 0, 1LLU,
21, 0); | |
| 729 TEST_STRTOULL("-18446744073709551615", 10, 1LLU,
21, 0); | |
| 730 TEST_STRTOULL("-18446744073709551616", 0, 18446744073709551615LLU,
21, ERANGE); | |
| 731 TEST_STRTOULL("-18446744073709551616", 10, 18446744073709551615LLU,
21, ERANGE); | |
| 732 TEST_STRTOULL("-0xFFFFFFFFFFFFFFFF", 0, 1LLU,
19, 0); | |
| 733 TEST_STRTOULL("-0xFFFFFFFFFFFFFFFF", 16, 1LLU,
19, 0); | |
| 734 TEST_STRTOULL("-FFFFFFFFFFFFFFFF", 16, 1LLU,
17, 0); | |
| 735 TEST_STRTOULL("-0x10000000000000000", 0, 18446744073709551615LLU,
20, ERANGE); | |
| 736 TEST_STRTOULL("-0x10000000000000000", 16, 18446744073709551615LLU,
20, ERANGE); | |
| 737 TEST_STRTOULL("-10000000000000000", 16, 18446744073709551615LLU,
18, ERANGE); | |
| 738 TEST_STRTOULL("-01777777777777777777777",0, 1LLU,
24, 0); | |
| 739 TEST_STRTOULL("-01777777777777777777777",8, 1LLU,
24, 0); | |
| 740 TEST_STRTOULL("-1777777777777777777777",8, 1LLU,
23, 0); | |
| 741 TEST_STRTOULL("-02000000000000000000000",0, 18446744073709551615LLU,
24, ERANGE); | |
| 742 TEST_STRTOULL("-02000000000000000000000",8, 18446744073709551615LLU,
24, ERANGE); | |
| 743 TEST_STRTOULL("-2000000000000000000000",8, 18446744073709551615LLU,
23, ERANGE); | |
| 744 | |
| 745 printf("success: strtoull\n"); | |
| 746 return true; | |
| 747 } | |
| 748 | |
| 749 /* | |
| 750 FIXME: | |
| 751 Types: | |
| 752 bool | |
| 753 socklen_t | |
| 754 uint_t | |
| 755 uint{8,16,32,64}_t | |
| 756 int{8,16,32,64}_t | |
| 757 intptr_t | |
| 758 | |
| 759 Constants: | |
| 760 PATH_NAME_MAX | |
| 761 UINT{16,32,64}_MAX | |
| 762 INT32_MAX | |
| 763 */ | |
| 764 | |
| 765 static int test_va_copy(void) | |
| 766 { | |
| 767 /* FIXME */ | |
| 768 return true; | |
| 769 } | |
| 770 | |
| 771 static int test_FUNCTION(void) | |
| 772 { | |
| 773 printf("test: FUNCTION\n"); | |
| 774 if (strcmp(__FUNCTION__, "test_FUNCTION") != 0) { | |
| 775 printf("failure: FAILURE [\nFAILURE invalid\n]\n"); | |
| 776 return false; | |
| 777 } | |
| 778 printf("success: FUNCTION\n"); | |
| 779 return true; | |
| 780 } | |
| 781 | |
| 782 static int test_MIN(void) | |
| 783 { | |
| 784 printf("test: MIN\n"); | |
| 785 if (MIN(20, 1) != 1) { | |
| 786 printf("failure: MIN [\nMIN invalid\n]\n"); | |
| 787 return false; | |
| 788 } | |
| 789 if (MIN(1, 20) != 1) { | |
| 790 printf("failure: MIN [\nMIN invalid\n]\n"); | |
| 791 return false; | |
| 792 } | |
| 793 printf("success: MIN\n"); | |
| 794 return true; | |
| 795 } | |
| 796 | |
| 797 static int test_MAX(void) | |
| 798 { | |
| 799 printf("test: MAX\n"); | |
| 800 if (MAX(20, 1) != 20) { | |
| 801 printf("failure: MAX [\nMAX invalid\n]\n"); | |
| 802 return false; | |
| 803 } | |
| 804 if (MAX(1, 20) != 20) { | |
| 805 printf("failure: MAX [\nMAX invalid\n]\n"); | |
| 806 return false; | |
| 807 } | |
| 808 printf("success: MAX\n"); | |
| 809 return true; | |
| 810 } | |
| 811 | |
| 812 static int test_socketpair(void) | |
| 813 { | |
| 814 int sock[2]; | |
| 815 char buf[20]; | |
| 816 | |
| 817 printf("test: socketpair\n"); | |
| 818 | |
| 819 if (socketpair(AF_UNIX, SOCK_STREAM, 0, sock) == -1) { | |
| 820 printf("failure: socketpair [\n" | |
| 821 "socketpair() failed\n" | |
| 822 "]\n"); | |
| 823 return false; | |
| 824 } | |
| 825 | |
| 826 if (write(sock[1], "automatisch", 12) == -1) { | |
| 827 printf("failure: socketpair [\n" | |
| 828 "write() failed: %s\n" | |
| 829 "]\n", strerror(errno)); | |
| 830 return false; | |
| 831 } | |
| 832 | |
| 833 if (read(sock[0], buf, 12) == -1) { | |
| 834 printf("failure: socketpair [\n" | |
| 835 "read() failed: %s\n" | |
| 836 "]\n", strerror(errno)); | |
| 837 return false; | |
| 838 } | |
| 839 | |
| 840 if (strcmp(buf, "automatisch") != 0) { | |
| 841 printf("failure: socketpair [\n" | |
| 842 "expected: automatisch, got: %s\n" | |
| 843 "]\n", buf); | |
| 844 return false; | |
| 845 } | |
| 846 | |
| 847 printf("success: socketpair\n"); | |
| 848 | |
| 849 return true; | |
| 850 } | |
| 851 | |
| 852 extern int libreplace_test_strptime(void); | |
| 853 | |
| 854 static int test_strptime(void) | |
| 855 { | |
| 856 return libreplace_test_strptime(); | |
| 857 } | |
| 858 | |
| 859 extern int getifaddrs_test(void); | |
| 860 | |
| 861 static int test_getifaddrs(void) | |
| 862 { | |
| 863 | |
| 864 printf("test: getifaddrs\n"); | |
| 865 | |
| 866 if (getifaddrs_test() != 0) { | |
| 867 printf("failure: getifaddrs\n"); | |
| 868 return false; | |
| 869 } | |
| 870 | |
| 871 printf("success: getifaddrs\n"); | |
| 872 return true; | |
| 873 } | |
| 874 | |
| 875 static int test_utime(void) | |
| 876 { | |
| 877 struct utimbuf u; | |
| 878 struct stat st1, st2, st3; | |
| 879 int fd; | |
| 880 | |
| 881 printf("test: utime\n"); | |
| 882 unlink(TESTFILE); | |
| 883 | |
| 884 fd = open(TESTFILE, O_RDWR|O_CREAT, 0600); | |
| 885 if (fd == -1) { | |
| 886 printf("failure: utime [\n" | |
| 887 "creating '%s' failed - %s\n]\n", | |
| 888 TESTFILE, strerror(errno)); | |
| 889 return false; | |
| 890 } | |
| 891 | |
| 892 if (fstat(fd, &st1) != 0) { | |
| 893 printf("failure: utime [\n" | |
| 894 "fstat (1) failed - %s\n]\n", | |
| 895 strerror(errno)); | |
| 896 return false; | |
| 897 } | |
| 898 | |
| 899 u.actime = st1.st_atime + 300; | |
| 900 u.modtime = st1.st_mtime - 300; | |
| 901 if (utime(TESTFILE, &u) != 0) { | |
| 902 printf("failure: utime [\n" | |
| 903 "utime(&u) failed - %s\n]\n", | |
| 904 strerror(errno)); | |
| 905 return false; | |
| 906 } | |
| 907 | |
| 908 if (fstat(fd, &st2) != 0) { | |
| 909 printf("failure: utime [\n" | |
| 910 "fstat (2) failed - %s\n]\n", | |
| 911 strerror(errno)); | |
| 912 return false; | |
| 913 } | |
| 914 | |
| 915 if (utime(TESTFILE, NULL) != 0) { | |
| 916 printf("failure: utime [\n" | |
| 917 "utime(NULL) failed - %s\n]\n", | |
| 918 strerror(errno)); | |
| 919 return false; | |
| 920 } | |
| 921 | |
| 922 if (fstat(fd, &st3) != 0) { | |
| 923 printf("failure: utime [\n" | |
| 924 "fstat (3) failed - %s\n]\n", | |
| 925 strerror(errno)); | |
| 926 return false; | |
| 927 } | |
| 928 | |
| 929 #define CMP_VAL(a,c,b) do { \ | |
| 930 if (a c b) { \ | |
| 931 printf("failure: utime [\n" \ | |
| 932 "%s: %s(%d) %s %s(%d)\n]\n", \ | |
| 933 __location__, \ | |
| 934 #a, (int)a, #c, #b, (int)b); \ | |
| 935 return false; \ | |
| 936 } \ | |
| 937 } while(0) | |
| 938 #define EQUAL_VAL(a,b) CMP_VAL(a,!=,b) | |
| 939 #define GREATER_VAL(a,b) CMP_VAL(a,<=,b) | |
| 940 #define LESSER_VAL(a,b) CMP_VAL(a,>=,b) | |
| 941 | |
| 942 EQUAL_VAL(st2.st_atime, st1.st_atime + 300); | |
| 943 EQUAL_VAL(st2.st_mtime, st1.st_mtime - 300); | |
| 944 LESSER_VAL(st3.st_atime, st2.st_atime); | |
| 945 GREATER_VAL(st3.st_mtime, st2.st_mtime); | |
| 946 | |
| 947 #undef CMP_VAL | |
| 948 #undef EQUAL_VAL | |
| 949 #undef GREATER_VAL | |
| 950 #undef LESSER_VAL | |
| 951 | |
| 952 unlink(TESTFILE); | |
| 953 printf("success: utime\n"); | |
| 954 return true; | |
| 955 } | |
| 956 | |
| 957 static int test_utimes(void) | |
| 958 { | |
| 959 struct timeval tv[2]; | |
| 960 struct stat st1, st2; | |
| 961 int fd; | |
| 962 | |
| 963 printf("test: utimes\n"); | |
| 964 unlink(TESTFILE); | |
| 965 | |
| 966 fd = open(TESTFILE, O_RDWR|O_CREAT, 0600); | |
| 967 if (fd == -1) { | |
| 968 printf("failure: utimes [\n" | |
| 969 "creating '%s' failed - %s\n]\n", | |
| 970 TESTFILE, strerror(errno)); | |
| 971 return false; | |
| 972 } | |
| 973 | |
| 974 if (fstat(fd, &st1) != 0) { | |
| 975 printf("failure: utimes [\n" | |
| 976 "fstat (1) failed - %s\n]\n", | |
| 977 strerror(errno)); | |
| 978 return false; | |
| 979 } | |
| 980 | |
| 981 ZERO_STRUCT(tv); | |
| 982 tv[0].tv_sec = st1.st_atime + 300; | |
| 983 tv[1].tv_sec = st1.st_mtime - 300; | |
| 984 if (utimes(TESTFILE, tv) != 0) { | |
| 985 printf("failure: utimes [\n" | |
| 986 "utimes(tv) failed - %s\n]\n", | |
| 987 strerror(errno)); | |
| 988 return false; | |
| 989 } | |
| 990 | |
| 991 if (fstat(fd, &st2) != 0) { | |
| 992 printf("failure: utimes [\n" | |
| 993 "fstat (2) failed - %s\n]\n", | |
| 994 strerror(errno)); | |
| 995 return false; | |
| 996 } | |
| 997 | |
| 998 #define EQUAL_VAL(a,b) do { \ | |
| 999 if (a != b) { \ | |
| 1000 printf("failure: utimes [\n" \ | |
| 1001 "%s: %s(%d) != %s(%d)\n]\n", \ | |
| 1002 __location__, \ | |
| 1003 #a, (int)a, #b, (int)b); \ | |
| 1004 return false; \ | |
| 1005 } \ | |
| 1006 } while(0) | |
| 1007 | |
| 1008 EQUAL_VAL(st2.st_atime, st1.st_atime + 300); | |
| 1009 EQUAL_VAL(st2.st_mtime, st1.st_mtime - 300); | |
| 1010 | |
| 1011 #undef EQUAL_VAL | |
| 1012 | |
| 1013 unlink(TESTFILE); | |
| 1014 printf("success: utimes\n"); | |
| 1015 return true; | |
| 1016 } | |
| 1017 | |
| 1018 struct torture_context; | |
| 1019 bool torture_local_replace(struct torture_context *ctx) | |
| 1020 { | |
| 1021 bool ret = true; | |
| 1022 ret &= test_ftruncate(); | |
| 1023 ret &= test_strlcpy(); | |
| 1024 ret &= test_strlcat(); | |
| 1025 ret &= test_mktime(); | |
| 1026 ret &= test_initgroups(); | |
| 1027 ret &= test_memmove(); | |
| 1028 ret &= test_strdup(); | |
| 1029 ret &= test_setlinebuf(); | |
| 1030 ret &= test_vsyslog(); | |
| 1031 ret &= test_timegm(); | |
| 1032 ret &= test_setenv(); | |
| 1033 ret &= test_strndup(); | |
| 1034 ret &= test_strnlen(); | |
| 1035 ret &= test_waitpid(); | |
| 1036 ret &= test_seteuid(); | |
| 1037 ret &= test_setegid(); | |
| 1038 ret &= test_asprintf(); | |
| 1039 ret &= test_snprintf(); | |
| 1040 ret &= test_vasprintf(); | |
| 1041 ret &= test_vsnprintf(); | |
| 1042 ret &= test_opendir(); | |
| 1043 ret &= test_readdir(); | |
| 1044 ret &= test_telldir(); | |
| 1045 ret &= test_seekdir(); | |
| 1046 ret &= test_dlopen(); | |
| 1047 ret &= test_chroot(); | |
| 1048 ret &= test_bzero(); | |
| 1049 ret &= test_strerror(); | |
| 1050 ret &= test_errno(); | |
| 1051 ret &= test_mkdtemp(); | |
| 1052 ret &= test_mkstemp(); | |
| 1053 ret &= test_pread(); | |
| 1054 ret &= test_pwrite(); | |
| 1055 ret &= test_getpass(); | |
| 1056 ret &= test_inet_ntoa(); | |
| 1057 ret &= test_strtoll(); | |
| 1058 ret &= test_strtoull(); | |
| 1059 ret &= test_va_copy(); | |
| 1060 ret &= test_FUNCTION(); | |
| 1061 ret &= test_MIN(); | |
| 1062 ret &= test_MAX(); | |
| 1063 ret &= test_socketpair(); | |
| 1064 ret &= test_strptime(); | |
| 1065 ret &= test_getifaddrs(); | |
| 1066 ret &= test_utime(); | |
| 1067 ret &= test_utimes(); | |
| 1068 | |
| 1069 return ret; | |
| 1070 } | |
| OLD | NEW |