Fixed "String Table Error" occurences in some (not all) empty cells
This commit is contained in:
parent
8dc2099766
commit
c36a503c27
@ -18,6 +18,7 @@ HEAD
|
|||||||
* Enabled compilation warnings, made sure there are none
|
* Enabled compilation warnings, made sure there are none
|
||||||
* More code modularization
|
* More code modularization
|
||||||
* Fixed handling of fonts (fixes some segfaults, closes bug 529044)
|
* Fixed handling of fonts (fixes some segfaults, closes bug 529044)
|
||||||
|
* Fixed "String Table Error" occurences in some (not all) empty cells
|
||||||
* Added some Alpha portability fixes.
|
* Added some Alpha portability fixes.
|
||||||
|
|
||||||
0.5 04/13/02
|
0.5 04/13/02
|
||||||
|
@ -1134,11 +1134,18 @@ void main_line_processor(U16 opcode, U16 version, U32 count, U16 last, U8 data)
|
|||||||
r, c, f, opcode,
|
r, c, f, opcode,
|
||||||
str_array[i]->uni, str_array[i]->str,
|
str_array[i]->uni, str_array[i]->str,
|
||||||
str_array[i]->len, str_array[i]->crun_cnt, str_array[i]->fmt_run);
|
str_array[i]->len, str_array[i]->crun_cnt, str_array[i]->fmt_run);
|
||||||
}
|
else /* Error - probably OOM in add_str_array() */
|
||||||
else /* Error, so just set it empty */
|
|
||||||
add_wb_array( r, c, f, opcode,
|
add_wb_array( r, c, f, opcode,
|
||||||
(U16)0, (U8 *)"String Table Error", 18, 0, 0);
|
(U16)0, (U8 *)"String Table Error", 18, 0, 0);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{ /* the string table entry can legally
|
||||||
|
* be NULL, see start of add_str_array()
|
||||||
|
*/
|
||||||
|
add_wb_array( r, c, f, opcode,
|
||||||
|
(U16)0, (U8 *)"", 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
MaxStringsExceeded = 1;
|
MaxStringsExceeded = 1;
|
||||||
}
|
}
|
||||||
@ -2196,8 +2203,18 @@ void add_str_array(U8 uni, U8 *str, U16 len, U8 *fmt_run, U8 crun_cnt)
|
|||||||
if (next_string >= max_strings)
|
if (next_string >= max_strings)
|
||||||
{
|
{
|
||||||
uni_string **tstr_array;
|
uni_string **tstr_array;
|
||||||
size_t new_size = (max_strings + STRINGS_INCR) * sizeof(uni_string *);
|
unsigned long new_max_str;
|
||||||
|
size_t new_size;
|
||||||
|
|
||||||
|
new_max_str = max_strings + STRINGS_INCR;
|
||||||
|
while (next_string >= new_max_str)
|
||||||
|
{ /* who knows how many empty strings (see above) we got in a row
|
||||||
|
* - better make sure there's enough space allocated
|
||||||
|
*/
|
||||||
|
new_max_str += STRINGS_INCR;
|
||||||
|
}
|
||||||
|
|
||||||
|
new_size = new_max_str * sizeof(uni_string *);
|
||||||
tstr_array = (uni_string **)realloc(str_array, new_size);
|
tstr_array = (uni_string **)realloc(str_array, new_size);
|
||||||
|
|
||||||
if (tstr_array == NULL)
|
if (tstr_array == NULL)
|
||||||
@ -2214,15 +2231,15 @@ void add_str_array(U8 uni, U8 *str, U16 len, U8 *fmt_run, U8 crun_cnt)
|
|||||||
str_array = tstr_array;
|
str_array = tstr_array;
|
||||||
|
|
||||||
/* Clear the new string slots */
|
/* Clear the new string slots */
|
||||||
for (i=max_strings; i<(max_strings + STRINGS_INCR); i++)
|
for (i = max_strings; i < new_max_str; i++)
|
||||||
str_array[i] = 0;
|
str_array[i] = 0;
|
||||||
|
|
||||||
max_strings += STRINGS_INCR;
|
max_strings = new_max_str;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (str_array[next_string] == 0)
|
if (str_array[next_string] == 0)
|
||||||
{
|
{ /* Can this ever be false? If yes, wouldn't that be a bug? -- VDv */
|
||||||
str_array[next_string] = (uni_string *)malloc(sizeof(uni_string));
|
str_array[next_string] = (uni_string *)malloc(sizeof(uni_string));
|
||||||
if (str_array[next_string])
|
if (str_array[next_string])
|
||||||
{
|
{
|
||||||
@ -2244,7 +2261,10 @@ void add_str_array(U8 uni, U8 *str, U16 len, U8 *fmt_run, U8 crun_cnt)
|
|||||||
str_array[next_string]->crun_cnt = crun_cnt;
|
str_array[next_string]->crun_cnt = crun_cnt;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
str_array[next_string]->crun_cnt = 0;
|
str_array[next_string]->crun_cnt = 0;
|
||||||
|
MaxStringsExceeded = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2252,6 +2272,18 @@ void add_str_array(U8 uni, U8 *str, U16 len, U8 *fmt_run, U8 crun_cnt)
|
|||||||
str_array[next_string]->crun_cnt = 0;
|
str_array[next_string]->crun_cnt = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MaxStringsExceeded = 1;
|
||||||
|
/* fprintf(stderr, "%s: cannot allocate %d bytes for string storage %d: %s",
|
||||||
|
PRGNAME, len+1, errno, strerror(errno)); */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MaxStringsExceeded = 1;
|
||||||
|
/* fprintf(stderr, "%s: cannot allocate %d bytes for string storage %d: %s",
|
||||||
|
PRGNAME, sizeof(uni_string), errno, strerror(errno)); */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
next_string++;
|
next_string++;
|
||||||
|
Loading…
Reference in New Issue
Block a user