]> mj.ucw.cz Git - libucw.git/blobdiff - lib/lib.h
Allow locked dirty pages. Better debugging. Simplified and cleaned up
[libucw.git] / lib / lib.h
index 2e1225f8dd30e379f50e9bce17b0f14cb85a5ed8..72337d93ea93b5118cd0aa180ce06ab174b1540d 100644 (file)
--- a/lib/lib.h
+++ b/lib/lib.h
@@ -9,6 +9,12 @@
 
 #include <lib/config.h>
 
+/* Ugly structure handling macros */
+
+#define OFFSETOF(s, i) ((unsigned int)&((s *)0)->i)
+#define SKIP_BACK(s, i, p) ((s *)((char *)p - OFFSETOF(s, i)))
+#define ALIGN(s, a) (((s)+a-1)&~(a-1))
+
 /* Temporary Files */
 
 #define TMP_DIR "tmp"
@@ -21,7 +27,7 @@ struct tempfile {
 
 void open_temp(struct tempfile *, byte *);
 void delete_temp(struct tempfile *);
-ulg temprand(uns);
+u32 temprand(uns);
 
 #define TF_GENERIC "t"
 #define TF_QUEUE_CONTROL "c"
@@ -46,6 +52,7 @@ struct cfitem {
 typedef byte *(*ci_func)(struct cfitem *, byte *);
 
 void cf_read(byte *, struct cfitem *);
+int cf_read_err(byte *, struct cfitem *); /* Read with possible error, 1 = succeeded */
 
 /* Logging */
 
@@ -60,6 +67,12 @@ void die(byte *, ...) NONRET;
 void initlog(byte *);
 void open_log_file(byte *);
 
+#ifdef DEBUG
+#define ASSERT(x) do { if (!(x)) die("Assertion `%s' failed at %s:%d", #x, __FILE__, __LINE__); } while(0)
+#else
+#define ASSERT(x) do { } while(0)
+#endif
+
 /* Allocation */
 
 void *xmalloc(uns);
@@ -78,7 +91,7 @@ int match_ct_filter(struct ct_filter *, byte *);
 
 /* Binary log */
 
-int log2(ulg);
+int log2(u32);
 
 /* obj.c */
 
@@ -94,7 +107,7 @@ struct oattr {                               /* Object attribute */
 };
 
 void obj_dump(struct odes *);
-struct odes *obj_fload(FILE *);
+struct odes *obj_fload(FILE *, byte *);
 struct odes *obj_new(void);
 struct odes *obj_load(byte *);
 void obj_fwrite(FILE *, struct odes *);
@@ -113,9 +126,9 @@ struct oattr *prepend_attr(struct odes *, uns, byte *);
 
 #define OID_MIN 0x10000                /* Values less than this have special meaning */
 
-ulg new_oid(uns);
-void mk_obj_name(byte *, ulg, byte *);
-int dump_obj_to_file(byte *, ulg, struct odes *, int);
+oid_t new_oid(uns);
+void mk_obj_name(byte *, oid_t, byte *);
+int dump_obj_to_file(byte *, oid_t, struct odes *, int);
 
 /* wordsplit.c */
 
@@ -153,4 +166,16 @@ void rx_free(regex *r);
 int rx_match(regex *r, byte *s);
 int rx_subst(regex *r, byte *by, byte *src, byte *dest, uns destlen);
 
+/* objwalk.c */
+
+void scan_obj_tree(byte *, void (*)(oid_t, byte *));
+
+/* random.c */
+
+uns random_max(uns);
+
+/* mmap.c */
+
+void *mmap_file(byte *name, unsigned *len);
+
 #endif