From 3f17fed8f1e79ab7559f0cbb1450c0a910dd07e6 Mon Sep 17 00:00:00 2001 From: Geoffrey Noer Date: Thu, 18 Jul 1996 08:29:09 +0000 Subject: Thu Jul 18 01:22:01 1996 Geoffrey Noer * symfile.c (symfile_bfd_open): * exec.c (exec_file_command): for __GO32__ and __WIN32__ systems, free the user from having to type the .exe extension. --- gdb/ChangeLog | 6 ++++++ gdb/exec.c | 21 +++++++++++++++++++-- gdb/symfile.c | 9 +++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 85c8aaa..22ce466 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +Thu Jul 18 01:22:01 1996 Geoffrey Noer + + * symfile.c (symfile_bfd_open): + * exec.c (exec_file_command): for __GO32__ and __WIN32__ systems, + free the user from having to type the .exe extension. + Wed Jul 17 06:54:50 1996 Mark Alexander * mon960-rom.c: Shorten the mon960_inits string to a single diff --git a/gdb/exec.c b/gdb/exec.c index e866ab6..e95454d 100644 --- a/gdb/exec.c +++ b/gdb/exec.c @@ -15,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" #include "frame.h" @@ -183,13 +183,30 @@ exec_file_command (args, from_tty) scratch_chan = openp (getenv ("PATH"), 1, filename, write_files? O_RDWR|O_BINARY: O_RDONLY|O_BINARY, 0, &scratch_pathname); +#if defined(__GO32__) || defined(__WIN32__) + if (scratch_chan < 0) + { + char *exename = alloca (strlen (filename) + 5); + strcat (strcpy (exename, filename), ".exe"); + scratch_chan = openp (getenv ("PATH"), 1, exename, write_files ? + O_RDWR|O_BINARY : O_RDONLY|O_BINARY, 0, &scratch_pathname); + } +#endif if (scratch_chan < 0) perror_with_name (filename); - exec_bfd = bfd_fdopenr (scratch_pathname, gnutarget, scratch_chan); + if (!exec_bfd) error ("\"%s\": could not open as an executable file: %s", scratch_pathname, bfd_errmsg (bfd_get_error ())); + + /* At this point, scratch_pathname and exec_bfd->name both point to the + same malloc'd string. However exec_close() will attempt to free it + via the exec_bfd->name pointer, so we need to make another copy and + leave exec_bfd as the new owner of the original copy. */ + scratch_pathname = strdup (scratch_pathname); + make_cleanup (free, scratch_pathname); + if (!bfd_check_format (exec_bfd, bfd_object)) { /* Make sure to close exec_bfd, or else "run" might try to use diff --git a/gdb/symfile.c b/gdb/symfile.c index cdf12a6..1d91e7f 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -838,6 +838,15 @@ symfile_bfd_open (name) /* Look down path for it, allocate 2nd new malloc'd copy. */ desc = openp (getenv ("PATH"), 1, name, O_RDONLY | O_BINARY, 0, &absolute_name); +#if defined(__GO32__) || defined(__WIN32__) + if (desc < 0) + { + char *exename = alloca (strlen (name) + 5); + strcat (strcpy (exename, name), ".exe"); + desc = openp (getenv ("PATH"), 1, exename, O_RDONLY | O_BINARY, + 0, &absolute_name); + } +#endif if (desc < 0) { make_cleanup (free, name); -- cgit v1.1