summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-tcltk/tclreadline/files/tclreadline-2.1.0-alloc-free.patch')
-rw-r--r--dev-tcltk/tclreadline/files/tclreadline-2.1.0-alloc-free.patch121
1 files changed, 121 insertions, 0 deletions
diff --git a/dev-tcltk/tclreadline/files/tclreadline-2.1.0-alloc-free.patch b/dev-tcltk/tclreadline/files/tclreadline-2.1.0-alloc-free.patch
new file mode 100644
index 000000000000..6694c29f6042
--- /dev/null
+++ b/dev-tcltk/tclreadline/files/tclreadline-2.1.0-alloc-free.patch
@@ -0,0 +1,121 @@
+diff -ur a/tclreadline.c b/tclreadline.c
+--- a/tclreadline.c 2000-09-20 19:44:34.000000000 +0200
++++ b/tclreadline.c 2013-11-18 10:35:13.889610060 +0100
+@@ -343,7 +343,9 @@
+ return TCL_ERROR;
+ } else if (3 == objc) {
+- if (tclrl_custom_completer)
++ if (tclrl_custom_completer) {
+- FREE(tclrl_custom_completer);
++ free(tclrl_custom_completer);
++ tclrl_custom_completer = NULL;
++ }
+ if (!blank_line(Tcl_GetStringFromObj(objv[2], 0)))
+ tclrl_custom_completer =
+ stripwhite(strdup(Tcl_GetStringFromObj(objv[2], 0)));
+@@ -378,7 +380,9 @@
+ return TCL_ERROR;
+ } else if (3 == objc) {
+- if (tclrl_eof_string)
++ if (tclrl_eof_string) {
+- FREE(tclrl_eof_string);
++ free(tclrl_eof_string);
++ tclrl_eof_string = NULL;
++ }
+ if (!blank_line(Tcl_GetStringFromObj(objv[2], 0)))
+ tclrl_eof_string =
+ stripwhite(strdup(Tcl_GetStringFromObj(objv[2], 0)));
+@@ -506,10 +510,16 @@
+ if (status >= 1) {
+ /* TODO: make this a valid tcl output */
+ printf("%s\n", expansion);
++ free(ptr);
++ free(expansion);
++ return;
+ } else if (-1 == status) {
+ Tcl_AppendResult
+ (tclrl_interp, "error in history expansion\n", (char*) NULL);
+ TclReadlineTerminate(TCL_ERROR);
++ free(ptr);
++ free(expansion);
++ return;
+ }
+ /**
+ * TODO: status == 2 ...
+@@ -544,8 +554,8 @@
+ * tell the calling routines to terminate.
+ */
+ TclReadlineTerminate(LINE_COMPLETE);
+- FREE(ptr);
+- FREE(expansion);
++ free(ptr);
++ free(expansion);
+ }
+ }
+
+@@ -673,7 +683,7 @@
+ strcpy(rl_line_buffer, expansion);
+ rl_end = strlen(expansion);
+ rl_point += strlen(expansion) - oldlen;
+- FREE(expansion);
++ free(expansion);
+ /*
+ * TODO:
+ * because we return 0 == matches,
+@@ -682,7 +690,8 @@
+ */
+ return matches;
+ }
+- FREE(expansion);
++ free(expansion);
++ expansion = NULL;
+ }
+
+ if (tclrl_custom_completer) {
+@@ -699,15 +710,19 @@
+ state = Tcl_VarEval(tclrl_interp, tclrl_custom_completer,
+ " \"", quoted_text, "\" ", start_s, " ", end_s,
+ " \"", quoted_rl_line_buffer, "\"", (char*) NULL);
+- FREE(quoted_text);
+- FREE(quoted_rl_line_buffer);
+ if (TCL_OK != state) {
+ Tcl_AppendResult (tclrl_interp, " `", tclrl_custom_completer,
+ " \"", quoted_text, "\" ", start_s, " ", end_s,
+ " \"", quoted_rl_line_buffer, "\"' failed.", (char*) NULL);
+ TclReadlineTerminate(state);
++ free(quoted_text);
++ free(quoted_rl_line_buffer);
+ return matches;
+ }
++ free(quoted_text);
++ quoted_text = NULL;
++ free(quoted_rl_line_buffer);
++ quoted_rl_line_buffer = NULL;
+ obj = Tcl_GetObjResult(tclrl_interp);
+ status = Tcl_ListObjGetElements(tclrl_interp, obj, &objc, &objv);
+ if (TCL_OK != status)
+@@ -715,12 +732,12 @@
+
+ if (objc) {
+ int i, length;
+- matches = (char**) MALLOC(sizeof(char*) * (objc + 1));
++ matches = (char**) malloc(sizeof(char*) * (objc + 1));
+ for (i = 0; i < objc; i++) {
+ matches[i] = strdup(Tcl_GetStringFromObj(objv[i], &length));
+ if (1 == objc && !strlen(matches[i])) {
+- FREE(matches[i]);
++ free(matches[i]);
+- FREE(matches);
++ free(matches);
+ Tcl_ResetResult(tclrl_interp); /* clear result space */
+ return (char**) NULL;
+ }
+@@ -735,7 +752,7 @@
+ */
+ if (2 == objc && !strlen(matches[1])) {
+ i--;
+- FREE(matches[1]);
++ free(matches[1]);
+ rl_completion_append_character = '\0';
+ }
+