On Wed, Jun 13 2012, Jesse Rosenthal <jrosenthal@jhu.edu> wrote: > Previously, the timestamp at the beginning of the FCC maildir unique > maildir name was derived incorrectly, thanks to an integer > overflow. This changes the derivation of timestamp to float > arithmetic, and so gets the number correct. (It is still formatted > with "%d" so it will show up as an integer.) > > This change is mostly a question of consistency, since the unique name > is arbitrary anyway. But since most people use timestamps, and that was > the original intention here as well, we might as well. > > Signed-off-by: Jesse Rosenthal <jrosenthal@jhu.edu> > --- Good point -- did some experiments (on 32bit machine, on 64 (* 65536 *65536) just works OK (4294967296). (insert (format " %d" (* 8191 65536))) 536805376 (insert (format " %d" (* 8192 65536))) -536870912 Wraps now (many times already) (insert (format " %d" (* 32767 65536.0))) 2147418112 (insert (format " %d" (* 32768 65536.0))) -2147483648 Wraps Tue Jan 19 03:14:08 2038 UTC (insert (format " %0.f" (* 32768 65536.0))) 2147483648 (insert (format " %0.f" (* 65536 65536.0))) 4294967296 Does not wrap. On emacs window you can re-experiment by typing C-x C-e after last closing ')' on line. (float-time '(32767 65536)) -> 2147418112.0 (minibuffer output) (float-time '(32768 65536)) -> error "Invalid time specification" On 64-bit machine this latest work ok; i.e 2147483648.0 is returned. Alternatives: 1) Use current patch, filenames will have extra '-' in 2038 on 32-bit systems. 2) Drop 'timeid' and replace it with (float-time) in `format` call a few lines in original source after the patch context below -- No idea how (float-time) works on 32-bit systems after 2038. 3) Use "%0.f" in format string instead of "%d" (there is no "%ld" or "%u" sequences for `format`. I wonder what (current-time-string) in current emacs return in 2038 (maybe I test (sometime(tm)) with (lib)faketime). I suggest option #2. Tomi > emacs/notmuch-maildir-fcc.el | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/emacs/notmuch-maildir-fcc.el b/emacs/notmuch-maildir-fcc.el > index dcfbc4b..6fd8ff9 100644 > --- a/emacs/notmuch-maildir-fcc.el > +++ b/emacs/notmuch-maildir-fcc.el > @@ -141,7 +141,7 @@ will NOT be removed or replaced." > > (defun notmuch-maildir-fcc-make-uniq-maildir-id () > (let* ((ct (current-time)) > - (timeid (+ (* (car ct) 65536) (cadr ct))) > + (timeid (+ (* (car ct) 65536.0) (cadr ct))) > (microseconds (car (cdr (cdr ct)))) > (hostname (notmuch-maildir-fcc-host-fixer system-name))) > (setq notmuch-maildir-fcc-count (+ notmuch-maildir-fcc-count 1)) > -- > 1.7.9.5