On Tue, Oct 13, 2009 at 09:02:10PM +0200, Denys Vlasenko wrote:

>Perhaps I thought time() is cheaper than stat(), but

that's what i thought, yes :)

>this patch will make us see new /etc/resolv.conf
>at once -> better user experience. I like it.
>
>
>+       static time_t resolv_conf_mtime;
>...
>+               struct stat sb;
>+               stat("/etc/resolv.conf", &sb);
>+               if ((difftime(resolv_conf_mtime, sb.st_mtime)) < 0) {
>

I came up with the same solution to this problem a month or two ago. 
(i.e. using 'stat' to determine if resolv.conf has changed.)
Since we are using a 3-year-old version of uclibc, I never got around
to making a patch compatible with the current code and submitting it.

Bernhard's solution has one problem in that the call to stat will 
fail if /etc/resolv.conf does not exist. In that case, the value
of sb.st_mtime is indeterminate.  Here is a patch that should account
for that case:
---------------------------------------
--- a/libc/inet/resolv.c    2009-10-13 16:47:31.000000000 -0700
+++ b/libc/inet/resolv.c    2009-10-13 16:50:34.000000000 -0700
@@ -959,8 +959,13 @@
        if (!__res_sync) {
                /* Reread /etc/resolv.conf if it was modified.  */
                struct stat sb;
-               stat("/etc/resolv.conf", &sb);
-               if (resolv_conf_mtime != (uint32_t)sb.st_mtime) {
+               if (stat("/etc/resolv.conf", &sb) < 0) {
+#ifdef FALLBACK_TO_CONFIG_RESOLVCONF
+                       if (stat("/etc/config/resolv.conf", &sb) < 0)
+#endif
+                               sb.st_mtime = 0;
+               }
+               if ((sb.st_mtime != 0) && (resolv_conf_mtime != 
(uint32_t)sb.st_mtime)) {
                        resolv_conf_mtime = sb.st_mtime;
                        __close_nameservers(); /* force config reread */
                }
---------------------------------------

-- 
_______________________________________________
uClibc mailing list
uClibc@uclibc.org
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to