1 1.127 christos /* $NetBSD: compat_defs.h,v 1.127 2025/09/18 20:24:48 christos Exp $ */ 2 1.1 thorpej 3 1.1 thorpej #ifndef __NETBSD_COMPAT_DEFS_H__ 4 1.1 thorpej #define __NETBSD_COMPAT_DEFS_H__ 5 1.1 thorpej 6 1.96 apb /* 7 1.96 apb * On NetBSD, ensure that _NETBSD_SOURCE does not get defined, so that 8 1.96 apb * accidental attempts to use NetBSD-specific features instead of more 9 1.96 apb * portable features is likely to be noticed when the tools are built 10 1.96 apb * on NetBSD. Define enough other feature test macros to expose the 11 1.96 apb * features we need. 12 1.96 apb */ 13 1.96 apb #ifdef __NetBSD__ 14 1.96 apb #define _ISOC99_SOURCE 15 1.96 apb #define _POSIX_SOURCE 1 16 1.96 apb #define _POSIX_C_SOURCE 200112L 17 1.96 apb #define _XOPEN_SOURCE 600 18 1.96 apb #endif /* __NetBSD__ */ 19 1.4 tv 20 1.63 christos /* 21 1.63 christos * Linux: <features.h> turns on _POSIX_SOURCE by default, even though the 22 1.96 apb * program (not the OS) should do that. Preload <features.h> and 23 1.96 apb * then override some of the feature test macros. 24 1.63 christos */ 25 1.63 christos 26 1.63 christos #if defined(__linux__) && HAVE_FEATURES_H 27 1.63 christos #include <features.h> 28 1.4 tv #undef _POSIX_SOURCE 29 1.4 tv #undef _POSIX_C_SOURCE 30 1.96 apb #define __USE_ISOC99 1 31 1.96 apb #endif /* __linux__ && HAVE_FEATURES_H */ 32 1.4 tv 33 1.111 christos /* 34 1.111 christos * Type substitutes. 35 1.111 christos * These are controlled via HAVE_TYPE protections and some of them are needed 36 1.111 christos * in other header files (in the build tree not in the host). This is because 37 1.111 christos * we are mixing the header files (which don't need them) with extensions 38 1.111 christos * such as the Solaris headers which depend on types defined by the native 39 1.111 christos * system headers, and might be missing in the build host. 40 1.111 christos */ 41 1.111 christos 42 1.111 christos #if !HAVE_ID_T 43 1.111 christos typedef unsigned int id_t; 44 1.111 christos #endif 45 1.111 christos 46 1.111 christos #if !HAVE_SOCKLEN_T 47 1.111 christos /* 48 1.111 christos * This is defined as int for compatibility with legacy systems (and not 49 1.111 christos * unsigned int), since universally it was int in most systems that did not 50 1.111 christos * define it. 51 1.111 christos */ 52 1.111 christos typedef int socklen_t; 53 1.111 christos #endif 54 1.111 christos 55 1.115 kamil #if !HAVE_ENUM_UIO_RW 56 1.115 kamil enum uio_rw { UIO_READ, UIO_WRITE }; 57 1.115 kamil #endif 58 1.115 kamil 59 1.115 kamil #if !HAVE_ENUM_UIO_SEG 60 1.115 kamil enum uio_seg { 61 1.115 kamil UIO_USERSPACE, /* from user data space */ 62 1.115 kamil UIO_SYSSPACE /* from system space */ 63 1.115 kamil }; 64 1.115 kamil #endif 65 1.115 kamil 66 1.111 christos #if !HAVE_U_LONG 67 1.111 christos typedef unsigned long u_long; 68 1.111 christos #endif 69 1.111 christos 70 1.111 christos #if !HAVE_U_CHAR 71 1.111 christos typedef unsigned char u_char; 72 1.111 christos #endif 73 1.111 christos 74 1.111 christos #if !HAVE_U_INT 75 1.111 christos typedef unsigned int u_int; 76 1.111 christos #endif 77 1.111 christos 78 1.111 christos #if !HAVE_U_SHORT 79 1.111 christos typedef unsigned short u_short; 80 1.111 christos #endif 81 1.111 christos 82 1.116 kamil #if !HAVE_UCHAR_T 83 1.116 kamil typedef unsigned char uchar_t; 84 1.116 kamil #endif 85 1.116 kamil 86 1.116 kamil #if !HAVE_USHORT_T 87 1.116 kamil typedef unsigned short ushort_t; 88 1.116 kamil #endif 89 1.116 kamil 90 1.116 kamil #if !HAVE_UINT_T 91 1.116 kamil typedef unsigned int uint_t; 92 1.116 kamil #endif 93 1.116 kamil 94 1.116 kamil #if !HAVE_ULONG_T 95 1.116 kamil typedef unsigned long ulong_t; 96 1.116 kamil #endif 97 1.116 kamil 98 1.1 thorpej /* System headers needed for (re)definitions below. */ 99 1.1 thorpej 100 1.1 thorpej #include <sys/types.h> 101 1.3 tv #include <sys/mman.h> 102 1.3 tv #include <sys/param.h> 103 1.39 jmc /* time.h needs to be pulled in first at least on netbsd w/o _NETBSD_SOURCE */ 104 1.39 jmc #include <sys/time.h> 105 1.3 tv #include <sys/stat.h> 106 1.1 thorpej #include <errno.h> 107 1.1 thorpej #include <fcntl.h> 108 1.1 thorpej #include <limits.h> 109 1.1 thorpej #include <paths.h> 110 1.106 christos #include <ctype.h> 111 1.3 tv #include <stdarg.h> 112 1.1 thorpej #include <stdio.h> 113 1.3 tv #include <stdlib.h> 114 1.1 thorpej #include <string.h> 115 1.105 christos #if HAVE_ERR_H 116 1.105 christos #include <err.h> 117 1.105 christos #endif 118 1.1 thorpej 119 1.3 tv #if HAVE_SYS_CDEFS_H 120 1.3 tv #include <sys/cdefs.h> 121 1.3 tv #endif 122 1.6 tv #if HAVE_SYS_SYSLIMITS_H 123 1.6 tv #include <sys/syslimits.h> 124 1.6 tv #endif 125 1.3 tv #if HAVE_SYS_SYSMACROS_H 126 1.3 tv /* major(), minor() on SVR4 */ 127 1.3 tv #include <sys/sysmacros.h> 128 1.3 tv #endif 129 1.1 thorpej #if HAVE_INTTYPES_H 130 1.1 thorpej #include <inttypes.h> 131 1.1 thorpej #endif 132 1.1 thorpej #if HAVE_STDDEF_H 133 1.1 thorpej #include <stddef.h> 134 1.1 thorpej #endif 135 1.105 christos #if HAVE_LIBGEN_H 136 1.105 christos #include <libgen.h> 137 1.105 christos #endif 138 1.3 tv 139 1.87 christos #if HAVE_RPC_TYPES_H 140 1.87 christos #include <rpc/types.h> 141 1.87 christos #endif 142 1.87 christos 143 1.115 kamil #if HAVE_SYS_UIO_H 144 1.115 kamil #include <sys/uio.h> 145 1.115 kamil #endif 146 1.115 kamil 147 1.42 jmc #ifdef _NETBSD_SOURCE 148 1.42 jmc #error _NETBSD_SOURCE is *not* to be defined. 149 1.42 jmc #endif 150 1.42 jmc 151 1.45 jmc /* Need this since we can't depend on NetBSD's version to be around */ 152 1.45 jmc #ifdef __UNCONST 153 1.45 jmc #undef __UNCONST 154 1.45 jmc #endif 155 1.45 jmc #define __UNCONST(a) ((void *)(unsigned long)(const void *)(a)) 156 1.100 christos #ifdef __UNVOLATILE 157 1.100 christos #undef __UNVOLATILE 158 1.100 christos #endif 159 1.100 christos #define __UNVOLATILE(a) ((void *)(unsigned long)(volatile void *)(a)) 160 1.100 christos 161 1.45 jmc 162 1.85 joerg #undef __predict_false 163 1.86 joerg #define __predict_false(x) (x) 164 1.85 joerg #undef __predict_true 165 1.86 joerg #define __predict_true(x) (x) 166 1.85 joerg 167 1.3 tv /* We don't include <pwd.h> here, so that "compat_pwd.h" works. */ 168 1.3 tv struct passwd; 169 1.3 tv 170 1.71 dbj /* We don't include <grp.h> either */ 171 1.71 dbj struct group; 172 1.71 dbj 173 1.3 tv /* Assume an ANSI compiler for the host. */ 174 1.3 tv 175 1.3 tv #undef __P 176 1.3 tv #define __P(x) x 177 1.3 tv 178 1.3 tv #ifndef __BEGIN_DECLS 179 1.3 tv #define __BEGIN_DECLS 180 1.3 tv #endif 181 1.3 tv #ifndef __END_DECLS 182 1.3 tv #define __END_DECLS 183 1.3 tv #endif 184 1.3 tv 185 1.98 apb /* Some things in NetBSD <sys/cdefs.h>. */ 186 1.3 tv 187 1.12 bjh21 #ifndef __CONCAT 188 1.12 bjh21 #define __CONCAT(x,y) x ## y 189 1.12 bjh21 #endif 190 1.1 thorpej #if !defined(__attribute__) && !defined(__GNUC__) 191 1.1 thorpej #define __attribute__(x) 192 1.1 thorpej #endif 193 1.34 matt #if !defined(__packed) 194 1.34 matt #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) 195 1.34 matt #define __packed __attribute__((__packed__)) 196 1.72 sketch #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) 197 1.72 sketch #define __packed __attribute__((__packed__)) 198 1.34 matt #else 199 1.34 matt #define __packed error: no __packed for this compiler 200 1.34 matt #endif 201 1.34 matt #endif /* !__packed */ 202 1.3 tv #ifndef __RENAME 203 1.3 tv #define __RENAME(x) 204 1.3 tv #endif 205 1.3 tv #undef __aconst 206 1.3 tv #define __aconst 207 1.3 tv #undef __dead 208 1.3 tv #define __dead 209 1.80 joerg #undef __printflike 210 1.80 joerg #define __printflike(x,y) 211 1.92 joerg #undef __format_arg 212 1.92 joerg #define __format_arg(x) 213 1.17 bjh21 #undef __restrict 214 1.17 bjh21 #define __restrict 215 1.57 christos #undef __unused 216 1.57 christos #define __unused 217 1.77 christos #undef __arraycount 218 1.76 christos #define __arraycount(__x) (sizeof(__x) / sizeof(__x[0])) 219 1.93 apb #undef __USE 220 1.93 apb #define __USE(a) ((void)(a)) 221 1.98 apb #undef __type_min_s 222 1.98 apb #define __type_min_s(t) ((t)((1ULL << (sizeof(t) * NBBY - 1)))) 223 1.98 apb #undef __type_max_s 224 1.98 apb #define __type_max_s(t) ((t)~((1ULL << (sizeof(t) * NBBY - 1)))) 225 1.98 apb #undef __type_min_u 226 1.98 apb #define __type_min_u(t) ((t)0ULL) 227 1.98 apb #undef __type_max_u 228 1.98 apb #define __type_max_u(t) ((t)~0ULL) 229 1.98 apb #undef __type_is_signed 230 1.98 apb #define __type_is_signed(t) (/*LINTED*/__type_min_s(t) + (t)1 < (t)1) 231 1.98 apb #undef __type_min 232 1.98 apb #define __type_min(t) (__type_is_signed(t) ? __type_min_s(t) : __type_min_u(t)) 233 1.98 apb #undef __type_max 234 1.98 apb #define __type_max(t) (__type_is_signed(t) ? __type_max_s(t) : __type_max_u(t)) 235 1.3 tv 236 1.3 tv /* Dirent support. */ 237 1.3 tv 238 1.3 tv #if HAVE_DIRENT_H 239 1.48 tron # if defined(__linux__) && defined(__USE_BSD) 240 1.48 tron # undef __USE_BSD 241 1.48 tron # include <dirent.h> 242 1.48 tron # define __USE_BSD 1 243 1.48 tron # undef d_fileno 244 1.48 tron # else 245 1.48 tron # include <dirent.h> 246 1.52 dyoung # if defined(__DARWIN_UNIX03) 247 1.52 dyoung # undef d_fileno 248 1.52 dyoung # endif 249 1.48 tron # endif 250 1.3 tv # define NAMLEN(dirent) (strlen((dirent)->d_name)) 251 1.3 tv #else 252 1.3 tv # define dirent direct 253 1.3 tv # define NAMLEN(dirent) ((dirent)->d_namlen) 254 1.3 tv # if HAVE_SYS_NDIR_H 255 1.3 tv # include <sys/ndir.h> 256 1.3 tv # endif 257 1.3 tv # if HAVE_SYS_DIR_H 258 1.3 tv # include <sys/dir.h> 259 1.3 tv # endif 260 1.3 tv # if HAVE_NDIR_H 261 1.3 tv # include <ndir.h> 262 1.3 tv # endif 263 1.3 tv #endif 264 1.3 tv 265 1.1 thorpej /* Prototypes for replacement functions. */ 266 1.27 uwe 267 1.105 christos #if !HAVE_DECL_ATOLL 268 1.27 uwe long long int atoll(const char *); 269 1.27 uwe #endif 270 1.1 thorpej 271 1.105 christos #if !HAVE_DECL_ASPRINTF 272 1.3 tv int asprintf(char **, const char *, ...); 273 1.3 tv #endif 274 1.3 tv 275 1.105 christos #if !HAVE_DECL_ASNPRINTF 276 1.3 tv int asnprintf(char **, size_t, const char *, ...); 277 1.3 tv #endif 278 1.3 tv 279 1.105 christos #if !HAVE_DECL_BASENAME 280 1.1 thorpej char *basename(char *); 281 1.1 thorpej #endif 282 1.1 thorpej 283 1.4 tv #if !HAVE_DECL_OPTIND 284 1.4 tv int getopt(int, char *const *, const char *); 285 1.4 tv extern char *optarg; 286 1.4 tv extern int optind, opterr, optopt; 287 1.4 tv #endif 288 1.4 tv 289 1.114 christos #if !HAVE_DECL_GETSUBOPT 290 1.114 christos int getsubopt(char **, char * const *, char **); 291 1.114 christos #endif 292 1.114 christos 293 1.105 christos #if !HAVE_DECL_DIRNAME 294 1.1 thorpej char *dirname(char *); 295 1.1 thorpej #endif 296 1.1 thorpej 297 1.108 christos #if !HAVE_DECL_FPURGE 298 1.109 christos int fpurge(FILE *); 299 1.108 christos #endif 300 1.108 christos 301 1.3 tv #if !HAVE_DIRFD 302 1.3 tv #if HAVE_DIR_DD_FD 303 1.3 tv #define dirfd(dirp) ((dirp)->dd_fd) 304 1.53 thorpej #elif HAVE_DIR___DD_FD 305 1.53 thorpej #define dirfd(dirp) ((dirp)->__dd_fd) 306 1.3 tv #else 307 1.39 jmc /*XXX: Very hacky but no other way to bring this into scope w/o defining 308 1.39 jmc _NETBSD_SOURCE which we're avoiding. */ 309 1.39 jmc #ifdef __NetBSD__ 310 1.39 jmc struct _dirdesc { 311 1.39 jmc int dd_fd; /* file descriptor associated with directory */ 312 1.39 jmc long dd_loc; /* offset in current buffer */ 313 1.39 jmc long dd_size; /* amount of data returned by getdents */ 314 1.39 jmc char *dd_buf; /* data buffer */ 315 1.39 jmc int dd_len; /* size of data buffer */ 316 1.39 jmc off_t dd_seek; /* magic cookie returned by getdents */ 317 1.39 jmc long dd_rewind; /* magic cookie for rewinding */ 318 1.39 jmc int dd_flags; /* flags for readdir */ 319 1.39 jmc void *dd_lock; /* lock for concurrent access */ 320 1.39 jmc }; 321 1.39 jmc #define dirfd(dirp) (((struct _dirdesc *)dirp)->dd_fd) 322 1.39 jmc #else 323 1.3 tv #error cannot figure out how to turn a DIR * into a fd 324 1.3 tv #endif 325 1.3 tv #endif 326 1.39 jmc #endif 327 1.3 tv 328 1.104 christos #if !HAVE_DECL_ERR 329 1.3 tv void err(int, const char *, ...); 330 1.104 christos #endif 331 1.104 christos #if !HAVE_DECL_ERRC 332 1.104 christos void errc(int, int, const char *, ...); 333 1.104 christos #endif 334 1.104 christos #if !HAVE_DECL_ERRX 335 1.3 tv void errx(int, const char *, ...); 336 1.104 christos #endif 337 1.104 christos #if !HAVE_DECL_VERRC 338 1.104 christos void verrc(int, int, const char *, va_list); 339 1.104 christos #endif 340 1.104 christos #if !HAVE_DECL_VERRX 341 1.104 christos void verrx(int, const char *, va_list); 342 1.104 christos #endif 343 1.104 christos #if !HAVE_DECL_WARN 344 1.1 thorpej void warn(const char *, ...); 345 1.1 thorpej #endif 346 1.97 christos #if !HAVE_DECL_WARNC 347 1.97 christos void warnc(int, const char *, ...); 348 1.97 christos #endif 349 1.104 christos #if !HAVE_DECL_WARNX 350 1.104 christos void warnx(const char *, ...); 351 1.104 christos #endif 352 1.97 christos #if !HAVE_DECL_VWARNC 353 1.97 christos void vwarnc(int, const char *, va_list); 354 1.97 christos #endif 355 1.104 christos #if !HAVE_DECL_VWARNX 356 1.104 christos void vwarnx(const char *, va_list); 357 1.97 christos #endif 358 1.104 christos 359 1.104 christos #if !HAVE_DECL_MI_VECTOR_HASH 360 1.104 christos void mi_vector_hash(const void * __restrict, size_t, uint32_t, 361 1.104 christos uint32_t[3]); 362 1.97 christos #endif 363 1.1 thorpej 364 1.104 christos 365 1.56 christos #if !HAVE_ESETFUNC 366 1.56 christos void (*esetfunc(void (*)(int, const char *, ...)))(int, const char *, ...); 367 1.56 christos size_t estrlcpy(char *, const char *, size_t); 368 1.56 christos size_t estrlcat(char *, const char *, size_t); 369 1.56 christos char *estrdup(const char *); 370 1.59 nakayama char *estrndup(const char *, size_t); 371 1.56 christos void *ecalloc(size_t, size_t); 372 1.56 christos void *emalloc(size_t); 373 1.56 christos void *erealloc(void *, size_t); 374 1.56 christos FILE *efopen(const char *, const char *); 375 1.56 christos int easprintf(char **, const char *, ...); 376 1.56 christos int evasprintf(char **, const char *, va_list); 377 1.56 christos #endif 378 1.56 christos 379 1.105 christos #if !HAVE_DECL_FGETLN 380 1.1 thorpej char *fgetln(FILE *, size_t *); 381 1.1 thorpej #endif 382 1.105 christos #if !HAVE_DECL_DPRINTF 383 1.88 christos int dprintf(int, const char *, ...); 384 1.88 christos #endif 385 1.1 thorpej 386 1.1 thorpej #if !HAVE_FLOCK 387 1.1 thorpej # define LOCK_SH 0x01 388 1.1 thorpej # define LOCK_EX 0x02 389 1.1 thorpej # define LOCK_NB 0x04 390 1.1 thorpej # define LOCK_UN 0x08 391 1.1 thorpej int flock(int, int); 392 1.1 thorpej #endif 393 1.1 thorpej 394 1.105 christos #if !HAVE_DECL_FPARSELN || BROKEN_FPARSELN 395 1.1 thorpej # define FPARSELN_UNESCESC 0x01 396 1.1 thorpej # define FPARSELN_UNESCCONT 0x02 397 1.1 thorpej # define FPARSELN_UNESCCOMM 0x04 398 1.1 thorpej # define FPARSELN_UNESCREST 0x08 399 1.1 thorpej # define FPARSELN_UNESCALL 0x0f 400 1.1 thorpej char *fparseln(FILE *, size_t *, size_t *, const char [3], int); 401 1.10 bjh21 #endif 402 1.10 bjh21 403 1.105 christos #if !HAVE_DECL_GETDELIM 404 1.82 joerg ssize_t getdelim(char **, size_t *, int, FILE *); 405 1.105 christos #endif 406 1.105 christos #if !HAVE_DECL_GETLINE 407 1.82 joerg ssize_t getline(char **, size_t *, FILE *); 408 1.82 joerg #endif 409 1.82 joerg 410 1.105 christos #if !HAVE_DECL_ISSETUGID 411 1.10 bjh21 int issetugid(void); 412 1.1 thorpej #endif 413 1.1 thorpej 414 1.105 christos #if !HAVE_DECL_ISBLANK && !defined(isblank) 415 1.3 tv #define isblank(x) ((x) == ' ' || (x) == '\t') 416 1.21 lukem #endif 417 1.21 lukem 418 1.39 jmc #define __nbcompat_bswap16(x) ((((x) << 8) & 0xff00) | (((x) >> 8) & 0x00ff)) 419 1.39 jmc 420 1.39 jmc #define __nbcompat_bswap32(x) ((((x) << 24) & 0xff000000) | \ 421 1.39 jmc (((x) << 8) & 0x00ff0000) | \ 422 1.39 jmc (((x) >> 8) & 0x0000ff00) | \ 423 1.39 jmc (((x) >> 24) & 0x000000ff)) 424 1.4 tv 425 1.39 jmc #define __nbcompat_bswap64(x) (((u_int64_t)bswap32((x)) << 32) | \ 426 1.39 jmc ((u_int64_t)bswap32((x) >> 32))) 427 1.4 tv 428 1.50 wiz #if ! HAVE_DECL_BSWAP16 429 1.39 jmc #ifdef bswap16 430 1.39 jmc #undef bswap16 431 1.39 jmc #endif 432 1.39 jmc #define bswap16(x) __nbcompat_bswap16(x) 433 1.39 jmc #endif 434 1.50 wiz #if ! HAVE_DECL_BSWAP32 435 1.39 jmc #ifdef bswap32 436 1.39 jmc #undef bswap32 437 1.39 jmc #endif 438 1.39 jmc #define bswap32(x) __nbcompat_bswap32(x) 439 1.39 jmc #endif 440 1.50 wiz #if ! HAVE_DECL_BSWAP64 441 1.39 jmc #ifdef bswap64 442 1.39 jmc #undef bswap64 443 1.39 jmc #endif 444 1.39 jmc #define bswap64(x) __nbcompat_bswap64(x) 445 1.18 thorpej #endif 446 1.18 thorpej 447 1.105 christos #if !HAVE_DECL_MKSTEMP 448 1.18 thorpej int mkstemp(char *); 449 1.18 thorpej #endif 450 1.18 thorpej 451 1.126 christos #if !HAVE_DECL_MKSTEMPS 452 1.126 christos int mkstemps(char *, int); 453 1.126 christos #endif 454 1.126 christos 455 1.105 christos #if !HAVE_DECL_MKDTEMP 456 1.18 thorpej char *mkdtemp(char *); 457 1.18 thorpej #endif 458 1.18 thorpej 459 1.18 thorpej #if !HAVE_MKSTEMP || !HAVE_MKDTEMP 460 1.67 apb /* This is a prototype for the internal function defined in 461 1.119 uwe * src/lib/libc/stdio/gettemp.c */ 462 1.67 apb int __nbcompat_gettemp(char *, int *, int); 463 1.4 tv #endif 464 1.4 tv 465 1.105 christos #if !HAVE_DECL_PREAD 466 1.1 thorpej ssize_t pread(int, void *, size_t, off_t); 467 1.2 lukem #endif 468 1.2 lukem 469 1.124 riastrad int __nbcompat_heapsort(void *, size_t, size_t, 470 1.124 riastrad int (*)(const void *, const void *)); 471 1.124 riastrad int __nbcompat_heapsort_r(void *, size_t, size_t, 472 1.124 riastrad int (*)(const void *, const void *, void *), void *); 473 1.117 rin #define heapsort __nbcompat_heapsort 474 1.124 riastrad #define heapsort_r __nbcompat_heapsort_r 475 1.120 cjep 476 1.105 christos #if !HAVE_DECL_HEAPSORT 477 1.44 jmc int heapsort (void *, size_t, size_t, int (*)(const void *, const void *)); 478 1.44 jmc #endif 479 1.44 jmc 480 1.71 dbj char *flags_to_string(unsigned long, const char *); 481 1.71 dbj int string_to_flags(char **, unsigned long *, unsigned long *); 482 1.71 dbj 483 1.65 tls /* 484 1.65 tls * HAVE_X_FROM_Y and HAVE_PWCACHE_FOODB go together, because we cannot 485 1.65 tls * supply an implementation of one without the others -- some parts are 486 1.65 tls * libc internal and this varies from system to system. 487 1.65 tls * 488 1.65 tls * XXX this is dubious anyway: we assume (see HAVE_DECLs below) that if the 489 1.65 tls * XXX host system has all of these functions, all of their interfaces 490 1.65 tls * XXX and interactions are exactly the same as in our libc/libutil -- ugh. 491 1.65 tls */ 492 1.75 tron #if !HAVE_USER_FROM_UID || !HAVE_UID_FROM_USER || !HAVE_GROUP_FROM_GID || \ 493 1.75 tron !HAVE_GID_FROM_GROUP || !HAVE_PWCACHE_USERDB || !HAVE_PWCACHE_GROUDB 494 1.75 tron /* Make them use our version */ 495 1.75 tron # define user_from_uid __nbcompat_user_from_uid 496 1.75 tron # define uid_from_user __nbcompat_uid_from_user 497 1.75 tron # define pwcache_userdb __nbcompat_pwcache_userdb 498 1.75 tron # define group_from_gid __nbcompat_group_from_gid 499 1.75 tron # define gid_from_group __nbcompat_gid_from_group 500 1.75 tron # define pwcache_groupdb __nbcompat_pwcache_groupdb 501 1.62 christos #endif 502 1.1 thorpej 503 1.65 tls #if !HAVE_DECL_UID_FROM_USER 504 1.64 christos int uid_from_user(const char *, uid_t *); 505 1.64 christos #endif 506 1.73 christos 507 1.65 tls #if !HAVE_DECL_USER_FROM_UID 508 1.65 tls const char *user_from_uid(uid_t, int); 509 1.65 tls #endif 510 1.73 christos 511 1.65 tls #if !HAVE_DECL_PWCACHE_USERDB 512 1.65 tls int pwcache_userdb(int (*)(int), void (*)(void), 513 1.75 tron struct passwd * (*)(const char *), struct passwd * (*)(uid_t)); 514 1.65 tls #endif 515 1.73 christos 516 1.64 christos #if !HAVE_DECL_GID_FROM_GROUP 517 1.64 christos int gid_from_group(const char *, gid_t *); 518 1.64 christos #endif 519 1.73 christos 520 1.65 tls #if !HAVE_DECL_GROUP_FROM_GID 521 1.65 tls const char *group_from_gid(gid_t, int); 522 1.64 christos #endif 523 1.73 christos 524 1.65 tls #if !HAVE_DECL_PWCACHE_GROUPDB 525 1.65 tls int pwcache_groupdb(int (*)(int), void (*)(void), 526 1.73 christos struct group * (*)(const char *), struct group * (*)(gid_t)); 527 1.64 christos #endif 528 1.65 tls 529 1.123 kre #if !HAVE_DECL_SHQUOTE 530 1.123 kre size_t shquote(const char *, char *, size_t); 531 1.123 kre #endif 532 1.104 christos #if !HAVE_DECL_STRLCAT 533 1.104 christos size_t strlcat(char *, const char *, size_t); 534 1.104 christos #endif 535 1.104 christos #if !HAVE_DECL_STRLCPY 536 1.104 christos size_t strlcpy(char *, const char *, size_t); 537 1.104 christos #endif 538 1.64 christos #if !HAVE_DECL_STRNDUP 539 1.64 christos char *strndup(const char *, size_t); 540 1.64 christos #endif 541 1.94 apb #if !HAVE_DECL_STRNLEN 542 1.95 apb size_t strnlen(const char *, size_t); 543 1.94 apb #endif 544 1.113 christos #if !HAVE_DECL_STRCASECMP 545 1.113 christos int strcasecmp(const char *, const char *); 546 1.113 christos #endif 547 1.114 christos #if !HAVE_DECL_STRNCASECMP 548 1.114 christos int strncasecmp(const char *, const char *, size_t); 549 1.114 christos #endif 550 1.126 christos #if !HAVE_DECL_STRCASESTR 551 1.126 christos char *strcasestr(const char *, const char *); 552 1.126 christos #endif 553 1.64 christos #if !HAVE_DECL_LCHFLAGS 554 1.64 christos int lchflags(const char *, unsigned long); 555 1.64 christos #endif 556 1.64 christos #if !HAVE_DECL_LCHMOD 557 1.64 christos int lchmod(const char *, mode_t); 558 1.64 christos #endif 559 1.64 christos #if !HAVE_DECL_LCHOWN 560 1.64 christos int lchown(const char *, uid_t, gid_t); 561 1.64 christos #endif 562 1.64 christos 563 1.105 christos #if !HAVE_DECL_PWRITE 564 1.1 thorpej ssize_t pwrite(int, const void *, size_t, off_t); 565 1.1 thorpej #endif 566 1.1 thorpej 567 1.61 lukem #if !HAVE_RAISE_DEFAULT_SIGNAL 568 1.61 lukem int raise_default_signal(int); 569 1.61 lukem #endif 570 1.61 lukem 571 1.105 christos #if !HAVE_DECL_REALLOCARR 572 1.102 kamil int reallocarr(void *, size_t, size_t); 573 1.102 kamil #endif 574 1.102 kamil 575 1.118 christos #if !HAVE_DECL_REALLOCARRAY 576 1.118 christos void *reallocarray(void *, size_t, size_t); 577 1.118 christos #endif 578 1.118 christos 579 1.105 christos #if !HAVE_DECL_SETENV 580 1.3 tv int setenv(const char *, const char *, int); 581 1.3 tv #endif 582 1.3 tv 583 1.6 tv #if !HAVE_DECL_SETGROUPENT 584 1.3 tv int setgroupent(int); 585 1.3 tv #endif 586 1.3 tv 587 1.6 tv #if !HAVE_DECL_SETPASSENT 588 1.3 tv int setpassent(int); 589 1.3 tv #endif 590 1.3 tv 591 1.105 christos #if !HAVE_DECL_GETPROGNAME 592 1.3 tv const char *getprogname(void); 593 1.105 christos #endif 594 1.105 christos #if !HAVE_DECL_SETPROGNAME 595 1.3 tv void setprogname(const char *); 596 1.3 tv #endif 597 1.3 tv 598 1.91 apb #if !HAVE_SNPRINTB_M 599 1.91 apb int snprintb(char *, size_t, const char *, uint64_t); 600 1.91 apb int snprintb_m(char *, size_t, const char *, uint64_t, size_t); 601 1.91 apb #endif 602 1.91 apb 603 1.107 christos #if !HAVE_DECL_SNPRINTF && !defined(snprintf) 604 1.3 tv int snprintf(char *, size_t, const char *, ...); 605 1.3 tv #endif 606 1.3 tv 607 1.105 christos #if !HAVE_DECL_STRMODE 608 1.55 apb void strmode(mode_t, char *); 609 1.55 apb #endif 610 1.55 apb 611 1.105 christos #if !HAVE_DECL_STRNDUP 612 1.59 nakayama char *strndup(const char *, size_t); 613 1.59 nakayama #endif 614 1.59 nakayama 615 1.105 christos #if !HAVE_DECL_STRSEP 616 1.3 tv char *strsep(char **, const char *); 617 1.23 lukem #endif 618 1.23 lukem 619 1.51 wiz #if !HAVE_DECL_STRSUFTOLL 620 1.23 lukem long long strsuftoll(const char *, const char *, long long, long long); 621 1.23 lukem long long strsuftollx(const char *, const char *, 622 1.23 lukem long long, long long, char *, size_t); 623 1.16 pooka #endif 624 1.16 pooka 625 1.105 christos #if !HAVE_DECL_STRTOLL 626 1.20 lukem long long strtoll(const char *, char **, int); 627 1.20 lukem #endif 628 1.20 lukem 629 1.126 christos #if !HAVE_DECL_STRTONUM 630 1.126 christos long long strtonum(const char *, long long, long long, const char **); 631 1.126 christos #endif 632 1.126 christos 633 1.105 christos #if !HAVE_DECL_STRTOI 634 1.101 christos intmax_t strtoi(const char * __restrict, char ** __restrict, int, 635 1.101 christos intmax_t, intmax_t, int *); 636 1.101 christos #endif 637 1.101 christos 638 1.105 christos #if !HAVE_DECL_STRTOU 639 1.101 christos uintmax_t strtou(const char * __restrict, char ** __restrict, int, 640 1.101 christos uintmax_t, uintmax_t, int *); 641 1.101 christos #endif 642 1.101 christos 643 1.105 christos #if !HAVE_DECL_USER_FROM_UID 644 1.16 pooka const char *user_from_uid(uid_t, int); 645 1.38 thorpej #endif 646 1.38 thorpej 647 1.105 christos #if !HAVE_DECL_GROUP_FROM_GID 648 1.16 pooka const char *group_from_gid(gid_t, int); 649 1.3 tv #endif 650 1.3 tv 651 1.105 christos #if !HAVE_DECL_VASPRINTF 652 1.3 tv int vasprintf(char **, const char *, va_list); 653 1.3 tv #endif 654 1.3 tv 655 1.105 christos #if !HAVE_DECL_VASNPRINTF 656 1.3 tv int vasnprintf(char **, size_t, const char *, va_list); 657 1.3 tv #endif 658 1.3 tv 659 1.107 christos #if !HAVE_DECL_VSNPRINTF && !defined(vsnprintf) 660 1.3 tv int vsnprintf(char *, size_t, const char *, va_list); 661 1.3 tv #endif 662 1.3 tv 663 1.127 christos #if !HAVE_DECL_VSYSLOG 664 1.127 christos void vsyslog(int, const char *, va_list); 665 1.127 christos #endif 666 1.127 christos 667 1.1 thorpej /* 668 1.1 thorpej * getmode() and setmode() are always defined, as these function names 669 1.1 thorpej * exist but with very different meanings on other OS's. The compat 670 1.1 thorpej * versions here simply accept an octal mode number; the "u+x,g-w" type 671 1.1 thorpej * of syntax is not accepted. 672 1.1 thorpej */ 673 1.1 thorpej 674 1.1 thorpej #define getmode __nbcompat_getmode 675 1.1 thorpej #define setmode __nbcompat_setmode 676 1.1 thorpej 677 1.1 thorpej mode_t getmode(const void *, mode_t); 678 1.1 thorpej void *setmode(const char *); 679 1.1 thorpej 680 1.3 tv /* Eliminate assertions embedded in binaries. */ 681 1.1 thorpej 682 1.1 thorpej #undef _DIAGASSERT 683 1.3 tv #define _DIAGASSERT(x) 684 1.4 tv 685 1.31 lukem /* Various sources use this */ 686 1.31 lukem #undef __RCSID 687 1.74 joerg #define __RCSID(x) struct XXXNETBSD_RCSID 688 1.31 lukem #undef __SCCSID 689 1.31 lukem #define __SCCSID(x) 690 1.31 lukem #undef __COPYRIGHT 691 1.74 joerg #define __COPYRIGHT(x) struct XXXNETBSD_COPYRIGHT 692 1.31 lukem #undef __KERNEL_RCSID 693 1.31 lukem #define __KERNEL_RCSID(x,y) 694 1.31 lukem 695 1.4 tv /* Heimdal expects this one. */ 696 1.4 tv 697 1.3 tv #undef RCSID 698 1.3 tv #define RCSID(x) 699 1.1 thorpej 700 1.3 tv /* Some definitions not available on all systems. */ 701 1.1 thorpej 702 1.72 sketch #ifndef __inline 703 1.72 sketch #define __inline inline 704 1.72 sketch #endif 705 1.72 sketch 706 1.4 tv /* <errno.h> */ 707 1.4 tv 708 1.4 tv #ifndef EFTYPE 709 1.4 tv #define EFTYPE EIO 710 1.4 tv #endif 711 1.4 tv 712 1.4 tv /* <fcntl.h> */ 713 1.4 tv 714 1.4 tv #ifndef O_EXLOCK 715 1.4 tv #define O_EXLOCK 0 716 1.4 tv #endif 717 1.4 tv #ifndef O_SHLOCK 718 1.4 tv #define O_SHLOCK 0 719 1.4 tv #endif 720 1.99 christos #ifndef O_CLOEXEC 721 1.99 christos #define O_CLOEXEC 0 722 1.99 christos #endif 723 1.4 tv 724 1.69 apb /* <inttypes.h> */ 725 1.69 apb 726 1.78 apb #if UCHAR_MAX == 0xffU /* char is an 8-bit type */ 727 1.78 apb #ifndef PRId8 728 1.78 apb #define PRId8 "hhd" 729 1.78 apb #endif 730 1.78 apb #ifndef PRIi8 731 1.78 apb #define PRIi8 "hhi" 732 1.78 apb #endif 733 1.78 apb #ifndef PRIo8 734 1.78 apb #define PRIo8 "hho" 735 1.78 apb #endif 736 1.78 apb #ifndef PRIu8 737 1.78 apb #define PRIu8 "hhu" 738 1.78 apb #endif 739 1.78 apb #ifndef PRIx8 740 1.78 apb #define PRIx8 "hhx" 741 1.78 apb #endif 742 1.78 apb #ifndef PRIX8 743 1.78 apb #define PRIX8 "hhX" 744 1.78 apb #endif 745 1.78 apb #ifndef SCNd8 746 1.78 apb #define SCNd8 "hhd" 747 1.78 apb #endif 748 1.78 apb #ifndef SCNi8 749 1.78 apb #define SCNi8 "hhi" 750 1.78 apb #endif 751 1.78 apb #ifndef SCNo8 752 1.78 apb #define SCNo8 "hho" 753 1.78 apb #endif 754 1.78 apb #ifndef SCNu8 755 1.78 apb #define SCNu8 "hhu" 756 1.78 apb #endif 757 1.78 apb #ifndef SCNx8 758 1.78 apb #define SCNx8 "hhx" 759 1.78 apb #endif 760 1.78 apb #ifndef SCNX8 761 1.78 apb #define SCNX8 "hhX" 762 1.78 apb #endif 763 1.78 apb #endif /* char is an 8-bit type */ 764 1.78 apb #if ! (defined(PRId8) && defined(PRIi8) && defined(PRIo8) && \ 765 1.78 apb defined(PRIu8) && defined(PRIx8) && defined(PRIX8)) 766 1.78 apb #error "Don't know how to define PRI[diouxX]8" 767 1.78 apb #endif 768 1.78 apb #if ! (defined(SCNd8) && defined(SCNi8) && defined(SCNo8) && \ 769 1.78 apb defined(SCNu8) && defined(SCNx8) && defined(SCNX8)) 770 1.78 apb #error "Don't know how to define SCN[diouxX]8" 771 1.78 apb #endif 772 1.78 apb 773 1.70 apb #if USHRT_MAX == 0xffffU /* short is a 16-bit type */ 774 1.69 apb #ifndef PRId16 775 1.69 apb #define PRId16 "hd" 776 1.69 apb #endif 777 1.69 apb #ifndef PRIi16 778 1.69 apb #define PRIi16 "hi" 779 1.69 apb #endif 780 1.69 apb #ifndef PRIo16 781 1.69 apb #define PRIo16 "ho" 782 1.69 apb #endif 783 1.69 apb #ifndef PRIu16 784 1.69 apb #define PRIu16 "hu" 785 1.69 apb #endif 786 1.69 apb #ifndef PRIx16 787 1.69 apb #define PRIx16 "hx" 788 1.69 apb #endif 789 1.69 apb #ifndef PRIX16 790 1.69 apb #define PRIX16 "hX" 791 1.69 apb #endif 792 1.78 apb #ifndef SCNd16 793 1.78 apb #define SCNd16 "hd" 794 1.78 apb #endif 795 1.78 apb #ifndef SCNi16 796 1.78 apb #define SCNi16 "hi" 797 1.78 apb #endif 798 1.78 apb #ifndef SCNo16 799 1.78 apb #define SCNo16 "ho" 800 1.78 apb #endif 801 1.78 apb #ifndef SCNu16 802 1.78 apb #define SCNu16 "hu" 803 1.78 apb #endif 804 1.78 apb #ifndef SCNx16 805 1.78 apb #define SCNx16 "hx" 806 1.78 apb #endif 807 1.78 apb #ifndef SCNX16 808 1.78 apb #define SCNX16 "hX" 809 1.78 apb #endif 810 1.69 apb #endif /* short is a 16-bit type */ 811 1.69 apb #if ! (defined(PRId16) && defined(PRIi16) && defined(PRIo16) && \ 812 1.69 apb defined(PRIu16) && defined(PRIx16) && defined(PRIX16)) 813 1.69 apb #error "Don't know how to define PRI[diouxX]16" 814 1.69 apb #endif 815 1.78 apb #if ! (defined(SCNd16) && defined(SCNi16) && defined(SCNo16) && \ 816 1.78 apb defined(SCNu16) && defined(SCNx16) && defined(SCNX16)) 817 1.78 apb #error "Don't know how to define SCN[diouxX]16" 818 1.78 apb #endif 819 1.69 apb 820 1.70 apb #if UINT_MAX == 0xffffffffU /* int is a 32-bit type */ 821 1.69 apb #ifndef PRId32 822 1.69 apb #define PRId32 "d" 823 1.69 apb #endif 824 1.69 apb #ifndef PRIi32 825 1.69 apb #define PRIi32 "i" 826 1.69 apb #endif 827 1.69 apb #ifndef PRIo32 828 1.69 apb #define PRIo32 "o" 829 1.69 apb #endif 830 1.69 apb #ifndef PRIu32 831 1.69 apb #define PRIu32 "u" 832 1.69 apb #endif 833 1.69 apb #ifndef PRIx32 834 1.69 apb #define PRIx32 "x" 835 1.69 apb #endif 836 1.69 apb #ifndef PRIX32 837 1.69 apb #define PRIX32 "X" 838 1.69 apb #endif 839 1.78 apb #ifndef SCNd32 840 1.78 apb #define SCNd32 "d" 841 1.78 apb #endif 842 1.78 apb #ifndef SCNi32 843 1.78 apb #define SCNi32 "i" 844 1.78 apb #endif 845 1.78 apb #ifndef SCNo32 846 1.78 apb #define SCNo32 "o" 847 1.78 apb #endif 848 1.78 apb #ifndef SCNu32 849 1.78 apb #define SCNu32 "u" 850 1.78 apb #endif 851 1.78 apb #ifndef SCNx32 852 1.78 apb #define SCNx32 "x" 853 1.78 apb #endif 854 1.78 apb #ifndef SCNX32 855 1.78 apb #define SCNX32 "X" 856 1.78 apb #endif 857 1.69 apb #endif /* int is a 32-bit type */ 858 1.70 apb #if ULONG_MAX == 0xffffffffU /* long is a 32-bit type */ 859 1.69 apb #ifndef PRId32 860 1.69 apb #define PRId32 "ld" 861 1.69 apb #endif 862 1.69 apb #ifndef PRIi32 863 1.69 apb #define PRIi32 "li" 864 1.69 apb #endif 865 1.69 apb #ifndef PRIo32 866 1.69 apb #define PRIo32 "lo" 867 1.69 apb #endif 868 1.69 apb #ifndef PRIu32 869 1.69 apb #define PRIu32 "lu" 870 1.69 apb #endif 871 1.69 apb #ifndef PRIx32 872 1.69 apb #define PRIx32 "lx" 873 1.69 apb #endif 874 1.69 apb #ifndef PRIX32 875 1.69 apb #define PRIX32 "lX" 876 1.69 apb #endif 877 1.78 apb #ifndef SCNd32 878 1.78 apb #define SCNd32 "ld" 879 1.78 apb #endif 880 1.78 apb #ifndef SCNi32 881 1.78 apb #define SCNi32 "li" 882 1.78 apb #endif 883 1.78 apb #ifndef SCNo32 884 1.78 apb #define SCNo32 "lo" 885 1.78 apb #endif 886 1.78 apb #ifndef SCNu32 887 1.78 apb #define SCNu32 "lu" 888 1.78 apb #endif 889 1.78 apb #ifndef SCNx32 890 1.78 apb #define SCNx32 "lx" 891 1.78 apb #endif 892 1.78 apb #ifndef SCNX32 893 1.78 apb #define SCNX32 "lX" 894 1.78 apb #endif 895 1.69 apb #endif /* long is a 32-bit type */ 896 1.69 apb #if ! (defined(PRId32) && defined(PRIi32) && defined(PRIo32) && \ 897 1.69 apb defined(PRIu32) && defined(PRIx32) && defined(PRIX32)) 898 1.69 apb #error "Don't know how to define PRI[diouxX]32" 899 1.69 apb #endif 900 1.78 apb #if ! (defined(SCNd32) && defined(SCNi32) && defined(SCNo32) && \ 901 1.78 apb defined(SCNu32) && defined(SCNx32) && defined(SCNX32)) 902 1.78 apb #error "Don't know how to define SCN[diouxX]32" 903 1.78 apb #endif 904 1.69 apb 905 1.70 apb #if ULONG_MAX == 0xffffffffffffffffU /* long is a 64-bit type */ 906 1.69 apb #ifndef PRId64 907 1.69 apb #define PRId64 "ld" 908 1.69 apb #endif 909 1.69 apb #ifndef PRIi64 910 1.69 apb #define PRIi64 "li" 911 1.69 apb #endif 912 1.69 apb #ifndef PRIo64 913 1.69 apb #define PRIo64 "lo" 914 1.69 apb #endif 915 1.69 apb #ifndef PRIu64 916 1.69 apb #define PRIu64 "lu" 917 1.69 apb #endif 918 1.69 apb #ifndef PRIx64 919 1.69 apb #define PRIx64 "lx" 920 1.69 apb #endif 921 1.69 apb #ifndef PRIX64 922 1.69 apb #define PRIX64 "lX" 923 1.69 apb #endif 924 1.78 apb #ifndef SCNd64 925 1.78 apb #define SCNd64 "ld" 926 1.78 apb #endif 927 1.78 apb #ifndef SCNi64 928 1.78 apb #define SCNi64 "li" 929 1.78 apb #endif 930 1.78 apb #ifndef SCNo64 931 1.78 apb #define SCNo64 "lo" 932 1.78 apb #endif 933 1.78 apb #ifndef SCNu64 934 1.78 apb #define SCNu64 "lu" 935 1.78 apb #endif 936 1.78 apb #ifndef SCNx64 937 1.78 apb #define SCNx64 "lx" 938 1.78 apb #endif 939 1.78 apb #ifndef SCNX64 940 1.78 apb #define SCNX64 "lX" 941 1.78 apb #endif 942 1.69 apb #endif /* long is a 64-bit type */ 943 1.70 apb #if ULLONG_MAX == 0xffffffffffffffffU /* long long is a 64-bit type */ 944 1.69 apb #ifndef PRId64 945 1.69 apb #define PRId64 "lld" 946 1.69 apb #endif 947 1.69 apb #ifndef PRIi64 948 1.69 apb #define PRIi64 "lli" 949 1.69 apb #endif 950 1.69 apb #ifndef PRIo64 951 1.69 apb #define PRIo64 "llo" 952 1.69 apb #endif 953 1.69 apb #ifndef PRIu64 954 1.69 apb #define PRIu64 "llu" 955 1.69 apb #endif 956 1.69 apb #ifndef PRIx64 957 1.69 apb #define PRIx64 "llx" 958 1.69 apb #endif 959 1.69 apb #ifndef PRIX64 960 1.69 apb #define PRIX64 "llX" 961 1.69 apb #endif 962 1.78 apb #ifndef SCNd64 963 1.78 apb #define SCNd64 "lld" 964 1.78 apb #endif 965 1.78 apb #ifndef SCNi64 966 1.78 apb #define SCNi64 "lli" 967 1.78 apb #endif 968 1.78 apb #ifndef SCNo64 969 1.78 apb #define SCNo64 "llo" 970 1.78 apb #endif 971 1.78 apb #ifndef SCNu64 972 1.78 apb #define SCNu64 "llu" 973 1.78 apb #endif 974 1.78 apb #ifndef SCNx64 975 1.78 apb #define SCNx64 "llx" 976 1.78 apb #endif 977 1.78 apb #ifndef SCNX64 978 1.78 apb #define SCNX64 "llX" 979 1.78 apb #endif 980 1.69 apb #endif /* long long is a 64-bit type */ 981 1.69 apb #if ! (defined(PRId64) && defined(PRIi64) && defined(PRIo64) && \ 982 1.69 apb defined(PRIu64) && defined(PRIx64) && defined(PRIX64)) 983 1.69 apb #error "Don't know how to define PRI[diouxX]64" 984 1.69 apb #endif 985 1.78 apb #if ! (defined(SCNd64) && defined(SCNi64) && defined(SCNo64) && \ 986 1.78 apb defined(SCNu64) && defined(SCNx64) && defined(SCNX64)) 987 1.78 apb #error "Don't know how to define SCN[diouxX]64" 988 1.78 apb #endif 989 1.69 apb 990 1.8 bjh21 /* <limits.h> */ 991 1.4 tv 992 1.4 tv #ifndef UID_MAX 993 1.4 tv #define UID_MAX 32767 994 1.4 tv #endif 995 1.4 tv #ifndef GID_MAX 996 1.4 tv #define GID_MAX UID_MAX 997 1.4 tv #endif 998 1.4 tv 999 1.4 tv #ifndef UQUAD_MAX 1000 1.4 tv #define UQUAD_MAX ((u_quad_t)-1) 1001 1.4 tv #endif 1002 1.4 tv #ifndef QUAD_MAX 1003 1.4 tv #define QUAD_MAX ((quad_t)(UQUAD_MAX >> 1)) 1004 1.4 tv #endif 1005 1.4 tv #ifndef QUAD_MIN 1006 1.4 tv #define QUAD_MIN ((quad_t)(~QUAD_MAX)) 1007 1.4 tv #endif 1008 1.4 tv #ifndef ULLONG_MAX 1009 1.4 tv #define ULLONG_MAX ((unsigned long long)-1) 1010 1.4 tv #endif 1011 1.4 tv #ifndef LLONG_MAX 1012 1.4 tv #define LLONG_MAX ((long long)(ULLONG_MAX >> 1)) 1013 1.4 tv #endif 1014 1.4 tv #ifndef LLONG_MIN 1015 1.4 tv #define LLONG_MIN ((long long)(~LLONG_MAX)) 1016 1.3 tv #endif 1017 1.1 thorpej 1018 1.103 pooka #ifndef MAXPATHLEN 1019 1.103 pooka #define MAXPATHLEN 4096 1020 1.103 pooka #endif 1021 1.122 lukem 1022 1.122 lukem #ifndef NAME_MAX 1023 1.122 lukem #ifdef _XOPEN_NAME_MAX 1024 1.122 lukem #define NAME_MAX _XOPEN_NAME_MAX 1025 1.122 lukem #else 1026 1.122 lukem #error "Both NAME_MAX and _XOPEN_NAME_MAX are not defined" 1027 1.122 lukem #endif 1028 1.122 lukem #endif 1029 1.122 lukem 1030 1.103 pooka #ifndef PATH_MAX 1031 1.103 pooka #define PATH_MAX MAXPATHLEN 1032 1.103 pooka #endif 1033 1.103 pooka 1034 1.4 tv /* <paths.h> */ 1035 1.4 tv 1036 1.54 apb /* The host's _PATH_BSHELL might be broken, so override it. */ 1037 1.54 apb #undef _PATH_BSHELL 1038 1.15 bjh21 #define _PATH_BSHELL PATH_BSHELL 1039 1.1 thorpej #ifndef _PATH_DEFPATH 1040 1.1 thorpej #define _PATH_DEFPATH "/usr/bin:/bin:/usr/local/bin" 1041 1.1 thorpej #endif 1042 1.1 thorpej #ifndef _PATH_DEV 1043 1.1 thorpej #define _PATH_DEV "/dev/" 1044 1.1 thorpej #endif 1045 1.1 thorpej #ifndef _PATH_DEVNULL 1046 1.1 thorpej #define _PATH_DEVNULL _PATH_DEV "null" 1047 1.1 thorpej #endif 1048 1.1 thorpej #ifndef _PATH_TMP 1049 1.1 thorpej #define _PATH_TMP "/tmp/" 1050 1.22 christos #endif 1051 1.22 christos #ifndef _PATH_DEFTAPE 1052 1.22 christos #define _PATH_DEFTAPE "/dev/nrst0" 1053 1.1 thorpej #endif 1054 1.46 tron #ifndef _PATH_VI 1055 1.46 tron #define _PATH_VI "/usr/bin/vi" 1056 1.46 tron #endif 1057 1.1 thorpej 1058 1.13 bjh21 /* <stdint.h> */ 1059 1.30 uwe 1060 1.30 uwe #if !defined(SIZE_MAX) && defined(SIZE_T_MAX) 1061 1.30 uwe #define SIZE_MAX SIZE_T_MAX 1062 1.30 uwe #endif 1063 1.13 bjh21 1064 1.47 uwe #ifndef UINT8_MAX 1065 1.47 uwe #define UINT8_MAX 0xffU 1066 1.47 uwe #endif 1067 1.47 uwe 1068 1.47 uwe #ifndef UINT16_MAX 1069 1.47 uwe #define UINT16_MAX 0xffffU 1070 1.47 uwe #endif 1071 1.47 uwe 1072 1.13 bjh21 #ifndef UINT32_MAX 1073 1.13 bjh21 #define UINT32_MAX 0xffffffffU 1074 1.14 bjh21 #endif 1075 1.14 bjh21 1076 1.14 bjh21 /* <stdlib.h> */ 1077 1.14 bjh21 1078 1.14 bjh21 #ifndef __GNUC__ 1079 1.14 bjh21 # if HAVE_ALLOCA_H 1080 1.14 bjh21 # include <alloca.h> 1081 1.14 bjh21 # else 1082 1.14 bjh21 # ifndef alloca /* predefined by HP cc +Olibcalls */ 1083 1.14 bjh21 char *alloca (); 1084 1.14 bjh21 # endif 1085 1.14 bjh21 # endif 1086 1.13 bjh21 #endif 1087 1.25 uwe 1088 1.25 uwe /* avoid prototype conflicts with host */ 1089 1.25 uwe #define cgetcap __nbcompat_cgetcap 1090 1.25 uwe #define cgetclose __nbcompat_cgetclose 1091 1.25 uwe #define cgetent __nbcompat_cgetent 1092 1.25 uwe #define cgetfirst __nbcompat_cgetfirst 1093 1.25 uwe #define cgetmatch __nbcompat_cgetmatch 1094 1.25 uwe #define cgetnext __nbcompat_cgetnext 1095 1.25 uwe #define cgetnum __nbcompat_cgetnum 1096 1.25 uwe #define cgetset __nbcompat_cgetset 1097 1.25 uwe #define cgetstr __nbcompat_cgetstr 1098 1.25 uwe #define cgetustr __nbcompat_cgetustr 1099 1.25 uwe 1100 1.25 uwe char *cgetcap(char *, const char *, int); 1101 1.25 uwe int cgetclose(void); 1102 1.33 christos int cgetent(char **, const char * const *, const char *); 1103 1.33 christos int cgetfirst(char **, const char * const *); 1104 1.25 uwe int cgetmatch(const char *, const char *); 1105 1.33 christos int cgetnext(char **, const char * const *); 1106 1.25 uwe int cgetnum(char *, const char *, long *); 1107 1.25 uwe int cgetset(const char *); 1108 1.25 uwe int cgetstr(char *, const char *, char **); 1109 1.25 uwe int cgetustr(char *, const char *, char **); 1110 1.13 bjh21 1111 1.9 bjh21 /* <sys/endian.h> */ 1112 1.9 bjh21 1113 1.9 bjh21 #if WORDS_BIGENDIAN 1114 1.49 dogcow #if !HAVE_DECL_HTOBE16 1115 1.9 bjh21 #define htobe16(x) (x) 1116 1.39 jmc #endif 1117 1.49 dogcow #if !HAVE_DECL_HTOBE32 1118 1.9 bjh21 #define htobe32(x) (x) 1119 1.39 jmc #endif 1120 1.49 dogcow #if !HAVE_DECL_HTOBE64 1121 1.9 bjh21 #define htobe64(x) (x) 1122 1.39 jmc #endif 1123 1.49 dogcow #if !HAVE_DECL_HTOLE16 1124 1.9 bjh21 #define htole16(x) bswap16((u_int16_t)(x)) 1125 1.39 jmc #endif 1126 1.49 dogcow #if !HAVE_DECL_HTOLE32 1127 1.9 bjh21 #define htole32(x) bswap32((u_int32_t)(x)) 1128 1.39 jmc #endif 1129 1.49 dogcow #if !HAVE_DECL_HTOLE64 1130 1.9 bjh21 #define htole64(x) bswap64((u_int64_t)(x)) 1131 1.39 jmc #endif 1132 1.9 bjh21 #else 1133 1.49 dogcow #if !HAVE_DECL_HTOBE16 1134 1.9 bjh21 #define htobe16(x) bswap16((u_int16_t)(x)) 1135 1.39 jmc #endif 1136 1.49 dogcow #if !HAVE_DECL_HTOBE32 1137 1.9 bjh21 #define htobe32(x) bswap32((u_int32_t)(x)) 1138 1.39 jmc #endif 1139 1.49 dogcow #if !HAVE_DECL_HTOBE64 1140 1.9 bjh21 #define htobe64(x) bswap64((u_int64_t)(x)) 1141 1.39 jmc #endif 1142 1.49 dogcow #if !HAVE_DECL_HTOLE16 1143 1.9 bjh21 #define htole16(x) (x) 1144 1.39 jmc #endif 1145 1.49 dogcow #if !HAVE_DECL_HTOLE32 1146 1.9 bjh21 #define htole32(x) (x) 1147 1.39 jmc #endif 1148 1.49 dogcow #if !HAVE_DECL_HTOLE64 1149 1.9 bjh21 #define htole64(x) (x) 1150 1.9 bjh21 #endif 1151 1.39 jmc #endif 1152 1.49 dogcow #if !HAVE_DECL_BE16TOH 1153 1.9 bjh21 #define be16toh(x) htobe16(x) 1154 1.39 jmc #endif 1155 1.49 dogcow #if !HAVE_DECL_BE32TOH 1156 1.9 bjh21 #define be32toh(x) htobe32(x) 1157 1.39 jmc #endif 1158 1.49 dogcow #if !HAVE_DECL_BE64TOH 1159 1.9 bjh21 #define be64toh(x) htobe64(x) 1160 1.39 jmc #endif 1161 1.49 dogcow #if !HAVE_DECL_LE16TOH 1162 1.9 bjh21 #define le16toh(x) htole16(x) 1163 1.39 jmc #endif 1164 1.49 dogcow #if !HAVE_DECL_LE32TOH 1165 1.9 bjh21 #define le32toh(x) htole32(x) 1166 1.39 jmc #endif 1167 1.49 dogcow #if !HAVE_DECL_LE64TOH 1168 1.9 bjh21 #define le64toh(x) htole64(x) 1169 1.1 thorpej #endif 1170 1.1 thorpej 1171 1.60 apb #define __GEN_ENDIAN_ENC(bits, endian) \ 1172 1.60 apb static void \ 1173 1.60 apb endian ## bits ## enc(void *dst, uint ## bits ## _t u) \ 1174 1.60 apb { \ 1175 1.60 apb u = hto ## endian ## bits (u); \ 1176 1.60 apb memcpy(dst, &u, sizeof(u)); \ 1177 1.60 apb } 1178 1.60 apb #if !HAVE_DECL_BE16ENC 1179 1.60 apb __GEN_ENDIAN_ENC(16, be) 1180 1.60 apb #endif 1181 1.60 apb #if !HAVE_DECL_BE32ENC 1182 1.60 apb __GEN_ENDIAN_ENC(32, be) 1183 1.60 apb #endif 1184 1.60 apb #if !HAVE_DECL_BE64ENC 1185 1.60 apb __GEN_ENDIAN_ENC(64, be) 1186 1.60 apb #endif 1187 1.60 apb #if !HAVE_DECL_LE16ENC 1188 1.60 apb __GEN_ENDIAN_ENC(16, le) 1189 1.60 apb #endif 1190 1.60 apb #if !HAVE_DECL_LE32ENC 1191 1.60 apb __GEN_ENDIAN_ENC(32, le) 1192 1.60 apb #endif 1193 1.60 apb #if !HAVE_DECL_LE64ENC 1194 1.60 apb __GEN_ENDIAN_ENC(64, le) 1195 1.60 apb #endif 1196 1.60 apb #undef __GEN_ENDIAN_ENC 1197 1.60 apb 1198 1.60 apb #define __GEN_ENDIAN_DEC(bits, endian) \ 1199 1.60 apb static uint ## bits ## _t \ 1200 1.60 apb endian ## bits ## dec(const void *buf) \ 1201 1.60 apb { \ 1202 1.60 apb uint ## bits ## _t u; \ 1203 1.60 apb memcpy(&u, buf, sizeof(u)); \ 1204 1.60 apb return endian ## bits ## toh (u); \ 1205 1.60 apb } 1206 1.60 apb #if !HAVE_DECL_BE16DEC 1207 1.60 apb __GEN_ENDIAN_DEC(16, be) 1208 1.60 apb #endif 1209 1.60 apb #if !HAVE_DECL_BE32DEC 1210 1.60 apb __GEN_ENDIAN_DEC(32, be) 1211 1.60 apb #endif 1212 1.60 apb #if !HAVE_DECL_BE64DEC 1213 1.60 apb __GEN_ENDIAN_DEC(64, be) 1214 1.60 apb #endif 1215 1.60 apb #if !HAVE_DECL_LE16DEC 1216 1.60 apb __GEN_ENDIAN_DEC(16, le) 1217 1.60 apb #endif 1218 1.60 apb #if !HAVE_DECL_LE32DEC 1219 1.60 apb __GEN_ENDIAN_DEC(32, le) 1220 1.60 apb #endif 1221 1.60 apb #if !HAVE_DECL_LE64DEC 1222 1.60 apb __GEN_ENDIAN_DEC(64, le) 1223 1.60 apb #endif 1224 1.60 apb #undef __GEN_ENDIAN_DEC 1225 1.60 apb 1226 1.4 tv /* <sys/mman.h> */ 1227 1.3 tv 1228 1.3 tv #ifndef MAP_FILE 1229 1.3 tv #define MAP_FILE 0 1230 1.19 lukem #endif 1231 1.19 lukem 1232 1.19 lukem /* HP-UX has MAP_ANONYMOUS but not MAP_ANON */ 1233 1.19 lukem #ifndef MAP_ANON 1234 1.19 lukem #ifdef MAP_ANONYMOUS 1235 1.19 lukem #define MAP_ANON MAP_ANONYMOUS 1236 1.19 lukem #endif 1237 1.3 tv #endif 1238 1.3 tv 1239 1.4 tv /* <sys/param.h> */ 1240 1.4 tv 1241 1.4 tv #undef BIG_ENDIAN 1242 1.4 tv #undef LITTLE_ENDIAN 1243 1.81 jdc #undef PDP_ENDIAN 1244 1.4 tv #define BIG_ENDIAN 4321 1245 1.4 tv #define LITTLE_ENDIAN 1234 1246 1.81 jdc #define PDP_ENDIAN 3412 1247 1.4 tv 1248 1.4 tv #undef BYTE_ORDER 1249 1.4 tv #if WORDS_BIGENDIAN 1250 1.4 tv #define BYTE_ORDER BIG_ENDIAN 1251 1.4 tv #else 1252 1.4 tv #define BYTE_ORDER LITTLE_ENDIAN 1253 1.4 tv #endif 1254 1.4 tv 1255 1.83 tsutsui /* all references of DEV_BSIZE in tools are for NetBSD's file images */ 1256 1.83 tsutsui #undef DEV_BSIZE 1257 1.7 tv #define DEV_BSIZE (1 << 9) 1258 1.7 tv 1259 1.4 tv #undef MIN 1260 1.4 tv #undef MAX 1261 1.4 tv #define MIN(a,b) ((a) < (b) ? (a) : (b)) 1262 1.4 tv #define MAX(a,b) ((a) > (b) ? (a) : (b)) 1263 1.4 tv 1264 1.1 thorpej #ifndef MAXBSIZE 1265 1.1 thorpej #define MAXBSIZE (64 * 1024) 1266 1.1 thorpej #endif 1267 1.4 tv #ifndef MAXFRAG 1268 1.4 tv #define MAXFRAG 8 1269 1.1 thorpej #endif 1270 1.4 tv #ifndef MAXPHYS 1271 1.4 tv #define MAXPHYS (64 * 1024) 1272 1.3 tv #endif 1273 1.103 pooka #ifndef MAXHOSTNAMELEN 1274 1.103 pooka #define MAXHOSTNAMELEN 256 1275 1.103 pooka #endif 1276 1.4 tv 1277 1.6 tv /* XXX needed by makefs; this should be done in a better way */ 1278 1.6 tv #undef btodb 1279 1.6 tv #define btodb(x) ((x) << 9) 1280 1.6 tv 1281 1.6 tv #undef setbit 1282 1.6 tv #undef clrbit 1283 1.6 tv #undef isset 1284 1.6 tv #undef isclr 1285 1.6 tv #define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY)) 1286 1.6 tv #define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY))) 1287 1.6 tv #define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY))) 1288 1.6 tv #define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0) 1289 1.6 tv 1290 1.4 tv #ifndef powerof2 1291 1.4 tv #define powerof2(x) ((((x)-1)&(x))==0) 1292 1.3 tv #endif 1293 1.7 tv 1294 1.7 tv #undef roundup 1295 1.7 tv #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) 1296 1.3 tv 1297 1.125 christos #undef roundup2 1298 1.125 christos #define roundup2(x, m) ((((x) - 1) | ((m) - 1)) + 1) 1299 1.125 christos 1300 1.4 tv /* <sys/stat.h> */ 1301 1.4 tv 1302 1.4 tv #ifndef ALLPERMS 1303 1.4 tv #define ALLPERMS (S_ISUID|S_ISGID|S_ISTXT|S_IRWXU|S_IRWXG|S_IRWXO) 1304 1.4 tv #endif 1305 1.4 tv #ifndef DEFFILEMODE 1306 1.4 tv #define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) 1307 1.4 tv #endif 1308 1.3 tv #ifndef S_ISTXT 1309 1.3 tv #ifdef S_ISVTX 1310 1.3 tv #define S_ISTXT S_ISVTX 1311 1.3 tv #else 1312 1.3 tv #define S_ISTXT 0 1313 1.3 tv #endif 1314 1.6 tv #endif 1315 1.6 tv 1316 1.39 jmc /* Protected by _NETBSD_SOURCE otherwise. */ 1317 1.39 jmc #if HAVE_STRUCT_STAT_ST_FLAGS && defined(__NetBSD__) 1318 1.39 jmc #define UF_SETTABLE 0x0000ffff 1319 1.39 jmc #define UF_NODUMP 0x00000001 1320 1.39 jmc #define UF_IMMUTABLE 0x00000002 1321 1.39 jmc #define UF_APPEND 0x00000004 1322 1.39 jmc #define UF_OPAQUE 0x00000008 1323 1.39 jmc #define SF_SETTABLE 0xffff0000 1324 1.39 jmc #define SF_ARCHIVED 0x00010000 1325 1.39 jmc #define SF_IMMUTABLE 0x00020000 1326 1.39 jmc #define SF_APPEND 0x00040000 1327 1.39 jmc #endif 1328 1.39 jmc 1329 1.6 tv /* <sys/syslimits.h> */ 1330 1.6 tv 1331 1.6 tv #ifndef LINE_MAX 1332 1.6 tv #define LINE_MAX 2048 1333 1.4 tv #endif 1334 1.4 tv 1335 1.4 tv /* <sys/time.h> */ 1336 1.4 tv 1337 1.4 tv #ifndef timercmp 1338 1.4 tv #define timercmp(tvp, uvp, cmp) \ 1339 1.4 tv (((tvp)->tv_sec == (uvp)->tv_sec) ? \ 1340 1.4 tv ((tvp)->tv_usec cmp (uvp)->tv_usec) : \ 1341 1.4 tv ((tvp)->tv_sec cmp (uvp)->tv_sec)) 1342 1.4 tv #endif 1343 1.4 tv #ifndef timeradd 1344 1.4 tv #define timeradd(tvp, uvp, vvp) \ 1345 1.4 tv do { \ 1346 1.4 tv (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \ 1347 1.4 tv (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \ 1348 1.4 tv if ((vvp)->tv_usec >= 1000000) { \ 1349 1.4 tv (vvp)->tv_sec++; \ 1350 1.4 tv (vvp)->tv_usec -= 1000000; \ 1351 1.4 tv } \ 1352 1.4 tv } while (/* CONSTCOND */ 0) 1353 1.4 tv #endif 1354 1.4 tv #ifndef timersub 1355 1.4 tv #define timersub(tvp, uvp, vvp) \ 1356 1.4 tv do { \ 1357 1.4 tv (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \ 1358 1.4 tv (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \ 1359 1.4 tv if ((vvp)->tv_usec < 0) { \ 1360 1.4 tv (vvp)->tv_sec--; \ 1361 1.4 tv (vvp)->tv_usec += 1000000; \ 1362 1.4 tv } \ 1363 1.4 tv } while (/* CONSTCOND */ 0) 1364 1.4 tv #endif 1365 1.4 tv 1366 1.4 tv /* <sys/types.h> */ 1367 1.4 tv 1368 1.39 jmc #ifdef major 1369 1.39 jmc #undef major 1370 1.39 jmc #endif 1371 1.39 jmc #define major(x) ((int32_t)((((x) & 0x000fff00) >> 8))) 1372 1.39 jmc 1373 1.39 jmc #ifdef minor 1374 1.39 jmc #undef minor 1375 1.39 jmc #endif 1376 1.39 jmc #define minor(x) ((int32_t)((((x) & 0xfff00000) >> 12) | \ 1377 1.39 jmc (((x) & 0x000000ff) >> 0))) 1378 1.39 jmc #ifdef makedev 1379 1.39 jmc #undef makedev 1380 1.39 jmc #endif 1381 1.39 jmc #define makedev(x,y) ((dev_t)((((x) << 8) & 0x000fff00) | \ 1382 1.39 jmc (((y) << 12) & 0xfff00000) | \ 1383 1.39 jmc (((y) << 0) & 0x000000ff))) 1384 1.39 jmc #ifndef NBBY 1385 1.39 jmc #define NBBY 8 1386 1.39 jmc #endif 1387 1.39 jmc 1388 1.4 tv #if !HAVE_U_QUAD_T 1389 1.4 tv /* #define, not typedef, as quad_t exists as a struct on some systems */ 1390 1.4 tv #define quad_t long long 1391 1.4 tv #define u_quad_t unsigned long long 1392 1.20 lukem #define strtoq strtoll 1393 1.4 tv #define strtouq strtoull 1394 1.1 thorpej #endif 1395 1.1 thorpej 1396 1.40 jmc /* Has quad_t but these prototypes don't get pulled into scope. w/o we lose */ 1397 1.40 jmc #ifdef __NetBSD__ 1398 1.84 joerg quad_t strtoq(const char *, char **, int); 1399 1.84 joerg u_quad_t strtouq(const char *, char **, int); 1400 1.40 jmc #endif 1401 1.40 jmc 1402 1.1 thorpej #endif /* !__NETBSD_COMPAT_DEFS_H__ */ 1403