Root/package/libs/librpc/patches/100-compat_fix.patch

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

Archive Download this file



interactive