Mercurial > hg > octave-terminal
changeset 244:d66cc97f77a9
[project @ 1993-12-03 01:30:19 by jwe]
author | jwe |
---|---|
date | Fri, 03 Dec 1993 01:30:19 +0000 |
parents | 5b2f4a58254b |
children | 16a24e76d6e0 |
files | src/help.cc src/input.cc src/symtab.cc src/utils.cc src/variables.cc |
diffstat | 5 files changed, 39 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/src/help.cc +++ b/src/help.cc @@ -245,7 +245,7 @@ ptr++; } - name_list[count] = (char *) NULL; + name_list[i] = (char *) NULL; return name_list; }
--- a/src/input.cc +++ b/src/input.cc @@ -303,7 +303,12 @@ len = strlen (text); if (name_list != (char **) NULL) - delete [] name_list; + { + char **ptr = name_list; + while (ptr && *ptr) + delete [] *ptr++; + delete [] name_list; + } name_list = make_name_list (); } @@ -313,7 +318,11 @@ { list_index++; if (strncmp (name, text, len) == 0) - return name; + { + char *buf = xmalloc (1 + strlen (name)); + strcpy (buf, name); + return buf; + } } return (char *) NULL;
--- a/src/symtab.cc +++ b/src/symtab.cc @@ -980,8 +980,7 @@ { if (save (os, *ptr, mark_as_global)) status++; - - ptr++; + delete [] *ptr++; } delete [] names; }
--- a/src/utils.cc +++ b/src/utils.cc @@ -362,17 +362,11 @@ } } -// Why do I have to do this? - char **foo = path; while (foo && *foo) - { - delete [] *foo; - *foo = (char *) NULL; - foo++; - } - + delete [] *foo++; delete [] path; + path = new char * [nelem+1]; path[nelem] = (char *) NULL; @@ -1313,11 +1307,17 @@ if (i == num_max - 1) { +// Reallocate the array. Only copy pointers, not the strings they +// point to, then only delete the original array of pointers, and not +// the strings they point to. + num_max += 256; char **tmp = new char * [num_max]; for (int j = 0; j < i; j++) tmp[j] = retval[j]; + delete [] retval; + retval = tmp; } } @@ -1350,11 +1350,17 @@ if (i + tmp_num >= num_max - 1) { +// Reallocate the array. Only copy pointers, not the strings they +// point to, then only delete the original array of pointers, and not +// the strings they point to. + num_max += 1024; char **tmp = new char * [num_max]; for (int j = 0; j < i; j++) tmp[j] = retval[j]; + delete [] retval; + retval = tmp; }
--- a/src/variables.cc +++ b/src/variables.cc @@ -694,6 +694,9 @@ char **lcl = (char **) NULL; char **mfl = (char **) NULL; +// Each of these functions returns a new vector of pointers to new +// strings. + key = names (keyword_help (), key_len); glb = global_sym_tab->list (glb_len); top = top_level_sym_tab->list (top_len); @@ -705,22 +708,26 @@ char **list = new char * [total_len+1]; +// Put all the symbols in one big list. Only copy pointers, not the +// strings they point to, then only delete the original array of +// pointers, and not the strings they point to. + int j = 0; int i = 0; for (i = 0; i < key_len; i++) - list[j++] = strsave (key[i]); + list[j++] = key[i]; for (i = 0; i < glb_len; i++) - list[j++] = strsave (glb[i]); + list[j++] = glb[i]; for (i = 0; i < top_len; i++) - list[j++] = strsave (top[i]); + list[j++] = top[i]; for (i = 0; i < lcl_len; i++) - list[j++] = strsave (lcl[i]); + list[j++] = lcl[i]; for (i = 0; i < mfl_len; i++) - list[j++] = strsave (mfl[i]); + list[j++] = mfl[i]; list[j] = (char *) NULL;