[PATCH] Add a common library that can be shared between libs and corosync

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

 



We have always had this problem and worked around it by coping code
or using inline functions. Both not good IMO.

Signed-off-by: Angus Salkeld <asalkeld@xxxxxxxxxx>
---
 Makefile.am                   |    2 +-
 common_lib/Makefile.am        |   43 ++++++++++++++++
 common_lib/error_conversion.c |  113 +++++++++++++++++++++++++++++++++++++++++
 configure.ac                  |    1 +
 exec/Makefile.am              |    4 +-
 include/corosync/corotypes.h  |   77 +---------------------------
 lib/Makefile.am               |    2 +-
 7 files changed, 162 insertions(+), 80 deletions(-)
 create mode 100644 common_lib/Makefile.am
 create mode 100644 common_lib/error_conversion.c

diff --git a/Makefile.am b/Makefile.am
index 178b34d..b16eae6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -47,7 +47,7 @@ MAINTAINERCLEANFILES	= Makefile.in aclocal.m4 configure depcomp \
 
 dist_doc_DATA		= LICENSE INSTALL README.recovery SECURITY TODO AUTHORS
 
-SUBDIRS			= include lib exec tools test cts pkgconfig \
+SUBDIRS			= include common_lib lib exec tools test cts pkgconfig \
 			  man init conf
 
 coverity:
