From: Ian Jackson <ian.jackson@eu.citrix.com>
To: xen-devel@lists.xensource.com
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Subject: [PATCH 11/20] libxl: Introduce some convenience macros
Date: Fri, 16 Mar 2012 16:26:46 +0000 [thread overview]
Message-ID: <1331915215-10477-12-git-send-email-ian.jackson@eu.citrix.com> (raw)
In-Reply-To: <1331915215-10477-1-git-send-email-ian.jackson@eu.citrix.com>
We introduce:
<type> *GCNEW(<type> *var);
<type> *GCNEW_ARRAY(<type> *var, ssize_t nmemb);
<type> *GCREALLOC_ARRAY(<type> *var, size_t nmemb);
char *GCSPRINTF(const char *fmt, ...);
void LOG(<xtl_level_suffix>, const char *fmt, ...);
void LOGE(<xtl_level_suffix>, const char *fmt, ...);
void LOGEV(<xtl_level_suffix>, int errnoval, const char *fmt, ...);
all of which expect, in the calling context,
libxl__gc *gc;
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
tools/libxl/libxl_internal.h | 72 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 86f25be..465d564 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -1346,6 +1346,78 @@ _hidden void libxl__ao__destroy(libxl_ctx*, libxl__ao *ao);
#define GC_FREE libxl__free_all(gc)
#define CTX libxl__gc_owner(gc)
+/* Allocation macros all of which use the gc. */
+
+#define ARRAY_SIZE_OK(ptr, nmemb) ((nmemb) < INT_MAX / (sizeof(*(ptr)) * 2))
+
+/*
+ * Expression statement <type> *GCNEW(<type> *var);
+ * Uses libxl__gc *gc;
+ *
+ * Allocates a new object of type <type> from the gc and zeroes it
+ * with memset. Sets var to point to the new object or zero (setting
+ * errno). Returns the new value of var.
+ */
+#define GCNEW(var) \
+ (((var) = libxl__zalloc((gc),sizeof(*(var)))))
+
+/*
+ * Expression statement <type> *GCNEW_ARRAY(<type> *var, ssize_t nmemb);
+ * Uses libxl__gc *gc;
+ *
+ * Like GCNEW but allocates an array of nmemb elements, as if from
+ * calloc. Does check for integer overflow due to large nmemb. If
+ * nmemb is 0 may succeed by returning 0.
+ */
+#define GCNEW_ARRAY(var, nmemb) \
+ ((var) = libxl__calloc((gc), (nmemb), sizeof(*(var))))
+
+/*
+ * Expression statement <type> *GCREALLOC_ARRAY(<type> *var, size_t nmemb);
+ * Uses libxl__gc *gc;
+ *
+ * Reallocates the array var to be of size nmemb elements. Updates
+ * var and returns the new value of var. Does check for integer
+ * overflow due to large nmemb.
+ *
+ * Do not pass nmemb==0. old may be 0 on entry.
+ */
+#define GCREALLOC_ARRAY(var, nmemb) \
+ (assert(nmemb > 0), \
+ assert(ARRAY_SIZE_OK((var), (nmemb))), \
+ (var) = libxl__realloc((gc), (var), (nmemb)*sizeof(*(var)))))
+
+
+/*
+ * Expression char *GCSPRINTF(const char *fmt, ...);
+ * Uses libxl__gc *gc;
+ *
+ * Trivial convenience wrapper for libxl__sprintf.
+ */
+#define GCSPRINTF(fmt, ...) (libxl__sprintf((gc), (fmt), __VA_ARGS__))
+
+
+/*
+ * Expression statements
+ * void LOG(<xtl_level_suffix>, const char *fmt, ...);
+ * void LOGE(<xtl_level_suffix>, const char *fmt, ...);
+ * void LOGEV(<xtl_level_suffix>, int errnoval, const char *fmt, ...);
+ * Use
+ * libxl__gc *gc;
+ *
+ * Trivial convenience wrappers for LIBXL__LOG, LIBXL__LOG_ERRNO and
+ * LIBXL__LOG_ERRNOVAL, respectively (and thus for libxl__log).
+ *
+ * XTL_<xtl_level_suffix> should exist and be an xentoollog.h log level
+ * So <xtl_level_suffix> should be one of
+ * DEBUG VERBOSE DETAIL PROGRESS INFO NOTICE WARN ERROR ERROR CRITICAL
+ * Of these, most of libxl uses
+ * DEBUG INFO WARN ERROR
+ */
+#define LOG(l,f, ...) LIBXL__LOG(CTX,XTL_##l,(f),##__VA_ARGS__)
+#define LOGE(l,f, ...) LIBXL__LOG_ERRNO(CTX,XTL_##l,(f),##__VA_ARGS__)
+#define LOGEV(l,e,f, ...) LIBXL__LOG_ERRNOVAL(CTX,XTL_##l,(e),(f),##__VA_ARGS__)
+
/* Locking functions. See comment for "lock" member of libxl__ctx. */
--
1.7.2.5
next prev parent reply other threads:[~2012-03-16 16:26 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-16 16:26 [RFC PATCH 00/20] libxl child process handling Ian Campbell <Ian.Campbell@citrix.com>, Stefano Stabellini <stefano.stabellini@eu.citrix.com> Ian Jackson
2012-03-16 16:26 ` [PATCH 01/20] libxl: ao: allow immediate completion Ian Jackson
2012-03-19 17:29 ` Ian Campbell
2012-03-16 16:26 ` [PATCH 02/20] libxl: fix hang due to libxl__initiate_device_remove Ian Jackson
2012-03-19 17:29 ` Ian Campbell
2012-03-16 16:26 ` [PATCH 03/20] libxl: Fix eventloop_iteration over-locking Ian Jackson
2012-03-19 17:31 ` Ian Campbell
2012-03-19 17:48 ` Ian Jackson
2012-03-20 9:44 ` Ian Campbell
2012-03-16 16:26 ` [PATCH 04/20] libxl: Fix leak of ctx->lock Ian Jackson
2012-03-16 16:26 ` [PATCH 05/20] libxl: abolish libxl_ctx_postfork Ian Jackson
2012-03-16 16:26 ` [PATCH 06/20] tools: Correct PTHREAD options in config/StdGNU.mk Ian Jackson
2012-03-17 15:41 ` Roger Pau Monné
2012-03-19 16:34 ` Ian Jackson
2012-03-20 9:43 ` Ian Campbell
2012-03-20 16:05 ` Ian Jackson
2012-03-20 16:37 ` Tim Deegan
[not found] ` <CAPLaKK4+TRroEox2ScUS=NZ7G7NZ4D2wpmvDZEjST5AGByRwUg@mail.gmail.com>
2012-03-20 16:47 ` Roger Pau Monné
2012-03-20 16:55 ` Ian Campbell
2012-03-16 16:26 ` [PATCH 07/20] libxl: Use PTHREAD_CFLAGS, LDFLAGS, LIBS Ian Jackson
2012-03-20 9:43 ` Ian Campbell
2012-03-16 16:26 ` [PATCH 08/20] tools: Use PTHREAD_CFLAGS, _LDFLAGS, _LIBS Ian Jackson
2012-03-20 9:44 ` Ian Campbell
2012-03-16 16:26 ` [PATCH 09/20] libxl: Crash (more sensibly) on malloc failure Ian Jackson
2012-03-20 10:17 ` Ian Campbell
2012-03-20 16:22 ` Ian Jackson
2012-03-20 16:25 ` Ian Campbell
2012-03-16 16:26 ` [PATCH 10/20] libxl: Make libxl__zalloc et al tolerate a NULL gc Ian Jackson
2012-03-20 10:21 ` Ian Campbell
2012-03-20 16:26 ` Ian Jackson
2012-03-20 16:34 ` Ian Campbell
2012-03-16 16:26 ` Ian Jackson [this message]
2012-03-20 11:37 ` [PATCH 11/20] libxl: Introduce some convenience macros Ian Campbell
2012-03-20 16:39 ` Ian Jackson
2012-03-20 16:44 ` Ian Campbell
2012-03-16 16:26 ` [PATCH 12/20] libxl: Protect fds with CLOEXEC even with forking threads Ian Jackson
2012-03-20 11:53 ` Ian Campbell
2012-03-20 16:59 ` Ian Jackson
2012-03-16 16:26 ` [PATCH 13/20] libxl: libxl_event.c:beforepoll_internal, REQUIRE_FDS Ian Jackson
2012-03-20 12:06 ` Ian Campbell
2012-03-16 16:26 ` [PATCH 14/20] libxl: include <ctype.h> and introduce CTYPE helper macro Ian Jackson
2012-03-20 12:12 ` Ian Campbell
2012-03-20 17:02 ` Ian Jackson
2012-03-16 16:26 ` [PATCH 15/20] libxl: include <_libxl_paths.h> in libxl_internal.h Ian Jackson
2012-03-20 12:13 ` Ian Campbell
2012-03-20 23:20 ` Roger Pau Monné
2012-03-20 23:57 ` Roger Pau Monné
2012-03-21 11:31 ` Ian Jackson
2012-03-21 12:10 ` Roger Pau Monné
2012-03-21 12:20 ` Ian Jackson
2012-03-16 16:26 ` [PATCH 16/20] libxl: event API: new facilities for waiting for subprocesses Ian Jackson
2012-03-20 12:47 ` Ian Campbell
2012-03-20 17:24 ` Ian Jackson
2012-03-20 17:39 ` Ian Campbell
2012-03-21 11:26 ` Ian Jackson
2012-03-16 16:26 ` [PATCH 17/20] libxl: Provide libxl_string_list_length Ian Jackson
2012-03-20 12:48 ` Ian Campbell
2012-03-16 16:26 ` [PATCH 18/20] libxl: Introduce libxl__sendmsg_fds and libxl__recvmsg_fds Ian Jackson
2012-03-20 12:51 ` Ian Campbell
2012-03-16 16:26 ` [PATCH 19/20] libxl: Clean up setdefault in do_domain_create Ian Jackson
2012-03-16 19:08 ` Ian Campbell
2012-03-16 16:26 ` [PATCH 20/20] libxl: ao: Convert libxl_run_bootloader Ian Jackson
2012-03-20 13:49 ` Ian Campbell
2012-03-20 17:36 ` Ian Jackson
2012-03-21 12:17 ` Ian Jackson
2012-03-21 12:25 ` Ian Campbell
2012-03-21 13:19 ` Ian Jackson
2012-03-22 15:36 ` Roger Pau Monné
2012-03-22 16:27 ` Ian Jackson
2012-03-22 16:36 ` Roger Pau Monné
2012-03-22 16:37 ` Roger Pau Monné
2012-03-22 17:02 ` Ian Jackson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1331915215-10477-12-git-send-email-ian.jackson@eu.citrix.com \
--to=ian.jackson@eu.citrix.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).