183d2307dSDag-Erling Smørgrav /* 2efcad6b7SDag-Erling Smørgrav * Copyright (c) 1999-2004 Damien Miller <djm@mindrot.org> 383d2307dSDag-Erling Smørgrav * 4efcad6b7SDag-Erling Smørgrav * Permission to use, copy, modify, and distribute this software for any 5efcad6b7SDag-Erling Smørgrav * purpose with or without fee is hereby granted, provided that the above 6efcad6b7SDag-Erling Smørgrav * copyright notice and this permission notice appear in all copies. 783d2307dSDag-Erling Smørgrav * 8efcad6b7SDag-Erling Smørgrav * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9efcad6b7SDag-Erling Smørgrav * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10efcad6b7SDag-Erling Smørgrav * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11efcad6b7SDag-Erling Smørgrav * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12efcad6b7SDag-Erling Smørgrav * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13efcad6b7SDag-Erling Smørgrav * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14efcad6b7SDag-Erling Smørgrav * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1583d2307dSDag-Erling Smørgrav */ 1683d2307dSDag-Erling Smørgrav 1783d2307dSDag-Erling Smørgrav #ifndef _BSD_MISC_H 1883d2307dSDag-Erling Smørgrav #define _BSD_MISC_H 1983d2307dSDag-Erling Smørgrav 20d95e11bfSDag-Erling Smørgrav #include "includes.h" 2183d2307dSDag-Erling Smørgrav 22d95e11bfSDag-Erling Smørgrav char *ssh_get_progname(char *); 2319261079SEd Maste int seed_from_prngd(unsigned char *, size_t); 2483d2307dSDag-Erling Smørgrav 2583d2307dSDag-Erling Smørgrav #ifndef HAVE_SETSID 2683d2307dSDag-Erling Smørgrav #define setsid() setpgrp(0, getpid()) 2783d2307dSDag-Erling Smørgrav #endif /* !HAVE_SETSID */ 2883d2307dSDag-Erling Smørgrav 2983d2307dSDag-Erling Smørgrav #ifndef HAVE_SETENV 30d95e11bfSDag-Erling Smørgrav int setenv(const char *, const char *, int); 3183d2307dSDag-Erling Smørgrav #endif /* !HAVE_SETENV */ 3283d2307dSDag-Erling Smørgrav 3383d2307dSDag-Erling Smørgrav #ifndef HAVE_SETLOGIN 34d95e11bfSDag-Erling Smørgrav int setlogin(const char *); 3583d2307dSDag-Erling Smørgrav #endif /* !HAVE_SETLOGIN */ 3683d2307dSDag-Erling Smørgrav 3783d2307dSDag-Erling Smørgrav #ifndef HAVE_INNETGR 38d95e11bfSDag-Erling Smørgrav int innetgr(const char *, const char *, const char *, const char *); 3983d2307dSDag-Erling Smørgrav #endif /* HAVE_INNETGR */ 4083d2307dSDag-Erling Smørgrav 4183d2307dSDag-Erling Smørgrav #if !defined(HAVE_SETEUID) && defined(HAVE_SETREUID) 42d95e11bfSDag-Erling Smørgrav int seteuid(uid_t); 4383d2307dSDag-Erling Smørgrav #endif /* !defined(HAVE_SETEUID) && defined(HAVE_SETREUID) */ 4483d2307dSDag-Erling Smørgrav 4583d2307dSDag-Erling Smørgrav #if !defined(HAVE_SETEGID) && defined(HAVE_SETRESGID) 46d95e11bfSDag-Erling Smørgrav int setegid(uid_t); 4783d2307dSDag-Erling Smørgrav #endif /* !defined(HAVE_SETEGID) && defined(HAVE_SETRESGID) */ 4883d2307dSDag-Erling Smørgrav 4983d2307dSDag-Erling Smørgrav #if !defined(HAVE_STRERROR) && defined(HAVE_SYS_ERRLIST) && defined(HAVE_SYS_NERR) 50d95e11bfSDag-Erling Smørgrav const char *strerror(int); 5183d2307dSDag-Erling Smørgrav #endif 5283d2307dSDag-Erling Smørgrav 53462c32cbSDag-Erling Smørgrav #if !defined(HAVE_SETLINEBUF) 54462c32cbSDag-Erling Smørgrav #define setlinebuf(a) (setvbuf((a), NULL, _IOLBF, 0)) 55462c32cbSDag-Erling Smørgrav #endif 5683d2307dSDag-Erling Smørgrav 5783d2307dSDag-Erling Smørgrav #ifndef HAVE_UTIMES 5883d2307dSDag-Erling Smørgrav #ifndef HAVE_STRUCT_TIMEVAL 5983d2307dSDag-Erling Smørgrav struct timeval { 6083d2307dSDag-Erling Smørgrav long tv_sec; 6183d2307dSDag-Erling Smørgrav long tv_usec; 6283d2307dSDag-Erling Smørgrav } 6383d2307dSDag-Erling Smørgrav #endif /* HAVE_STRUCT_TIMEVAL */ 6483d2307dSDag-Erling Smørgrav 65*87c1498dSEd Maste int utimes(const char *, struct timeval *); 6683d2307dSDag-Erling Smørgrav #endif /* HAVE_UTIMES */ 6783d2307dSDag-Erling Smørgrav 6819261079SEd Maste #ifndef AT_FDCWD 6919261079SEd Maste # define AT_FDCWD (-2) 7019261079SEd Maste #endif 7119261079SEd Maste 7219261079SEd Maste #ifndef HAVE_FCHMODAT 7319261079SEd Maste int fchmodat(int, const char *, mode_t, int); 7419261079SEd Maste #endif 7519261079SEd Maste 7619261079SEd Maste #ifndef HAVE_FCHOWNAT 7719261079SEd Maste int fchownat(int, const char *, uid_t, gid_t, int); 7819261079SEd Maste #endif 7919261079SEd Maste 8083d2307dSDag-Erling Smørgrav #ifndef HAVE_TRUNCATE 81d95e11bfSDag-Erling Smørgrav int truncate (const char *, off_t); 8283d2307dSDag-Erling Smørgrav #endif /* HAVE_TRUNCATE */ 8383d2307dSDag-Erling Smørgrav 84d0c8c0bcSDag-Erling Smørgrav #ifndef HAVE_STRUCT_TIMESPEC 85d0c8c0bcSDag-Erling Smørgrav struct timespec { 86d0c8c0bcSDag-Erling Smørgrav time_t tv_sec; 87d0c8c0bcSDag-Erling Smørgrav long tv_nsec; 88d0c8c0bcSDag-Erling Smørgrav }; 8919261079SEd Maste #endif /* !HAVE_STRUCT_TIMESPEC */ 9019261079SEd Maste 9119261079SEd Maste #if !defined(HAVE_NANOSLEEP) && !defined(HAVE_NSLEEP) 9219261079SEd Maste # include <time.h> 93d95e11bfSDag-Erling Smørgrav int nanosleep(const struct timespec *, struct timespec *); 94d0c8c0bcSDag-Erling Smørgrav #endif 9583d2307dSDag-Erling Smørgrav 9619261079SEd Maste #ifndef HAVE_UTIMENSAT 9719261079SEd Maste # include <time.h> 9819261079SEd Maste /* start with the high bits and work down to minimise risk of overlap */ 9919261079SEd Maste # ifndef AT_SYMLINK_NOFOLLOW 10019261079SEd Maste # define AT_SYMLINK_NOFOLLOW 0x80000000 10119261079SEd Maste # endif 10219261079SEd Maste int utimensat(int, const char *, const struct timespec[2], int); 10319261079SEd Maste #endif /* !HAVE_UTIMENSAT */ 10419261079SEd Maste 1056888a9beSDag-Erling Smørgrav #ifndef HAVE_USLEEP 1066888a9beSDag-Erling Smørgrav int usleep(unsigned int useconds); 1076888a9beSDag-Erling Smørgrav #endif 1086888a9beSDag-Erling Smørgrav 109d95e11bfSDag-Erling Smørgrav #ifndef HAVE_TCGETPGRP 110d95e11bfSDag-Erling Smørgrav pid_t tcgetpgrp(int); 111d95e11bfSDag-Erling Smørgrav #endif 112d95e11bfSDag-Erling Smørgrav 113d95e11bfSDag-Erling Smørgrav #ifndef HAVE_TCSENDBREAK 114d95e11bfSDag-Erling Smørgrav int tcsendbreak(int, int); 115d95e11bfSDag-Erling Smørgrav #endif 116d95e11bfSDag-Erling Smørgrav 11752028650SDag-Erling Smørgrav #ifndef HAVE_UNSETENV 118462c32cbSDag-Erling Smørgrav int unsetenv(const char *); 11952028650SDag-Erling Smørgrav #endif 12052028650SDag-Erling Smørgrav 1214a421b63SDag-Erling Smørgrav #ifndef HAVE_ISBLANK 1224a421b63SDag-Erling Smørgrav int isblank(int); 1234a421b63SDag-Erling Smørgrav #endif 1244a421b63SDag-Erling Smørgrav 1256888a9beSDag-Erling Smørgrav #ifndef HAVE_GETPGID 1266888a9beSDag-Erling Smørgrav pid_t getpgid(pid_t); 1276888a9beSDag-Erling Smørgrav #endif 1286888a9beSDag-Erling Smørgrav 12919261079SEd Maste #ifndef HAVE_PSELECT 13019261079SEd Maste int pselect(int, fd_set *, fd_set *, fd_set *, const struct timespec *, 13119261079SEd Maste const sigset_t *); 13219261079SEd Maste #endif 13319261079SEd Maste 134e4a9863fSDag-Erling Smørgrav #ifndef HAVE_ENDGRENT 135e4a9863fSDag-Erling Smørgrav # define endgrent() do { } while(0) 136e4a9863fSDag-Erling Smørgrav #endif 137e4a9863fSDag-Erling Smørgrav 138e4a9863fSDag-Erling Smørgrav #ifndef HAVE_KRB5_GET_ERROR_MESSAGE 139e4a9863fSDag-Erling Smørgrav # define krb5_get_error_message krb5_get_err_text 140e4a9863fSDag-Erling Smørgrav #endif 141e4a9863fSDag-Erling Smørgrav 142e4a9863fSDag-Erling Smørgrav #ifndef HAVE_KRB5_FREE_ERROR_MESSAGE 143e4a9863fSDag-Erling Smørgrav # define krb5_free_error_message(a,b) do { } while(0) 144e4a9863fSDag-Erling Smørgrav #endif 145e4a9863fSDag-Erling Smørgrav 146acc1a9efSDag-Erling Smørgrav #ifndef HAVE_PLEDGE 147acc1a9efSDag-Erling Smørgrav int pledge(const char *promises, const char *paths[]); 148acc1a9efSDag-Erling Smørgrav #endif 149acc1a9efSDag-Erling Smørgrav 150076ad2f8SDag-Erling Smørgrav /* bsd-err.h */ 151076ad2f8SDag-Erling Smørgrav #ifndef HAVE_ERR 152076ad2f8SDag-Erling Smørgrav void err(int, const char *, ...) __attribute__((format(printf, 2, 3))); 153076ad2f8SDag-Erling Smørgrav #endif 154076ad2f8SDag-Erling Smørgrav #ifndef HAVE_ERRX 155076ad2f8SDag-Erling Smørgrav void errx(int, const char *, ...) __attribute__((format(printf, 2, 3))); 156076ad2f8SDag-Erling Smørgrav #endif 157076ad2f8SDag-Erling Smørgrav #ifndef HAVE_WARN 158076ad2f8SDag-Erling Smørgrav void warn(const char *, ...) __attribute__((format(printf, 1, 2))); 159076ad2f8SDag-Erling Smørgrav #endif 160076ad2f8SDag-Erling Smørgrav 161d93a896eSDag-Erling Smørgrav #ifndef HAVE_LLABS 162d93a896eSDag-Erling Smørgrav long long llabs(long long); 163d93a896eSDag-Erling Smørgrav #endif 164d93a896eSDag-Erling Smørgrav 16547dd1d1bSDag-Erling Smørgrav #if defined(HAVE_DECL_BZERO) && HAVE_DECL_BZERO == 0 16647dd1d1bSDag-Erling Smørgrav void bzero(void *, size_t); 16747dd1d1bSDag-Erling Smørgrav #endif 16847dd1d1bSDag-Erling Smørgrav 16947dd1d1bSDag-Erling Smørgrav #ifndef HAVE_RAISE 17047dd1d1bSDag-Erling Smørgrav int raise(int); 17147dd1d1bSDag-Erling Smørgrav #endif 17247dd1d1bSDag-Erling Smørgrav 17347dd1d1bSDag-Erling Smørgrav #ifndef HAVE_GETSID 17447dd1d1bSDag-Erling Smørgrav pid_t getsid(pid_t); 17547dd1d1bSDag-Erling Smørgrav #endif 17647dd1d1bSDag-Erling Smørgrav 17747dd1d1bSDag-Erling Smørgrav #ifndef HAVE_FLOCK 17847dd1d1bSDag-Erling Smørgrav # define LOCK_SH 0x01 17947dd1d1bSDag-Erling Smørgrav # define LOCK_EX 0x02 18047dd1d1bSDag-Erling Smørgrav # define LOCK_NB 0x04 18147dd1d1bSDag-Erling Smørgrav # define LOCK_UN 0x08 18247dd1d1bSDag-Erling Smørgrav int flock(int, int); 18347dd1d1bSDag-Erling Smørgrav #endif 18447dd1d1bSDag-Erling Smørgrav 18547dd1d1bSDag-Erling Smørgrav #ifdef FFLUSH_NULL_BUG 18647dd1d1bSDag-Erling Smørgrav # define fflush(x) (_ssh_compat_fflush(x)) 18747dd1d1bSDag-Erling Smørgrav #endif 18847dd1d1bSDag-Erling Smørgrav 18919261079SEd Maste #ifndef HAVE_LOCALTIME_R 19019261079SEd Maste struct tm *localtime_r(const time_t *, struct tm *); 19119261079SEd Maste #endif 19219261079SEd Maste 19319261079SEd Maste #ifndef HAVE_REALPATH 19419261079SEd Maste #define realpath(x, y) (sftp_realpath((x), (y))) 19519261079SEd Maste #endif 19619261079SEd Maste 19783d2307dSDag-Erling Smørgrav #endif /* _BSD_MISC_H */ 198