]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - compat/xalloc.h
SourceFormat Enforcement
[thirdparty/squid.git] / compat / xalloc.h
index 14cb5dd65e1ea768f35dc77a372cc97a9f2330e1..2368f5f679bcc7a7f34d8acd70e5c711179a9bcf 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
+ *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
+ */
+
 #ifndef _SQUID_COMPAT_XALLOC_H
 #define _SQUID_COMPAT_XALLOC_H
 
@@ -30,27 +38,29 @@ void *xmalloc(size_t sz);
 void *xrealloc(void *s, size_t sz);
 
 /**
- *  xfree() - same as free(3).  Used for portability.
- *   Will not call free(3) if s == NULL.
+ * free_const() - Same as free(3).  Used for portability.
+ * Accepts pointers to dynamically allocated const data.
  *
  * Define failure_notify to receive error message.
  * otherwise perror() is used to display it.
  */
-void xfree(void *s);
+void free_const(const void *s);
 
 /**
- * xxfree() / free_const() - Same as free(3).  Used for portability.
+ *  xfree() - same as free(3).  Used for portability.
  * Accepts pointers to dynamically allocated const data.
+ * Will not call free(3) if the pointer is NULL.
+ *
+ * Pointer is left with a value on completion.
+ * Use safe_free() if the pointer needs to be set to NULL afterward.
  *
  * Define failure_notify to receive error message.
  * otherwise perror() is used to display it.
  */
-void free_const(const void *s);
-
-/// Backward compatibility alias for free_const(const void *s)
-#define xxfree(x)  free_const((x))
+static inline void xfree(const void *p) { if (p) free_const(p); }
 
 /**
+ *  safe_free() - same as free(3).  Used for portability.
  * Accepts pointers to dynamically allocated const data.
  * Will not call free(3) if the pointer is NULL.
  * Sets the pointer to NULL on completion.
@@ -60,15 +70,15 @@ void free_const(const void *s);
  * Define failure_notify to receive error message.
  * otherwise perror() is used to display it.
  */
-#define safe_free(x)    if ((x)) { xxfree((x)); (x) = NULL; } else (void)0
-
-
-#if XMALLOC_STATISTICS
-void malloc_statistics(void (*func) (int, int, int, void *), void *data);
-#endif
+#define safe_free(x)    while ((x)) { free_const((x)); (x) = NULL; }
 
 #ifdef __cplusplus
 }
 #endif
 
+#if XMALLOC_STATISTICS
+extern void malloc_statistics(void (*func) (int, int, int, void *), void *data);
+#endif
+
 #endif /* _SQUID_COMPAT_XALLOC_H */
+