* [RFA] gdbtk_set_result @ 2001-11-02 16:20 Martin M. Hunt 2001-11-04 11:25 ` Keith Seitz 0 siblings, 1 reply; 5+ messages in thread From: Martin M. Hunt @ 2001-11-02 16:20 UTC (permalink / raw) To: Insight Mailing List This patch uses the new function gdbtk_set_result() to correctly set return strings on errors. -- Martin Hunt GDB Engineer Red Hat, Inc. 2001-11-02 Martin M. Hunt <hunt@redhat.com> * generic/gdbtk-cmds.h (gdbtk_set_result): Declare. A printf-like function to return error messages. * generic/gdbtk-cmds.c (gdbtk_set_result): New function. (gdb_cmd): Use gdbtk_set_result. (gdb_immediate_command): Ditto. (gdb_load_info): Ditto. (gdb_find_file_command): Ditto. (gdb_listfuncs): Ditto. (gdb_load_disassembly): Ditto. (gdb_loc): Ditto. (gdb_set_mem): Ditto. (gdb_get_mem): Ditto. (gdb_loadfile): Ditto. * generic/gdbtk-varobj.c (variable_format): Ditto. (variable_value): Ditto. * generic/gdbtk-stack.c (gdb_get_vars_command): Ditto. * generic/gdbtk-bp.c (gdb_get_breakpoint_info): Ditto. (gdb_set_bp): Ditto. (gdb_set_bp_addr): Ditto. (gdb_get_tracepoint_info): Ditto. Index: gdbtk-bp.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-bp.c,v retrieving revision 1.12 diff -u -p -r1.12 gdbtk-bp.c --- gdbtk-bp.c 2001/10/29 21:45:31 1.12 +++ gdbtk-bp.c 2001/11/02 23:59:40 @@ -309,10 +309,7 @@ gdb_get_breakpoint_info (ClientData clie b = (bpnum <= breakpoint_list_size ? breakpoint_list[bpnum] : NULL); if (!b || b->type != bp_breakpoint) { - char *err_buf; - xasprintf (&err_buf, "Breakpoint #%d does not exist.", bpnum); - Tcl_SetStringObj (result_ptr->obj_ptr, err_buf, -1); - free(err_buf); + gdbtk_set_result (interp, "Breakpoint #%d does not exist.", bpnum); return TCL_ERROR; } @@ -513,8 +510,7 @@ gdb_set_bp (ClientData clientData, Tcl_I disp = disp_donttouch; else { - Tcl_SetObjResult (interp, - Tcl_NewStringObj ("type must be \"temp\" or \"normal\"", -1)); + gdbtk_set_result (interp, "type must be \"temp\" or \"normal\""); return TCL_ERROR; } @@ -587,8 +583,7 @@ gdb_set_bp_addr (ClientData clientData, disp = disp_donttouch; else { - Tcl_SetObjResult (interp, - Tcl_NewStringObj ("type must be \"temp\" or \"normal\"", -1)); + gdbtk_set_result (interp, "type must be \"temp\" or \"normal\""); return TCL_ERROR; } @@ -830,10 +825,7 @@ gdb_get_tracepoint_info (ClientData clie if (tp == NULL) { - char *buff; - xasprintf (&buff, "Tracepoint #%d does not exist", tpnum); - Tcl_SetStringObj (result_ptr->obj_ptr, buff, -1); - free(buff); + gdbtk_set_result (interp, "Tracepoint #%d does not exist", tpnum); return TCL_ERROR; } Index: gdbtk-cmds.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-cmds.c,v retrieving revision 1.42 diff -u -p -r1.42 gdbtk-cmds.c --- gdbtk-cmds.c 2001/10/29 19:37:05 1.42 +++ gdbtk-cmds.c 2001/11/02 23:59:41 @@ -688,8 +688,7 @@ gdb_cmd (clientData, interp, objc, objv) { if (Tcl_GetBooleanFromObj (NULL, objv[2], &from_tty) != TCL_OK) { - Tcl_SetStringObj (result_ptr->obj_ptr, "from_tty must be a boolean.", - -1); + gdbtk_set_result (interp, "from_tty must be a boolean."); return TCL_ERROR; } } @@ -758,8 +757,7 @@ gdb_immediate_command (clientData, inter { if (Tcl_GetBooleanFromObj (NULL, objv[2], &from_tty) != TCL_OK) { - Tcl_SetStringObj (result_ptr->obj_ptr, "from_tty must be a boolean.", - -1); + gdbtk_set_result (interp, "from_tty must be a boolean."); return TCL_ERROR; } } @@ -923,14 +921,14 @@ gdb_load_info (clientData, interp, objc, loadfile_bfd = bfd_openr (filename, gnutarget); if (loadfile_bfd == NULL) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Open failed", -1); + gdbtk_set_result (interp, "Open of %s failed", filename); return TCL_ERROR; } old_cleanups = make_cleanup_bfd_close (loadfile_bfd); if (!bfd_check_format (loadfile_bfd, bfd_object)) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Bad Object File", -1); + gdbtk_set_result (interp, "Bad Object File"); return TCL_ERROR; } @@ -1109,8 +1107,7 @@ gdb_find_file_command (clientData, inter /* We should always get a symtab. */ if (!st) { - Tcl_SetStringObj ( result_ptr->obj_ptr, - "File not found in symtab (2)", -1); + gdbtk_set_result (interp, "File not found in symtab (2)"); return TCL_ERROR; } @@ -1282,7 +1279,6 @@ gdb_search (clientData, interp, objc, ob if (objc < 3) { Tcl_WrongNumArgs (interp, 1, objv, "option regexp ?arg ...?"); - result_ptr->flags |= GDBTK_IN_TCL_RESULT; return TCL_ERROR; } @@ -1477,10 +1473,11 @@ gdb_listfuncs (clientData, interp, objc, symtab = full_lookup_symtab (Tcl_GetStringFromObj (objv[1], NULL)); if (!symtab) { - Tcl_SetStringObj (result_ptr->obj_ptr, "No such file", -1); + gdbtk_set_result (interp, "No such file (%s)", + Tcl_GetStringFromObj (objv[1], NULL)); return TCL_ERROR; } - + if (mangled == NULL) { mangled = Tcl_NewBooleanObj (1); @@ -1651,14 +1648,13 @@ gdb_load_disassembly (ClientData clientD if ( Tk_NameToWindow (interp, client_data.widget, Tk_MainWindow (interp)) == NULL) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Invalid widget name.", -1); + gdbtk_set_result (interp, "Invalid widget name."); return TCL_ERROR; } if (!Tcl_GetCommandInfo (interp, client_data.widget, &client_data.cmd)) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Can't get widget command info", - -1); + gdbtk_set_result (interp, "Can't get widget command info"); return TCL_ERROR; } @@ -1669,8 +1665,7 @@ gdb_load_disassembly (ClientData clientD mixed_source_and_assembly = 0; else { - Tcl_SetStringObj (result_ptr->obj_ptr, - "Second arg must be 'source' or 'nosource'", -1); + gdbtk_set_result (interp, "Second arg must be 'source' or 'nosource'"); return TCL_ERROR; } @@ -1695,7 +1690,7 @@ gdb_load_disassembly (ClientData clientD client_data.map_arr = "map_array"; if (Tcl_UpVar (interp, "1", map_name, client_data.map_arr, 0) != TCL_OK) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Can't link map array.", -1); + gdbtk_set_result (interp, "Can't link map array."); return TCL_ERROR; } @@ -2376,7 +2371,7 @@ gdb_loc (ClientData clientData, Tcl_Inte if (sals.nelts != 1) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Ambiguous line spec", -1); + gdbtk_set_result (interp, "Ambiguous line spec", -1); return TCL_ERROR; } resolve_sal_pc (&sal); @@ -2538,11 +2533,7 @@ gdb_set_mem (clientData, interp, objc, o if (size < 0) { /* Error in input */ - char *res; - - xasprintf (&res, "Invalid hexadecimal input: \"0x%s\"", hexstr); - Tcl_SetObjResult (interp, Tcl_NewStringObj (res, -1)); - free (res); + gdbtk_set_result (interp, "Invalid hexadecimal input: \"0x%s\"", hexstr); return TCL_ERROR; } @@ -2589,7 +2580,7 @@ gdb_get_mem (ClientData clientData, Tcl_ } else if (size <= 0) { - Tcl_SetObjResult (interp, Tcl_NewStringObj ("Invalid size, must be > 0", -1)); + gdbtk_set_result (interp, "Invalid size, must be > 0"); return TCL_ERROR; } @@ -2600,8 +2591,7 @@ gdb_get_mem (ClientData clientData, Tcl_ } else if (nbytes <= 0) { - Tcl_SetObjResult (interp, - Tcl_NewStringObj ("Invalid number of bytes, must be > 0", -1)); + gdbtk_set_result (interp, "Invalid number of bytes, must be > 0"); return TCL_ERROR; } @@ -2612,8 +2602,7 @@ gdb_get_mem (ClientData clientData, Tcl_ } else if (bpr <= 0) { - Tcl_SetObjResult (interp, - Tcl_NewStringObj ("Invalid bytes per row, must be > 0", -1)); + gdbtk_set_result (interp, "Invalid bytes per row, must be > 0"); return TCL_ERROR; } @@ -2623,7 +2612,7 @@ gdb_get_mem (ClientData clientData, Tcl_ mbuf = (char *) malloc (nbytes + 32); if (!mbuf) { - Tcl_SetObjResult (interp, Tcl_NewStringObj ("Out of memory.", -1)); + gdbtk_set_result (interp, "Out of memory."); return TCL_ERROR; } @@ -2773,8 +2762,7 @@ gdb_loadfile (ClientData clientData, Tcl if (!Tcl_GetCommandInfo (interp, widget, &text_cmd)) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Can't get widget command info", - -1); + gdbtk_set_result (interp, "Can't get widget command info"); return TCL_ERROR; } @@ -2784,15 +2772,14 @@ gdb_loadfile (ClientData clientData, Tcl symtab = full_lookup_symtab (file); if (!symtab) { - Tcl_SetStringObj ( result_ptr->obj_ptr, "File not found in symtab", -1); + gdbtk_set_result (interp, "File not found in symtab"); return TCL_ERROR; } file = symtab_to_filename ( symtab ); if ((fp = fopen ( file, "r" )) == NULL) { - Tcl_SetStringObj ( result_ptr->obj_ptr, "Can't open file for reading", - -1); + gdbtk_set_result (interp, "Can't open file for reading"); return TCL_ERROR; } @@ -2823,8 +2810,8 @@ gdb_loadfile (ClientData clientData, Tcl ltable = (char *)malloc (LTABLE_SIZE); if (ltable == NULL) { - Tcl_SetStringObj ( result_ptr->obj_ptr, "Out of memory.", -1); fclose (fp); + gdbtk_set_result (interp, "Out of memory."); return TCL_ERROR; } @@ -2844,10 +2831,9 @@ gdb_loadfile (ClientData clientData, Tcl ltable_size *= 2; if (new_ltable == NULL) { - Tcl_SetStringObj ( result_ptr->obj_ptr, "Out of memory.", - -1); free (ltable); fclose (fp); + gdbtk_set_result (interp, "Out of memory."); return TCL_ERROR; } ltable = new_ltable; @@ -3103,4 +3089,17 @@ pc_function_name (pc) funcname = ""; return funcname; +} + +void +gdbtk_set_result (Tcl_Interp *interp, const char *fmt,...) +{ + va_list args; + char *buf; + + va_start (args, fmt); + xvasprintf (&buf, fmt, args); + va_end (args); + Tcl_SetObjResult (interp, Tcl_NewStringObj (buf, -1)); + xfree(buf); } Index: gdbtk-cmds.h =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-cmds.h,v retrieving revision 1.1 diff -u -p -r1.1 gdbtk-cmds.h --- gdbtk-cmds.h 2001/05/10 18:04:23 1.1 +++ gdbtk-cmds.h 2001/11/02 23:59:41 @@ -50,6 +50,9 @@ extern char *pc_function_name (CORE_ADDR a Tcl list object. */ extern void sprintf_append_element_to_obj (Tcl_Obj * objp, char *format, ...); +/* printf-like function to return error messages */ +extern void gdbtk_set_result (Tcl_Interp *interp, const char *fmt,...); + /* Module init routines: Each module of commands should be declared here. */ extern int Gdbtk_Breakpoint_Init (Tcl_Interp *interp); extern int Gdbtk_Stack_Init (Tcl_Interp *interp); Index: gdbtk-stack.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-stack.c,v retrieving revision 1.4 diff -u -p -r1.4 gdbtk-stack.c --- gdbtk-stack.c 2001/10/17 20:35:32 1.4 +++ gdbtk-stack.c 2001/11/02 23:59:42 @@ -101,7 +101,6 @@ gdb_block_vars (clientData, interp, objc if (objc < 3) { Tcl_WrongNumArgs (interp, 1, objv, "startAddr endAddr"); - result_ptr->flags |= GDBTK_IN_TCL_RESULT; return TCL_ERROR; } @@ -319,8 +318,7 @@ gdb_get_vars_command (clientData, interp sals = decode_line_1 (&args, 1, NULL, 0, &canonical); if (sals.nelts == 0) { - Tcl_SetStringObj (result_ptr->obj_ptr, - "error decoding line", -1); + gdbtk_set_result (interp, "error decoding line"); return TCL_ERROR; } @@ -479,7 +477,6 @@ gdb_stack (clientData, interp, objc, obj if (objc < 3) { Tcl_WrongNumArgs (interp, 1, objv, "start count"); - result_ptr->flags |= GDBTK_IN_TCL_RESULT; return TCL_ERROR; } Index: gdbtk-varobj.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-varobj.c,v retrieving revision 1.9 diff -u -p -r1.9 gdbtk-varobj.c --- gdbtk-varobj.c 2001/10/17 20:35:32 1.9 +++ gdbtk-varobj.c 2001/11/02 23:59:42 @@ -510,11 +510,9 @@ variable_format (interp, objc, objv, var varobj_set_display_format (var, FORMAT_OCTAL); else { - Tcl_Obj *obj = Tcl_NewStringObj (NULL, 0); - Tcl_AppendStringsToObj (obj, "unknown display format \"", - fmt, "\": must be: \"natural\", \"binary\"" - ", \"decimal\", \"hexadecimal\", or \"octal\"", NULL); - Tcl_SetObjResult (interp, obj); + gdbtk_set_result (interp, "unknown display format \"", + fmt, "\": must be: \"natural\", \"binary\"" + ", \"decimal\", \"hexadecimal\", or \"octal\""); return TCL_ERROR; } } @@ -597,9 +595,7 @@ variable_value (interp, objc, objv, var) s = Tcl_GetStringFromObj (objv[2], NULL); if (!varobj_set_value (var, s)) { - r = error_last_message (); - Tcl_SetObjResult (interp, Tcl_NewStringObj (r, -1)); - FREEIF (r); + gdbtk_set_result (interp, "%s", error_last_message()); return TCL_ERROR; } } ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFA] gdbtk_set_result 2001-11-02 16:20 [RFA] gdbtk_set_result Martin M. Hunt @ 2001-11-04 11:25 ` Keith Seitz 2001-11-05 11:30 ` Martin M. Hunt 0 siblings, 1 reply; 5+ messages in thread From: Keith Seitz @ 2001-11-04 11:25 UTC (permalink / raw) To: Martin M. Hunt; +Cc: Insight Mailing List On Fri, 2 Nov 2001, Martin M. Hunt wrote: > This patch uses the new function gdbtk_set_result() to correctly set return > strings on errors. Wow, this looks great. I just have one or two questions... > Index: gdbtk-varobj.c > =================================================================== > RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-varobj.c,v > retrieving revision 1.9 > diff -u -p -r1.9 gdbtk-varobj.c > --- gdbtk-varobj.c 2001/10/17 20:35:32 1.9 > +++ gdbtk-varobj.c 2001/11/02 23:59:42 > @@ -597,9 +595,7 @@ variable_value (interp, objc, objv, var) > s = Tcl_GetStringFromObj (objv[2], NULL); > if (!varobj_set_value (var, s)) > { > - r = error_last_message (); > - Tcl_SetObjResult (interp, Tcl_NewStringObj (r, -1)); > - FREEIF (r); > + gdbtk_set_result (interp, "%s", error_last_message()); > return TCL_ERROR; > } > } This doesn't look right. Don't we still need to free error_last_message's return result? Otherwise, this is just fantastic! I get to knock something off my TODO list!! Yippee!!! Keith ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFA] gdbtk_set_result 2001-11-04 11:25 ` Keith Seitz @ 2001-11-05 11:30 ` Martin M. Hunt 2001-11-05 11:34 ` Keith Seitz 0 siblings, 1 reply; 5+ messages in thread From: Martin M. Hunt @ 2001-11-05 11:30 UTC (permalink / raw) To: Keith Seitz; +Cc: Insight Mailing List On Sunday 04 November 2001 11:25 am, Keith Seitz wrote: > On Fri, 2 Nov 2001, Martin M. Hunt wrote: > > This patch uses the new function gdbtk_set_result() to correctly set > > return strings on errors. > > Wow, this looks great. I just have one or two questions... > > > Index: gdbtk-varobj.c > > =================================================================== > > RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-varobj.c,v > > retrieving revision 1.9 > > diff -u -p -r1.9 gdbtk-varobj.c > > --- gdbtk-varobj.c 2001/10/17 20:35:32 1.9 > > +++ gdbtk-varobj.c 2001/11/02 23:59:42 > > @@ -597,9 +595,7 @@ variable_value (interp, objc, objv, var) > > s = Tcl_GetStringFromObj (objv[2], NULL); > > if (!varobj_set_value (var, s)) > > { > > - r = error_last_message (); > > - Tcl_SetObjResult (interp, Tcl_NewStringObj (r, -1)); > > - FREEIF (r); > > + gdbtk_set_result (interp, "%s", error_last_message()); > > return TCL_ERROR; > > } > > } > > This doesn't look right. Don't we still need to free error_last_message's > return result? Yeah, glad you spotted that. Should really be xfree() and not FREEIF() shouldn't it. Here's a revised patch -- Martin Hunt GDB Engineer Red Hat, Inc. Index: generic/gdbtk-bp.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-bp.c,v retrieving revision 1.12 diff -u -p -r1.12 gdbtk-bp.c --- gdbtk-bp.c 2001/10/29 21:45:31 1.12 +++ gdbtk-bp.c 2001/11/05 19:27:05 @@ -309,10 +309,7 @@ gdb_get_breakpoint_info (ClientData clie b = (bpnum <= breakpoint_list_size ? breakpoint_list[bpnum] : NULL); if (!b || b->type != bp_breakpoint) { - char *err_buf; - xasprintf (&err_buf, "Breakpoint #%d does not exist.", bpnum); - Tcl_SetStringObj (result_ptr->obj_ptr, err_buf, -1); - free(err_buf); + gdbtk_set_result (interp, "Breakpoint #%d does not exist.", bpnum); return TCL_ERROR; } @@ -513,8 +510,7 @@ gdb_set_bp (ClientData clientData, Tcl_I disp = disp_donttouch; else { - Tcl_SetObjResult (interp, - Tcl_NewStringObj ("type must be \"temp\" or \"normal\"", -1)); + gdbtk_set_result (interp, "type must be \"temp\" or \"normal\""); return TCL_ERROR; } @@ -587,8 +583,7 @@ gdb_set_bp_addr (ClientData clientData, disp = disp_donttouch; else { - Tcl_SetObjResult (interp, - Tcl_NewStringObj ("type must be \"temp\" or \"normal\"", -1)); + gdbtk_set_result (interp, "type must be \"temp\" or \"normal\""); return TCL_ERROR; } @@ -830,10 +825,7 @@ gdb_get_tracepoint_info (ClientData clie if (tp == NULL) { - char *buff; - xasprintf (&buff, "Tracepoint #%d does not exist", tpnum); - Tcl_SetStringObj (result_ptr->obj_ptr, buff, -1); - free(buff); + gdbtk_set_result (interp, "Tracepoint #%d does not exist", tpnum); return TCL_ERROR; } Index: generic/gdbtk-cmds.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-cmds.c,v retrieving revision 1.42 diff -u -p -r1.42 gdbtk-cmds.c --- gdbtk-cmds.c 2001/10/29 19:37:05 1.42 +++ gdbtk-cmds.c 2001/11/05 19:27:07 @@ -688,8 +688,7 @@ gdb_cmd (clientData, interp, objc, objv) { if (Tcl_GetBooleanFromObj (NULL, objv[2], &from_tty) != TCL_OK) { - Tcl_SetStringObj (result_ptr->obj_ptr, "from_tty must be a boolean.", - -1); + gdbtk_set_result (interp, "from_tty must be a boolean."); return TCL_ERROR; } } @@ -758,8 +757,7 @@ gdb_immediate_command (clientData, inter { if (Tcl_GetBooleanFromObj (NULL, objv[2], &from_tty) != TCL_OK) { - Tcl_SetStringObj (result_ptr->obj_ptr, "from_tty must be a boolean.", - -1); + gdbtk_set_result (interp, "from_tty must be a boolean."); return TCL_ERROR; } } @@ -923,14 +921,14 @@ gdb_load_info (clientData, interp, objc, loadfile_bfd = bfd_openr (filename, gnutarget); if (loadfile_bfd == NULL) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Open failed", -1); + gdbtk_set_result (interp, "Open of %s failed", filename); return TCL_ERROR; } old_cleanups = make_cleanup_bfd_close (loadfile_bfd); if (!bfd_check_format (loadfile_bfd, bfd_object)) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Bad Object File", -1); + gdbtk_set_result (interp, "Bad Object File"); return TCL_ERROR; } @@ -1109,8 +1107,7 @@ gdb_find_file_command (clientData, inter /* We should always get a symtab. */ if (!st) { - Tcl_SetStringObj ( result_ptr->obj_ptr, - "File not found in symtab (2)", -1); + gdbtk_set_result (interp, "File not found in symtab (2)"); return TCL_ERROR; } @@ -1282,7 +1279,6 @@ gdb_search (clientData, interp, objc, ob if (objc < 3) { Tcl_WrongNumArgs (interp, 1, objv, "option regexp ?arg ...?"); - result_ptr->flags |= GDBTK_IN_TCL_RESULT; return TCL_ERROR; } @@ -1477,10 +1473,11 @@ gdb_listfuncs (clientData, interp, objc, symtab = full_lookup_symtab (Tcl_GetStringFromObj (objv[1], NULL)); if (!symtab) { - Tcl_SetStringObj (result_ptr->obj_ptr, "No such file", -1); + gdbtk_set_result (interp, "No such file (%s)", + Tcl_GetStringFromObj (objv[1], NULL)); return TCL_ERROR; } - + if (mangled == NULL) { mangled = Tcl_NewBooleanObj (1); @@ -1651,14 +1648,13 @@ gdb_load_disassembly (ClientData clientD if ( Tk_NameToWindow (interp, client_data.widget, Tk_MainWindow (interp)) == NULL) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Invalid widget name.", -1); + gdbtk_set_result (interp, "Invalid widget name."); return TCL_ERROR; } if (!Tcl_GetCommandInfo (interp, client_data.widget, &client_data.cmd)) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Can't get widget command info", - -1); + gdbtk_set_result (interp, "Can't get widget command info"); return TCL_ERROR; } @@ -1669,8 +1665,7 @@ gdb_load_disassembly (ClientData clientD mixed_source_and_assembly = 0; else { - Tcl_SetStringObj (result_ptr->obj_ptr, - "Second arg must be 'source' or 'nosource'", -1); + gdbtk_set_result (interp, "Second arg must be 'source' or 'nosource'"); return TCL_ERROR; } @@ -1695,7 +1690,7 @@ gdb_load_disassembly (ClientData clientD client_data.map_arr = "map_array"; if (Tcl_UpVar (interp, "1", map_name, client_data.map_arr, 0) != TCL_OK) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Can't link map array.", -1); + gdbtk_set_result (interp, "Can't link map array."); return TCL_ERROR; } @@ -2376,7 +2371,7 @@ gdb_loc (ClientData clientData, Tcl_Inte if (sals.nelts != 1) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Ambiguous line spec", -1); + gdbtk_set_result (interp, "Ambiguous line spec", -1); return TCL_ERROR; } resolve_sal_pc (&sal); @@ -2538,11 +2533,7 @@ gdb_set_mem (clientData, interp, objc, o if (size < 0) { /* Error in input */ - char *res; - - xasprintf (&res, "Invalid hexadecimal input: \"0x%s\"", hexstr); - Tcl_SetObjResult (interp, Tcl_NewStringObj (res, -1)); - free (res); + gdbtk_set_result (interp, "Invalid hexadecimal input: \"0x%s\"", hexstr); return TCL_ERROR; } @@ -2589,7 +2580,7 @@ gdb_get_mem (ClientData clientData, Tcl_ } else if (size <= 0) { - Tcl_SetObjResult (interp, Tcl_NewStringObj ("Invalid size, must be > 0", -1)); + gdbtk_set_result (interp, "Invalid size, must be > 0"); return TCL_ERROR; } @@ -2600,8 +2591,7 @@ gdb_get_mem (ClientData clientData, Tcl_ } else if (nbytes <= 0) { - Tcl_SetObjResult (interp, - Tcl_NewStringObj ("Invalid number of bytes, must be > 0", -1)); + gdbtk_set_result (interp, "Invalid number of bytes, must be > 0"); return TCL_ERROR; } @@ -2612,8 +2602,7 @@ gdb_get_mem (ClientData clientData, Tcl_ } else if (bpr <= 0) { - Tcl_SetObjResult (interp, - Tcl_NewStringObj ("Invalid bytes per row, must be > 0", -1)); + gdbtk_set_result (interp, "Invalid bytes per row, must be > 0"); return TCL_ERROR; } @@ -2623,7 +2612,7 @@ gdb_get_mem (ClientData clientData, Tcl_ mbuf = (char *) malloc (nbytes + 32); if (!mbuf) { - Tcl_SetObjResult (interp, Tcl_NewStringObj ("Out of memory.", -1)); + gdbtk_set_result (interp, "Out of memory."); return TCL_ERROR; } @@ -2773,8 +2762,7 @@ gdb_loadfile (ClientData clientData, Tcl if (!Tcl_GetCommandInfo (interp, widget, &text_cmd)) { - Tcl_SetStringObj (result_ptr->obj_ptr, "Can't get widget command info", - -1); + gdbtk_set_result (interp, "Can't get widget command info"); return TCL_ERROR; } @@ -2784,15 +2772,14 @@ gdb_loadfile (ClientData clientData, Tcl symtab = full_lookup_symtab (file); if (!symtab) { - Tcl_SetStringObj ( result_ptr->obj_ptr, "File not found in symtab", -1); + gdbtk_set_result (interp, "File not found in symtab"); return TCL_ERROR; } file = symtab_to_filename ( symtab ); if ((fp = fopen ( file, "r" )) == NULL) { - Tcl_SetStringObj ( result_ptr->obj_ptr, "Can't open file for reading", - -1); + gdbtk_set_result (interp, "Can't open file for reading"); return TCL_ERROR; } @@ -2823,8 +2810,8 @@ gdb_loadfile (ClientData clientData, Tcl ltable = (char *)malloc (LTABLE_SIZE); if (ltable == NULL) { - Tcl_SetStringObj ( result_ptr->obj_ptr, "Out of memory.", -1); fclose (fp); + gdbtk_set_result (interp, "Out of memory."); return TCL_ERROR; } @@ -2844,10 +2831,9 @@ gdb_loadfile (ClientData clientData, Tcl ltable_size *= 2; if (new_ltable == NULL) { - Tcl_SetStringObj ( result_ptr->obj_ptr, "Out of memory.", - -1); free (ltable); fclose (fp); + gdbtk_set_result (interp, "Out of memory."); return TCL_ERROR; } ltable = new_ltable; @@ -3103,4 +3089,17 @@ pc_function_name (pc) funcname = ""; return funcname; +} + +void +gdbtk_set_result (Tcl_Interp *interp, const char *fmt,...) +{ + va_list args; + char *buf; + + va_start (args, fmt); + xvasprintf (&buf, fmt, args); + va_end (args); + Tcl_SetObjResult (interp, Tcl_NewStringObj (buf, -1)); + xfree(buf); } Index: generic/gdbtk-cmds.h =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-cmds.h,v retrieving revision 1.1 diff -u -p -r1.1 gdbtk-cmds.h --- gdbtk-cmds.h 2001/05/10 18:04:23 1.1 +++ gdbtk-cmds.h 2001/11/05 19:27:07 @@ -50,6 +50,9 @@ extern char *pc_function_name (CORE_ADDR a Tcl list object. */ extern void sprintf_append_element_to_obj (Tcl_Obj * objp, char *format, ...); +/* printf-like function to return error messages */ +extern void gdbtk_set_result (Tcl_Interp *interp, const char *fmt,...); + /* Module init routines: Each module of commands should be declared here. */ extern int Gdbtk_Breakpoint_Init (Tcl_Interp *interp); extern int Gdbtk_Stack_Init (Tcl_Interp *interp); Index: generic/gdbtk-stack.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-stack.c,v retrieving revision 1.4 diff -u -p -r1.4 gdbtk-stack.c --- gdbtk-stack.c 2001/10/17 20:35:32 1.4 +++ gdbtk-stack.c 2001/11/05 19:27:07 @@ -101,7 +101,6 @@ gdb_block_vars (clientData, interp, objc if (objc < 3) { Tcl_WrongNumArgs (interp, 1, objv, "startAddr endAddr"); - result_ptr->flags |= GDBTK_IN_TCL_RESULT; return TCL_ERROR; } @@ -319,8 +318,7 @@ gdb_get_vars_command (clientData, interp sals = decode_line_1 (&args, 1, NULL, 0, &canonical); if (sals.nelts == 0) { - Tcl_SetStringObj (result_ptr->obj_ptr, - "error decoding line", -1); + gdbtk_set_result (interp, "error decoding line"); return TCL_ERROR; } @@ -479,7 +477,6 @@ gdb_stack (clientData, interp, objc, obj if (objc < 3) { Tcl_WrongNumArgs (interp, 1, objv, "start count"); - result_ptr->flags |= GDBTK_IN_TCL_RESULT; return TCL_ERROR; } Index: generic/gdbtk-varobj.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-varobj.c,v retrieving revision 1.9 diff -u -p -r1.9 gdbtk-varobj.c --- gdbtk-varobj.c 2001/10/17 20:35:32 1.9 +++ gdbtk-varobj.c 2001/11/05 19:27:07 @@ -510,11 +510,9 @@ variable_format (interp, objc, objv, var varobj_set_display_format (var, FORMAT_OCTAL); else { - Tcl_Obj *obj = Tcl_NewStringObj (NULL, 0); - Tcl_AppendStringsToObj (obj, "unknown display format \"", - fmt, "\": must be: \"natural\", \"binary\"" - ", \"decimal\", \"hexadecimal\", or \"octal\"", NULL); - Tcl_SetObjResult (interp, obj); + gdbtk_set_result (interp, "unknown display format \"", + fmt, "\": must be: \"natural\", \"binary\"" + ", \"decimal\", \"hexadecimal\", or \"octal\""); return TCL_ERROR; } } @@ -597,9 +595,9 @@ variable_value (interp, objc, objv, var) s = Tcl_GetStringFromObj (objv[2], NULL); if (!varobj_set_value (var, s)) { - r = error_last_message (); - Tcl_SetObjResult (interp, Tcl_NewStringObj (r, -1)); - FREEIF (r); + r = error_last_message(); + gdbtk_set_result (interp, "%s", r); + xfree (r); return TCL_ERROR; } } ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFA] gdbtk_set_result 2001-11-05 11:30 ` Martin M. Hunt @ 2001-11-05 11:34 ` Keith Seitz 2001-11-05 13:27 ` Fernando Nasser 0 siblings, 1 reply; 5+ messages in thread From: Keith Seitz @ 2001-11-05 11:34 UTC (permalink / raw) To: Martin M. Hunt; +Cc: Insight Mailing List On Mon, 5 Nov 2001, Martin M. Hunt wrote: > Should really be xfree() and not FREEIF() shouldn't it. Well, yes/no. FREEIF should use xfree (but it doesn't). FREEIF just checks to make sure that the pointer isn't null, that's all. Actually, that looks like another cleanup that can be made on varobj: free->xfree. Otherwise, looks good. Pleaes commit. Keith ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFA] gdbtk_set_result 2001-11-05 11:34 ` Keith Seitz @ 2001-11-05 13:27 ` Fernando Nasser 0 siblings, 0 replies; 5+ messages in thread From: Fernando Nasser @ 2001-11-05 13:27 UTC (permalink / raw) To: Keith Seitz; +Cc: Martin M. Hunt, Insight Mailing List Keith Seitz wrote: > > Actually, that looks like another cleanup that can be made on varobj: > free->xfree. > Yes. When xfree() was created, (almost) everything in gdb/* got updated. So varobj.c got free->xfree, but gdbtk/gdbtk-varobj.c did not. -- Fernando Nasser Red Hat - Toronto E-Mail: fnasser@redhat.com 2323 Yonge Street, Suite #300 Toronto, Ontario M4P 2C9 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2001-11-05 13:27 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2001-11-02 16:20 [RFA] gdbtk_set_result Martin M. Hunt 2001-11-04 11:25 ` Keith Seitz 2001-11-05 11:30 ` Martin M. Hunt 2001-11-05 11:34 ` Keith Seitz 2001-11-05 13:27 ` Fernando Nasser
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).