Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Doug Evans <dje@google.com>
To: gdb-patches@sourceware.org
Subject: [PATCH] [PR python/18938] source -s foo.py with foo.py a symlink to foo.notpy fails
Date: Tue, 08 Sep 2015 21:34:00 -0000	[thread overview]
Message-ID: <001a1136b5ce89b092051f432146@google.com> (raw)

Hi.

This patch fixes 18938.

If one has foo.py as a symlink to foo.notpy, then "source -s foo.py"
will fail because gdb will try to interpret the extension language
from the realpath'd form of the file.

2015-09-08  Doug Evans  <dje@google.com>

	PR python/18938
	* cli/cli-cmds (source_script_fron_sctream): New arg file_to_open.
	All callers updated.

diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index bcd7802..909a376 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -538,10 +538,16 @@ find_and_open_script (const char *script_file, int  
search_path,
    return 1;
  }

-/* Load script FILE, which has already been opened as STREAM.  */
+/* Load script FILE, which has already been opened as STREAM.
+   FILE_TO_OPEN is the form of FILE to use if one needs to open the file.
+   This is provided as FILE may have been found via the source search path.
+   An important thing to note here is that FILE may be a symlink to a file
+   with a different or non-existing suffix, and thus one cannot infer the
+   extension language from FILE_TO_OPEN.  */

  static void
-source_script_from_stream (FILE *stream, const char *file)
+source_script_from_stream (FILE *stream, const char *file,
+			   const char *file_to_open)
  {
    if (script_ext_mode != script_ext_off)
      {
@@ -556,7 +562,7 @@ source_script_from_stream (FILE *stream, const char  
*file)
  		= ext_lang_script_sourcer (extlang);

  	      gdb_assert (sourcer != NULL);
-	      sourcer (extlang, stream, file);
+	      sourcer (extlang, stream, file_to_open);
  	      return;
  	    }
  	  else if (script_ext_mode == script_ext_soft)
@@ -609,7 +615,7 @@ source_script_with_search (const char *file, int  
from_tty, int search_path)
       anyway so that error messages show the actual file used.  But only do
       this if we (may have) used search_path, as printing the full path in
       errors for the non-search case can be more noise than signal.  */
-  source_script_from_stream (stream, search_path ? full_path : file);
+  source_script_from_stream (stream, file, search_path ? full_path : file);
    do_cleanups (old_cleanups);
  }

diff --git a/gdb/testsuite/gdb.python/python.exp  
b/gdb/testsuite/gdb.python/python.exp
index a0b80e0..19b8322 100644
--- a/gdb/testsuite/gdb.python/python.exp
+++ b/gdb/testsuite/gdb.python/python.exp
@@ -96,6 +96,19 @@ gdb_test "source $remote_source2_py" "yes" "source  
source2.py"

  gdb_test "source -s source2.py" "yes" "source -s source2.py"

+set remote_source2_symlink_notpy \
+    [gdb_remote_download host ${srcdir}/${subdir}/source2.py \
+	 [standard_output_file "source2-symlink.notpy"]]
+set remote_source2_symlink_py [standard_output_file "source2-symlink.py"]
+remote_file host delete $remote_source2_symlink_py
+set status [remote_exec host "ln -sf $remote_source2_symlink_notpy  
$remote_source2_symlink_py"]
+set test "source -s source2-symlink.py"
+if {[lindex $status 0] == 0} {
+    gdb_test "source -s $remote_source2_symlink_py" "yes" $test
+} else {
+    unsupported "$test (host does not support symbolic links)"
+}
+
  gdb_test "python print (gdb.current_objfile())" "None"
  gdb_test "python print (gdb.objfiles())" "\\\[\\\]"


             reply	other threads:[~2015-09-08 21:34 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-08 21:34 Doug Evans [this message]
2015-09-08 21:38 ` Doug Evans
2015-10-27  3:27   ` Doug Evans

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

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

  git send-email \
    --in-reply-to=001a1136b5ce89b092051f432146@google.com \
    --to=dje@google.com \
    --cc=gdb-patches@sourceware.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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox