/* I/O operations for un-seekable files (e.g. pipes). */
extern const struct lbx_file_ops lbx_pipe_fops;
+/* I/O operations for LBX archive members. */
+extern const struct lbx_file_ops lbx_arch_fops;
+
/* Opaque */
typedef struct lbx_state LBX;
+typedef struct lbx_file_state LBXfile;
struct lbx_statbuf {
const char *name;
/* Archive operations */
LBX *lbx_open(void *handle, const struct lbx_file_ops *fops,
int (*destructor)(void *handle), const char *name);
-LBX *lbx_fopen(FILE *, const char *);
+LBX *lbx_fopen(const char *);
LBX *lbx_mopen(void *, size_t, const char *);
int lbx_close(LBX *);
size_t lbx_numfiles(LBX *);
/* File operations */
-int lbx_stat(LBX *, size_t, struct lbx_statbuf *);
-size_t lbx_extract(LBX *, size_t, FILE *);
+int lbx_stat(LBX *, size_t, struct lbx_statbuf *);
+
+LBXfile *lbx_file_open(LBX *lbx, unsigned fileno);
+size_t lbx_file_read(LBXfile *f, void *buf, size_t n);
+int lbx_file_seek(LBXfile *f, long offset, int whence);
+long lbx_file_tell(LBXfile *f);
+int lbx_file_eof(LBXfile *f);
+void lbx_file_close(LBXfile *f);
/* Misc operations */
const char *lbx_strerror(void);