// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#pragma once
#include <zircon/types.h>

struct timeval;

void fuchsia_init_async(void);

int chroot(const char* path);

// Note: char** env is consumed by this function and will be freed.
int fuchsia_launch_child(const char* command, char** env, int in, int out, int err);

// This implements the subset of select() functionality used by openssh.
// Uses void* instead of fd_set* for the read/write fd sets since this compat
// header is included in smult_curve25519_ref.c, which declares a completely
// unrelated function called select(). Doesn't export exceptfds.
int fuchsia_select(int nfds, void* readfds, void* writefds,
                   struct timeval* timeout);

// Open a PTY client of |fd|, where |fd| is either a PTY server or controlling
// client. The |id| must be unique for the server. The client where |id| is 0 is
// the controlling client. Returns a file descriptor for the newly opened
// client.
int fuchsia_open_pty_client(int fd, uint32_t id);

#define CUSTOM_SYS_AUTH_PASSWD
