[bugfix] some paths in no-libc mode depend on lib
This commit is contained in:
parent
c2754509f2
commit
86a056c70a
|
@ -353,24 +353,26 @@ int xvfprintf(pic_state *pic, xFILE *stream, const char *fmt, va_list ap) {
|
|||
break;
|
||||
}
|
||||
#else
|
||||
# define fabs(x) ((x) >= 0 ? (x) : -(x))
|
||||
case 'f': {
|
||||
double dval, dint;
|
||||
dval = modf(va_arg(ap, double), &dint);
|
||||
if (dint < 0 || dval < 0) { /* either may be zero */
|
||||
double dval = va_arg(ap, double);
|
||||
long lval;
|
||||
if (dval < 0) {
|
||||
dval = -dval;
|
||||
xputc(pic, '-', stream);
|
||||
cnt++;
|
||||
}
|
||||
cnt += print_int(pic, stream, (long)fabs(dint), 10);
|
||||
lval = (long)dval;
|
||||
cnt += print_int(pic, stream, lval, 10);
|
||||
xputc(pic, '.', stream);
|
||||
cnt++;
|
||||
if ((ival = fabs(fabs(dval) * 1e4) + 0.5) == 0) {
|
||||
dval -= lval;
|
||||
if ((ival = fabs(dval) * 1e4 + 0.5) == 0) {
|
||||
cnt += xfputs(pic, "0000", stream);
|
||||
} else {
|
||||
int i;
|
||||
for (i = 0; i < 3 - (int)log10(ival); ++i) {
|
||||
xputc(pic, '0', stream);
|
||||
cnt++;
|
||||
}
|
||||
if (ival < 1000) xputc(pic, '0', stream); cnt++;
|
||||
if (ival < 100) xputc(pic, '0', stream); cnt++;
|
||||
if (ival < 10) xputc(pic, '0', stream); cnt++;
|
||||
cnt += print_int(pic, stream, ival, 10);
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -117,11 +117,6 @@ DEFINE_AOP(div, pic_div(pic, pic_int_value(1), argv[0]), do {
|
|||
pic_errorf(pic, "/: at least one argument required");
|
||||
} while (0))
|
||||
|
||||
/**
|
||||
* Returns the length of string representing val.
|
||||
* radix is between 2 and 36 (inclusive).
|
||||
* No error checks are performed in this function.
|
||||
*/
|
||||
static int
|
||||
number_string_length(int val, int radix)
|
||||
{
|
||||
|
@ -141,12 +136,6 @@ number_string_length(int val, int radix)
|
|||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the string representing val.
|
||||
* radix is between 2 and 36 (inclusive).
|
||||
* This function overwrites buffer and stores the result.
|
||||
* No error checks are performed in this function. It is caller's responsibility to avoid buffer-overrun.
|
||||
*/
|
||||
static void
|
||||
number_string(int val, int radix, int length, char *buffer) {
|
||||
const char digits[37] = "0123456789abcdefghijklmnopqrstuvwxyz";
|
||||
|
@ -216,7 +205,7 @@ pic_number_string_to_number(pic_state *pic)
|
|||
int radix = 10;
|
||||
long num;
|
||||
char *eptr;
|
||||
double flo;
|
||||
pic_value flo;
|
||||
|
||||
pic_get_args(pic, "z|i", &str, &radix);
|
||||
|
||||
|
@ -227,9 +216,9 @@ pic_number_string_to_number(pic_state *pic)
|
|||
: pic_float_value(num);
|
||||
}
|
||||
|
||||
flo = strtod(str, &eptr);
|
||||
if (*eptr == '\0') {
|
||||
return pic_float_value(flo);
|
||||
flo = pic_read_cstr(pic, str);
|
||||
if (pic_int_p(flo) || pic_float_p(flo)) {
|
||||
return flo;
|
||||
}
|
||||
|
||||
pic_errorf(pic, "invalid string given: %s", str);
|
||||
|
|
|
@ -282,14 +282,18 @@ read_unsigned(pic_state *pic, struct pic_port *port, int c)
|
|||
}
|
||||
#else
|
||||
case '.': {
|
||||
double f, g;
|
||||
double f, g, h;
|
||||
next(pic, port);
|
||||
g = 0, e = 0;
|
||||
while (isdigit(c = peek(pic, port))) {
|
||||
g = g * 10 + (next(pic, port) - '0');
|
||||
e++;
|
||||
}
|
||||
f = u + g * pow(10, -e);
|
||||
h = 1.0;
|
||||
while (e-- > 0) {
|
||||
h /= 10;
|
||||
}
|
||||
f = u + g * h;
|
||||
|
||||
exp = read_suffix(pic, port);
|
||||
if (exp >= 0) {
|
||||
|
|
Loading…
Reference in New Issue