/* vfdbuf.h - VU buffered I/O decls
 *
 ****************************************************************
 * Copyright (C) 1998, 2000 Thomas Lord
 * 
 * See the file "COPYING" for further information about
 * the copyright and warranty status of this work.
 */


#ifndef INCLUDE__VU__VFDBUF_H
#define INCLUDE__VU__VFDBUF_H


#include "hackerlab/vu/vu.h"


extern struct vu_fs_discipline vfdbuf_vtable;

enum vfdbuf_buffer_flags
{
  vfdbuf_add_zero_byte = 1,
  vfdbuf_auto_shift = 2
};


/* automatically generated __STDC__ prototypes */
extern void vfdbuf_flush_all(void);
extern int vfdbuf_buffer_fd (int * errn, int fd, long bufsize, int flags, int buffer_flags);
extern int vfdbuf_set_buffer (int * errn,
                              int fd,
                              t_uchar * buffer,
                              long bufsize,
                              long read_write_pos,
                              long buffered,
                              int add_zero_byte,
                              void (*free_buffer)(t_uchar * buf, void * closure),
                              void * free_buffer_closure);
extern int vfdbuf_unbuffer_fd (int * errn, int fd);
extern int vfdbuf_is_buffered (int fd);
extern int vfdbuf_set_dont_flush (int * errn, int fd, int setting);
extern int vfdbuf_is_dont_flush (int * errn, int fd);
extern int vfdbuf_set_auto_shift (int * errn, int fd, int setting);
extern int vfdbuf_is_auto_shift (int * errn, int fd);
extern int vfdbuf_getbuf (int * errn,
                          t_uchar ** buffer,
                          long * bufsize,
                          t_uchar ** read_write_position,
                          long * buffered,
                          int * has_zero_byte,
                          int fd);
extern int vfdbuf_takebuf (int * errn,
                           t_uchar ** bufbase,
                           long * bufsize,
                           t_uchar ** read_write_pos,
                           long * buffered,
                           int * has_zero_byte,
                           int fd,
                           void (*free_buffer)(t_uchar * buf, void * closure),
                           void * free_buffer_closure);
extern int vfdbuf_shift (int * errn, int fd, long amt);
extern int vfdbuf_advance (int * errn, int fd, long amt);
extern int vfdbuf_flush (int * errn, int fd);
extern int vfdbuf_return (int * errn, int fd, t_uchar * str, long len);
extern ssize_t vfdbuf_more (int * errn,
                            t_uchar ** buffer,
                            long * bufsize,
                            t_uchar ** read_write_pos,
                            long * buffered,
                            int * has_zero_byte,
                            int fd,
                            long opt_amt);
extern int vfdbuf_is_eof (int * errn, int fd);
extern int vfdbuf_clear_eof (int * errn, int fd);
extern int vfdbuf_access (int * errn, const char * path, int mode, void * closure);
extern int vfdbuf_chdir (int * errn, const char * path, void * closure);
extern int vfdbuf_chmod (int * errn, const char * path, int mode, void * closure);
extern int vfdbuf_chown (int * errn, const char * path, int owner, int group, void * closure);
extern int vfdbuf_chroot (int * errn, const char * path, void * closure);
extern int vfdbuf_closedir (int * errn, DIR * dir, void * closure);
extern int vfdbuf_fchdir (int * errn, int fd, void * closure);
extern int vfdbuf_fchmod (int * errn, int fd, int mode, void * closure);
extern int vfdbuf_fchown (int * errn, int fd, int owner, int group, void * closure);
extern int vfdbuf_fstat (int * errn, int fd, struct stat * buf, void * closure);
extern int vfdbuf_link (int * errn, const char * from, const char * to, void * closure);
extern int vfdbuf_lstat (int * errn, const char * path, struct stat * buf, void * closure);
extern int vfdbuf_mkdir (int * errn, const char * path, int mode, void * closure);
extern int vfdbuf_open (int * errn, const char * path, int flags, int mode, void * closure);
extern int vfdbuf_opendir (int * errn, DIR ** retv,  const char * path, void * closure);
extern int vfdbuf_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir, void * closure);
extern int vfdbuf_readlink (int * errn, const char * path, char * buf, int bufsize, void * closure);
extern int vfdbuf_rename (int * errn, const char * from, const char * to, void * closure);
extern int vfdbuf_rmdir (int * errn, const char * path, void * closure);
extern int vfdbuf_stat  (int * errn, const char * path, struct stat * buf, void * closure);
extern int vfdbuf_symlink (int * errn, const char * from, const char * to, void * closure);
extern int vfdbuf_truncate (int * errn, const char * path, off_t where, void * closure);
extern int vfdbuf_unlink (int * errn, const char * path, void * closure);
extern int vfdbuf_utime (int * errn, const char * path, struct utimbuf * times, void * closure);
extern int vfdbuf_fcntl (int * errn, int fd, int cmd, long arg, void * closure);
extern int vfdbuf_dup (int * errn, int fd, void * closure);
extern int vfdbuf_dup2 (int * errn, int fd, int newfd, void * closure);
extern int vfdbuf_move_state (int * errn, int fd, int newfd, void * closure);
extern int vfdbuf_close (int * errn, int fd, void * closure);
extern int vfdbuf_fsync (int * errn, int fd, void * closure);
extern int vfdbuf_ftruncate (int * errn, int fd, off_t where, void * closure);
extern ssize_t vfdbuf_read (int * errn, int fd, char * buf, size_t count, void * closure);
extern ssize_t vfdbuf_write (int * errn, int fd, const char * buf, size_t count, void * closure);
extern off_t vfdbuf_lseek (int * errn, int fd, off_t offset, int whence, void * closure);
#endif  /* INCLUDE__VU__VFDBUF_H */
