emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 92a8230 1/4: esh-opt.el: Fix improper parsing of fi


From: Noam Postavsky
Subject: [Emacs-diffs] master 92a8230 1/4: esh-opt.el: Fix improper parsing of first argument (Bug#28323)
Date: Tue, 15 May 2018 20:12:22 -0400 (EDT)

branch: master
commit 92a8230e49a65be48442ee95cf50c90514e48f99
Author: Jay Kamat <address@hidden>
Commit: Noam Postavsky <address@hidden>

    esh-opt.el: Fix improper parsing of first argument (Bug#28323)
    
    Examples of broken behavior:
    
        sudo -u root whoami
        Outputs: -u
        ls -I '*.txt' /dev/null
        Errors with: *.txt: No such file or directory
    
    * lisp/eshell/esh-opt.el (eshell--process-args): Refactor usage of
    args to eshell--args, as we rely on modifications from
    eshell--process-option and vice versa.  These modifications were not
    being propogated in the (if (= ai 0)) case, since popping the first
    element of a list doesn't destructively modify the underlying list
    object.
---
 lisp/eshell/esh-opt.el | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/lisp/eshell/esh-opt.el b/lisp/eshell/esh-opt.el
index b802696..67b7d05 100644
--- a/lisp/eshell/esh-opt.el
+++ b/lisp/eshell/esh-opt.el
@@ -246,26 +246,27 @@ switch is unrecognized."
                                     options)))
          (ai 0) arg
          (eshell--args args))
-    (while (< ai (length args))
-      (setq arg (nth ai args))
+    (while (< ai (length eshell--args))
+      (setq arg (nth ai eshell--args))
       (if (not (and (stringp arg)
                    (string-match "^-\\(-\\)?\\(.*\\)" arg)))
          (setq ai (1+ ai))
        (let* ((dash (match-string 1 arg))
               (switch (match-string 2 arg)))
          (if (= ai 0)
-             (setq args (cdr args))
-           (setcdr (nthcdr (1- ai) args) (nthcdr (1+ ai) args)))
+             (setq eshell--args (cdr eshell--args))
+           (setcdr (nthcdr (1- ai) eshell--args)
+                    (nthcdr (1+ ai) eshell--args)))
          (if dash
              (if (> (length switch) 0)
                  (eshell--process-option name switch 1 ai options opt-vals)
-               (setq ai (length args)))
+               (setq ai (length eshell--args)))
            (let ((len (length switch))
                  (index 0))
              (while (< index len)
                (eshell--process-option name (aref switch index)
                                         0 ai options opt-vals)
                (setq index (1+ index))))))))
-    (nconc (mapcar #'cdr opt-vals) args)))
+    (nconc (mapcar #'cdr opt-vals) eshell--args)))
 
 ;;; esh-opt.el ends here



reply via email to

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