diff --git a/common_lib/Makefile.am b/common_lib/Makefile.am
new file mode 100644
index 0000000..14d6fba
--- /dev/null
+++ b/common_lib/Makefile.am
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2009 Red Hat, Inc.
+#
+# Authors: Angus Salkeld
+#
+# This software licensed under BSD license, the text of which follows:
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# - Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+# - Neither the name of the MontaVista Software, Inc. nor the names of its
+#   contributors may be used to endorse or promote products derived from this
+#   software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+MAINTAINERCLEANFILES    = Makefile.in
+
+AM_CFLAGS		= -fPIC
+
+INCLUDES		= -I$(top_builddir)/include -I$(top_srcdir)/include
+
+noinst_LIBRARIES		= libcorosync_common.a
+
+libcorosync_common_a_SOURCES	= error_conversion.c
+
+clean-local:
+	rm -f *.o *.a
diff --git a/common_lib/error_conversion.c b/common_lib/error_conversion.c
new file mode 100644
index 0000000..ad6193a
--- /dev/null
+++ b/common_lib/error_conversion.c
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2012 Red Hat, Inc.
+ *
+ * All rights reserved.
+ *
+ * Author: Angus Salkeld (asalkeld@xxxxxxxxxx)
+ *
+ * This software licensed under BSD license, the text of which follows:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * - Neither the name of the MontaVista Software, Inc. nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <corosync/corotypes.h>
+
+cs_error_t qb_to_cs_error (int result)
+{
+	int32_t res;
+	cs_error_t err = CS_ERR_LIBRARY;
+
+	if (result >= 0) {
+		return CS_OK;
+	}
+	res = -result;
+
+	switch (res) {
+	case EBADF:
+		err = CS_ERR_BAD_HANDLE;
+		break;
+	case ENOMEM:
+		err = CS_ERR_NO_MEMORY;
+		break;
+	case ETIMEDOUT:
+	case EAGAIN:
+		err = CS_ERR_TRY_AGAIN;
+		break;
+	case EBADE:
+		err = CS_ERR_FAILED_OPERATION;
+		break;
+	case ETIME:
+		err = CS_ERR_TIMEOUT;
+		break;
+	case EINVAL:
+		err = CS_ERR_INVALID_PARAM;
+		break;
+	case EBUSY:
+		err = CS_ERR_BUSY;
+		break;
+	case EACCES:
+		err = CS_ERR_ACCESS;
+		break;
+	case EOVERFLOW:
+		err = CS_ERR_NAME_TOO_LONG;
+		break;
+	case EEXIST:
+		err = CS_ERR_EXIST;
+		break;
+	case ENOBUFS:
+		err = CS_ERR_QUEUE_FULL;
+		break;
+	case ENOSPC:
+		err = CS_ERR_NO_SPACE;
+		break;
+	case EINTR:
+		err = CS_ERR_INTERRUPT;
+		break;
+	case ENOENT:
+	case ENODEV:
+		err = CS_ERR_NOT_EXIST;
+		break;
+	case ENOSYS:
+	case ENOTSUP:
+		err = CS_ERR_NOT_SUPPORTED;
+		break;
+	case EBADMSG:
+		err = CS_ERR_MESSAGE_ERROR;
+		break;
+	case EMSGSIZE:
+	case E2BIG:
+		err = CS_ERR_TOO_BIG;
+		break;
+	case ECONNREFUSED:
+	case ENOTCONN:
+	default:
+		err = CS_ERR_LIBRARY;
+		break;
+	}
+
+	return err;
+}
+
+
diff --git a/configure.ac b/configure.ac
index d03c91b..65abfae 100644
--- a/configure.ac
+++ b/configure.ac
@@ -131,6 +131,7 @@ AC_CONFIG_FILES([Makefile
 		 include/Makefile
 		 init/Makefile
 		 lib/Makefile
+		 common_lib/Makefile
 		 man/Makefile
 		 pkgconfig/Makefile
 		 test/Makefile
diff --git a/exec/Makefile.am b/exec/Makefile.am
index 3b6f201..d4d83eb 100644
--- a/exec/Makefile.am
+++ b/exec/Makefile.am
@@ -52,8 +52,8 @@ corosync_SOURCES	= evil.c vsf_ykd.c coroparse.c vsf_quorum.c syncv2.c \
 			  votequorum.c wd.c util.c schedwrk.c main.c \
 			  apidef.c quorum.c sync.c icmap.c timer.c \
 			  ipc_glue.c service.c mainconfig.c totemconfig.c
-corosync_LDADD	  	= -ltotem_pg $(LIBQB_LIBS) $(statgrab_LIBS)
-corosync_DEPENDENCIES	= libtotem_pg.so.$(SONAME)
+corosync_LDADD		= -ltotem_pg ../common_lib/libcorosync_common.a $(LIBQB_LIBS) $(statgrab_LIBS)
+corosync_DEPENDENCIES	= libtotem_pg.so.$(SONAME) ../common_lib/libcorosync_common.a
 corosync_LDFLAGS	= $(OS_DYFLAGS) -L./
 
 TOTEM_OBJS		= $(TOTEM_SRC:%.c=%.o)
diff --git a/include/corosync/corotypes.h b/include/corosync/corotypes.h
index c67bf29..dcd78f3 100644
--- a/include/corosync/corotypes.h
+++ b/include/corosync/corotypes.h
@@ -134,82 +134,7 @@ static inline uint64_t cs_timestamp_get(void)
 	return result;
 }
 
-static inline cs_error_t qb_to_cs_error (int result)
-{
-	int32_t res;
-	cs_error_t err = CS_ERR_LIBRARY;
-
-	if (result >= 0) {
-		return CS_OK;
-	}
-	res = -result;
-
-	switch (res) {
-	case EBADF:
-		err = CS_ERR_BAD_HANDLE;
-		break;
-	case ENOMEM:
-		err = CS_ERR_NO_MEMORY;
-		break;
-	case ETIMEDOUT:
-	case EAGAIN:
-		err = CS_ERR_TRY_AGAIN;
-		break;
-	case EBADE:
-		err = CS_ERR_FAILED_OPERATION;
-		break;
-	case ETIME:
-		err = CS_ERR_TIMEOUT;
-		break;
-	case EINVAL:
-		err = CS_ERR_INVALID_PARAM;
-		break;
-	case EBUSY:
-		err = CS_ERR_BUSY;
-		break;
-	case EACCES:
-		err = CS_ERR_ACCESS;
-		break;
-	case EOVERFLOW:
-		err = CS_ERR_NAME_TOO_LONG;
-		break;
-	case EEXIST:
-		err = CS_ERR_EXIST;
-		break;
-	case ENOBUFS:
-		err = CS_ERR_QUEUE_FULL;
-		break;
-	case ENOSPC:
-		err = CS_ERR_NO_SPACE;
-		break;
-	case EINTR:
-		err = CS_ERR_INTERRUPT;
-		break;
-	case ENOENT:
-	case ENODEV:
-		err = CS_ERR_NOT_EXIST;
-		break;
-	case ENOSYS:
-	case ENOTSUP:
-		err = CS_ERR_NOT_SUPPORTED;
-		break;
-	case EBADMSG:
-		err = CS_ERR_MESSAGE_ERROR;
-		break;
-	case EMSGSIZE:
-	case E2BIG:
-		err = CS_ERR_TOO_BIG;
-		break;
-	case ECONNREFUSED:
-	case ENOTCONN:
-	default:
-		err = CS_ERR_LIBRARY;
-		break;
-	}
-
-	return err;
-}
-
+cs_error_t qb_to_cs_error (int result);
 
 /*
  * DEPRECATED
diff --git a/lib/Makefile.am b/lib/Makefile.am
index d2dd8ed..6744233 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -89,7 +89,7 @@ lib%.so: lib%.a
 	$(CC) -shared -o $@.$(call get_soname,$*) \
 		-Wl,-soname=lib$*.so.$(call get_major,$*) \
 		-Wl,-version-script=$(srcdir)/lib$*.versions \
-		-Wl,-whole-archive $^ -Wl,-no-whole-archive $(LDFLAGS) $(LIBQB_LIBS) $(AM_LDFLAGS) $(call get_linker_add,$*)
+		-Wl,-whole-archive $^ -Wl,-no-whole-archive $(LDFLAGS) $(LIBQB_LIBS) ../common_lib/libcorosync_common.a $(AM_LDFLAGS) $(call get_linker_add,$*)
 	ln -sf lib$*.so.$(call get_soname,$*) lib$*.so
 	ln -sf lib$*.so.$(call get_soname,$*) lib$*.so.$(call get_major,$*)
 
-- 
1.7.7.6

_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss


[Index of Archives]     [Linux Clusters]     [Corosync Project]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Linux Kernel]     [Linux SCSI]     [X.Org]

  Powered by Linux