This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] PR python/18938: source -s foo.py with foo.py a symlink to foo.notpy fails


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1a70ae976b673f7762f14734785b34fc5ba92eae

commit 1a70ae976b673f7762f14734785b34fc5ba92eae
Author: Doug Evans <dje@google.com>
Date:   Mon Oct 26 14:33:19 2015 -0700

    PR python/18938: source -s foo.py with foo.py a symlink to foo.notpy fails
    
    gdb/ChangeLog:
    
    	PR python/18938
    	* cli/cli-cmds (source_script_fron_sctream): New arg file_to_open.
    	All callers updated.
    
    gdb/testsuite/ChangeLog:
    
    	* gdb.python/python.exp: Add test for symlink from .py file to .notpy
    	file.

Diff:
---
 gdb/ChangeLog                       |  6 ++++++
 gdb/cli/cli-cmds.c                  | 14 ++++++++++----
 gdb/testsuite/ChangeLog             |  6 ++++++
 gdb/testsuite/gdb.python/python.exp | 13 +++++++++++++
 4 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index dbcc0b6..337ff05 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
 2015-10-26  Doug Evans  <dje@google.com>
 
+	PR python/18938
+	* cli/cli-cmds (source_script_fron_sctream): New arg file_to_open.
+	All callers updated.
+
+2015-10-26  Doug Evans  <dje@google.com>
+
 	* psymtab.c (struct dump_psymtab_addrmap_data): Define.
 	(dump_psymtab_addrmap_1, dump_psymtab_addrmap): New functions.
 	(maintenance_print_psymbols): Print address map.
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index 6753c70..1886cae 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/ChangeLog b/gdb/testsuite/ChangeLog
index 9369618..0543617 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-26  Doug Evans  <dje@google.com>
+
+	PR python/18938
+	* gdb.python/python.exp: Add test for symlink from .py file to .notpy
+	file.
+
 2015-10-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
 	* gdb.compile/compile.exp (compile code globalvar): Update expectation
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())" "\\\[\\\]"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]