diff --git a/lisp/ChangeLog b/lisp/ChangeLog index be12a73..00cd7db 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -156,6 +156,13 @@ * ido.el (ido-find-file): Doc fix (ido-toggle-vc not on any key). +2012-02-04 Jim Blandy + + * 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. + 2012-02-03 Glenn Morris * image.el (image-animated-p): Doc fix. Use image-animated-types. diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 301714e..6ffb67e 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -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,23 @@ 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 are replaced with \"\\\"\". +All embedded newlines are replaced with \"\\n\"." + (let* ((quotes (replace-regexp-in-string "\"" "\\\"" string t t)) + (newlines (replace-regexp-in-string "\n" "\\n" quotes t t))) + (concat "\"" newlines "\""))) + (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