]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix handling of commands containing double quotes in gdb-mi
authorJim Blandy <jimb@red-bean.com>
Sun, 26 Feb 2012 09:38:45 +0000 (17:38 +0800)
committerChong Yidong <cyd@gnu.org>
Sun, 26 Feb 2012 09:38:45 +0000 (17:38 +0800)
* lisp/progmodes/gdb-mi.el (gdb-mi-quote): New function.
(gdb-send): Apply it to the operand of the '-interpreter-exec
console' command, so that we can pass arguments with (say) quotes
in them.  Store exact string sent in gdb-debug-log (Bug#10765).

lisp/ChangeLog
lisp/progmodes/gdb-mi.el

index 9f1c4e714440cc740c924fef9cbcc1692f4a0d0e..a6783b87baa2048091ef0528303b41c7bd1c84a4 100644 (file)
@@ -1,3 +1,10 @@
+2012-02-26  Jim Blandy  <jimb@red-bean.com>
+
+       * progmodes/gdb-mi.el (gdb-mi-quote): New function.
+       (gdb-send): Apply it to the operand of the '-interpreter-exec
+       console' command, so that we can pass arguments with (say) quotes
+       in them.  Store exact string sent in gdb-debug-log (Bug#10765).
+
 2012-02-26  Chong Yidong  <cyd@gnu.org>
 
        * help-fns.el (describe-function-1): Clarify description of
index 301714ec55ff09cdbae306da1d8507351f6f3c6a..0c45c3f5e5d56d87d1128bea65264ccfb414e6e6 100644 (file)
@@ -1672,8 +1672,6 @@ static char *magick[] = {
   (if (not (string= "" string))
       (setq gdb-last-command string)
     (if gdb-last-command (setq string gdb-last-command)))
-  (if gdb-enable-debug
-      (push (cons 'mi-send (concat string "\n")) gdb-debug-log))
   (if (string-match "^-" string)
       ;; MI command
       (progn
@@ -1683,10 +1681,22 @@ static char *magick[] = {
     (if (string-match "\\\\$" string)
        (setq gdb-continuation (concat gdb-continuation string "\n"))
       (setq gdb-first-done-or-error t)
-      (process-send-string proc (concat "-interpreter-exec console \""
-                                       gdb-continuation string "\"\n"))
+      (let ((to-send (concat "-interpreter-exec console "
+                             (gdb-mi-quote string)
+                             "\n")))
+        (if gdb-enable-debug
+            (push (cons 'mi-send to-send) gdb-debug-log))
+        (process-send-string proc to-send))
       (setq gdb-continuation nil))))
 
+(defun gdb-mi-quote (string)
+  "Return STRING quoted properly as an MI argument.
+The string is enclosed in double quotes.
+All embedded quotes, newlines, and backslashes are preceded with a backslash."
+  (setq string (replace-regexp-in-string "\\([\"\\]\\)" "\\\\\\&" string))
+  (setq string (replace-regexp-in-string "\n" "\\n" string t t))
+  (concat "\"" string "\""))
+
 (defun gdb-input (command handler-function)
   "Send COMMAND to GDB via the MI interface.
 Run the function HANDLER-FUNCTION, with no arguments, once the command is