patches/glibc/ports-2.13/180-resolv-dynamic.patch
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Wed Dec 26 13:30:51 2012 +0100 (2012-12-26)
changeset 3145 598880dab0f3
permissions -rw-r--r--
libc/glibc: both glibc and eglibc have pkgversion and bugurl

Well, all eglibc version we support do, and latest glibc versions
we support do.

Not all glibc versions do, but older versions simply ignore the
unrecognised ./configure flags.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
yann@2438
     1
ripped from SuSE
yann@2438
     2
yann@2438
     3
if /etc/resolv.conf is updated, then make sure applications
yann@2438
     4
already running get the updated information.
yann@2438
     5
yann@2438
     6
http://bugs.gentoo.org/177416
yann@2438
     7
yann@2438
     8
diff -durN glibc-2.13.orig/resolv/res_libc.c glibc-2.13/resolv/res_libc.c
yann@2438
     9
--- glibc-2.13.orig/resolv/res_libc.c	2009-02-07 05:27:42.000000000 +0100
yann@2438
    10
+++ glibc-2.13/resolv/res_libc.c	2009-11-13 00:49:59.000000000 +0100
yann@2438
    11
@@ -22,6 +22,7 @@
yann@2438
    12
 #include <arpa/nameser.h>
yann@2438
    13
 #include <resolv.h>
yann@2438
    14
 #include <bits/libc-lock.h>
yann@2438
    15
+#include <sys/stat.h>
yann@2438
    16
 
yann@2438
    17
 
yann@2438
    18
 /* The following bit is copied from res_data.c (where it is #ifdef'ed
yann@2438
    19
@@ -95,6 +96,20 @@
yann@2438
    20
 __res_maybe_init (res_state resp, int preinit)
yann@2438
    21
 {
yann@2438
    22
 	if (resp->options & RES_INIT) {
yann@2438
    23
+		static time_t last_mtime, last_check;
yann@2438
    24
+		time_t now;
yann@2438
    25
+		struct stat statbuf;
yann@2438
    26
+		
yann@2438
    27
+		time (&now);
yann@2438
    28
+		if (now != last_check) {
yann@2438
    29
+			last_check = now;
yann@2438
    30
+			if (stat (_PATH_RESCONF, &statbuf) == 0 && last_mtime != statbuf.st_mtime) {
yann@2438
    31
+				last_mtime = statbuf.st_mtime;
yann@2438
    32
+				atomicinclock (lock);
yann@2438
    33
+				atomicinc (__res_initstamp);
yann@2438
    34
+				atomicincunlock (lock);
yann@2438
    35
+			}
yann@2438
    36
+		}
yann@2438
    37
 		if (__res_initstamp != resp->_u._ext.initstamp) {
yann@2438
    38
 			if (resp->nscount > 0)
yann@2438
    39
 				__res_iclose (resp, true);