summaryrefslogtreecommitdiff
blob: 6694c29f604228c87f9e095a8328463cb7b8f8aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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';
 	    }