Patch from Enrico WEIGELT <weigelt@metux.de> to disable __cxa_atexit for those C libraries with no support (old uClibc).
1 #--- libc/resolv/nss_dns/dns-host.c.jj Tue Sep 14 03:05:08 1999
2 #+++ libc/resolv/nss_dns/dns-host.c Thu Oct 10 13:07:33 2002
3 #@@ -129,9 +129,10 @@ _nss_dns_gethostbyname2_r (const char *n
4 # char *buffer, size_t buflen, int *errnop,
7 #- querybuf host_buffer;
8 #+ querybuf *host_buffer;
11 #+ enum nss_status status;
15 #@@ -159,16 +160,25 @@ _nss_dns_gethostbyname2_r (const char *n
16 # if (strchr (name, '.') == NULL && (cp = __hostalias (name)) != NULL)
19 #- n = res_search (name, C_IN, type, host_buffer.buf, sizeof (host_buffer.buf));
20 #+ host_buffer = (querybuf *) malloc (sizeof (*host_buffer));
21 #+ if (host_buffer == NULL) {
23 #+ return NSS_STATUS_UNAVAIL;
26 #+ n = res_search (name, C_IN, type, host_buffer->buf, sizeof (host_buffer->buf));
29 # *h_errnop = h_errno;
30 # *errnop = *h_errnop == TRY_AGAIN ? EAGAIN : ENOENT;
31 #+ free (host_buffer);
32 # return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
35 #- return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen,
37 #+ status = getanswer_r (host_buffer, n, name, type, result, buffer, buflen,
39 #+ free (host_buffer);
44 #@@ -205,7 +215,7 @@ _nss_dns_gethostbyaddr_r (const char *ad
45 # char *h_addr_ptrs[MAX_NR_ADDRS + 1];
47 # } *host_data = (struct host_data *) buffer;
48 #- querybuf host_buffer;
49 #+ querybuf *host_buffer;
50 # char qbuf[MAXDNAME+1], *qp;
53 #@@ -257,17 +267,25 @@ _nss_dns_gethostbyaddr_r (const char *ad
54 # /* Cannot happen. */
57 #- n = res_query (qbuf, C_IN, T_PTR, (u_char *)host_buffer.buf,
58 #- sizeof host_buffer);
59 #+ host_buffer = (querybuf *) malloc (sizeof (*host_buffer));
60 #+ if (host_buffer == NULL) {
62 #+ return NSS_STATUS_UNAVAIL;
65 #+ n = res_query (qbuf, C_IN, T_PTR, host_buffer->buf,
66 #+ sizeof (host_buffer->buf));
69 # *h_errnop = h_errno;
71 #+ free (host_buffer);
72 # return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
75 #- status = getanswer_r (&host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
76 #+ status = getanswer_r (host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
78 #+ free (host_buffer);
79 # if (status != NSS_STATUS_SUCCESS)
81 # *h_errnop = h_errno;
82 #--- libc/resolv/nss_dns/dns-network.c.jj Wed Jun 30 12:01:14 1999
83 #+++ libc/resolv/nss_dns/dns-network.c Thu Oct 10 13:09:49 2002
84 #@@ -113,24 +113,36 @@ _nss_dns_getnetbyname_r (const char *nam
85 # char *buffer, size_t buflen, int *errnop)
87 # /* Return entry for network with NAME. */
88 #- querybuf net_buffer;
89 #+ querybuf *net_buffer;
92 #+ enum nss_status status;
94 # qbuf = strdupa (name);
95 #- anslen = res_search (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
96 #- sizeof (querybuf));
98 #+ net_buffer = (querybuf *) malloc (sizeof (*net_buffer));
99 #+ if (net_buffer == NULL)
102 #+ return NSS_STATUS_UNAVAIL;
105 #+ anslen = res_search (qbuf, C_IN, T_PTR, net_buffer->buf,
106 #+ sizeof (net_buffer->buf));
109 # /* Nothing found. */
111 #+ free (net_buffer);
112 # return (errno == ECONNREFUSED
113 # || errno == EPFNOSUPPORT
114 # || errno == EAFNOSUPPORT)
115 # ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
118 #- return getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYNAME);
119 #+ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYNAME);
120 #+ free (net_buffer);
125 #@@ -140,7 +152,7 @@ _nss_dns_getnetbyaddr_r (long net, int t
127 # /* Return entry for network with NAME. */
128 # enum nss_status status;
129 #- querybuf net_buffer;
130 #+ querybuf *net_buffer;
131 # unsigned int net_bytes[4];
132 # char qbuf[MAXDNAME];
134 #@@ -176,19 +188,28 @@ _nss_dns_getnetbyaddr_r (long net, int t
138 #- anslen = res_query (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
139 #- sizeof (querybuf));
140 #+ net_buffer = (querybuf *) malloc (sizeof (*net_buffer));
141 #+ if (net_buffer == NULL)
144 #+ return NSS_STATUS_UNAVAIL;
147 #+ anslen = res_query (qbuf, C_IN, T_PTR, net_buffer->buf,
148 #+ sizeof (net_buffer->buf));
151 # /* Nothing found. */
153 #+ free (net_buffer);
154 # return (errno == ECONNREFUSED
155 # || errno == EPFNOSUPPORT
156 # || errno == EAFNOSUPPORT)
157 # ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
160 #- status = getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYADDR);
161 #+ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYADDR);
162 #+ free (net_buffer);
163 # if (status == NSS_STATUS_SUCCESS)
165 # /* Strip trailing zeros. */
166 #--- libc/resolv/res_query.c.jj Wed Jun 30 12:01:06 1999
167 #+++ libc/resolv/res_query.c Thu Oct 10 13:01:12 2002
168 #@@ -106,7 +106,7 @@ res_query(name, class, type, answer, ans
169 # u_char *answer; /* buffer to put answer */
170 # int anslen; /* size of answer buffer */
172 #- u_char buf[MAXPACKET];
174 # register HEADER *hp = (HEADER *) answer;
177 #@@ -121,17 +121,25 @@ res_query(name, class, type, answer, ans
178 # printf(";; res_query(%s, %d, %d)\n", name, class, type);
181 #+ buf = malloc (MAXPACKET);
182 #+ if (buf == NULL) {
183 #+ __set_h_errno (NETDB_INTERNAL);
187 # n = res_mkquery(QUERY, name, class, type, NULL, 0, NULL,
188 #- buf, sizeof(buf));
192 # if (_res.options & RES_DEBUG)
193 # printf(";; res_query: mkquery failed\n");
195 # __set_h_errno (NO_RECOVERY);
199 # n = res_send(buf, n, answer, anslen);
203 # if (_res.options & RES_DEBUG)
204 #--- libc/resolv/gethnamaddr.c.jj Tue Dec 7 11:50:36 1999
205 #+++ libc/resolv/gethnamaddr.c Thu Oct 10 15:05:50 2002
206 #@@ -512,10 +512,11 @@ gethostbyname2(name, af)
212 # register const char *cp;
214 # int n, size, type, len;
215 #+ struct hostent *ret;
216 # extern struct hostent *_gethtbyname2();
218 # if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
219 #@@ -617,13 +618,22 @@ gethostbyname2(name, af)
223 #- if ((n = res_search(name, C_IN, type, buf.buf, sizeof(buf.buf))) < 0) {
224 #+ buf = (querybuf *) malloc (sizeof (*buf));
225 #+ if (buf == NULL) {
226 #+ __set_h_errno (NETDB_INTERNAL);
230 #+ if ((n = res_search(name, C_IN, type, buf->buf, sizeof(buf->buf))) < 0) {
232 # dprintf("res_search failed (%d)\n", n);
233 # if (errno == ECONNREFUSED)
234 # return (_gethtbyname2(name, af));
237 #- return (getanswer(&buf, n, name, type));
238 #+ ret = getanswer(buf, n, name, type);
244 #@@ -636,7 +646,7 @@ gethostbyaddr(addr, len, af)
245 # static const u_char mapped[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0xff,0xff };
246 # static const u_char tunnelled[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
250 # register struct hostent *hp;
251 # char qbuf[MAXDNAME+1], *qp;
253 #@@ -697,14 +707,24 @@ gethostbyaddr(addr, len, af)
257 #- n = res_query(qbuf, C_IN, T_PTR, (u_char *)buf.buf, sizeof buf.buf);
259 #+ buf = (querybuf *) malloc (sizeof (*buf));
260 #+ if (buf == NULL) {
261 #+ __set_h_errno (NETDB_INTERNAL);
265 #+ n = res_query(qbuf, C_IN, T_PTR, buf->buf, sizeof buf->buf);
268 # dprintf("res_query failed (%d)\n", n);
269 # if (errno == ECONNREFUSED)
270 # return (_gethtbyaddr(addr, len, af));
273 #- if (!(hp = getanswer(&buf, n, qbuf, T_PTR)))
274 #+ hp = getanswer(buf, n, qbuf, T_PTR);
277 # return (NULL); /* h_errno was set by getanswer() */
279 # if (af == AF_INET) {
280 #--- libc/resolv/getnetnamadr.c.jj Wed Jun 30 12:00:50 1999
281 #+++ libc/resolv/getnetnamadr.c Thu Oct 10 13:14:01 2002
282 #@@ -210,7 +210,7 @@ getnetbyaddr(net, net_type)
284 # unsigned int netbr[4];
288 # char qbuf[MAXDNAME];
289 # u_int32_t net2; /* Changed from unsigned long --roland */
290 # struct netent *net_entry;
291 #@@ -236,8 +236,15 @@ getnetbyaddr(net, net_type)
292 # netbr[1], netbr[0]);
295 #- anslen = res_query(qbuf, C_IN, T_PTR, (u_char *)&buf, sizeof(buf));
297 #+ buf = (querybuf *) malloc (sizeof (*buf));
298 #+ if (buf == NULL) {
302 #+ anslen = res_query(qbuf, C_IN, T_PTR, buf->buf, sizeof(buf->buf));
306 # if (_res.options & RES_DEBUG)
307 # printf("res_query failed\n");
308 #@@ -246,7 +253,8 @@ getnetbyaddr(net, net_type)
309 # return (_getnetbyaddr(net, net_type));
312 #- net_entry = getnetanswer(&buf, anslen, BYADDR);
313 #+ net_entry = getnetanswer(buf, anslen, BYADDR);
316 # unsigned u_net = net; /* maybe net should be unsigned ? */
318 #@@ -264,7 +272,7 @@ getnetbyname(net)
319 # register const char *net;
324 # char qbuf[MAXDNAME];
325 # struct netent *net_entry;
327 #@@ -273,8 +281,13 @@ getnetbyname(net)
330 # strcpy(&qbuf[0], net);
331 #- anslen = res_search(qbuf, C_IN, T_PTR, (u_char *)&buf, sizeof(buf));
332 #+ buf = (querybuf *) malloc (sizeof (*buf));
333 #+ if (buf == NULL) {
336 #+ anslen = res_search(qbuf, C_IN, T_PTR, buf->buf, sizeof(buf->buf));
340 # if (_res.options & RES_DEBUG)
341 # printf("res_query failed\n");
342 #@@ -283,7 +296,8 @@ getnetbyname(net)
343 # return (_getnetbyname(net));
344 # return (_getnetbyname(net));
346 #- net_entry = getnetanswer(&buf, anslen, BYNAME);
347 #+ net_entry = getnetanswer(buf, anslen, BYNAME);
350 # return (net_entry);
351 # return (_getnetbyname(net));
352 --- libc/glibc-compat/nss_dns/dns-host.c.jj Mon Jan 3 20:07:08 2000
353 +++ libc/glibc-compat/nss_dns/dns-host.c Thu Oct 10 12:46:24 2002
354 @@ -126,9 +126,10 @@ enum nss_status
355 _nss_dns_gethostbyname2_r (const char *name, int af, struct hostent *result,
356 char *buffer, size_t buflen, int *h_errnop)
358 - querybuf host_buffer;
359 + querybuf *host_buffer;
362 + enum nss_status status;
366 @@ -156,15 +157,22 @@ _nss_dns_gethostbyname2_r (const char *n
367 if (strchr (name, '.') == NULL && (cp = __hostalias (name)) != NULL)
370 - n = res_search (name, C_IN, type, host_buffer.buf, sizeof (host_buffer.buf));
371 + host_buffer = (querybuf *) malloc (sizeof (querybuf));
372 + if (host_buffer == NULL)
373 + return NSS_STATUS_UNAVAIL;
375 + n = res_search (name, C_IN, type, host_buffer->buf, sizeof (host_buffer->buf));
379 + free (host_buffer);
380 return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
383 - return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen,
385 + status = getanswer_r (host_buffer, n, name, type, result, buffer, buflen,
387 + free (host_buffer);
392 @@ -200,7 +208,7 @@ _nss_dns_gethostbyaddr_r (const char *ad
393 char *h_addr_ptrs[MAX_NR_ADDRS + 1];
395 } *host_data = (struct host_data *) buffer;
396 - querybuf host_buffer;
397 + querybuf *host_buffer;
398 char qbuf[MAXDNAME+1], *qp;
401 @@ -251,16 +259,22 @@ _nss_dns_gethostbyaddr_r (const char *ad
405 - n = res_query (qbuf, C_IN, T_PTR, (u_char *)host_buffer.buf,
406 - sizeof host_buffer);
407 + host_buffer = (querybuf *) malloc (sizeof (querybuf));
408 + if (host_buffer == NULL)
409 + return NSS_STATUS_UNAVAIL;
411 + n = res_query (qbuf, C_IN, T_PTR, host_buffer->buf,
412 + sizeof (host_buffer->buf));
416 + free (host_buffer);
417 return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
420 - status = getanswer_r (&host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
421 + status = getanswer_r (host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
423 + free (host_buffer);
424 if (status != NSS_STATUS_SUCCESS)
427 --- libc/glibc-compat/nss_dns/dns-network.c.jj Mon Jan 3 20:07:08 2000
428 +++ libc/glibc-compat/nss_dns/dns-network.c Thu Oct 10 12:46:24 2002
429 @@ -107,21 +107,32 @@ _nss_dns_getnetbyname_r (const char *nam
430 char *buffer, size_t buflen)
432 /* Return entry for network with NAME. */
433 - querybuf net_buffer;
434 + querybuf *net_buffer;
437 + enum nss_status status;
439 qbuf = strdupa (name);
440 - anslen = res_search (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
441 - sizeof (querybuf));
443 + net_buffer = (querybuf *) malloc (sizeof (querybuf));
444 + if (net_buffer == NULL)
445 + return NSS_STATUS_UNAVAIL;
447 + anslen = res_search (qbuf, C_IN, T_PTR, net_buffer->buf,
448 + sizeof (net_buffer->buf));
450 - /* Nothing found. */
451 - return (errno == ECONNREFUSED
452 - || errno == EPFNOSUPPORT
453 - || errno == EAFNOSUPPORT)
454 - ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
457 + /* Nothing found. */
458 + return (errno == ECONNREFUSED
459 + || errno == EPFNOSUPPORT
460 + || errno == EAFNOSUPPORT)
461 + ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
464 - return getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYNAME);
465 + status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYNAME);
471 @@ -131,7 +142,7 @@ _nss_dns_getnetbyaddr_r (long net, int t
473 /* Return entry for network with NAME. */
474 enum nss_status status;
475 - querybuf net_buffer;
476 + querybuf *net_buffer;
477 unsigned int net_bytes[4];
480 @@ -167,16 +178,24 @@ _nss_dns_getnetbyaddr_r (long net, int t
484 - anslen = res_query (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
485 - sizeof (querybuf));
486 + net_buffer = (querybuf *) malloc (sizeof (querybuf));
487 + if (net_buffer == NULL)
488 + return NSS_STATUS_UNAVAIL;
490 + anslen = res_query (qbuf, C_IN, T_PTR, net_buffer->buf,
491 + sizeof (net_buffer->buf));
493 - /* Nothing found. */
494 - return (errno == ECONNREFUSED
495 - || errno == EPFNOSUPPORT
496 - || errno == EAFNOSUPPORT)
497 - ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
500 + /* Nothing found. */
501 + return (errno == ECONNREFUSED
502 + || errno == EPFNOSUPPORT
503 + || errno == EAFNOSUPPORT)
504 + ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
507 - status = getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYADDR);
508 + status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYADDR);
510 if (status == NSS_STATUS_SUCCESS)
512 /* Strip trailing zeros. */