Commit 7a31038f authored by Gnus developers's avatar Gnus developers Committed by Katsumi Yamaoka
Browse files

Merge from Gnus git master

2014-02-04 Lars Ingebrigtsen <larsi@gnus.org>
 * calendar/parse-time.el (parse-time-iso8601-regexp)
 (parse-iso8601-time-string): Copied from `url-dav' so that we can use
 it more generally.

2014-02-01 Lars Ingebrigtsen <larsi@gnus.org>
 * net/dns.el (network-interface-list): Define for XEmacs.

2014-01-31 Magnus Henoch <magnus.henoch@gmail.com>
 * net/dns.el (dns-servers-up-to-date-p): New function to see whether
 the network interfaces changed.
 (dns-query): Use it to flush the data.
parent 4d2226bf
2014-03-23 Lars Ingebrigtsen <larsi@gnus.org>
* calendar/parse-time.el (parse-time-iso8601-regexp)
(parse-iso8601-time-string): Copied from `url-dav' so that we can use
it more generally.
2014-03-23 Lars Ingebrigtsen <larsi@gnus.org>
* net/dns.el (network-interface-list): Define for XEmacs.
2014-03-23 Magnus Henoch <magnus.henoch@gmail.com>
* net/dns.el (dns-servers-up-to-date-p): New function to see whether
the network interfaces changed.
(dns-query): Use it to flush the data.
2014-03-23 Juanma Barranquero <lekktu@gmail.com>
 
* vc/vc.el (vc-rollback): Use set-buffer-modified-p.
......
......@@ -218,6 +218,68 @@ unknown are returned as nil."
(rplaca (nthcdr (pop slots) time) new-val))))))))
time))
(defconst parse-time-iso8601-regexp
(let* ((dash "-?")
(colon ":?")
(4digit "\\([0-9][0-9][0-9][0-9]\\)")
(2digit "\\([0-9][0-9]\\)")
(date-fullyear 4digit)
(date-month 2digit)
(date-mday 2digit)
(time-hour 2digit)
(time-minute 2digit)
(time-second 2digit)
(time-secfrac "\\(\\.[0-9]+\\)?")
(time-numoffset (concat "[-+]\\(" time-hour "\\):" time-minute))
(time-offset (concat "Z" time-numoffset))
(partial-time (concat time-hour colon time-minute colon time-second
time-secfrac))
(full-date (concat date-fullyear dash date-month dash date-mday))
(full-time (concat partial-time time-offset))
(date-time (concat full-date "T" full-time)))
(list (concat "^" full-date)
(concat "T" partial-time)
(concat "Z" time-numoffset)))
"List of regular expressions matching ISO 8601 dates.
1st regular expression matches the date.
2nd regular expression matches the time.
3rd regular expression matches the (optional) timezone specification.")
(defun parse-iso8601-time-string (date-string)
(let* ((date-re (nth 0 parse-time-iso8601-regexp))
(time-re (nth 1 parse-time-iso8601-regexp))
(tz-re (nth 2 parse-time-iso8601-regexp))
re-start
time seconds minute hour fractional-seconds
day month year day-of-week dst tz)
;; We need to populate 'time' with
;; (SEC MIN HOUR DAY MON YEAR DOW DST TZ)
;; Nobody else handles iso8601 correctly, let's do it ourselves.
(when (string-match date-re date-string re-start)
(setq year (string-to-number (match-string 1 date-string))
month (string-to-number (match-string 2 date-string))
day (string-to-number (match-string 3 date-string))
re-start (match-end 0))
(when (string-match time-re date-string re-start)
(setq hour (string-to-number (match-string 1 date-string))
minute (string-to-number (match-string 2 date-string))
seconds (string-to-number (match-string 3 date-string))
fractional-seconds (string-to-number (or
(match-string 4 date-string)
"0"))
re-start (match-end 0))
(when (string-match tz-re date-string re-start)
(setq tz (match-string 1 date-string)))
(setq time (list seconds minute hour day month year day-of-week dst tz))))
;; Fall back to having Gnus do fancy things for us.
(when (not time)
(setq time (parse-time-string date-string)))
(and time
(apply 'encode-time time))))
(provide 'parse-time)
;;; parse-time.el ends here
......@@ -47,10 +47,6 @@
;;; Code:
;; For Emacs <22.2 and XEmacs.
(eval-and-compile
(unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
(eval-when-compile (require 'cl)) ; for case
(defgroup hashcash nil
......
......@@ -31,6 +31,12 @@
"List of DNS servers to query.
If nil, /etc/resolv.conf and nslookup will be consulted.")
(defvar dns-servers-valid-for-interfaces nil
"The return value of `network-interface-list' when `dns-servers' was set.
If the set of network interfaces and/or their IP addresses
change, then presumably the list of DNS servers needs to be
updated. Set this variable to t to disable the check.")
;;; Internal code:
(defvar dns-query-types
......@@ -297,6 +303,17 @@ If TCP-P, the first two bytes of the package with be the length field."
(t string)))
(goto-char point))))
(declare-function network-interface-list "process.c")
(defun dns-servers-up-to-date-p ()
"Return false if we need to recheck the list of DNS servers."
(and dns-servers
(or (eq dns-servers-valid-for-interfaces t)
;; `network-interface-list' was introduced in Emacs 22.1.
(not (fboundp 'network-interface-list))
(equal dns-servers-valid-for-interfaces
(network-interface-list)))))
(defun dns-set-servers ()
"Set `dns-servers' to a list of DNS servers or nil if none are found.
Parses \"/etc/resolv.conf\" or calls \"nslookup\"."
......@@ -314,7 +331,9 @@ Parses \"/etc/resolv.conf\" or calls \"nslookup\"."
(goto-char (point-min))
(re-search-forward
"^Address:[ \t]*\\([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\\)" nil t)
(setq dns-servers (list (match-string 1)))))))
(setq dns-servers (list (match-string 1))))))
(when (fboundp 'network-interface-list)
(setq dns-servers-valid-for-interfaces (network-interface-list))))
(defun dns-read-txt (string)
(if (> (length string) 1)
......@@ -378,7 +397,7 @@ Parses \"/etc/resolv.conf\" or calls \"nslookup\"."
If FULLP, return the entire record returned.
If REVERSEP, look up an IP address."
(setq type (or type 'A))
(unless dns-servers
(unless (dns-servers-up-to-date-p)
(dns-set-servers))
(when reversep
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment