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';
}
|