version 1.12, 2004/12/30 02:06:00 |
version 1.13, 2005/04/15 15:54:26 |
|
|
|
|
static char *get_str_val(Cell *vp, char **fmt) /* get string val of a Cell */ |
static char *get_str_val(Cell *vp, char **fmt) /* get string val of a Cell */ |
{ |
{ |
char s[100]; /* BUG: unchecked */ |
int n; |
double dtemp; |
double dtemp; |
|
|
if ((vp->tval & (NUM | STR)) == 0) |
if ((vp->tval & (NUM | STR)) == 0) |
|
|
if (freeable(vp)) |
if (freeable(vp)) |
xfree(vp->sval); |
xfree(vp->sval); |
if (modf(vp->fval, &dtemp) == 0) /* it's integral */ |
if (modf(vp->fval, &dtemp) == 0) /* it's integral */ |
snprintf(s, sizeof(s), "%.30g", vp->fval); |
n = asprintf(&vp->sval, "%.30g", vp->fval); |
else |
else |
snprintf(s, sizeof(s), *fmt, vp->fval); |
n = asprintf(&vp->sval, *fmt, vp->fval); |
vp->sval = tostring(s); |
if (n == -1) |
|
FATAL("out of space in get_str_val"); |
vp->tval &= ~DONTFREE; |
vp->tval &= ~DONTFREE; |
vp->tval |= STR; |
vp->tval |= STR; |
} |
} |