* gdbtk.c (gdb_loc): symtab_to_filename can return NULL
authorKeith Seitz <keiths@cygnus>
Wed, 26 Nov 1997 23:50:45 +0000 (23:50 +0000)
committerKeith Seitz <keiths@cygnus>
Wed, 26 Nov 1997 23:50:45 +0000 (23:50 +0000)
        (breakpoint_notify): symtab_to_filename can return NULL
        (gdb_get_breakpoint_info): symtab_to_filename can return NULL

        * tracepoint.c (set_raw_tracepoint): fix typo

gdb/ChangeLog
gdb/gdbtk.c
gdb/tracepoint.c

index 15756b74b9bf99c630e2d1395c1b062b39de2aee..e3c1c6ec4e2991d99c1ccdc8528833bd74c57c3e 100644 (file)
@@ -1,3 +1,11 @@
+Wed Nov 26 15:02:43 1997  Keith Seitz  <keiths@onions.cygnus.com>
+
+       * gdbtk.c (gdb_loc): symtab_to_filename can return NULL
+       (breakpoint_notify): symtab_to_filename can return NULL
+       (gdb_get_breakpoint_info): symtab_to_filename can return NULL
+
+       * tracepoint.c (set_raw_tracepoint): fix typo
+
 Wed Nov 26 11:33:09 1997  Keith Seitz  <keiths@onions.cygnus.com>
 
        * tracepoint.c (set_raw_tracepoint): make sure there's a trailing slash on
index 13bdcd8bfcf31929e9f56525ed200026c4073686..7cdde41365562e10c4d9c2f29645b76ae5ab86e6 100644 (file)
@@ -464,8 +464,8 @@ gdb_get_breakpoint_info (clientData, interp, argc, argv)
   int bpnum;
   struct breakpoint *b;
   extern struct breakpoint *breakpoint_chain;
-  char *funcname;
-
+  char *funcname, *filename;
+  
   if (argc != 2)
     error ("wrong # args");
 
@@ -480,7 +480,10 @@ gdb_get_breakpoint_info (clientData, interp, argc, argv)
 
   sal = find_pc_line (b->address, 0);
 
-  Tcl_DStringAppendElement (result_ptr, symtab_to_filename (sal.symtab));
+  filename = symtab_to_filename (sal.symtab);
+  if (filename == NULL)
+    filename = "N/A";
+  Tcl_DStringAppendElement (result_ptr, );
   find_pc_partial_function (b->address, &funcname, NULL, NULL);
   Tcl_DStringAppendElement (result_ptr, funcname);
   dsprintf_append_element (result_ptr, "%d", sal.line);
@@ -511,6 +514,7 @@ breakpoint_notify(b, action)
   char buf[256];
   int v;
   struct symtab_and_line sal;
+  char *filename;
 
   if (b->type != bp_breakpoint)
     return;
@@ -518,8 +522,11 @@ breakpoint_notify(b, action)
   /* We ensure that ACTION contains no special Tcl characters, so we
      can do this.  */
   sal = find_pc_line (b->address, 0);
+  filename = symtab_to_filename (sal.symtab);
+  if (filename == NULL)
+    filename = "N/A";
   sprintf (buf, "gdbtk_tcl_breakpoint %s %d 0x%lx %d {%s}", action, b->number, 
-          (long)b->address, sal.line, symtab_to_filename (sal.symtab));
+          (long)b->address, sal.line, filename);
 
   v = Tcl_Eval (interp, buf);
 
@@ -605,6 +612,8 @@ gdb_loc (clientData, interp, argc, argv)
   Tcl_DStringAppendElement (result_ptr, funcname);
 
   filename = symtab_to_filename (sal.symtab);
+  if (filename == NULL)
+    filename = "N/A";
   Tcl_DStringAppendElement (result_ptr, filename);
 
   dsprintf_append_element (result_ptr, "%d", sal.line); /* line number */
index 2c046c70d4df8265aa062426d06f321c7e6bb10c..0ff5ee8e5649c1816b9b625c1edec197cf28cc73 100644 (file)
@@ -41,6 +41,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #endif
 
 extern int info_verbose;
+extern void (*readline_begin_hook) PARAMS ((char *, ...));
+extern char * (*readline_hook) PARAMS ((char *));
+extern void (*readline_end_hook) PARAMS ((void));
 
 /* If this definition isn't overridden by the header files, assume
    that isatty and fileno exist on this system.  */
@@ -299,8 +302,9 @@ set_raw_tracepoint (sal)
 
       strcpy (t->source_file, sal.symtab->dirname);
       p = t->source_file;
-      while (*p++) ;
-      if (*p != '/')            /* Will this work on Windows? */
+      while (*p)
+        p++;
+      if (*(--p) != '/')            /* Will this work on Windows? */
         strcat (t->source_file, "/");
       strcat (t->source_file, sal.symtab->filename);
     }
@@ -710,14 +714,25 @@ trace_actions_command (args, from_tty)
 {
   struct tracepoint *t;
   char *actions;
+  char tmpbuf[128];
+  char *end_msg = "End with a line saying just \"end\".";
 
   if (t = get_tracepoint_by_number (&args))
     {
-      if (from_tty)
-       printf_filtered ("Enter actions for tracepoint %d, one per line.\n", 
-                        t->number);
+      sprintf (tmpbuf, "Enter actions for tracepoint %d, one per line.",
+              t->number);
+
+      if (readline_begin_hook)
+       (*readline_begin_hook) ("%s  %s\n", tmpbuf, end_msg);
+      else if (from_tty && input_from_terminal_p ())
+       printf_filtered ("%s\n%s\n", tmpbuf, end_msg);
+
       free_actions (t);
       read_actions (t);
+
+      if (readline_end_hook)
+       (*readline_end_hook) ();
+
       /* tracepoints_changed () */
     }
   /* else error, just return; */
@@ -758,7 +773,10 @@ read_actions (t)
       wrap_here ("");
       gdb_flush (gdb_stdout);
       gdb_flush (gdb_stderr);
-      if (instream == stdin && ISATTY (instream))
+
+      if (readline_hook && instream == NULL)
+       line = (*readline_hook) (prompt);
+      else if (instream == stdin && ISATTY (instream))
        line = readline (prompt);
       else
        line = gdb_readline (0);