xref: /freebsd/crypto/openssh/openbsd-compat/bsd-misc.h (revision 87c1498d1a7473ff983e5c0456f30608f3f1e601)
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