1 /* source: compat.h */ 2 /* Copyright Gerhard Rieger and contributors (see file CHANGES) */ 3 /* Published under the GNU General Public License V.2, see file COPYING */ 4 5 #ifndef __compat_h_included 6 #define __compat_h_included 1 7 8 #if !HAVE_DECL_ENVIRON && HAVE_VAR_ENVIRON 9 extern char **environ; 10 #endif 11 12 /*****************************************************************************/ 13 /* I dont like this system dependent part, but it would be quite a challenge 14 for configure */ 15 16 /* define if the following does not work: 17 socket() 18 connect() -> Connection refused 19 connect() -> ok 20 instead, it needs close() and socket() between the two connect() attmpts: */ 21 #if __FreeBSD__ || __APPLE__ || _AIX || __hpux__ || __osf__ || __DragonFly__ 22 # undef SOCKET_CAN_RECOVER 23 #else 24 # define SOCKET_CAN_RECOVER 1 25 #endif 26 27 /* define if stat() says that pipes are sockets */ 28 #if __APPLE__ 29 # define PIPE_STATES_SOCKET 1 30 #else 31 # undef PIPE_STATES_SOCKET 32 #endif 33 34 /*****************************************************************************/ 35 36 /* substitute some features that might be missing on some platforms */ 37 38 #if !HAVE_TYPE_SIG_ATOMIC_T 39 typedef int sig_atomic_t; 40 #endif 41 42 #ifndef SHUT_RD 43 # define SHUT_RD 0 44 #endif 45 #ifndef SHUT_WR 46 # define SHUT_WR 1 47 #endif 48 #ifndef SHUT_RDWR 49 # define SHUT_RDWR 2 50 #endif 51 52 #ifndef MIN 53 # define MIN(x,y) ((x)<=(y)?(x):(y)) 54 #endif 55 56 #ifndef MAX 57 # define MAX(x,y) ((x)>=(y)?(x):(y)) 58 #endif 59 60 /* O_ASYNC: Linux 2.2.10 */ 61 #if !defined(O_ASYNC) && defined(FASYNC) 62 # define O_ASYNC FASYNC 63 #endif 64 65 /* NGROUPS not defined on Solaris */ 66 #if !defined(NGROUPS) && defined(NGROUPS_MAX) 67 # define NGROUPS NGROUPS_MAX 68 #endif 69 70 /* UNIX_PATH_MAX: AIX 4.3.3 */ 71 #ifndef UNIX_PATH_MAX 72 # define UNIX_PATH_MAX 104 /*! why 104? Linux: 108 ! */ 73 #endif 74 75 76 /* SOL_IP: AIX 4.3.3 */ 77 #ifndef SOL_IP 78 # define SOL_IP 0 79 #endif 80 81 /* SOL_TCP: AIX 4.3.3 */ 82 #ifndef SOL_TCP 83 # ifdef IPPROTO_TCP 84 # define SOL_TCP IPPROTO_TCP 85 # endif 86 #endif 87 88 /* POSIX.1 doesn't seem to know sockets */ 89 #ifndef S_ISSOCK 90 # define S_ISSOCK(fmode) 0 91 #endif 92 93 #if defined(IPPROTO_IPV6) && !defined(SOL_IPV6) 94 # define SOL_IPV6 IPPROTO_IPV6 95 #endif 96 97 #define F_uint8_t "%hu" 98 #define F_int8_t "%hd" 99 100 #ifndef F_uint16_t 101 # if HAVE_BASIC_UINT16_T==0 102 # define F_uint16_t "%hu" 103 # elif HAVE_BASIC_UINT16_T==2 104 # define F_uint16_t "%hu" 105 # elif HAVE_BASIC_UINT16_T==4 106 # define F_uint16_t "%u" 107 # elif HAVE_BASIC_UINT16_T==6 108 # define F_uint16_t "%lu" 109 # else 110 # error "HAVE_BASIC_UINT16_T is out of range:" HAVE_BASIC_UINT16_T 111 # endif 112 #endif 113 114 #ifndef F_uint32_t 115 # if HAVE_BASIC_UINT32_T==0 116 # define F_uint32_t "%hu" 117 # elif HAVE_BASIC_UINT32_T==2 118 # define F_uint32_t "%hu" 119 # elif HAVE_BASIC_UINT32_T==4 120 # define F_uint32_t "%u" 121 # elif HAVE_BASIC_UINT32_T==6 122 # define F_uint32_t "%lu" 123 # else 124 # error "HAVE_BASIC_UINT32_T is out of range:" HAVE_BASIC_UINT32_T 125 # endif 126 #endif 127 128 #ifndef F_uint64_t 129 # if HAVE_BASIC_UINT64_T==0 130 # define F_uint64_t "%hu" 131 # elif HAVE_BASIC_UINT64_T==2 132 # define F_uint64_t "%hu" 133 # elif HAVE_BASIC_UINT64_T==4 134 # define F_uint64_t "%u" 135 # elif HAVE_BASIC_UINT64_T==6 136 # define F_uint64_t "%lu" 137 # elif HAVE_BASIC_UINT64_T==8 138 # define F_uint64_t "%llu" 139 # else 140 # error "HAVE_BASIC_UINT64_T is out of range:" HAVE_BASIC_UINT64_T 141 # endif 142 #endif 143 144 #ifndef F_int16_t 145 # if HAVE_BASIC_INT16_T==0 146 # define F_int16_t "%hd" 147 # elif HAVE_BASIC_INT16_T==1 148 # define F_int16_t "%hd" 149 # elif HAVE_BASIC_INT16_T==3 150 # define F_int16_t "%d" 151 # elif HAVE_BASIC_INT16_T==5 152 # define F_int16_t "%ld" 153 # else 154 # error "HAVE_BASIC_INT16_T is out of range:" HAVE_BASIC_INT16_T 155 # endif 156 #endif 157 158 #ifndef F_int32_t 159 # if HAVE_BASIC_INT32_T==0 160 # define F_int32_t "%hd" 161 # elif HAVE_BASIC_INT32_T==1 162 # define F_int32_t "%hd" 163 # elif HAVE_BASIC_INT32_T==3 164 # define F_int32_t "%d" 165 # elif HAVE_BASIC_INT32_T==5 166 # define F_int32_t "%ld" 167 # else 168 # error "HAVE_BASIC_INT32_T is out of range:" HAVE_BASIC_INT32_T 169 # endif 170 #endif 171 172 #ifndef F_int64_t 173 # if HAVE_BASIC_INT64_T==0 174 # define F_int64_t "%hd" 175 # elif HAVE_BASIC_INT64_T==1 176 # define F_int64_t "%hd" 177 # elif HAVE_BASIC_INT64_T==3 178 # define F_int64_t "%d" 179 # elif HAVE_BASIC_INT64_T==5 180 # define F_int64_t "%ld" 181 # elif HAVE_BASIC_INT64_T==7 182 # define F_int64_t "%lld" 183 # else 184 # error "HAVE_BASIC_INT64_T is out of range:" HAVE_BASIC_INT64_T 185 # endif 186 #endif 187 188 /* all unsigned */ 189 #if !defined(HAVE_BASIC_SIZE_T) || !HAVE_BASIC_SIZE_T 190 # undef HAVE_BASIC_SIZE_T 191 # define HAVE_BASIC_SIZE_T 6 192 #endif 193 #if HAVE_BASIC_SIZE_T==2 194 # define SIZET_MAX USHRT_MAX 195 # define SSIZET_MIN SHRT_MIN 196 # define SSIZET_MAX SHRT_MAX 197 # define F_Zd "%hd" 198 # define F_Zu "%hu" 199 #elif HAVE_BASIC_SIZE_T==4 200 # define SIZET_MAX UINT_MAX 201 # define SSIZET_MIN INT_MIN 202 # define SSIZET_MAX INT_MAX 203 # define F_Zd "%""d" 204 # define F_Zu "%u" 205 #elif HAVE_BASIC_SIZE_T==6 206 # define SIZET_MAX ULONG_MAX 207 # define SSIZET_MIN LONG_MIN 208 # define SSIZET_MAX LONG_MAX 209 # define F_Zd "%ld" 210 # define F_Zu "%lu" 211 #elif HAVE_BASIC_SIZE_T==8 212 # define SIZET_MAX ULLONG_MAX 213 # define SSIZET_MIN LLONG_MIN 214 # define SSIZET_MAX LLONG_MAX 215 # define F_Zd "%Ld" 216 # define F_Zu "%Lu" 217 #else 218 # error "HAVE_BASIC_SIZE_T is out of range:" HAVE_BASIC_SIZE_T 219 #endif 220 #if HAVE_FORMAT_Z 221 # undef F_Zd 222 # undef F_Zu 223 # define F_Zd "%Zd" 224 # define F_Zu "%Zu" 225 #endif 226 227 228 /* mode_t is always unsigned; default: unsigned int */ 229 #if !defined(HAVE_BASIC_MODE_T) || !HAVE_BASIC_MODE_T 230 # undef HAVE_BASIC_MODE_T 231 # define HAVE_BASIC_MODE_T 4 232 #endif 233 #ifndef F_mode 234 # if HAVE_BASIC_MODE_T==1 || HAVE_BASIC_MODE_T==2 235 #define F_mode "0%03ho" 236 # elif HAVE_BASIC_MODE_T==3 || HAVE_BASIC_MODE_T==4 237 #define F_mode "0%03o" 238 # elif HAVE_BASIC_MODE_T==5 || HAVE_BASIC_MODE_T==6 239 #define F_mode "0%03lo" 240 # else 241 #error "HAVE_BASIC_MODE_T is out of range:" HAVE_BASIC_MODE_T 242 # endif 243 #endif 244 245 246 /* default: unsigned int */ 247 #if !defined(HAVE_BASIC_PID_T) || !HAVE_BASIC_PID_T 248 # undef HAVE_BASIC_PID_T 249 # define HAVE_BASIC_PID_T 4 250 #endif 251 #ifndef F_pid 252 # if HAVE_BASIC_PID_T==1 253 #define F_pid "%hd" 254 # elif HAVE_BASIC_PID_T==2 255 #define F_pid "%hu" 256 # elif HAVE_BASIC_PID_T==3 257 #define F_pid "%""d" 258 # elif HAVE_BASIC_PID_T==4 259 #define F_pid "%u" 260 # elif HAVE_BASIC_PID_T==5 261 #define F_pid "%ld" 262 # elif HAVE_BASIC_PID_T==6 263 #define F_pid "%lu" 264 # else 265 #error "HAVE_BASIC_PID_T is out of range:" HAVE_BASIC_PID_T 266 # endif 267 #endif 268 269 270 /* default: unsigned int */ 271 #if !defined(HAVE_BASIC_UID_T) || !HAVE_BASIC_UID_T 272 # undef HAVE_BASIC_UID_T 273 # define HAVE_BASIC_UID_T 4 274 #endif 275 #ifndef F_uid 276 # if HAVE_BASIC_UID_T==1 277 #define F_uid "%hd" 278 # elif HAVE_BASIC_UID_T==2 279 #define F_uid "%hu" 280 # elif HAVE_BASIC_UID_T==3 281 #define F_uid "%""d" 282 # elif HAVE_BASIC_UID_T==4 283 #define F_uid "%u" 284 # elif HAVE_BASIC_UID_T==5 285 #define F_uid "%ld" 286 # elif HAVE_BASIC_UID_T==6 287 #define F_uid "%lu" 288 # else 289 #error "HAVE_BASIC_UID_T is out of range:" HAVE_BASIC_UID_T 290 # endif 291 #endif 292 293 294 /* default: unsigned int */ 295 #if !defined(HAVE_BASIC_GID_T) || !HAVE_BASIC_GID_T 296 # undef HAVE_BASIC_GID_T 297 # define HAVE_BASIC_GID_T 4 298 #endif 299 #ifndef F_gid 300 # if HAVE_BASIC_GID_T==1 301 #define F_gid "%hd" 302 # elif HAVE_BASIC_GID_T==2 303 #define F_gid "%hu" 304 # elif HAVE_BASIC_GID_T==3 305 #define F_gid "%""d" 306 # elif HAVE_BASIC_GID_T==4 307 #define F_gid "%u" 308 # elif HAVE_BASIC_GID_T==5 309 #define F_gid "%ld" 310 # elif HAVE_BASIC_GID_T==6 311 #define F_gid "%lu" 312 # else 313 #error "HAVE_BASIC_GID_T is out of range:" HAVE_BASIC_GID_T 314 # endif 315 #endif 316 317 318 /* all signed; default: long */ 319 #if !defined(HAVE_BASIC_TIME_T) || !HAVE_BASIC_TIME_T 320 # undef HAVE_BASIC_TIME_T 321 # define HAVE_BASIC_TIME_T 5 322 #endif 323 #ifndef F_time 324 # if HAVE_BASIC_TIME_T==1 325 #define F_time "%hd" 326 # elif HAVE_BASIC_TIME_T==2 327 #define F_time "%hu" 328 # elif HAVE_BASIC_TIME_T==3 329 #define F_time "%""d" 330 # elif HAVE_BASIC_TIME_T==4 331 #define F_time "%u" 332 # elif HAVE_BASIC_TIME_T==5 333 #define F_time "%ld" 334 # elif HAVE_BASIC_TIME_T==6 335 #define F_time "%lu" 336 # elif HAVE_BASIC_TIME_T==7 337 #define F_time "%Ld" 338 # elif HAVE_BASIC_TIME_T==8 339 #define F_time "%Lu" 340 # else 341 #error "HAVE_BASIC_TIME_T is out of range:" HAVE_BASIC_TIME_T 342 # endif 343 #endif 344 345 346 /* default: int */ 347 #if !defined(HAVE_BASIC_SOCKLEN_T) || !HAVE_BASIC_SOCKLEN_T 348 # undef HAVE_BASIC_SOCKLEN_T 349 # define HAVE_BASIC_SOCKLEN_T 3 350 #endif 351 #ifndef F_socklen 352 # if HAVE_BASIC_SOCKLEN_T==1 353 #define F_socklen "%hd" 354 # elif HAVE_BASIC_SOCKLEN_T==2 355 #define F_socklen "%hu" 356 # elif HAVE_BASIC_SOCKLEN_T==3 357 #define F_socklen "%""d" 358 # elif HAVE_BASIC_SOCKLEN_T==4 359 #define F_socklen "%u" 360 # elif HAVE_BASIC_SOCKLEN_T==5 361 #define F_socklen "%ld" 362 # elif HAVE_BASIC_SOCKLEN_T==6 363 #define F_socklen "%lu" 364 # elif HAVE_BASIC_SOCKLEN_T==7 365 #define F_socklen "%Ld" 366 # elif HAVE_BASIC_SOCKLEN_T==8 367 #define F_socklen "%Lu" 368 # else 369 #error "HAVE_BASIC_SOCKLEN_T is out of range:" HAVE_BASIC_SOCKLEN_T 370 # endif 371 #endif 372 373 #if !defined(HAVE_BASIC_OFF_T) || !HAVE_BASIC_OFF_T 374 # undef HAVE_BASIC_OFF_T 375 # define HAVE_BASIC_OFF_T 5 /*long*/ 376 #endif 377 #ifndef F_off 378 # if HAVE_BASIC_OFF_T==3 379 # define F_off "%""d" 380 # elif HAVE_BASIC_OFF_T==5 381 # define F_off "%ld" 382 # elif HAVE_BASIC_OFF_T==7 383 # define F_off "%Ld" 384 # else 385 #error "HAVE_BASIC_OFF_T is out of range:" HAVE_BASIC_OFF_T 386 # endif 387 #endif 388 389 /* default: long long */ 390 #if !defined(HAVE_BASIC_OFF64_T) || !HAVE_BASIC_OFF64_T 391 # undef HAVE_BASIC_OFF64_T 392 # define HAVE_BASIC_OFF64_T 7 393 #endif 394 #ifndef F_off64 395 # if HAVE_BASIC_OFF64_T==1 396 #define F_off64 "%hd" 397 # elif HAVE_BASIC_OFF64_T==2 398 #define F_off64 "%hu" 399 # elif HAVE_BASIC_OFF64_T==3 400 #define F_off64 "%""d" 401 # elif HAVE_BASIC_OFF64_T==4 402 #define F_off64 "%u" 403 # elif HAVE_BASIC_OFF64_T==5 404 #define F_off64 "%ld" 405 # elif HAVE_BASIC_OFF64_T==6 406 #define F_off64 "%lu" 407 # elif HAVE_BASIC_OFF64_T==7 408 #define F_off64 "%Ld" 409 # elif HAVE_BASIC_OFF64_T==8 410 #define F_off64 "%Lu" 411 # else 412 #error "HAVE_BASIC_OFF64_T is out of range:" HAVE_BASIC_OFF64_T 413 # endif 414 #endif 415 416 417 /* all unsigned; default: unsigned long */ 418 #if !defined(HAVE_BASIC_DEV_T) || !HAVE_BASIC_DEV_T 419 # undef HAVE_BASIC_DEV_T 420 # define HAVE_BASIC_DEV_T 6 421 #endif 422 #ifndef F_dev 423 # if HAVE_BASIC_DEV_T==1 424 #define F_dev "%hd" 425 # elif HAVE_BASIC_DEV_T==2 426 #define F_dev "%hu" 427 # elif HAVE_BASIC_DEV_T==3 428 #define F_dev "%""d" 429 # elif HAVE_BASIC_DEV_T==4 430 #define F_dev "%u" 431 # elif HAVE_BASIC_DEV_T==5 432 #define F_dev "%ld" 433 # elif HAVE_BASIC_DEV_T==6 434 #define F_dev "%lu" 435 # elif HAVE_BASIC_DEV_T==7 436 #define F_dev "%Ld" 437 # elif HAVE_BASIC_DEV_T==8 438 #define F_dev "%Lu" 439 # else 440 #error "HAVE_BASIC_DEV_T is out of range:" HAVE_BASIC_DEV_T 441 # endif 442 #endif 443 444 445 #if _WITH_TERMIOS 446 #if !defined(HAVE_BASIC_SPEED_T) || !HAVE_BASIC_SPEED_T 447 # undef HAVE_BASIC_SPEED_T 448 # define HAVE_BASIC_SPEED_T 4 449 #endif 450 #ifndef F_speed 451 # if HAVE_BASIC_SPEED_T==1 452 #define F_speed "%hd" 453 # elif HAVE_BASIC_SPEED_T==2 454 #define F_speed "%hu" 455 # elif HAVE_BASIC_SPEED_T==3 456 #define F_speed "%""d" 457 # elif HAVE_BASIC_SPEED_T==4 458 #define F_speed "%u" 459 # elif HAVE_BASIC_SPEED_T==5 460 #define F_speed "%ld" 461 # elif HAVE_BASIC_SPEED_T==6 462 #define F_speed "%lu" 463 # elif HAVE_BASIC_SPEED_T==7 464 #define F_speed "%Ld" 465 # elif HAVE_BASIC_SPEED_T==8 466 #define F_speed "%Lu" 467 # else 468 #error "HAVE_BASIC_SPEED_T is out of range:" HAVE_BASIC_SPEED_T 469 # endif 470 #endif 471 #endif /* _WITH_TERMIOS */ 472 473 /* all unsigned; default; unsigned long */ 474 #if !defined(HAVE_TYPEOF_ST_INO) || !HAVE_TYPEOF_ST_INO 475 # undef HAVE_TYPEOF_ST_INO 476 # define HAVE_TYPEOF_ST_INO 6 477 #endif 478 #ifndef F_st_ino 479 # if HAVE_TYPEOF_ST_INO==1 480 #define F_st_ino "%hd" 481 # elif HAVE_TYPEOF_ST_INO==2 482 #define F_st_ino "%hu" 483 # elif HAVE_TYPEOF_ST_INO==3 484 #define F_st_ino "%""d" 485 # elif HAVE_TYPEOF_ST_INO==4 486 #define F_st_ino "%u" 487 # elif HAVE_TYPEOF_ST_INO==5 488 #define F_st_ino "%ld" 489 # elif HAVE_TYPEOF_ST_INO==6 490 #define F_st_ino "%lu" 491 # elif HAVE_TYPEOF_ST_INO==7 /* Cygwin 1.5 */ 492 #define F_st_ino "%Ld" 493 # elif HAVE_TYPEOF_ST_INO==8 494 #define F_st_ino "%Lu" 495 # else 496 #error "HAVE_TYPEOF_ST_INO is out of range:" HAVE_TYPEOF_ST_INO 497 # endif 498 #endif 499 500 /* all unsigned; default; unsigned long long */ 501 #if !defined(HAVE_TYPEOF_ST64_INO) || !HAVE_TYPEOF_ST64_INO 502 # undef HAVE_TYPEOF_ST64_INO 503 # define HAVE_TYPEOF_ST64_INO 8 504 #endif 505 #ifndef F_st64_ino 506 # if HAVE_TYPEOF_ST64_INO==1 507 #define F_st64_ino "%hd" 508 # elif HAVE_TYPEOF_ST64_INO==2 509 #define F_st64_ino "%hu" 510 # elif HAVE_TYPEOF_ST64_INO==3 511 #define F_st64_ino "%""d" 512 # elif HAVE_TYPEOF_ST64_INO==4 513 #define F_st64_ino "%u" 514 # elif HAVE_TYPEOF_ST64_INO==5 515 #define F_st64_ino "%ld" 516 # elif HAVE_TYPEOF_ST64_INO==6 517 #define F_st64_ino "%lu" 518 # elif HAVE_TYPEOF_ST64_INO==7 519 #define F_st64_ino "%Ld" 520 # elif HAVE_TYPEOF_ST64_INO==8 521 #define F_st64_ino "%Lu" 522 # else 523 #error "HAVE_TYPEOF_ST64_INO is out of range:" HAVE_TYPEOF_ST64_INO 524 # endif 525 #endif 526 527 /* default: unsigned short */ 528 #if !defined(HAVE_TYPEOF_ST_NLINK) || !HAVE_TYPEOF_ST_NLINK 529 # undef HAVE_TYPEOF_ST_NLINK 530 # define HAVE_TYPEOF_ST_NLINK 2 531 #endif 532 #ifndef F_st_nlink 533 # if HAVE_TYPEOF_ST_NLINK==1 534 #define F_st_nlink "%hd" 535 # elif HAVE_TYPEOF_ST_NLINK==2 536 #define F_st_nlink "%hu" 537 # elif HAVE_TYPEOF_ST_NLINK==3 538 #define F_st_nlink "%""d" 539 # elif HAVE_TYPEOF_ST_NLINK==4 540 #define F_st_nlink "%u" 541 # elif HAVE_TYPEOF_ST_NLINK==5 542 #define F_st_nlink "%ld" 543 # elif HAVE_TYPEOF_ST_NLINK==6 544 #define F_st_nlink "%lu" 545 # elif HAVE_TYPEOF_ST_NLINK==7 546 #define F_st_nlink "%Ld" 547 # elif HAVE_TYPEOF_ST_NLINK==8 548 #define F_st_nlink "%Lu" 549 # else 550 #error "HAVE_TYPEOF_ST_NLINK is out of range:" HAVE_TYPEOF_ST_NLINK 551 # endif 552 #endif 553 554 /* all signed; default: long */ 555 #if !defined(HAVE_TYPEOF_ST_SIZE) || !HAVE_TYPEOF_ST_SIZE 556 # undef HAVE_TYPEOF_ST_SIZE 557 # define HAVE_TYPEOF_ST_SIZE 5 558 #endif 559 #ifndef F_st_size 560 # if HAVE_TYPEOF_ST_SIZE==1 561 #define F_st_size "%hd" 562 # elif HAVE_TYPEOF_ST_SIZE==2 563 #define F_st_size "%hu" 564 # elif HAVE_TYPEOF_ST_SIZE==3 565 #define F_st_size "%""d" 566 # elif HAVE_TYPEOF_ST_SIZE==4 567 #define F_st_size "%u" 568 # elif HAVE_TYPEOF_ST_SIZE==5 569 #define F_st_size "%ld" 570 # elif HAVE_TYPEOF_ST_SIZE==6 571 #define F_st_size "%lu" 572 # elif HAVE_TYPEOF_ST_SIZE==7 573 #define F_st_size "%Ld" 574 # elif HAVE_TYPEOF_ST_SIZE==8 575 #define F_st_size "%Lu" 576 # else 577 #error "HAVE_TYPEOF_ST_SIZE is out of range:" HAVE_TYPEOF_ST_SIZE 578 # endif 579 #endif 580 581 /* all signed; default: long long */ 582 #if !defined(HAVE_TYPEOF_ST64_SIZE) || !HAVE_TYPEOF_ST64_SIZE 583 # undef HAVE_TYPEOF_ST64_SIZE 584 # define HAVE_TYPEOF_ST64_SIZE 7 585 #endif 586 #ifndef F_st64_size 587 # if HAVE_TYPEOF_ST64_SIZE==1 588 #define F_st64_size "%hd" 589 # elif HAVE_TYPEOF_ST64_SIZE==2 590 #define F_st64_size "%hu" 591 # elif HAVE_TYPEOF_ST64_SIZE==3 592 #define F_st64_size "%""d" 593 # elif HAVE_TYPEOF_ST64_SIZE==4 594 #define F_st64_size "%u" 595 # elif HAVE_TYPEOF_ST64_SIZE==5 596 #define F_st64_size "%ld" 597 # elif HAVE_TYPEOF_ST64_SIZE==6 598 #define F_st64_size "%lu" 599 # elif HAVE_TYPEOF_ST64_SIZE==7 600 #define F_st64_size "%Ld" 601 # elif HAVE_TYPEOF_ST64_SIZE==8 602 #define F_st64_size "%Lu" 603 # else 604 #error "HAVE_TYPEOF_ST64_SIZE is out of range:" HAVE_TYPEOF_ST64_SIZE 605 # endif 606 #endif 607 608 /* very different results; default: long */ 609 #if !defined(HAVE_TYPEOF_ST_BLKSIZE) || !HAVE_TYPEOF_ST_BLKSIZE 610 # undef HAVE_TYPEOF_ST_BLKSIZE 611 # define HAVE_TYPEOF_ST_BLKSIZE 5 612 #endif 613 #ifndef F_st_blksize 614 # if HAVE_TYPEOF_ST_BLKSIZE==1 615 #define F_st_blksize "%hd" 616 # elif HAVE_TYPEOF_ST_BLKSIZE==2 617 #define F_st_blksize "%hu" 618 # elif HAVE_TYPEOF_ST_BLKSIZE==3 619 #define F_st_blksize "%""d" 620 # elif HAVE_TYPEOF_ST_BLKSIZE==4 621 #define F_st_blksize "%u" 622 # elif HAVE_TYPEOF_ST_BLKSIZE==5 623 #define F_st_blksize "%ld" 624 # elif HAVE_TYPEOF_ST_BLKSIZE==6 625 #define F_st_blksize "%lu" 626 # elif HAVE_TYPEOF_ST_BLKSIZE==7 627 #define F_st_blksize "%Ld" 628 # elif HAVE_TYPEOF_ST_BLKSIZE==8 629 #define F_st_blksize "%Lu" 630 # else 631 #error "HAVE_TYPEOF_ST_BLKSIZE is out of range:" HAVE_TYPEOF_ST_BLKSIZE 632 # endif 633 #endif 634 635 /* default: long */ 636 #if !defined(HAVE_TYPEOF_ST_BLOCKS) || !HAVE_TYPEOF_ST_BLOCKS 637 # undef HAVE_TYPEOF_ST_BLOCKS 638 # define HAVE_TYPEOF_ST_BLOCKS 5 639 #endif 640 #ifndef F_st_blocks 641 # if HAVE_TYPEOF_ST_BLOCKS==1 642 #define F_st_blocks "%hd" 643 # elif HAVE_TYPEOF_ST_BLOCKS==2 644 #define F_st_blocks "%hu" 645 # elif HAVE_TYPEOF_ST_BLOCKS==3 646 #define F_st_blocks "%""d" 647 # elif HAVE_TYPEOF_ST_BLOCKS==4 648 #define F_st_blocks "%u" 649 # elif HAVE_TYPEOF_ST_BLOCKS==5 650 #define F_st_blocks "%ld" 651 # elif HAVE_TYPEOF_ST_BLOCKS==6 652 #define F_st_blocks "%lu" 653 # elif HAVE_TYPEOF_ST_BLOCKS==7 654 #define F_st_blocks "%Ld" 655 # elif HAVE_TYPEOF_ST_BLOCKS==8 656 #define F_st_blocks "%Lu" 657 # else 658 #error "HAVE_TYPEOF_ST_BLOCKS is out of range:" HAVE_TYPEOF_ST_BLOCKS 659 # endif 660 #endif 661 662 /* default: long long */ 663 #if !defined(HAVE_TYPEOF_ST64_BLOCKS) || !HAVE_TYPEOF_ST64_BLOCKS 664 # undef HAVE_TYPEOF_ST64_BLOCKS 665 # define HAVE_TYPEOF_ST64_BLOCKS 7 666 #endif 667 #ifndef F_st64_blocks 668 # if HAVE_TYPEOF_ST64_BLOCKS==1 669 #define F_st64_blocks "%hd" 670 # elif HAVE_TYPEOF_ST64_BLOCKS==2 671 #define F_st64_blocks "%hu" 672 # elif HAVE_TYPEOF_ST64_BLOCKS==3 673 #define F_st64_blocks "%""d" 674 # elif HAVE_TYPEOF_ST64_BLOCKS==4 675 #define F_st64_blocks "%u" 676 # elif HAVE_TYPEOF_ST64_BLOCKS==5 677 #define F_st64_blocks "%ld" 678 # elif HAVE_TYPEOF_ST64_BLOCKS==6 679 #define F_st64_blocks "%lu" 680 # elif HAVE_TYPEOF_ST64_BLOCKS==7 681 #define F_st64_blocks "%Ld" 682 # elif HAVE_TYPEOF_ST64_BLOCKS==8 683 #define F_st64_blocks "%Lu" 684 # else 685 #error "HAVE_TYPEOF_ST64_BLOCKS is out of range:" HAVE_TYPEOF_ST64_BLOCKS 686 # endif 687 #endif 688 689 690 /* at least for Linux */ 691 #define F_tv_sec "%ld" 692 693 /* default: long */ 694 #if !defined(HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC) || !HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC 695 # undef HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC 696 # define HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC 5 697 #endif 698 #ifndef F_tv_usec 699 # if HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC==1 700 #define F_tv_usec "%06hd" 701 # elif HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC==2 702 #define F_tv_usec "%06hu" 703 # elif HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC==3 704 #define F_tv_usec "%06d" 705 # elif HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC==4 706 #define F_tv_usec "%06u" 707 # elif HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC==5 708 #define F_tv_usec "%06ld" 709 # elif HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC==6 710 #define F_tv_usec "%06lu" 711 # elif HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC==7 712 #define F_tv_usec "%06Ld" 713 # elif HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC==8 714 #define F_tv_usec "%06Lu" 715 # else 716 #error "HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC is out of range:" HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC 717 # endif 718 #endif 719 720 /* default: long */ 721 #if !defined(HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC) || !HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC 722 # undef HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC 723 # define HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC 5 724 #endif 725 #ifndef F_tv_nsec 726 # if HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC==1 727 #define F_tv_nsec "%09hd" 728 # elif HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC==2 729 #define F_tv_nsec "%09hu" 730 # elif HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC==3 731 #define F_tv_nsec "%09d" 732 # elif HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC==4 733 #define F_tv_nsec "%09u" 734 # elif HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC==5 735 #define F_tv_nsec "%09ld" 736 # elif HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC==6 737 #define F_tv_nsec "%09lu" 738 # elif HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC==7 739 #define F_tv_nsec "%09Ld" 740 # elif HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC==8 741 #define F_tv_nsec "%09Lu" 742 # else 743 #error "HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC is out of range:" HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC 744 # endif 745 #endif 746 747 /* default: long */ 748 #if !defined(HAVE_TYPEOF_RLIM_MAX) || !HAVE_TYPEOF_RLIM_MAX 749 # undef HAVE_TYPEOF_RLIM_MAX 750 # define HAVE_TYPEOF_RLIM_MAX 5 751 #endif 752 #ifndef F_rlim_max 753 # if HAVE_TYPEOF_RLIM_MAX==1 754 #define F_rlim_max "hd" 755 # elif HAVE_TYPEOF_RLIM_MAX==2 756 #define F_rlim_max "hu" 757 # elif HAVE_TYPEOF_RLIM_MAX==3 758 #define F_rlim_max "d" 759 # elif HAVE_TYPEOF_RLIM_MAX==4 760 #define F_rlim_max "u" 761 # elif HAVE_TYPEOF_RLIM_MAX==5 762 #define F_rlim_max "ld" 763 # elif HAVE_TYPEOF_RLIM_MAX==6 764 #define F_rlim_max "lu" 765 # elif HAVE_TYPEOF_RLIM_MAX==7 766 #define F_rlim_max "Ld" 767 # elif HAVE_TYPEOF_RLIM_MAX==8 768 #define F_rlim_max "Lu" 769 # else 770 #error "HAVE_TYPEOF_RLIM_MAX is out of range:" HAVE_TYPEOF_RLIM_MAX 771 # endif 772 #endif 773 774 /* sigset_t printing - not an exact solution yet */ 775 #define F_sigset "0x%06lx" 776 typedef unsigned long T_sigset; 777 778 /* default: socklen_t */ 779 #if !defined(HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN) || !HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN 780 # undef HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN 781 # define HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN HAVE_BASIC_SOCKLEN_T 782 #endif 783 #ifndef F_cmsg_len 784 # if HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN==1 785 #define F_cmsg_len "%""hd" 786 # elif HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN==2 787 #define F_cmsg_len "%""hu" 788 # elif HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN==3 789 #define F_cmsg_len "%""d" 790 # elif HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN==4 791 #define F_cmsg_len "%""u" 792 # elif HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN==5 793 #define F_cmsg_len "%""ld" 794 # elif HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN==6 795 #define F_cmsg_len "%""lu" 796 # elif HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN==7 797 #define F_cmsg_len "%""Ld" 798 # elif HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN==8 799 #define F_cmsg_len "%""Lu" 800 # else 801 #error "HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN is out of range:" HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN 802 # endif 803 #endif 804 805 /* basic type of struct timeval tv_usec */ 806 #ifndef F_tv_usec 807 # if TYPEOF_STRUCT_TIMEVAL_TV_USEC==1 808 # define F_tv_usec "%hu" 809 # elif TYPEOF_STRUCT_TIMEVAL_TV_USEC==3 810 # define F_tv_usec "%u" 811 # elif TYPEOF_STRUCT_TIMEVAL_TV_USEC==5 812 # define F_tv_usec "%lu" 813 # endif 814 #endif 815 816 /* Cygwin 1.3.22 has the prototypes, but not the type... */ 817 #ifndef HAVE_TYPE_STAT64 818 # undef HAVE_STAT64 819 # undef HAVE_FSTAT64 820 # undef HAVE_LSTAT64 821 #endif 822 #ifndef HAVE_TYPE_OFF64 823 # undef HAVE_LSEEK64 824 # undef HAVE_FTRUNCATE64 825 #endif 826 827 #if !defined(NETDB_INTERNAL) && defined(h_NETDB_INTERNAL) 828 # define NETDB_INTERNAL h_NETDB_INTERNAL 829 #endif 830 831 #ifndef INET_ADDRSTRLEN 832 # define INET_ADDRSTRLEN sizeof(struct sockaddr_in) 833 #endif 834 835 #if !HAVE_PROTOTYPE_HSTRERROR 836 /* with MacOSX this is char * */ 837 extern const char *hstrerror(int); 838 #endif 839 840 #if !HAVE_PROTOTYPE_LIB_strndup 841 extern char *strndup (const char *s, size_t n); 842 #endif 843 844 #endif /* !defined(__compat_h_included) */ 845