123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- --- a/libc/inet/resolv.c
- +++ b/libc/inet/resolv.c
- @@ -3536,6 +3536,61 @@ __res_vinit(res_state rp, int preinit)
- return 0;
- }
-
- +static unsigned int
- +res_randomid(void)
- +{
- + return 0xffff & getpid();
- +}
- +
- +/* Our res_init never fails (always returns 0) */
- +int
- +res_init(void)
- +{
- + /*
- + * These three fields used to be statically initialized. This made
- + * it hard to use this code in a shared library. It is necessary,
- + * now that we're doing dynamic initialization here, that we preserve
- + * the old semantics: if an application modifies one of these three
- + * fields of _res before res_init() is called, res_init() will not
- + * alter them. Of course, if an application is setting them to
- + * _zero_ before calling res_init(), hoping to override what used
- + * to be the static default, we can't detect it and unexpected results
- + * will follow. Zero for any of these fields would make no sense,
- + * so one can safely assume that the applications were already getting
- + * unexpected results.
- + *
- + * _res.options is tricky since some apps were known to diddle the bits
- + * before res_init() was first called. We can't replicate that semantic
- + * with dynamic initialization (they may have turned bits off that are
- + * set in RES_DEFAULT). Our solution is to declare such applications
- + * "broken". They could fool us by setting RES_INIT but none do (yet).
- + */
- +
- + __UCLIBC_MUTEX_LOCK(__resolv_lock);
- +
- + if (!_res.retrans)
- + _res.retrans = RES_TIMEOUT;
- + if (!_res.retry)
- + _res.retry = 4;
- + if (!(_res.options & RES_INIT))
- + _res.options = RES_DEFAULT;
- +
- + /*
- + * This one used to initialize implicitly to zero, so unless the app
- + * has set it to something in particular, we can randomize it now.
- + */
- + if (!_res.id)
- + _res.id = res_randomid();
- +
- + __UCLIBC_MUTEX_UNLOCK(__resolv_lock);
- +
- + __res_vinit(&_res, 1);
- + __res_sync = res_sync_func;
- +
- + return 0;
- +}
- +libc_hidden_def(res_init)
- +
- static void
- __res_iclose(void)
- {
- @@ -3608,61 +3663,6 @@ struct __res_state *__resp = &_res;
- # endif
- #endif /* !__UCLIBC_HAS_THREADS__ */
-
- -static unsigned int
- -res_randomid(void)
- -{
- - return 0xffff & getpid();
- -}
- -
- -/* Our res_init never fails (always returns 0) */
- -int
- -res_init(void)
- -{
- - /*
- - * These three fields used to be statically initialized. This made
- - * it hard to use this code in a shared library. It is necessary,
- - * now that we're doing dynamic initialization here, that we preserve
- - * the old semantics: if an application modifies one of these three
- - * fields of _res before res_init() is called, res_init() will not
- - * alter them. Of course, if an application is setting them to
- - * _zero_ before calling res_init(), hoping to override what used
- - * to be the static default, we can't detect it and unexpected results
- - * will follow. Zero for any of these fields would make no sense,
- - * so one can safely assume that the applications were already getting
- - * unexpected results.
- - *
- - * _res.options is tricky since some apps were known to diddle the bits
- - * before res_init() was first called. We can't replicate that semantic
- - * with dynamic initialization (they may have turned bits off that are
- - * set in RES_DEFAULT). Our solution is to declare such applications
- - * "broken". They could fool us by setting RES_INIT but none do (yet).
- - */
- -
- - __UCLIBC_MUTEX_LOCK(__resolv_lock);
- -
- - if (!_res.retrans)
- - _res.retrans = RES_TIMEOUT;
- - if (!_res.retry)
- - _res.retry = 4;
- - if (!(_res.options & RES_INIT))
- - _res.options = RES_DEFAULT;
- -
- - /*
- - * This one used to initialize implicitly to zero, so unless the app
- - * has set it to something in particular, we can randomize it now.
- - */
- - if (!_res.id)
- - _res.id = res_randomid();
- -
- - __UCLIBC_MUTEX_UNLOCK(__resolv_lock);
- -
- - __res_vinit(&_res, 1);
- - __res_sync = res_sync_func;
- -
- - return 0;
- -}
- -libc_hidden_def(res_init)
- -
- /*
- * Set up default settings. If the configuration file exist, the values
- * there will have precedence. Otherwise, the server address is set to
|