emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/arc-mode.el


From: Eli Zaretskii
Subject: [Emacs-diffs] Changes to emacs/lisp/arc-mode.el
Date: Fri, 05 May 2006 10:54:56 +0000

Index: emacs/lisp/arc-mode.el
diff -u emacs/lisp/arc-mode.el:1.72 emacs/lisp/arc-mode.el:1.73
--- emacs/lisp/arc-mode.el:1.72 Wed Mar  8 01:57:59 2006
+++ emacs/lisp/arc-mode.el      Fri May  5 10:54:55 2006
@@ -464,10 +464,12 @@
 (defsubst archive-name (suffix)
   (intern (concat "archive-" (symbol-name archive-subtype) "-" suffix)))
 
-(defun archive-l-e (str &optional len)
+(defun archive-l-e (str &optional len float)
   "Convert little endian string/vector STR to integer.
 Alternatively, STR may be a buffer position in the current buffer
-in which case a second argument, length LEN, should be supplied."
+in which case a second argument, length LEN, should be supplied.
+FLOAT, if non-nil, means generate and return a float instead of an integer
+\(use this for numbers that can overflow the Emacs integer)."
   (if (stringp str)
       (setq len (length str))
     (setq str (buffer-substring str (+ str len))))
@@ -475,7 +477,8 @@
         (i 0))
     (while (< i len)
       (setq i (1+ i)
-            result (+ (ash result 8) (aref str (- len i)))))
+            result (+ (if float (* result 256.0) (ash result 8))
+                     (aref str (- len i)))))
     result))
 
 (defun archive-int-to-mode (mode)
@@ -1331,13 +1334,14 @@
       (let* ((namefld (buffer-substring (+ p 2) (+ p 2 13)))
             (fnlen   (or (string-match "\0" namefld) 13))
             (efnname (substring namefld 0 fnlen))
-             (csize   (archive-l-e (+ p 15) 4))
+            ;; Convert to float to avoid overflow for very large files.
+             (csize   (archive-l-e (+ p 15) 4 'float))
              (moddate (archive-l-e (+ p 19) 2))
              (modtime (archive-l-e (+ p 21) 2))
-             (ucsize  (archive-l-e (+ p 25) 4))
+             (ucsize  (archive-l-e (+ p 25) 4 'float))
             (fiddle  (string= efnname (upcase efnname)))
              (ifnname (if fiddle (downcase efnname) efnname))
-             (text    (format "  %8d  %-11s  %-8s  %s"
+             (text    (format "  %8.0f  %-11s  %-8s  %s"
                               ucsize
                               (archive-dosdate moddate)
                               (archive-dostime modtime)
@@ -1359,7 +1363,7 @@
              dash)
       (archive-summarize-files (nreverse visual))
       (insert dash
-             (format "  %8d                         %d file%s"
+             (format "  %8.0f                         %d file%s"
                      totalsize
                      (length files)
                      (if (= 1 (length files)) "" "s"))
@@ -1393,9 +1397,10 @@
     (while (progn (goto-char p)                ;beginning of a base header.
                  (looking-at "\\(.\\|\n\\)\\(.\\|\n\\)-l[hz][0-9ds]-"))
       (let* ((hsize   (char-after p))  ;size of the base header (level 0 and 1)
-            (csize   (archive-l-e (+ p 7) 4)) ;size of a compressed file to 
follow (level 0 and 2),
+            ;; Convert to float to avoid overflow for very large files.
+            (csize   (archive-l-e (+ p 7) 4 'float)) ;size of a compressed 
file to follow (level 0 and 2),
                                        ;size of extended headers + the 
compressed file to follow (level 1).
-             (ucsize  (archive-l-e (+ p 11) 4))        ;size of an 
uncompressed file.
+             (ucsize  (archive-l-e (+ p 11) 4 'float)) ;size of an 
uncompressed file.
             (time1   (archive-l-e (+ p 15) 2)) ;date/time (MSDOS format in 
level 0, 1 headers
             (time2   (archive-l-e (+ p 17) 2)) ;and UNIX format in level 2 
header.)
             (hdrlvl  (char-after (+ p 20))) ;header level
@@ -1471,12 +1476,12 @@
                          (archive-unixtime time1 time2)
                        (archive-dostime time1)))
        (setq text    (if archive-alternate-display
-                         (format "  %8d  %5S  %5S  %s"
+                         (format "  %8.0f  %5S  %5S  %s"
                                  ucsize
                                  (or uid "?")
                                  (or gid "?")
                                  ifnname)
-                       (format "  %10s  %8d  %-11s  %-8s  %s"
+                       (format "  %10s  %8.0f  %-11s  %-8s  %s"
                                modestr
                                ucsize
                                moddate
@@ -1506,8 +1511,8 @@
                       "M   Length    Uid    Gid  File\n"
                    "M   Filemode    Length  Date         Time      File\n"))
          (sumline (if archive-alternate-display
-                      "  %8d                %d file%s"
-                    "              %8d                         %d file%s")))
+                      "  %8.0f                %d file%s"
+                    "              %8.0f                         %d file%s")))
       (insert header dash)
       (archive-summarize-files (nreverse visual))
       (insert dash
@@ -1603,7 +1608,8 @@
             ;; (method  (archive-l-e (+ p 10) 2))
              (modtime (archive-l-e (+ p 12) 2))
              (moddate (archive-l-e (+ p 14) 2))
-             (ucsize  (archive-l-e (+ p 24) 4))
+            ;; Convert to float to avoid overflow for very large files.
+             (ucsize  (archive-l-e (+ p 24) 4 'float))
              (fnlen   (archive-l-e (+ p 28) 2))
              (exlen   (archive-l-e (+ p 30) 2))
              (fclen   (archive-l-e (+ p 32) 2))
@@ -1629,7 +1635,7 @@
                           (string= (upcase efnname) efnname)))
              (ifnname (if fiddle (downcase efnname) efnname))
             (width (string-width ifnname))
-             (text    (format "  %10s  %8d  %-11s  %-8s  %s"
+             (text    (format "  %10s  %8.0f  %-11s  %-8s  %s"
                              modestr
                               ucsize
                               (archive-dosdate moddate)
@@ -1655,7 +1661,7 @@
              dash)
       (archive-summarize-files (nreverse visual))
       (insert dash
-             (format "              %8d                         %d file%s"
+             (format "              %8.0f                         %d file%s"
                      totalsize
                      (length files)
                      (if (= 1 (length files)) "" "s"))
@@ -1709,7 +1715,8 @@
       (let* ((next    (1+ (archive-l-e (+ p 6) 4)))
              (moddate (archive-l-e (+ p 14) 2))
              (modtime (archive-l-e (+ p 16) 2))
-             (ucsize  (archive-l-e (+ p 20) 4))
+            ;; Convert to float to avoid overflow for very large files.
+             (ucsize  (archive-l-e (+ p 20) 4 'float))
             (namefld (buffer-substring (+ p 38) (+ p 38 13)))
             (dirtype (char-after (+ p 4)))
             (lfnlen  (if (= dirtype 2) (char-after (+ p 56)) 0))
@@ -1733,7 +1740,7 @@
             (fiddle  (and (= lfnlen 0) (string= efnname (upcase efnname))))
              (ifnname (if fiddle (downcase efnname) efnname))
             (width (string-width ifnname))
-             (text    (format "  %8d  %-11s  %-8s  %s"
+             (text    (format "  %8.0f  %-11s  %-8s  %s"
                               ucsize
                               (archive-dosdate moddate)
                               (archive-dostime modtime)
@@ -1755,7 +1762,7 @@
              dash)
       (archive-summarize-files (nreverse visual))
       (insert dash
-             (format "  %8d                         %d file%s"
+             (format "  %8.0f                         %d file%s"
                      totalsize
                      (length files)
                      (if (= 1 (length files)) "" "s"))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]