This is the mail archive of the insight@sources.redhat.com mailing list for the Insight project.


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

PATCH: Fix file name handling when running on Cygwin


This problem was detected by David Taylor and Grant Edwards.
The solution followed a hint by Jim Ingham (thanks Jim) and was
implemented by me after a nightmare walkthrough through the SrcWin (and friends)
code (which I will cleanup as soon as possible!!!).

The problem happened when your source files where at some cygwin path that
was not syntactically equal to the native Windows path (anything that was
created by the mount table or cygdrives would cause that).

I have also fixed a small annoyance that caused the mode combobox to
remain showing SOURCE when the user changed the mode in the combobox
to SOURCE, reading the source failed and ASSEMBLER was assumed.

Please give this a try and let me know if it works for you.



-- 
Fernando Nasser
Red Hat - Toronto                       E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9


Index: srctextwin.itb
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbtk/library/srctextwin.itb,v
retrieving revision 1.5
diff -c -p -r1.5 srctextwin.itb
*** srctextwin.itb      2000/05/01 04:46:49     1.5
--- srctextwin.itb      2000/10/04 19:02:02
*************** body SrcTextWin::ClearTags {} {
*** 859,870 ****
  #                          has changed.
  # ------------------------------------------------------------------
  body SrcTextWin::_mtime_changed {filename} {
    set f [gdb_find_file $filename]
  
    if {$f == ""} {
      set r 1
    } else {
!     set mtime [file mtime $f]
      if {![info exists Stwc($filename:mtime)]} {
        debug "no mtime. resetting to zero"
        set Stwc($filename:mtime) 0
--- 859,879 ----
  #                          has changed.
  # ------------------------------------------------------------------
  body SrcTextWin::_mtime_changed {filename} {
+   global tcl_platform
+ 
    set f [gdb_find_file $filename]
  
    if {$f == ""} {
      set r 1
    } else {
!     if {[string compare $tcl_platform(platform) "windows"] == 0} {
!       set f [ide_cygwin_path to_win32 $f]
!     }
!     if {[catch {file mtime $f} mtime]} {
!       debug "Could not stat file \"$f\" - \"$mtime\""
!       # The return code is not of much significance in this case
!       return 1
!     }
      if {![info exists Stwc($filename:mtime)]} {
        debug "no mtime. resetting to zero"
        set Stwc($filename:mtime) 0
*************** body SrcTextWin::FillSource {w tagname f
*** 942,948 ****
      return
    }
    # no source; switch to assembly
! #  debug "no source file; switch to assembly"
    set current(line) $line
    set current(tag) $tagname
    set current(addr) $addr
--- 951,957 ----
      return
    }
    # no source; switch to assembly
!   dbug W "no source file; switch to assembly"
    set current(line) $line
    set current(tag) $tagname
    set current(addr) $addr
*************** body SrcTextWin::location {tagname filen
*** 1180,1185 ****
--- 1189,1195 ----
  # ------------------------------------------------------------------
  body SrcTextWin::LoadFile {w name lib mtime_changed} {
    debug "$name $current(filename) $current(mode)"
+   global tcl_platform
    upvar ${w}win win
    upvar _${w}pane pane
  
*************** body SrcTextWin::LoadFile {w name lib mt
*** 1190,1196 ****
      return 0
    } elseif {$result == 1 || $mtime_changed} {
      $win delete 0.0 end
! #    debug "READING $name"
      if {[catch {gdb_loadfile $win $name $Linenums} msg]} {
        dbug W "Error opening $name:  $msg"
        #if {$msg != ""} {
--- 1200,1206 ----
      return 0
    } elseif {$result == 1 || $mtime_changed} {
      $win delete 0.0 end
!     debug "READING $name"
      if {[catch {gdb_loadfile $win $name $Linenums} msg]} {
        dbug W "Error opening $name:  $msg"
        #if {$msg != ""} {
*************** body SrcTextWin::mode_get {} {
*** 2006,2012 ****
  #  METHOD:  mode_set - change the source mode
  # ------------------------------------------------------------------
  body SrcTextWin::mode_set {new_mode {go 1}} {
! #  debug "$new_mode"
  
    if {$new_mode != $current(mode)} {
  
--- 2016,2022 ----
  #  METHOD:  mode_set - change the source mode
  # ------------------------------------------------------------------
  body SrcTextWin::mode_set {new_mode {go 1}} {
!   debug "$new_mode"
  
    if {$new_mode != $current(mode)} {
  
*************** body SrcTextWin::search {exp direction} 
*** 2450,2455 ****
--- 2460,2466 ----
  # -----------------------------------------------------------------------------
  body SrcTextWin::LoadFromCache {w name asm lib} {
    debug "LoadFromCache $w $name $asm"
+   global tcl_platform
    upvar ${w}win win
    upvar _${w}pane pane
  
*************** body SrcTextWin::LoadFromCache {w name a
*** 2463,2469 ****
  
    set oldpane $pane
    if {[info exists Stwc($full_name:pane)]} {
!     #debug "READING CACHE $full_name->$Stwc($full_name:pane)"
      set pane $Stwc($full_name:pane)
      if {$oldpane != ""} {
        $itk_interior.p replace $oldpane $pane
--- 2474,2480 ----
  
    set oldpane $pane
    if {[info exists Stwc($full_name:pane)]} {
!     debug "READING CACHE $full_name->$Stwc($full_name:pane)"
      set pane $Stwc($full_name:pane)
      if {$oldpane != ""} {
        $itk_interior.p replace $oldpane $pane
*************** body SrcTextWin::LoadFromCache {w name a
*** 2489,2503 ****
  
    } else {
      debug "name=$name"
-     set Stwc($full_name:pane) pane$filenum
      # If we are trying to load a source file, check the time
      # to see if we need to update it.  If we can't stat the
      # file then we probably can't open it either, so error 
      # out.
  
      if {$loadingSource} {
!       if {[catch {file mtime $name} file_time]} {
!       debug "Could not stat file \"$name\" - \"$file_time\""
        return -1
        } else {
        set Stwc($name:mtime) $file_time
--- 2500,2516 ----
  
    } else {
      debug "name=$name"
      # If we are trying to load a source file, check the time
      # to see if we need to update it.  If we can't stat the
      # file then we probably can't open it either, so error 
      # out.
  
      if {$loadingSource} {
!       if {[string compare $tcl_platform(platform) "windows"] == 0} {
!         set f [ide_cygwin_path to_win32 $name]
!       }
!       if {[catch {file mtime $f} file_time]} {
!       debug "Could not stat file \"$f\" - \"$file_time\""
        return -1
        } else {
        set Stwc($name:mtime) $file_time

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