unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Ruthra Kumar <ruthrab@gmail.com>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: 43827@debbugs.gnu.org
Subject: bug#43827: #42223 squashfs patch
Date: Fri, 23 Oct 2020 11:39:32 +0530	[thread overview]
Message-ID: <CADnj5pkm3m0gDoKKs5AQHHS1qD892EeboeZgazM2znq3R3HnZw@mail.gmail.com> (raw)
In-Reply-To: <87r1q53l3b.fsf_-_@gnus.org>

[-- Attachment #1: Type: text/plain, Size: 765 bytes --]

Hello Lars,

So, Paperwork is complete.

I've fixed the issue wherein it tries to extract a directory as a
file, added comments in required places and fixed some whitespace
warnings.

Patch is made on latest tip.

Regards
Ruthra Kumar

On Sun, Oct 11, 2020 at 1:33 AM Lars Ingebrigtsen <larsi@gnus.org> wrote:
>
> Ruthra Kumar <ruthrab@gmail.com> writes:
>
> > attached latest diff.
>
> Thanks; with that version, I was able to open a .snap file (which is
> squashfs) without problems.
>
> So now we just have to wait for the FSF paperwork to happen.  After
> that's completed, could you send a message to this bug report, and we'll
> take it from there?
>
> --
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no

[-- Attachment #2: 0001-Added-support-for-Squashfs-archive-files.patch --]
[-- Type: text/x-patch, Size: 7832 bytes --]

From ad63b806997cc1cabec6662093c801b0c024ea97 Mon Sep 17 00:00:00 2001
From: Ruthra Kumar <ruthrab@gmail.com>
Date: Fri, 23 Oct 2020 11:33:41 +0530
Subject: [PATCH] Added support for Squashfs archive files

---
 lisp/arc-mode.el           | 115 +++++++++++++++++++++++++++++++++----
 lisp/files.el              |   4 +-
 lisp/international/mule.el |   4 +-
 3 files changed, 108 insertions(+), 15 deletions(-)

diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el
index eb62a85118..c169b83c32 100644
--- a/lisp/arc-mode.el
+++ b/lisp/arc-mode.el
@@ -51,17 +51,17 @@
 ;; ARCHIVE TYPES: Currently only the archives below are handled, but the
 ;; structure for handling just about anything is in place.
 ;;
-;;			Arc	Lzh	Zip	Zoo	Rar	7z	Ar
-;;			--------------------------------------------------
-;; View listing		Intern	Intern	Intern	Intern	Y	Y	Y
-;; Extract member	Y	Y	Y	Y	Y	Y	Y
-;; Save changed member	Y	Y	Y	Y	N	Y	Y
-;; Add new member	N	N	N	N	N	N	N
-;; Delete member	Y	Y	Y	Y	N	Y	N
-;; Rename member	Y	Y	N	N	N	N	N
-;; Chmod		-	Y	Y	-	N	N	N
-;; Chown		-	Y	-	-	N	N	N
-;; Chgrp		-	Y	-	-	N	N	N
+;;			Arc	Lzh	Zip	Zoo	Rar	7z	Ar	Squashfs
+;;			---------------------------------------------------------------
+;; View listing		Intern	Intern	Intern	Intern	Y	Y	Y	Y
+;; Extract member	Y	Y	Y	Y	Y	Y	Y	Y
+;; Save changed member	Y	Y	Y	Y	N	Y	Y	N
+;; Add new member	N	N	N	N	N	N	N	N
+;; Delete member	Y	Y	Y	Y	N	Y	N	N
+;; Rename member	Y	Y	N	N	N	N	N	N
+;; Chmod		-	Y	Y	-	N	N	N	N
+;; Chown		-	Y	-	-	N	N	N	N
+;; Chgrp		-	Y	-	-	N	N	N	N
 ;;
 ;; Special thanks to Bill Brodie <wbrodie@panix.com> for very useful tips
 ;; on the first released version of this package.
@@ -370,6 +370,25 @@ archive-7z-update
 		       :inline t
 		       (string :format "%v"))))
 
+;; ------------------------------
+;; Squashfs archive configuration
+
+(defgroup archive-squashfs nil
+  "Squashfs-specific options to archive."
+  :group 'archive)
+
+(defcustom archive-squashfs-extract
+  '("rdsquashfs" "-c")
+  "Program and its options to run in order to extract a squashsfs file member.
+Extraction should happen to standard output.  Archive and member name will
+be added."
+  :type '(list (string :tag "Program")
+	       (repeat :tag "Options"
+		       :inline t
+		       (string :format "%v")))
+  :group 'archive-squashfs)
+
+
 ;; -------------------------------------------------------------------------
 ;;; Section: Variables
 
@@ -741,6 +760,7 @@ archive-find-type
                 (re-search-forward "Rar!" (+ (point) 100000) t))
            'rar-exe)
 	  ((looking-at "7z\274\257\047\034") '7z)
+          ((looking-at "hsqs") 'squashfs)
 	  (t (error "Buffer format not recognized")))))
 ;; -------------------------------------------------------------------------
 
@@ -2280,6 +2300,79 @@ archive-ar-write-file-member
    descr
    '("ar" "r")))
 
