diff options
author | Geoffrey Noer <noer@cygnus> | 1996-07-18 08:29:09 +0000 |
---|---|---|
committer | Geoffrey Noer <noer@cygnus> | 1996-07-18 08:29:09 +0000 |
commit | 3f17fed8f1e79ab7559f0cbb1450c0a910dd07e6 (patch) | |
tree | bdcec051a4386d0c59041ddfcc17ba5e11d36f96 /gdb/exec.c | |
parent | 4fa14cf71c086365452d4bcde51b5c5ecb64aaf2 (diff) | |
download | gdb-3f17fed8f1e79ab7559f0cbb1450c0a910dd07e6.zip gdb-3f17fed8f1e79ab7559f0cbb1450c0a910dd07e6.tar.gz gdb-3f17fed8f1e79ab7559f0cbb1450c0a910dd07e6.tar.bz2 |
Thu Jul 18 01:22:01 1996 Geoffrey Noer <noer@cygnus.com>
* 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.
Diffstat (limited to 'gdb/exec.c')
-rw-r--r-- | gdb/exec.c | 21 |
1 files changed, 19 insertions, 2 deletions
@@ -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 |