diff options
| author | Felix Fietkau | 2015-04-10 19:47:22 +0000 |
|---|---|---|
| committer | Felix Fietkau | 2015-04-10 19:47:22 +0000 |
| commit | d7f96f5e4d2b6b809937351d47999d2e64f0c052 (patch) | |
| tree | 344cea51999e9f2f475fd3703287216c79674b34 | |
| parent | 0a2179bbc0844928f2a0ec01dba93d9b5d6d41a7 (diff) | |
| download | librpc-uclibc-d7f96f5e4d2b6b809937351d47999d2e64f0c052.tar.gz | |
fix eglibc compatibility
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
| -rw-r--r-- | CMakeLists.txt | 2 | ||||
| -rw-r--r-- | clnt_perror.c | 4 | ||||
| -rw-r--r-- | compat.h | 32 | ||||
| -rw-r--r-- | create_xid.c | 1 | ||||
| -rw-r--r-- | getrpcent.c | 1 | ||||
| -rw-r--r-- | rcmd.c | 1 | ||||
| -rw-r--r-- | rpc/compat.h | 53 | ||||
| -rw-r--r-- | rpc/netdb.h | 2 | ||||
| -rw-r--r-- | rpc/types.h | 2 | ||||
| -rw-r--r-- | rpc_thread.c | 9 |
10 files changed, 64 insertions, 43 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index e82217e..dbb31c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.6) PROJECT(rpc C) -ADD_DEFINITIONS(-Os -Wall --std=gnu99 -g3 -I. -include compat.h) +ADD_DEFINITIONS(-Os -Wall --std=gnu99 -g3 -I. -include rpc/compat.h) FILE(GLOB SOURCES *.c) diff --git a/clnt_perror.c b/clnt_perror.c index 8dbae72..aceb535 100644 --- a/clnt_perror.c +++ b/clnt_perror.c @@ -246,7 +246,7 @@ clnt_sperror (CLIENT * rpch, const char *msg) case RPC_CANTSEND: case RPC_CANTRECV: - __glibc_strerror_r (e.re_errno, chrbuf, sizeof chrbuf); + strerror_r (e.re_errno, chrbuf, sizeof chrbuf); len = sprintf (str, "; errno = %s", chrbuf); str += len; break; @@ -336,7 +336,7 @@ clnt_spcreateerror (const char *msg) (void) strcpy(cp, " - "); cp += strlen(cp); - __glibc_strerror_r (ce->cf_error.re_errno, chrbuf, sizeof chrbuf); + strerror_r (ce->cf_error.re_errno, chrbuf, sizeof chrbuf); (void) strcpy(cp, chrbuf); cp += strlen(cp); break; diff --git a/compat.h b/compat.h deleted file mode 100644 index 6acf5ee..0000000 --- a/compat.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef __UCLIBC_COMPAT_H -#define __UCLIBC_COMPAT_H - -#define _XOPEN_SOURCE -#define _GNU_SOURCE - -#include <features.h> -#include <errno.h> - -#undef __UCLIBC_HAS_THREADS__ -#include <bits/uClibc_mutex.h> -#include <sys/poll.h> - -#if 0 -#undef __UCLIBC_MUTEX_LOCK -#undef __UCLIBC_MUTEX_UNLOCK -#define __UCLIBC_MUTEX_LOCK(M) pthread_mutex_lock(&(M)) -#define __UCLIBC_MUTEX_UNLOCK(M) pthread_mutex_unlock(&(M)) -#endif - -#define smallint int - -#define _(...) __VA_ARGS__ -#define internal_function -#define attribute_hidden -#define attribute_unused -#define attribute_noreturn -#define libc_hidden_def(...) - -#define __set_errno(_val) errno = _val - -#endif diff --git a/create_xid.c b/create_xid.c index 3b4e8c0..1ba5f55 100644 --- a/create_xid.c +++ b/create_xid.c @@ -28,7 +28,6 @@ /* The RPC code is not threadsafe, but new code should be threadsafe. */ -#include <bits/uClibc_mutex.h> __UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER); static smallint is_initialized; diff --git a/getrpcent.c b/getrpcent.c index de20d64..9da5562 100644 --- a/getrpcent.c +++ b/getrpcent.c @@ -257,7 +257,6 @@ static struct rpcent *interpret(register struct rpcdata *d) #if defined(__UCLIBC_HAS_REENTRANT_RPC__) -#include <bits/uClibc_mutex.h> __UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER); @@ -85,7 +85,6 @@ static char sccsid[] = "@(#)rcmd.c 8.3 (Berkeley) 3/26/94"; #include <wchar.h> #endif #include <sys/uio.h> -#include <bits/uClibc_alloc.h> /* some forward declarations */ diff --git a/rpc/compat.h b/rpc/compat.h new file mode 100644 index 0000000..de8b497 --- /dev/null +++ b/rpc/compat.h @@ -0,0 +1,53 @@ +#ifndef __UCLIBC_COMPAT_H +#define __UCLIBC_COMPAT_H + +#define _XOPEN_SOURCE +#define _GNU_SOURCE + +#include <features.h> +#include <errno.h> + +#ifndef __UCLIBC_HAS_THREADS__ +#define __UCLIBC_HAS_THREADS__ +#endif + +#include <sys/poll.h> +#include <pthread.h> + +#ifdef __UCLIBC__ +#include <bits/libc-lock.h> +#else +#undef __UCLIBC_MUTEX_STATIC +#undef __UCLIBC_MUTEX_LOCK +#undef __UCLIBC_MUTEX_UNLOCK +#define __UCLIBC_MUTEX_STATIC(M,I) static pthread_mutex_t M = I +#define __UCLIBC_MUTEX_LOCK(M) pthread_mutex_lock(&(M)) +#define __UCLIBC_MUTEX_UNLOCK(M) pthread_mutex_unlock(&(M)) +#endif + +#define smallint int + +#define _(...) __VA_ARGS__ +#define internal_function +#define attribute_hidden +#define attribute_unused +#define attribute_noreturn +#define libc_hidden_def(...) + +#ifndef libc_hidden_proto +#define libc_hidden_proto(name, attrs...) +#endif + +#define __set_errno(_val) errno = _val + +# define attribute_tls_model_ie __attribute__ ((tls_model ("initial-exec"))) + +# define __libc_tsd_define(CLASS, KEY) \ + CLASS __thread void *__libc_tsd_##KEY attribute_tls_model_ie; + +# define __libc_tsd_address(KEY) (&__libc_tsd_##KEY) +# define __libc_tsd_get(KEY) (__libc_tsd_##KEY) +# define __libc_tsd_set(KEY, VALUE) (__libc_tsd_##KEY = (VALUE)) + + +#endif diff --git a/rpc/netdb.h b/rpc/netdb.h index e9a6565..92f264a 100644 --- a/rpc/netdb.h +++ b/rpc/netdb.h @@ -41,6 +41,8 @@ #define __need_size_t #include <stddef.h> +#include "types.h" + __BEGIN_DECLS struct rpcent diff --git a/rpc/types.h b/rpc/types.h index 05f49c3..cf3c9e3 100644 --- a/rpc/types.h +++ b/rpc/types.h @@ -33,6 +33,8 @@ #ifndef _RPC_TYPES_H #define _RPC_TYPES_H 1 +#include "compat.h" + #ifdef _LIBC /* Some adjustments to make the libc source from glibc * compile more easily with uClibc... */ diff --git a/rpc_thread.c b/rpc_thread.c index 71303b2..0032dcb 100644 --- a/rpc_thread.c +++ b/rpc_thread.c @@ -13,9 +13,6 @@ #ifdef __UCLIBC_HAS_THREADS__ -#include <bits/libc-tsd.h> -#include <bits/libc-lock.h> - /* Variable used in non-threaded applications or for the first thread. */ static struct rpc_thread_variables __libc_tsd_RPC_VARS_mem; __libc_tsd_define (, RPC_VARS) @@ -52,16 +49,17 @@ rpc_thread_multi (void) __libc_tsd_set (RPC_VARS, &__libc_tsd_RPC_VARS_mem); } +__UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER); struct rpc_thread_variables attribute_hidden * __rpc_thread_variables (void) { - __libc_once_define (static, once); struct rpc_thread_variables *tvp; + __UCLIBC_MUTEX_LOCK(mylock); tvp = __libc_tsd_get (RPC_VARS); if (tvp == NULL) { - __libc_once (once, rpc_thread_multi); + rpc_thread_multi(); tvp = __libc_tsd_get (RPC_VARS); if (tvp == NULL) { tvp = calloc (1, sizeof *tvp); @@ -71,6 +69,7 @@ __rpc_thread_variables (void) tvp = __libc_tsd_get (RPC_VARS); } } + __UCLIBC_MUTEX_UNLOCK(mylock); return tvp; } |