[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 2/3] libxenlight: correct broken osdeps.[ch] and make #includes consistent



osdeps.[hc] previously mistakenly declared and defined [v]asprintf.
These functions are available in the libc on most platforms.  Also,
osdeps.h is used by xc.c but xc.c is not part of the library, so
osdeps.h is part of the public interface and should have a better name.

So now, instead:

 * osdeps.h is libxl_osdeps.h.

 * _GNU_SOURCE is #defined in libxl_osdeps.h so that we get the system
   [v]asprintf (and various other functions)

 * libxl_osdeps.h is included first in every libxl*.c file (it needs to
   be before any system headers so that _GNU_SOURCE) takes effect.

 * osdeps.[hc] only provide their own reimplementation of [v]asprintf
   if NEED_OWN_ASPRINTF is defined.  Currently it is not ever defined
   but this is provided for any platform which needs it.

 * While I was editing the #includes in each .c file, I put them all
   into the same order: "libxl_osdeps.h", then system headers,
   then local headers.

 * xs.h is included in libxl.h.  This is needed for "bool"; it has to
   not be typedefed in libxl.h because otherwise we get a duplicate
   definition when including xs.h.

Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
---
 tools/libxl/Makefile         |    3 +--
 tools/libxl/libxl.c          |    3 +++
 tools/libxl/libxl.h          |    5 ++---
 tools/libxl/libxl_device.c   |    7 +++++--
 tools/libxl/libxl_dom.c      |   16 ++++++++++------
 tools/libxl/libxl_exec.c     |    3 +++
 tools/libxl/libxl_internal.c |   10 +++++++---
 tools/libxl/libxl_osdeps.h   |   33 +++++++++++++++++++++++++++++++++
 tools/libxl/libxl_utils.c    |    6 ++++--
 tools/libxl/libxl_xshelp.c   |    7 +++++--
 tools/libxl/osdeps.c         |    4 ++++
 tools/libxl/osdeps.h         |   26 --------------------------
 tools/libxl/xl.c             |    7 +++++--
 13 files changed, 82 insertions(+), 48 deletions(-)
 create mode 100644 tools/libxl/libxl_osdeps.h
 delete mode 100644 tools/libxl/osdeps.h

diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile
index 492d6d9..0358cea 100644
--- a/tools/libxl/Makefile
+++ b/tools/libxl/Makefile
@@ -23,8 +23,7 @@ LIBCONFIG_URL ?= http://www.hyperrealm.com/libconfig
 LIBCONFIG_SOURCE = libconfig-1.3.2
 LIBCONFIG_OUTPUT = $(LIBCONFIG_SOURCE)/.libs
 
-LIBXL_OBJS-y =
-LIBXL_OBJS-$(CONFIG_Linux) += osdeps.o
+LIBXL_OBJS-y = osdeps.o
 LIBXL_OBJS = flexarray.o libxl.o libxl_dom.o libxl_exec.o libxl_xshelp.o 
libxl_device.o libxl_internal.o xenguest.o libxl_utils.o $(LIBXL_OBJS-y)
 
 CLIENTS = xl
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 5e2f23b..421628c 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -14,6 +14,8 @@
  * GNU Lesser General Public License for more details.
  */
 
+#include "libxl_osdeps.h"
+
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -25,6 +27,7 @@
 #include <unistd.h> /* for write, unlink and close */
 #include <stdint.h>
 #include <inttypes.h>
+
 #include "libxl.h"
 #include "libxl_utils.h"
 #include "libxl_internal.h"
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index 0c6f168..ac4c79e 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -15,14 +15,13 @@
 #ifndef LIBXL_H
 #define LIBXL_H
 
-#include "osdeps.h"
 #include <stdint.h>
 #include <stdarg.h>
 #include <netinet/in.h>
 #include <xenctrl.h>
-#include "xen_uuid.h"
+#include <xs.h>
 
