unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: zip-mode mis-displays large files
Date: Sat, 22 Apr 2006 15:00:10 +0300	[thread overview]
Message-ID: <uhd4lyg51.fsf@gnu.org> (raw)
In-Reply-To: <al8xpypt82.fsf@quant8.janestcapital.quant> (message from Sam Steingold on Fri, 21 Apr 2006 16:30:05 -0400)

> From: Sam Steingold <sds@podval.org>
> Date: Fri, 21 Apr 2006 16:30:05 -0400
> 
>   -rw-rw-r--  -174564534   4-Apr-2006  12:27:04  no-match-18.log
>   -rw-rw-r--   1955745   5-Apr-2006  09:00:16  no-match-19.log
>   -rw-rw-r--   7809176   5-Apr-2006  16:20:36  no-match-20.log
>   -rw-rw-r--   2328621   6-Apr-2006  17:25:24  no-match-21.log
>   -rw-rw-r--    959910   7-Apr-2006  16:20:50  no-match-22.log
>   -rw-rw-r--   2142728  17-Apr-2006  09:15:32  no-match-23.log
>   -rw-rw-r--  105777607  17-Apr-2006  16:55:06  no-match-24.log
>   -rw-rw-r--  66358753  18-Apr-2006  16:19:50  no-match-25.log
> - ----------  --------  -----------  --------  ---------------
>               142264156                         25 files
> 
> note the negative length of the "no-match-18.log" file.

Does the patch below give good results?

Index: lisp/arc-mode.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/arc-mode.el,v
retrieving revision 1.72
diff -u -r1.72 arc-mode.el
--- lisp/arc-mode.el	8 Mar 2006 01:57:59 -0000	1.72
+++ lisp/arc-mode.el	22 Apr 2006 11:57:42 -0000
@@ -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,13 @@
       (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))
+             (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  (float (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 +1362,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 +1396,9 @@
     (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),
+	     (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 +1474,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 +1509,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 +1606,7 @@
 	     ;; (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))
+             (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 +1632,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 +1658,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 +1712,7 @@
       (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))
+             (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 +1736,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 +1758,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"))

  parent reply	other threads:[~2006-04-22 12:00 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-04-21 20:30 zip-mode mis-displays large files Sam Steingold
2006-04-21 22:38 ` Kevin Rodgers
2006-04-22 12:00 ` Eli Zaretskii [this message]
2006-04-22 13:19   ` Eli Zaretskii
2006-04-24 12:33     ` Sam Steingold
2006-05-05 10:59       ` Eli Zaretskii
2006-04-22 12:03 ` Richard Stallman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=uhd4lyg51.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).