| 1 | --- a/compat.h |
| 2 | +++ /dev/null |
| 3 | @@ -1,32 +0,0 @@ |
| 4 | -#ifndef __UCLIBC_COMPAT_H |
| 5 | -#define __UCLIBC_COMPAT_H |
| 6 | - |
| 7 | -#define _XOPEN_SOURCE |
| 8 | -#define _GNU_SOURCE |
| 9 | - |
| 10 | -#include <features.h> |
| 11 | -#include <errno.h> |
| 12 | - |
| 13 | -#undef __UCLIBC_HAS_THREADS__ |
| 14 | -#include <bits/uClibc_mutex.h> |
| 15 | -#include <sys/poll.h> |
| 16 | - |
| 17 | -#if 0 |
| 18 | -#undef __UCLIBC_MUTEX_LOCK |
| 19 | -#undef __UCLIBC_MUTEX_UNLOCK |
| 20 | -#define __UCLIBC_MUTEX_LOCK(M) pthread_mutex_lock(&(M)) |
| 21 | -#define __UCLIBC_MUTEX_UNLOCK(M) pthread_mutex_unlock(&(M)) |
| 22 | -#endif |
| 23 | - |
| 24 | -#define smallint int |
| 25 | - |
| 26 | -#define _(...) __VA_ARGS__ |
| 27 | -#define internal_function |
| 28 | -#define attribute_hidden |
| 29 | -#define attribute_unused |
| 30 | -#define attribute_noreturn |
| 31 | -#define libc_hidden_def(...) |
| 32 | - |
| 33 | -#define __set_errno(_val) errno = _val |
| 34 | - |
| 35 | -#endif |
| 36 | --- a/rcmd.c |
| 37 | +++ b/rcmd.c |
| 38 | @@ -85,7 +85,6 @@ static char sccsid[] = "@(#)rcmd.c 8.3 ( |
| 39 | #include <wchar.h> |
| 40 | #endif |
| 41 | #include <sys/uio.h> |
| 42 | -#include <bits/uClibc_alloc.h> |
| 43 | |
| 44 | |
| 45 | /* some forward declarations */ |
| 46 | --- a/create_xid.c |
| 47 | +++ b/create_xid.c |
| 48 | @@ -28,7 +28,6 @@ |
| 49 | |
| 50 | /* The RPC code is not threadsafe, but new code should be threadsafe. */ |
| 51 | |
| 52 | -#include <bits/uClibc_mutex.h> |
| 53 | __UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER); |
| 54 | |
| 55 | static smallint is_initialized; |
| 56 | --- a/getrpcent.c |
| 57 | +++ b/getrpcent.c |
| 58 | @@ -257,7 +257,6 @@ static struct rpcent *interpret(register |
| 59 | |
| 60 | #if defined(__UCLIBC_HAS_REENTRANT_RPC__) |
| 61 | |
| 62 | -#include <bits/uClibc_mutex.h> |
| 63 | __UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER); |
| 64 | |
| 65 | |
| 66 | --- a/CMakeLists.txt |
| 67 | +++ b/CMakeLists.txt |
| 68 | @@ -1,7 +1,7 @@ |
| 69 | cmake_minimum_required(VERSION 2.6) |
| 70 | |
| 71 | PROJECT(rpc C) |
| 72 | -ADD_DEFINITIONS(-Os -Wall --std=gnu99 -g3 -I. -include compat.h) |
| 73 | +ADD_DEFINITIONS(-Os -Wall --std=gnu99 -g3 -I. -include rpc/compat.h) |
| 74 | |
| 75 | FILE(GLOB SOURCES *.c) |
| 76 | |
| 77 | --- a/rpc/types.h |
| 78 | +++ b/rpc/types.h |
| 79 | @@ -33,6 +33,8 @@ |
| 80 | #ifndef _RPC_TYPES_H |
| 81 | #define _RPC_TYPES_H 1 |
| 82 | |
| 83 | +#include "compat.h" |
| 84 | + |
| 85 | #ifdef _LIBC |
| 86 | /* Some adjustments to make the libc source from glibc |
| 87 | * compile more easily with uClibc... */ |
| 88 | --- a/clnt_perror.c |
| 89 | +++ b/clnt_perror.c |
| 90 | @@ -246,7 +246,7 @@ clnt_sperror (CLIENT * rpch, const char |
| 91 | |
| 92 | case RPC_CANTSEND: |
| 93 | case RPC_CANTRECV: |
| 94 | - __glibc_strerror_r (e.re_errno, chrbuf, sizeof chrbuf); |
| 95 | + strerror_r (e.re_errno, chrbuf, sizeof chrbuf); |
| 96 | len = sprintf (str, "; errno = %s", chrbuf); |
| 97 | str += len; |
| 98 | break; |
| 99 | @@ -336,7 +336,7 @@ clnt_spcreateerror (const char *msg) |
| 100 | (void) strcpy(cp, " - "); |
| 101 | cp += strlen(cp); |
| 102 | |
| 103 | - __glibc_strerror_r (ce->cf_error.re_errno, chrbuf, sizeof chrbuf); |
| 104 | + strerror_r (ce->cf_error.re_errno, chrbuf, sizeof chrbuf); |
| 105 | (void) strcpy(cp, chrbuf); |
| 106 | cp += strlen(cp); |
| 107 | break; |
| 108 | --- a/rpc_thread.c |
| 109 | +++ b/rpc_thread.c |
| 110 | @@ -13,9 +13,6 @@ |
| 111 | |
| 112 | #ifdef __UCLIBC_HAS_THREADS__ |
| 113 | |
| 114 | -#include <bits/libc-tsd.h> |
| 115 | -#include <bits/libc-lock.h> |
| 116 | - |
| 117 | /* Variable used in non-threaded applications or for the first thread. */ |
| 118 | static struct rpc_thread_variables __libc_tsd_RPC_VARS_mem; |
| 119 | __libc_tsd_define (, RPC_VARS) |
| 120 | @@ -52,16 +49,17 @@ rpc_thread_multi (void) |
| 121 | __libc_tsd_set (RPC_VARS, &__libc_tsd_RPC_VARS_mem); |
| 122 | } |
| 123 | |
| 124 | +__UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER); |
| 125 | |
| 126 | struct rpc_thread_variables attribute_hidden * |
| 127 | __rpc_thread_variables (void) |
| 128 | { |
| 129 | - __libc_once_define (static, once); |
| 130 | struct rpc_thread_variables *tvp; |
| 131 | |
| 132 | + __UCLIBC_MUTEX_LOCK(mylock); |
| 133 | tvp = __libc_tsd_get (RPC_VARS); |
| 134 | if (tvp == NULL) { |
| 135 | - __libc_once (once, rpc_thread_multi); |
| 136 | + rpc_thread_multi(); |
| 137 | tvp = __libc_tsd_get (RPC_VARS); |
| 138 | if (tvp == NULL) { |
| 139 | tvp = calloc (1, sizeof *tvp); |
| 140 | @@ -71,6 +69,7 @@ __rpc_thread_variables (void) |
| 141 | tvp = __libc_tsd_get (RPC_VARS); |
| 142 | } |
| 143 | } |
| 144 | + __UCLIBC_MUTEX_UNLOCK(mylock); |
| 145 | return tvp; |
| 146 | } |
| 147 | |
| 148 | --- /dev/null |
| 149 | +++ b/rpc/compat.h |
| 150 | @@ -0,0 +1,53 @@ |
| 151 | +#ifndef __UCLIBC_COMPAT_H |
| 152 | +#define __UCLIBC_COMPAT_H |
| 153 | + |
| 154 | +#define _XOPEN_SOURCE |
| 155 | +#define _GNU_SOURCE |
| 156 | + |
| 157 | +#include <features.h> |
| 158 | +#include <errno.h> |
| 159 | + |
| 160 | +#ifndef __UCLIBC_HAS_THREADS__ |
| 161 | +#define __UCLIBC_HAS_THREADS__ |
| 162 | +#endif |
| 163 | + |
| 164 | +#include <sys/poll.h> |
| 165 | +#include <pthread.h> |
| 166 | + |
| 167 | +#ifdef __UCLIBC__ |
| 168 | +#include <bits/libc-lock.h> |
| 169 | +#else |
| 170 | +#undef __UCLIBC_MUTEX_STATIC |
| 171 | +#undef __UCLIBC_MUTEX_LOCK |
| 172 | +#undef __UCLIBC_MUTEX_UNLOCK |
| 173 | +#define __UCLIBC_MUTEX_STATIC(M,I) static pthread_mutex_t M = I |
| 174 | +#define __UCLIBC_MUTEX_LOCK(M) pthread_mutex_lock(&(M)) |
| 175 | +#define __UCLIBC_MUTEX_UNLOCK(M) pthread_mutex_unlock(&(M)) |
| 176 | +#endif |
| 177 | + |
| 178 | +#define smallint int |
| 179 | + |
| 180 | +#define _(...) __VA_ARGS__ |
| 181 | +#define internal_function |
| 182 | +#define attribute_hidden |
| 183 | +#define attribute_unused |
| 184 | +#define attribute_noreturn |
| 185 | +#define libc_hidden_def(...) |
| 186 | + |
| 187 | +#ifndef libc_hidden_proto |
| 188 | +#define libc_hidden_proto(name, attrs...) |
| 189 | +#endif |
| 190 | + |
| 191 | +#define __set_errno(_val) errno = _val |
| 192 | + |
| 193 | +# define attribute_tls_model_ie __attribute__ ((tls_model ("initial-exec"))) |
| 194 | + |
| 195 | +# define __libc_tsd_define(CLASS, KEY) \ |
| 196 | + CLASS __thread void *__libc_tsd_##KEY attribute_tls_model_ie; |
| 197 | + |
| 198 | +# define __libc_tsd_address(KEY) (&__libc_tsd_##KEY) |
| 199 | +# define __libc_tsd_get(KEY) (__libc_tsd_##KEY) |
| 200 | +# define __libc_tsd_set(KEY, VALUE) (__libc_tsd_##KEY = (VALUE)) |
| 201 | + |
| 202 | + |
| 203 | +#endif |
| 204 | --- a/rpc/netdb.h |
| 205 | +++ b/rpc/netdb.h |
| 206 | @@ -41,6 +41,8 @@ |
| 207 | #define __need_size_t |
| 208 | #include <stddef.h> |
| 209 | |
| 210 | +#include "types.h" |
| 211 | + |
| 212 | __BEGIN_DECLS |
| 213 | |
| 214 | struct rpcent |
| 215 | |