]> git.draconx.ca Git - liblbx.git/blobdiff - src/lbx.h
liblbx: Rename lbx_stat to lbx_file_stat.
[liblbx.git] / src / lbx.h
index 563ef4eb81e55b30195a05559cdaaad4c5d60773..3570803e4958c18284c45e8dd2bfc84d53a18430 100644 (file)
--- a/src/lbx.h
+++ b/src/lbx.h
@@ -1,25 +1,65 @@
 #ifndef LBX_H_
 #define LBX_H_
 
-#include <stddef.h>
+#include <stdio.h>
 
 /* Errors */
 enum {
        LBX_ESUCCESS,
        LBX_EMAGIC,
        LBX_EEOF,
+       LBX_ERANGE,
+       LBX_EFORMAT,
 };
 extern int lbx_errno;
 
+struct lbx_file_ops {
+       size_t (*read)(void *buf, size_t size, void *handle);
+       int    (*seek)(void *handle, long offset, int whence);
+       long   (*tell)(void *handle);
+       int    (*eof) (void *handle);
+};
+
+struct lbx_pipe_state {
+       FILE *f;
+       long offset;
+};
+
+/* Default I/O operations for ordinary files. */
+extern const struct lbx_file_ops lbx_default_fops;
+
+/* 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;
 
-/* File operations */
-LBX   *lbx_fopen(FILE *);
-LBX   *lbx_open(const char *);
-void   lbx_close(LBX *);
+struct lbx_statbuf {
+       const char *name;
+       size_t size;
+};
+
+/* Archive operations */
+LBX   *lbx_open(void *handle, const struct lbx_file_ops *fops,
+                int (*destructor)(void *handle), const char *name);
+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_file_stat(LBX *lbx, unsigned fileno, struct lbx_statbuf *out);
+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);