]> mj.ucw.cz Git - libucw.git/blobdiff - ucw/lib.h
Resources: Allow res_free(NULL) and res_detach(NULL)
[libucw.git] / ucw / lib.h
index 28145ac96dedd1d37f46e56603e88ee182b11a2a..f114dbe978587e6036ad96f11cf32c677a8251bd 100644 (file)
--- a/ucw/lib.h
+++ b/ucw/lib.h
@@ -20,7 +20,7 @@
 
 #define CHECK_PTR_TYPE(x, type) ((x)-(type)(x) + (type)(x))            /** Check that a pointer @x is of type @type. Fail compilation if not. **/
 #define PTR_TO(s, i) &((s*)0)->i                                       /** Return OFFSETOF() in form of a pointer. **/
 
 #define CHECK_PTR_TYPE(x, type) ((x)-(type)(x) + (type)(x))            /** Check that a pointer @x is of type @type. Fail compilation if not. **/
 #define PTR_TO(s, i) &((s*)0)->i                                       /** Return OFFSETOF() in form of a pointer. **/
-#define OFFSETOF(s, i) ((unsigned int) (uintptr_t) PTR_TO(s, i))       /** Offset of item @i from the start of structure @s **/
+#define OFFSETOF(s, i) ((uns)offsetof(s, i))                           /** Offset of item @i from the start of structure @s **/
 #define SKIP_BACK(s, i, p) ((s *)((char *)p - OFFSETOF(s, i)))         /** Given a pointer @p to item @i of structure @s, return a pointer to the start of the struct. **/
 
 /** Align an integer @s to the nearest higher multiple of @a (which should be a power of two) **/
 #define SKIP_BACK(s, i, p) ((s *)((char *)p - OFFSETOF(s, i)))         /** Given a pointer @p to item @i of structure @s, return a pointer to the start of the struct. **/
 
 /** Align an integer @s to the nearest higher multiple of @a (which should be a power of two) **/
@@ -118,6 +118,7 @@ enum log_levels {                   /** The available log levels to pass to msg() and friends. *
 void msg(uns flags, const char *fmt, ...) FORMAT_CHECK(printf,2,3);
 void vmsg(uns flags, const char *fmt, va_list args);           /** A vararg version of msg(). **/
 void die(const char *, ...) NONRET FORMAT_CHECK(printf,1,2);   /** Log a fatal error message and exit the program. **/
 void msg(uns flags, const char *fmt, ...) FORMAT_CHECK(printf,2,3);
 void vmsg(uns flags, const char *fmt, va_list args);           /** A vararg version of msg(). **/
 void die(const char *, ...) NONRET FORMAT_CHECK(printf,1,2);   /** Log a fatal error message and exit the program. **/
+void vdie(const char *fmt, va_list args) NONRET;               /** va_list version of die() **/
 
 extern char *log_title;                        /** An optional log message title. Set to program name by log_init(). **/
 extern int log_pid;                    /** An optional PID printed in each log message. Set to 0 if it shouldn't be logged. **/
 
 extern char *log_title;                        /** An optional log message title. Set to program name by log_init(). **/
 extern int log_pid;                    /** An optional PID printed in each log message. Set to 0 if it shouldn't be logged. **/