Save the time format suffix string.

In case of a vhdlpp-specific () call, the timeformat suffix string was overridden,
therefore it has to be restored to the previous value after the call.
This commit is contained in:
Maciej Suminski 2016-02-09 16:17:16 +01:00 committed by Cary R
parent 139c4154c3
commit 71084109f6
1 changed files with 12 additions and 2 deletions

View File

@ -642,7 +642,7 @@ static unsigned int get_format_char(char **rtn, int ljust, int plus,
vpi_printf("WARNING: %s:%d: incompatible value for %s%s.\n",
info->filename, info->lineno, info->name, fmtb);
} else {
char *tbuf;
char *tbuf, *prev_suff;
PLI_INT32 time_units = vpi_get(vpiTimeUnit, info->scope);
if (plus != 0) {
@ -650,7 +650,10 @@ static unsigned int get_format_char(char **rtn, int ljust, int plus,
* It is needed by vhdlpp to correctly implement time'image(). */
PLI_INT32 time_prec = vpi_get(vpiTimePrecision, info->scope);
free(timeformat_info.suff);
/* We are about to override the suffix string set with $timeformat(),
* therefore we need to restore it after the call. */
prev_suff = timeformat_info.suff;
if(time_units < -12)
timeformat_info.suff = strdup(" fs");
else if(time_units < -9)
@ -688,6 +691,13 @@ static unsigned int get_format_char(char **rtn, int ljust, int plus,
cp = tbuf;
swidth = strlen(tbuf);
if(plus != 0) {
/* Restore the previous suffix string, overridden by
* a vhdlpp-specific $sformatf() call. */
free(timeformat_info.suff);
timeformat_info.suff = prev_suff;
}
if (ld_zero == 1) {
/* No leading zeros are created by this conversion so just make
* the width 0 for this case. */