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