#include <u.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/uio.h>
#include <sys/socket.h>
#include <libc.h>
#include <fcall.h>
#include <thread.h>
#include <9pclient.h>
#include "fuse_kernel.h"

/* Somehow the FUSE guys forgot to define this one! */
struct fuse_create_out {
	struct fuse_entry_out e;
	struct fuse_open_out o;
};

typedef struct FuseMsg FuseMsg;
struct FuseMsg
{
	FuseMsg *next;
	uchar *buf;
	int nbuf;
	struct fuse_in_header *hdr;	/* = buf */
	void *tx;	/* = hdr+1 */
};

extern int debug;

extern int fusefd;
extern int fuseeof;
extern int fusebufsize;
extern int fusemaxwrite;
extern FuseMsg *fusemsglist;
extern char *fusemtpt;

void		freefusemsg(FuseMsg *m);
int		fusefmt(Fmt*);
void		initfuse(char *mtpt);
void	waitfuse(void);
FuseMsg*	readfusemsg(void);
void		replyfuse(FuseMsg *m, void *arg, int narg);
void		replyfuseerrno(FuseMsg *m, int e);
void		replyfuseerrstr(FuseMsg*);
void		request9p(Fcall *tx);

void*		emalloc(uint n);
void*		erealloc(void *p, uint n);
char*		estrdup(char *p);

int		errstr2errno(void);
void unmountatexit(void);
