#include <sys/types.h>
#ifdef NORETURN
#elif defined(__GNUC__)
# define NORETURN __attribute__((noreturn))
#elif defined(__LCLINT__)
# define NORETURN x
#else
# define NORETURN
#endif
#ifdef UNUSED
#elif defined(__GNUC__)
# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
#elif defined(__LCLINT__)
# define UNUSED(x) x
#else
# define UNUSED(x) x
#endif
#if defined(__GNUC__) && ((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ > 3))
# define WARN_UNUSED __attribute__((warn_unused_result))
#else
# define WARN_UNUSED
#endif
#ifndef TRUE
# define TRUE 1
# define FALSE 0
#endif
struct dcc_hostdef;
#include "state.h"
enum dcc_compress {
DCC_COMPRESS_NONE = 69,
DCC_COMPRESS_LZO1X
};
enum dcc_protover {
DCC_VER_1 = 1,
DCC_VER_2 = 2
};
int str_endswith(const char *tail, const char *tiger);
#define dcc_trace_argv(_message, _argv) \
if (rs_trace_enabled()) { \
char *_astr; \
_astr = dcc_argv_tostr(_argv); \
rs_trace("%s: %s", _message, _astr); \
free(_astr); \
} else {}
int dcc_trace_version(void);
int dcc_show_version(const char *prog);
int dcc_parse_hosts_env(struct dcc_hostdef **ret_list,
int *ret_nhosts);
int dcc_parse_hosts(const char *where, const char *source_name,
struct dcc_hostdef **ret_list,
int *ret_nhosts);
int dcc_ncpus(int *);
#if defined(__APPLE__)
int dcc_cpuspeed(unsigned long long *speed);
#endif
int dcc_ssh_connect(char *ssh_cmd, char *user,
char *machine, char *path,
int *f_in, int *f_out,
pid_t *ssh_pid);
int dcc_increment_safeguard(void);
int dcc_recursion_safeguard(void);
int dcc_x_req_header(int fd,
enum dcc_protover protover);
int dcc_x_argv(int fd, char **argv);
int dcc_send_job_corked(int net_fd,
char **argv,
pid_t cpp_pid,
int *status,
const char *,
const char *cpp_fname,
struct dcc_hostdef *);
int dcc_retrieve_results(int net_fd,
int *status, const char *output_fname,
struct dcc_hostdef *);
int dcc_support_masquerade(char *argv[], char *progname, int *);
int dcc_enjoyed_host(const struct dcc_hostdef *host);
int dcc_disliked_host(const struct dcc_hostdef *host);
int dcc_remove_disliked(struct dcc_hostdef **hostlist);
#define DISTCC_DEFAULT_PORT 3632
#ifndef WAIT_ANY
# define WAIT_ANY (-1)
#endif
#ifdef ENABLE_RFC2553
# ifndef HAVE_SOCKADDR_STORAGE
# error You can't use RFC2553 because you don't have a sockaddr_storage type
# endif
# define dcc_sockaddr_storage sockaddr_storage
#else
# define dcc_sockaddr_storage sockaddr
#endif
#ifndef O_BINARY
# define O_BINARY 0
#endif
void dcc_set_trace_from_env(void);
int dcc_r_bulk_lzo1x(int outf_fd,
int in_fd,
unsigned in_len);
int dcc_compress_file_lzo1x(int in_fd,
size_t in_len,
char **out_buf,
size_t *out_len);
void dcc_calc_rate(off_t size_out,
struct timeval *before,
struct timeval *after,
double *secs,
double *rate);
int dcc_set_action_opt(char **, const char *);
int dcc_set_output(char **, char *);
int dcc_set_input(char **, char *);
int dcc_scan_args(char *argv[], char **orig_o,
char **orig_i, char ***ret_newargv);
int dcc_argv_len(char **a);
int dcc_argv_search(char **a, const char *);
int dcc_copy_argv(char **, char ***, int);
char *dcc_argv_tostr(char **a);
void dcc_free_argv(char **argv);
int dcc_get_tempdir(const char **);
int dcc_make_tmpnam(const char *, const char *suffix, char **);
int dcc_mkdir(const char *path) WARN_UNUSED;
int dcc_get_lock_dir(char **path_ret) WARN_UNUSED;
int dcc_get_state_dir(char **path_ret) WARN_UNUSED;
int dcc_get_top_dir(char **path_ret) WARN_UNUSED;
int dcc_get_tmp_top(const char **p_ret) WARN_UNUSED;
int dcc_get_tmpfile_path(const char *file_part, char **path_ret);
int dcc_set_owner(const char *path);
void dcc_cleanup_tempfiles(void);
int dcc_add_cleanup(char *filename) WARN_UNUSED;
int dcc_strip_local_args(char **from, char ***out_argv);
int dcc_strip_dasho(char **from, char ***out_argv);
int dcc_cpp_maybe(char **argv, char *input_fname, char **cpp_fname,
pid_t *cpp_pid);
int dcc_is_source(const char *sfile);
int dcc_is_preprocessed(const char *sfile);
int dcc_is_object(const char *filename);
int dcc_source_needs_local(const char *);
char * dcc_find_extension(char *sfile);
int dcc_output_from_source(const char *sfile, const char *out_extn,
char **ofile);
const char * dcc_preproc_exten(const char *e);
const char * dcc_find_basename(const char *sfile);
int dcc_writex(int fd, const void *buf, size_t len);
int dcc_r_token(int ifd, char *token);
int dcc_readx(int fd, void *buf, size_t len);
int dcc_pump_sendfile(int ofd, int ifd, size_t n);
int dcc_r_str_alloc(int fd, unsigned len, char **buf);
int tcp_cork_sock(int fd, int corked);
int dcc_close(int fd);
int dcc_want_mmap(void);
int dcc_select_for_write(int fd, int timeout);
int dcc_select_for_read(int fd, int timeout);
int dcc_load_file_string(const char *filename,
char **retbuf);
extern const int dcc_connect_timeout, dcc_io_timeout;
int dcc_r_bulk(int ofd,
int ifd,
unsigned f_size,
enum dcc_compress compression);
int dcc_pump_readwrite(int ofd, int ifd, size_t n);
int dcc_map_input_file(int in_fd, off_t in_size, char **buf_ret);
#ifdef MAXPATHLEN
# undef MAXPATHLEN
#endif
#define MAXPATHLEN 4096
#ifndef WCOREDUMP
# define WCOREDUMP(status) 0
#endif