[153566] trunk/base/src/pextlib1.0/Pextlib.c
raimue at macports.org
raimue at macports.org
Tue Oct 4 17:43:41 CEST 2016
Revision: 153566
https://trac.macports.org/changeset/153566
Author: raimue at macports.org
Date: 2016-10-04 08:43:41 -0700 (Tue, 04 Oct 2016)
Log Message:
-----------
pextlib: avoid fixed-size buffer in ui_message
Use asprintf for Tcl command formatting instead of a buffer of fixed size.
Also switch to Tcl_EvalEx that should always be preferred over Tcl_Eval for
efficiency.
Modified Paths:
--------------
trunk/base/src/pextlib1.0/Pextlib.c
Modified: trunk/base/src/pextlib1.0/Pextlib.c
===================================================================
--- trunk/base/src/pextlib1.0/Pextlib.c 2016-10-04 15:35:04 UTC (rev 153565)
+++ trunk/base/src/pextlib1.0/Pextlib.c 2016-10-04 15:43:41 UTC (rev 153566)
@@ -109,22 +109,26 @@
__attribute__((format(printf, 3, 0)))
static void ui_message(Tcl_Interp *interp, const char *severity, const char *format, va_list va) {
- char tclcmd[32];
+ char *tclcmd;
char *buf;
if (vasprintf(&buf, format, va) < 0) {
perror("vasprintf");
return;
}
+ if (asprintf(&tclcmd, "ui_%s $warn", severity) < 0) {
+ perror("asprintf");
+ free(buf);
+ return;
+ }
- snprintf(tclcmd, sizeof(tclcmd), "ui_%s $warn", severity);
-
Tcl_SetVar(interp, "warn", buf, 0);
- if (TCL_OK != Tcl_Eval(interp, tclcmd)) {
- fprintf(stderr, "Error evaluating tcl statement `%s': %s\n", tclcmd, Tcl_GetStringResult(interp));
+ if (TCL_OK != Tcl_EvalEx(interp, tclcmd, -1, 0)) {
+ fprintf(stderr, "Error evaluating Tcl statement '%s': %s (message: '%s')\n", tclcmd, Tcl_GetStringResult(interp), buf);
}
Tcl_UnsetVar(interp, "warn", 0);
free(buf);
+ free(tclcmd);
}
__attribute__((format(printf, 2, 3)))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macports.org/pipermail/macports-changes/attachments/20161004/27ad87e1/attachment-0002.html>
More information about the macports-changes
mailing list