-typedef int bool;
+#include "xen_uuid.h"
 
 typedef void (*libxl_log_callback)(void *userdata, int loglevel, const char 
*file,
                                    int line, const char *func, char *s);
diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c
index 82a2a30..451233f 100644
--- a/tools/libxl/libxl_device.c
+++ b/tools/libxl/libxl_device.c
@@ -14,15 +14,18 @@
  * GNU Lesser General Public License for more details.
  */
 
+#include "libxl_osdeps.h"
+
 #include <string.h>
 #include <stdio.h>
-#include "libxl.h"
-#include "libxl_internal.h"
 #include <sys/time.h> /* for struct timeval */
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
+#include "libxl.h"
+#include "libxl_internal.h"
+
 char *string_of_kinds[] = {
     [DEVICE_VIF] = "vif",
     [DEVICE_VBD] = "vbd",
diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
index eaea6f3..177c16c 100644
--- a/tools/libxl/libxl_dom.c
+++ b/tools/libxl/libxl_dom.c
@@ -13,17 +13,21 @@
  * GNU Lesser General Public License for more details.
  */
 
-#include "libxl.h"
-#include "libxl_internal.h"
+#include "libxl_osdeps.h"
+
 #include <stdio.h>
 #include <inttypes.h>
-#include <xenguest.h>
-#include <xenctrl.h>
-#include <xc_dom.h>
 #include <string.h>
 #include <sys/time.h> /* for struct timeval */
 #include <unistd.h> /* for sleep(2) */
 
+#include <xenctrl.h>
+#include <xc_dom.h>
+#include <xenguest.h>
+
+#include "libxl.h"
+#include "libxl_internal.h"
+
 int is_hvm(struct libxl_ctx *ctx, uint32_t domid)
 {
     xc_domaininfo_t info;
@@ -110,7 +114,7 @@ int build_pv(struct libxl_ctx *ctx, uint32_t domid,
 
     dom = xc_dom_allocate(info->u.pv.cmdline, info->u.pv.features);
     if (!dom) {
-        XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, dom, "xc_dom_allocate failed");
+        XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "xc_dom_allocate failed");
         return -1;
     }
     if ((ret = xc_dom_linux_build(ctx->xch, dom, domid, info->max_memkb / 1024,
diff --git a/tools/libxl/libxl_exec.c b/tools/libxl/libxl_exec.c
index 8a589b6..5186ac8 100644
--- a/tools/libxl/libxl_exec.c
+++ b/tools/libxl/libxl_exec.c
@@ -15,9 +15,12 @@
  * GNU Lesser General Public License for more details.
  */
 
+#include "libxl_osdeps.h"
+
 #include <stdio.h>
 #include <unistd.h>
 #include <stdlib.h>
+
 #include "libxl.h"
 #include "libxl_internal.h"
 
diff --git a/tools/libxl/libxl_internal.c b/tools/libxl/libxl_internal.c
index 7ba0c97..a04ac8d 100644
--- a/tools/libxl/libxl_internal.c
+++ b/tools/libxl/libxl_internal.c
@@ -12,13 +12,17 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
  */
-#include "libxl.h"
-#include "libxl_internal.h"
-#include "libxl_utils.h"
+
+#include "libxl_osdeps.h"
+
 #include <stdio.h>
 #include <stdarg.h>
 #include <string.h>
 
+#include "libxl.h"
+#include "libxl_internal.h"
+#include "libxl_utils.h"
+
 int libxl_error_set(struct libxl_ctx *ctx, int code)
 {
     return 0;
diff --git a/tools/libxl/libxl_osdeps.h b/tools/libxl/libxl_osdeps.h
new file mode 100644
index 0000000..fc453c3
--- /dev/null
+++ b/tools/libxl/libxl_osdeps.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2009      Citrix Ltd.
+ * Author Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 only. with the special
+ * exception on linking described in file LICENSE.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ */
+
+/*
+ * This header must be included first, before any system headers,
+ * so that _GNU_SOURCE takes effect properly.
+ */
+
+#ifndef LIBXL_OSDEP
+#define LIBXL_OSDEP
+
+#define _GNU_SOURCE
+
+#ifdef NEED_OWN_ASPRINTF
+#include <stdarg.h>
+
+int asprintf(char **buffer, char *fmt, ...);
+int vasprintf(char **buffer, const char *fmt, va_list ap);
+#endif /*NEED_OWN_ASPRINTF*/
+
+#endif
diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
index 5048fd0..c174d0f 100644
--- a/tools/libxl/libxl_utils.c
+++ b/tools/libxl/libxl_utils.c
@@ -13,8 +13,8 @@
  * GNU Lesser General Public License for more details.
  */
 
-#include "libxl_utils.h"
-#include "libxl_internal.h"
+#include "libxl_osdeps.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
@@ -24,6 +24,8 @@
 #include <ctype.h>
 #include <errno.h>
 
+#include "libxl_utils.h"
+#include "libxl_internal.h"
 
 
 unsigned long libxl_get_required_shadow_memory(unsigned long maxmem_kb, 
unsigned int smp_cpus)
diff --git a/tools/libxl/libxl_xshelp.c b/tools/libxl/libxl_xshelp.c
index f59eee7..87c494a 100644
--- a/tools/libxl/libxl_xshelp.c
+++ b/tools/libxl/libxl_xshelp.c
@@ -13,13 +13,16 @@
  * GNU Lesser General Public License for more details.
  */
 
+#include "libxl_osdeps.h"
+
 #include <string.h>
 #include <stddef.h>
-#include "libxl.h"
-#include "libxl_internal.h"
 #include <stdio.h>
 #include <stdarg.h>
 
+#include "libxl.h"
+#include "libxl_internal.h"
+
 char **libxl_xs_kvs_of_flexarray(struct libxl_ctx *ctx, flexarray_t *array, 
int length)
 {
     char **kvs;
diff --git a/tools/libxl/osdeps.c b/tools/libxl/osdeps.c
index 81175aa..ad96480 100644
--- a/tools/libxl/osdeps.c
+++ b/tools/libxl/osdeps.c
@@ -19,6 +19,8 @@
 #include <sys/time.h>
 #include <stdlib.h>
 
+#ifdef NEED_OWN_ASPRINTF
+
 int vasprintf(char **buffer, const char *fmt, va_list ap)
 {
     int size = 0;
@@ -60,3 +62,5 @@ int asprintf(char **buffer, char *fmt, ...)
     va_end (ap);
     return status;
 }
+
+#endif
diff --git a/tools/libxl/osdeps.h b/tools/libxl/osdeps.h
deleted file mode 100644
index 5391727..0000000
--- a/tools/libxl/osdeps.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2009      Citrix Ltd.
- * Author Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation; version 2.1 only. with the special
- * exception on linking described in file LICENSE.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- */
-
-#ifndef LIBXL_OSDEP
-#define LIBXL_OSDEP
-
-#include <stdarg.h>
-
-#if defined(__linux__)
-int asprintf(char **buffer, char *fmt, ...);
-int vasprintf(char **buffer, const char *fmt, va_list ap);
-#endif
-
-#endif
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
index 3b735ec..727fe4a 100644
--- a/tools/libxl/xl.c
+++ b/tools/libxl/xl.c
@@ -14,8 +14,8 @@
  * GNU Lesser General Public License for more details.
  */
 
-#include "libxl.h"
-#include "libxl_utils.h"
+#include "libxl_osdeps.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -29,6 +29,9 @@
 #include <arpa/inet.h>
 #include <xenctrl.h>
 
+#include "libxl.h"
+#include "libxl_utils.h"
+
 void log_callback(void *userdata, int loglevel, const char *file, int line, 
const char *func, char *s)
 {
     fprintf(stderr, "[%d] %s:%d:%s: %s\n", loglevel, file, line, func, s);
-- 
1.5.6.5


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.