wip
[oweals/gnunet.git] / src / include / gnunet_common.h
index 550b44c4416c7fd88e92a460828002fcd2769371..73945a809b1a9c30569ffa1e6915ff67dc1831ca 100644 (file)
 #ifdef MINGW
 #include "winproc.h"
 #endif
-
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef HAVE_STDARG_H
+#include <stdarg.h>
+#endif
 /**
  * Version of the API (for entire gnunetutil.so library).
  */
@@ -132,6 +138,7 @@ typedef int (*GNUNET_FileNameCallback) (void *cls, const char *filename);
  */
 enum GNUNET_ErrorType
 {
+  GNUNET_ERROR_TYPE_NONE = 0,
   GNUNET_ERROR_TYPE_ERROR = 1,
   GNUNET_ERROR_TYPE_WARNING = 2,
   GNUNET_ERROR_TYPE_INFO = 4,
@@ -140,6 +147,7 @@ enum GNUNET_ErrorType
   GNUNET_ERROR_TYPE_BULK = 32
 };
 
+
 /**
  * User-defined handler for log messages.
  *
@@ -201,6 +209,7 @@ int
 GNUNET_log_setup (const char *comp,
                   const char *loglevel, const char *logfile);
 
+
 /**
  * Add a custom logger.
  *
@@ -209,6 +218,7 @@ GNUNET_log_setup (const char *comp,
  */
 void GNUNET_logger_add (GNUNET_Logger logger, void *logger_cls);
 
+
 /**
  * Remove a custom logger.
  *
@@ -228,6 +238,7 @@ void GNUNET_logger_remove (GNUNET_Logger logger, void *logger_cls);
  */
 const char *GNUNET_h2s (const GNUNET_HashCode *hc);
 
+
 /**
  * Convert a hash value to a string (for printing debug messages).
  * This prints all 104 characters of a hashcode!
@@ -239,6 +250,7 @@ const char *GNUNET_h2s (const GNUNET_HashCode *hc);
  */
 const char *GNUNET_h2s_full (const GNUNET_HashCode *hc);
 
+
 /**
  * Convert a peer identity to a string (for printing debug messages).
  * This is one of the very few calls in the entire API that is
@@ -272,6 +284,7 @@ const char *GNUNET_a2s (const struct sockaddr *addr,
  */
 const char *GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
 
+
 /**
  * Use this for fatal errors that cannot be handled
  */
@@ -346,6 +359,15 @@ unsigned long long GNUNET_htonll (unsigned long long n);
  */
 #define GNUNET_malloc(size) GNUNET_xmalloc_(size, __FILE__, __LINE__)
 
+/**
+ * Allocate and initialize a block of memory.
+ * 
+ * @param buf data to initalize the block with
+ * @param size the number of bytes in buf (and size of the allocation)
+ * @return pointer to size bytes of memory, never NULL (!)
+ */
+#define GNUNET_memdup(buf,size) GNUNET_xmemdup_(buf, size, __FILE__, __LINE__)
+
 /**
  * Wrapper around malloc. Allocates size bytes of memory.
  * The memory will be zero'ed out.
@@ -471,6 +493,21 @@ int GNUNET_asprintf (char **buf, const char *format, ...);
 void *GNUNET_xmalloc_ (size_t size, const char *filename, int linenumber);
 
 
+
+/**
+ * Allocate and initialize memory. Checks the return value, aborts if no more
+ * memory is available.  Don't use GNUNET_xmemdup_ directly. Use the
+ * GNUNET_memdup macro.
+ *
+ * @param buf buffer to initialize from (must contain size bytes)
+ * @param size number of bytes to allocate
+ * @param filename where is this call being made (for debugging)
+ * @param linenumber line where this call is being made (for debugging)
+ * @return allocated memory, never NULL
+ */
+void *GNUNET_xmemdup_ (const void *buf, size_t size, const char *filename, int linenumber);
+
+
 /**
  * Allocate memory.  This function does not check if the allocation
  * request is within reasonable bounds, allowing allocations larger