+;; -------------------------------------------------------------------------
+;;; Section Squashfs archives.
+
+(defun archive-squashfs-summarize (&optional file)
+  (unless file (setq file buffer-file-name))
+  (let* ((copy (file-local-copy file))
+         (files ()))
+    (with-temp-buffer
+      (call-process "unsquashfs" nil t nil "-ll" (or file copy))
+      (if copy (delete-file copy))
+      (goto-char (point-min))
+      (search-forward-regexp "[drwxl\\-]\\{10\\}")
+      (beginning-of-line)
+      (while
+          (looking-at (concat "^\\(.[rwx\\-]\\{9\\}\\) " ;Mode
+                              "\\(.+\\)/\\(.+\\) "  ;user/group
+                              "\\(.+\\) "     ;size
+                              "\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\) " ;date
+                              "\\([0-9]\\{2\\}:[0-9]\\{2\\}\\) " ;time
+                              "\\(.+\\)\n"     ;Filename
+                              ))
+        (let*
+            ((name (match-string 7))
+             (flags (match-string 1))
+             (uid (match-string 2))
+             (gid (match-string 3))
+             (size (string-to-number (match-string 4)))
+             (date (match-string 5))
+             (time (match-string 6))
+             (date-time)
+             (mode))
+          ;; Only list directory and regular files
+          (when (or  (eq (aref flags 0) ?d)
+                     (eq (aref flags 0) ?-))
+            (if (equal name "squashfs-root")
+                (setf name "/"))
+            ;; remove 'squashfs-root/' from filenames
+            (setq name (string-replace "squashfs-root/" "" name))
+            (setq date-time (concat date " " time))
+            (setq mode (logior (cond
+                                ((eq (aref flags 0) ?d) #o40000)
+                                (t 0))
+                               ;; Convert symbolic to octal representation
+                               (file-modes-symbolic-to-number (concat "u=" (string-replace "-" ""  (substring flags 1 4))
+                                                                      ",g=" (string-replace "-" ""  (substring flags 4 7))
+                                                                      ",o=" (string-replace "-" ""  (substring flags 7 10))))))
+            (push (archive--file-desc name name mode size date-time :uid uid :gid gid)
+                  files)))
+        (goto-char (match-end 0))))
+    (archive--summarize-descs (nreverse files))))
+
+(defun archive-squashfs-extract-by-stdout (archive name command &optional stderr-test)
+  (let ((stderr-file (make-temp-file "arc-stderr")))
+    (unwind-protect
+	(prog1
+	    (apply #'call-process
+		   (car command)
+		   nil
+		   (if stderr-file (list t stderr-file) t)
+		   nil
+		   (append (cdr command) (list name archive)))
+	  (with-temp-buffer
+	    (insert-file-contents stderr-file)
+	    (goto-char (point-min))
+	    (when (if (stringp stderr-test)
+		      (not (re-search-forward stderr-test nil t))
+		    (> (buffer-size) 0))
+	      (message "%s" (buffer-string)))))
+      (if (file-exists-p stderr-file)
+          (delete-file stderr-file)))))
+
+(defun archive-squashfs-extract (archive name)
+  (archive-squashfs-extract-by-stdout archive name archive-squashfs-extract))
 
 ;; -------------------------------------------------------------------------
 ;; This line was a mistake; it is kept now for compatibility.
diff --git a/lisp/files.el b/lisp/files.el
index bbc8f88159..fdf758ad92 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2758,8 +2758,8 @@ auto-mode-alist
      ;; The list of archive file extensions should be in sync with
      ;; `auto-coding-alist' with `no-conversion' coding system.
      ("\\.\\(\
-arc\\|zip\\|lzh\\|lha\\|zoo\\|[jew]ar\\|xpi\\|rar\\|cbr\\|7z\\|\
-ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|CBR\\|7Z\\)\\'" . archive-mode)
+arc\\|zip\\|lzh\\|lha\\|zoo\\|[jew]ar\\|xpi\\|rar\\|cbr\\|7z\\|squashfs\\|\
+ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|CBR\\|7Z\\|SQUASHFS\\)\\'" . archive-mode)
      ("\\.oxt\\'" . archive-mode) ;(Open|Libre)Office extensions.
      ("\\.\\(deb\\|[oi]pk\\)\\'" . archive-mode) ; Debian/Opkg packages.
      ;; Mailer puts message to be edited in
diff --git a/lisp/international/mule.el b/lisp/international/mule.el
index 2af64de77b..ad9c3a2306 100644
--- a/lisp/international/mule.el
+++ b/lisp/international/mule.el
@@ -1710,8 +1710,8 @@ auto-coding-alist
   ;; self-extracting exe archives.
   (mapcar (lambda (arg) (cons (purecopy (car arg)) (cdr arg)))
 	  '(("\\.\\(\
-arc\\|zip\\|lzh\\|lha\\|zoo\\|[jew]ar\\|xpi\\|rar\\|7z\\|\
-ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|7Z\\)\\'"
+arc\\|zip\\|lzh\\|lha\\|zoo\\|[jew]ar\\|xpi\\|rar\\|7z\\|squashfs\\|\
+ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|7Z\\|SQUASHFS\\)\\'"
      . no-conversion-multibyte)
     ("\\.\\(exe\\|EXE\\)\\'" . no-conversion)
     ("\\.\\(sx[dmicw]\\|odt\\|tar\\|t[bg]z\\)\\'" . no-conversion)
-- 
2.23.0


  reply	other threads:[~2020-10-23  6:09 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-06  5:23 bug#43827: #42223 patch Ruthra Kumar
2020-10-07  3:53 ` Lars Ingebrigtsen
2020-10-08  6:31   ` Ruthra Kumar
2020-10-09  4:19     ` Lars Ingebrigtsen
2020-10-09  5:25       ` Ruthra Kumar
2020-10-10 20:03         ` bug#43827: #42223 squashfs patch Lars Ingebrigtsen
2020-10-23  6:09           ` Ruthra Kumar [this message]
2020-10-23 11:03             ` Lars Ingebrigtsen

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=CADnj5pkm3m0gDoKKs5AQHHS1qD892EeboeZgazM2znq3R3HnZw@mail.gmail.com \
    --to=ruthrab@gmail.com \
    --cc=43827@debbugs.gnu.org \
    --cc=larsi@gnus.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).