aboutsummaryrefslogtreecommitdiff
path: root/openbsd-compat/bsd-misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsd-compat/bsd-misc.c')
-rw-r--r--openbsd-compat/bsd-misc.c55
1 files changed, 51 insertions, 4 deletions
diff --git a/openbsd-compat/bsd-misc.c b/openbsd-compat/bsd-misc.c
index 226a5915bd1d..983cd3fe6216 100644
--- a/openbsd-compat/bsd-misc.c
+++ b/openbsd-compat/bsd-misc.c
@@ -21,9 +21,7 @@
#ifdef HAVE_SYS_SELECT_H
# include <sys/select.h>
#endif
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
+#include <sys/time.h>
#include <fcntl.h>
#include <string.h>
@@ -158,6 +156,15 @@ utimensat(int fd, const char *path, const struct timespec times[2],
}
#endif
+#ifndef HAVE_DIRFD
+int
+dirfd(void *dir)
+{
+ errno = ENOSYS;
+ return -1;
+}
+#endif
+
#ifndef HAVE_FCHOWNAT
/*
* A limited implementation of fchownat() that only implements the
@@ -220,6 +227,46 @@ fchmodat(int fd, const char *path, mode_t mode, int flag)
}
#endif
+#ifndef HAVE_FSTATAT
+/*
+ * A limited implementation of fstatat that just has what OpenSSH uses:
+ * cwd-relative and absolute paths, with or without following symlinks.
+ */
+int
+fstatat(int dirfd, const char *path, struct stat *sb, int flag)
+{
+ if (dirfd != AT_FDCWD && path && path[0] != '/') {
+ errno = ENOSYS;
+ return -1;
+ }
+ if (flag == 0)
+ return stat(path, sb);
+ else if (flag == AT_SYMLINK_NOFOLLOW)
+ return lstat(path, sb);
+ errno = ENOSYS;
+ return -1;
+}
+#endif
+
+#ifndef HAVE_UNLINKAT
+/*
+ * A limited implementation of unlinkat that just has what OpenSSH uses:
+ * cwd-relative and absolute paths.
+ */
+int
+unlinkat(int dirfd, const char *path, int flag)
+{
+ if (dirfd != AT_FDCWD && path && path[0] != '/') {
+ errno = ENOSYS;
+ return -1;
+ }
+ if (flag == 0)
+ return unlink(path);
+ errno = ENOSYS;
+ return -1;
+}
+#endif
+
#ifndef HAVE_TRUNCATE
int truncate(const char *path, off_t length)
{
@@ -356,7 +403,7 @@ getpgid(pid_t pid)
#ifndef HAVE_PLEDGE
int
-pledge(const char *promises, const char *paths[])
+pledge(const char *promises, const char *execpromises)
{
return 0;
}