Remove unnecessary macros and typedefs, multipliation by sizeof(char), etc.
This commit is contained in:
parent
b7d58cca3d
commit
df69c98c33
@ -141,20 +141,15 @@ typedef struct BcVec {
|
|||||||
#define bc_vec_pop(v) (bc_vec_npop((v), 1))
|
#define bc_vec_pop(v) (bc_vec_npop((v), 1))
|
||||||
#define bc_vec_top(v) (bc_vec_item_rev((v), 0))
|
#define bc_vec_top(v) (bc_vec_item_rev((v), 0))
|
||||||
|
|
||||||
#define bc_map_init(v) (bc_vec_init((v), sizeof(struct str_len), bc_id_free))
|
|
||||||
|
|
||||||
typedef signed char BcDig;
|
typedef signed char BcDig;
|
||||||
|
|
||||||
typedef struct BcNum {
|
typedef struct BcNum {
|
||||||
BcDig *num;
|
signed char *num;
|
||||||
size_t rdx;
|
unsigned long rdx, len, cap;
|
||||||
size_t len;
|
|
||||||
size_t cap;
|
|
||||||
int neg;
|
int neg;
|
||||||
} BcNum;
|
} BcNum;
|
||||||
|
|
||||||
#define BC_NUM_DEF_SIZE (16)
|
#define BC_NUM_DEF_SIZE (16)
|
||||||
#define BC_NUM_PRINT_WIDTH (69)
|
|
||||||
|
|
||||||
#define BC_NUM_KARATSUBA_LEN (32)
|
#define BC_NUM_KARATSUBA_LEN (32)
|
||||||
|
|
||||||
@ -175,7 +170,6 @@ typedef size_t (*BcNumBinaryOpReq)(BcNum*, BcNum*, size_t);
|
|||||||
typedef void (*BcNumDigitOp)(size_t, size_t, int);
|
typedef void (*BcNumDigitOp)(size_t, size_t, int);
|
||||||
|
|
||||||
void bc_num_init(BcNum *n, size_t req);
|
void bc_num_init(BcNum *n, size_t req);
|
||||||
void bc_num_setup(BcNum *n, BcDig *num, size_t cap);
|
|
||||||
void bc_num_expand(BcNum *n, size_t req);
|
void bc_num_expand(BcNum *n, size_t req);
|
||||||
void bc_num_copy(BcNum *d, BcNum *s);
|
void bc_num_copy(BcNum *d, BcNum *s);
|
||||||
void bc_num_createCopy(BcNum *d, BcNum *s);
|
void bc_num_createCopy(BcNum *d, BcNum *s);
|
||||||
@ -575,10 +569,8 @@ typedef struct BcProgram {
|
|||||||
BcNum one;
|
BcNum one;
|
||||||
BcNum last;
|
BcNum last;
|
||||||
|
|
||||||
BcDig ib_num[BC_NUM_LONG_LOG10];
|
signed char ib_num[BC_NUM_LONG_LOG10], ob_num[BC_NUM_LONG_LOG10],
|
||||||
BcDig ob_num[BC_NUM_LONG_LOG10];
|
one_num[BC_PROG_ONE_CAP];
|
||||||
BcDig one_num[BC_PROG_ONE_CAP];
|
|
||||||
|
|
||||||
} BcProgram;
|
} BcProgram;
|
||||||
|
|
||||||
#define BC_PROG_STACK(s, n) ((s)->len >= ((size_t) (n)))
|
#define BC_PROG_STACK(s, n) ((s)->len >= ((size_t) (n)))
|
||||||
@ -1153,10 +1145,6 @@ static void bc_num_setToZero(BcNum *n, size_t scale) {
|
|||||||
n->rdx = scale;
|
n->rdx = scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bc_num_zero(BcNum *n) {
|
|
||||||
bc_num_setToZero(n, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void bc_num_one(BcNum *n) {
|
void bc_num_one(BcNum *n) {
|
||||||
bc_num_setToZero(n, 0);
|
bc_num_setToZero(n, 0);
|
||||||
n->len = 1;
|
n->len = 1;
|
||||||
@ -1176,7 +1164,7 @@ static size_t bc_num_log10(size_t i) {
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BcStatus bc_num_subArrays(BcDig *a, BcDig *b, size_t len)
|
static BcStatus bc_num_subArrays(signed char *a, signed char *b, size_t len)
|
||||||
{
|
{
|
||||||
size_t i, j;
|
size_t i, j;
|
||||||
for (i = 0; !TT.sig && i < len; ++i) {
|
for (i = 0; !TT.sig && i < len; ++i) {
|
||||||
@ -1188,10 +1176,11 @@ static BcStatus bc_num_subArrays(BcDig *a, BcDig *b, size_t len)
|
|||||||
return TT.sig ? BC_STATUS_SIGNAL : BC_STATUS_SUCCESS;
|
return TT.sig ? BC_STATUS_SIGNAL : BC_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t bc_num_compare(BcDig *a, BcDig *b, size_t len)
|
static ssize_t bc_num_compare(signed char *a, signed char *b, size_t len)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
int c = 0;
|
int c = 0;
|
||||||
|
|
||||||
for (i = len - 1; !TT.sig && i < len && !(c = a[i] - b[i]); --i);
|
for (i = len - 1; !TT.sig && i < len && !(c = a[i] - b[i]); --i);
|
||||||
return BC_NUM_NEG(i + 1, c < 0);
|
return BC_NUM_NEG(i + 1, c < 0);
|
||||||
}
|
}
|
||||||
@ -1199,7 +1188,7 @@ static ssize_t bc_num_compare(BcDig *a, BcDig *b, size_t len)
|
|||||||
ssize_t bc_num_cmp(BcNum *a, BcNum *b) {
|
ssize_t bc_num_cmp(BcNum *a, BcNum *b) {
|
||||||
|
|
||||||
size_t i, min, a_int, b_int, diff;
|
size_t i, min, a_int, b_int, diff;
|
||||||
BcDig *max_num, *min_num;
|
signed char *max_num, *min_num;
|
||||||
int a_max, neg = 0;
|
int a_max, neg = 0;
|
||||||
ssize_t cmp;
|
ssize_t cmp;
|
||||||
|
|
||||||
@ -1224,8 +1213,7 @@ ssize_t bc_num_cmp(BcNum *a, BcNum *b) {
|
|||||||
diff = a->rdx - b->rdx;
|
diff = a->rdx - b->rdx;
|
||||||
max_num = a->num + diff;
|
max_num = a->num + diff;
|
||||||
min_num = b->num;
|
min_num = b->num;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
min = a->rdx;
|
min = a->rdx;
|
||||||
diff = b->rdx - a->rdx;
|
diff = b->rdx - a->rdx;
|
||||||
max_num = b->num + diff;
|
max_num = b->num + diff;
|
||||||
@ -1256,7 +1244,7 @@ void bc_num_truncate(BcNum *n, size_t places) {
|
|||||||
|
|
||||||
if (n->len) {
|
if (n->len) {
|
||||||
n->len -= places;
|
n->len -= places;
|
||||||
memmove(n->num, n->num + places, n->len * sizeof(BcDig));
|
memmove(n->num, n->num + places, n->len);
|
||||||
bc_num_clean(n);
|
bc_num_clean(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1269,8 +1257,8 @@ static void bc_num_extend(BcNum *n, size_t places) {
|
|||||||
|
|
||||||
if (n->cap < len) bc_num_expand(n, len);
|
if (n->cap < len) bc_num_expand(n, len);
|
||||||
|
|
||||||
memmove(n->num + places, n->num, sizeof(BcDig) * n->len);
|
memmove(n->num + places, n->num, n->len);
|
||||||
memset(n->num, 0, sizeof(BcDig) * places);
|
memset(n->num, 0, places);
|
||||||
|
|
||||||
if (n->len) n->len += places;
|
if (n->len) n->len += places;
|
||||||
|
|
||||||
@ -1294,8 +1282,8 @@ static void bc_num_split(BcNum *n, size_t idx, BcNum *a, BcNum *b) {
|
|||||||
a->len = idx;
|
a->len = idx;
|
||||||
a->rdx = b->rdx = 0;
|
a->rdx = b->rdx = 0;
|
||||||
|
|
||||||
memcpy(b->num, n->num + idx, b->len * sizeof(BcDig));
|
memcpy(b->num, n->num + idx, b->len);
|
||||||
memcpy(a->num, n->num, idx * sizeof(BcDig));
|
memcpy(a->num, n->num, idx);
|
||||||
|
|
||||||
bc_num_clean(b);
|
bc_num_clean(b);
|
||||||
}
|
}
|
||||||
@ -1324,7 +1312,7 @@ static BcStatus bc_num_shift(BcNum *n, size_t places) {
|
|||||||
static BcStatus bc_num_inv(BcNum *a, BcNum *b, size_t scale) {
|
static BcStatus bc_num_inv(BcNum *a, BcNum *b, size_t scale) {
|
||||||
|
|
||||||
BcNum one;
|
BcNum one;
|
||||||
BcDig num[2];
|
signed char num[2];
|
||||||
|
|
||||||
one.cap = 2;
|
one.cap = 2;
|
||||||
one.num = num;
|
one.num = num;
|
||||||
@ -1333,16 +1321,16 @@ static BcStatus bc_num_inv(BcNum *a, BcNum *b, size_t scale) {
|
|||||||
return bc_num_div(&one, a, b, scale);
|
return bc_num_div(&one, a, b, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int bc_num_addDigit(BcDig *num, unsigned int d, unsigned int c)
|
static unsigned int bc_num_addDigit(signed char *num, unsigned int d, unsigned int c)
|
||||||
{
|
{
|
||||||
d += c;
|
d += c;
|
||||||
*num = (BcDig) (d % 10);
|
*num = d % 10;
|
||||||
return d / 10;
|
return d / 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BcStatus bc_num_a(BcNum *a, BcNum *b, BcNum *c, size_t sub) {
|
static BcStatus bc_num_a(BcNum *a, BcNum *b, BcNum *c, size_t sub) {
|
||||||
|
|
||||||
BcDig *ptr, *ptr_a, *ptr_b, *ptr_c;
|
signed char *ptr, *ptr_a, *ptr_b, *ptr_c;
|
||||||
size_t i, max, min_rdx, min_int, diff, a_int, b_int;
|
size_t i, max, min_rdx, min_int, diff, a_int, b_int;
|
||||||
unsigned int carry;
|
unsigned int carry;
|
||||||
|
|
||||||
@ -1404,7 +1392,7 @@ static BcStatus bc_num_a(BcNum *a, BcNum *b, BcNum *c, size_t sub) {
|
|||||||
|
|
||||||
c->len += i;
|
c->len += i;
|
||||||
|
|
||||||
if (carry) c->num[c->len++] = (BcDig) carry;
|
if (carry) c->num[c->len++] = carry;
|
||||||
|
|
||||||
return TT.sig ? BC_STATUS_SIGNAL : BC_STATUS_SUCCESS;
|
return TT.sig ? BC_STATUS_SIGNAL : BC_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -1482,7 +1470,7 @@ static BcStatus bc_num_k(BcNum *a, BcNum *b, BcNum *c) {
|
|||||||
// This is here because the function is recursive.
|
// This is here because the function is recursive.
|
||||||
if (TT.sig) return BC_STATUS_SIGNAL;
|
if (TT.sig) return BC_STATUS_SIGNAL;
|
||||||
if (!a->len || !b->len) {
|
if (!a->len || !b->len) {
|
||||||
bc_num_zero(c);
|
bc_num_setToZero(c, 0);
|
||||||
return BC_STATUS_SUCCESS;
|
return BC_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
if (aone || BC_NUM_ONE(b)) {
|
if (aone || BC_NUM_ONE(b)) {
|
||||||
@ -1495,17 +1483,17 @@ static BcStatus bc_num_k(BcNum *a, BcNum *b, BcNum *c) {
|
|||||||
{
|
{
|
||||||
size_t i, j, len;
|
size_t i, j, len;
|
||||||
unsigned int carry;
|
unsigned int carry;
|
||||||
BcDig *ptr_c;
|
signed char *ptr_c;
|
||||||
|
|
||||||
bc_num_expand(c, a->len + b->len + 1);
|
bc_num_expand(c, a->len + b->len + 1);
|
||||||
|
|
||||||
ptr_c = c->num;
|
ptr_c = c->num;
|
||||||
memset(ptr_c, 0, sizeof(BcDig) * c->cap);
|
memset(ptr_c, 0, c->cap);
|
||||||
c->len = len = 0;
|
c->len = len = 0;
|
||||||
|
|
||||||
for (i = 0; !TT.sig && i < b->len; ++i) {
|
for (i = 0; !TT.sig && i < b->len; ++i) {
|
||||||
|
|
||||||
BcDig *ptr = ptr_c + i;
|
signed char *ptr = ptr_c + i;
|
||||||
|
|
||||||
carry = 0;
|
carry = 0;
|
||||||
|
|
||||||
@ -1514,8 +1502,8 @@ static BcStatus bc_num_k(BcNum *a, BcNum *b, BcNum *c) {
|
|||||||
in += ((unsigned int) a->num[j]) * ((unsigned int) b->num[i]);
|
in += ((unsigned int) a->num[j]) * ((unsigned int) b->num[i]);
|
||||||
carry = bc_num_addDigit(ptr + j, in, carry);
|
carry = bc_num_addDigit(ptr + j, in, carry);
|
||||||
}
|
}
|
||||||
|
// todo: is this typecast useless?
|
||||||
ptr[j] += (BcDig) carry;
|
ptr[j] += (signed) carry;
|
||||||
len = maxof(len, i + j + (carry != 0));
|
len = maxof(len, i + j + (carry != 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1604,7 +1592,7 @@ static BcStatus bc_num_m(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
|
|||||||
bc_num_expand(c, c->len + maxrdx);
|
bc_num_expand(c, c->len + maxrdx);
|
||||||
|
|
||||||
if (c->len < maxrdx) {
|
if (c->len < maxrdx) {
|
||||||
memset(c->num + c->len, 0, (c->cap - c->len) * sizeof(BcDig));
|
memset(c->num + c->len, 0, c->cap - c->len);
|
||||||
c->len += maxrdx;
|
c->len += maxrdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1620,7 +1608,7 @@ err:
|
|||||||
static BcStatus bc_num_d(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
|
static BcStatus bc_num_d(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
|
||||||
|
|
||||||
BcStatus s = BC_STATUS_SUCCESS;
|
BcStatus s = BC_STATUS_SUCCESS;
|
||||||
BcDig *n, *p, q;
|
signed char *n, *p, q;
|
||||||
size_t len, end, i;
|
size_t len, end, i;
|
||||||
BcNum cp;
|
BcNum cp;
|
||||||
int zero = 1;
|
int zero = 1;
|
||||||
@ -1662,7 +1650,7 @@ static BcStatus bc_num_d(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
|
|||||||
|
|
||||||
bc_num_expand(c, cp.len);
|
bc_num_expand(c, cp.len);
|
||||||
|
|
||||||
memset(c->num + end, 0, (c->cap - end) * sizeof(BcDig));
|
memset(c->num + end, 0, c->cap - end);
|
||||||
c->rdx = cp.rdx;
|
c->rdx = cp.rdx;
|
||||||
c->len = cp.len;
|
c->len = cp.len;
|
||||||
p = b->num;
|
p = b->num;
|
||||||
@ -1893,7 +1881,7 @@ static BcStatus bc_num_parseBase(BcNum *n, char *val,
|
|||||||
{
|
{
|
||||||
BcStatus s = BC_STATUS_SUCCESS;
|
BcStatus s = BC_STATUS_SUCCESS;
|
||||||
BcNum temp, mult, result;
|
BcNum temp, mult, result;
|
||||||
BcDig c = 0;
|
signed char c = 0;
|
||||||
int zero = 1;
|
int zero = 1;
|
||||||
unsigned long v;
|
unsigned long v;
|
||||||
size_t i, digits, len = strlen(val);
|
size_t i, digits, len = strlen(val);
|
||||||
@ -1941,7 +1929,8 @@ static BcStatus bc_num_parseBase(BcNum *n, char *val,
|
|||||||
if (n->len) {
|
if (n->len) {
|
||||||
if (n->rdx < digits) bc_num_extend(n, digits - n->rdx);
|
if (n->rdx < digits) bc_num_extend(n, digits - n->rdx);
|
||||||
}
|
}
|
||||||
else bc_num_zero(n);
|
else bc_num_setToZero(n, 0);
|
||||||
|
|
||||||
|
|
||||||
err:
|
err:
|
||||||
bc_num_free(&result);
|
bc_num_free(&result);
|
||||||
@ -2092,7 +2081,7 @@ static BcStatus bc_num_printBase(BcNum *n, BcNum *base, size_t base_t) {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bc_num_setup(BcNum *n, BcDig *num, size_t cap) {
|
void bc_num_setup(BcNum *n, signed char *num, size_t cap) {
|
||||||
n->num = num;
|
n->num = num;
|
||||||
n->cap = cap;
|
n->cap = cap;
|
||||||
n->rdx = n->len = 0;
|
n->rdx = n->len = 0;
|
||||||
@ -2122,7 +2111,7 @@ void bc_num_copy(BcNum *d, BcNum *s) {
|
|||||||
d->len = s->len;
|
d->len = s->len;
|
||||||
d->neg = s->neg;
|
d->neg = s->neg;
|
||||||
d->rdx = s->rdx;
|
d->rdx = s->rdx;
|
||||||
memcpy(d->num, s->num, sizeof(BcDig) * d->len);
|
memcpy(d->num, s->num, d->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bc_num_createCopy(BcNum *d, BcNum *s) {
|
void bc_num_createCopy(BcNum *d, BcNum *s) {
|
||||||
@ -2194,10 +2183,10 @@ BcStatus bc_num_ulong(BcNum *n, unsigned long *result) {
|
|||||||
void bc_num_ulong2num(BcNum *n, unsigned long val) {
|
void bc_num_ulong2num(BcNum *n, unsigned long val) {
|
||||||
|
|
||||||
size_t len;
|
size_t len;
|
||||||
BcDig *ptr;
|
signed char *ptr;
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
|
|
||||||
bc_num_zero(n);
|
bc_num_setToZero(n, 0);
|
||||||
|
|
||||||
if (!val) return;
|
if (!val) return;
|
||||||
|
|
||||||
@ -2250,7 +2239,7 @@ BcStatus bc_num_sqrt(BcNum *a, BcNum *b, size_t scale) {
|
|||||||
BcNum num1, num2, half, f, fprime, *x0, *x1, *temp;
|
BcNum num1, num2, half, f, fprime, *x0, *x1, *temp;
|
||||||
size_t pow, len, digs, digs1, resrdx, times = 0;
|
size_t pow, len, digs, digs1, resrdx, times = 0;
|
||||||
ssize_t cmp = 1, cmp1 = SSIZE_MAX, cmp2 = SSIZE_MAX;
|
ssize_t cmp = 1, cmp1 = SSIZE_MAX, cmp2 = SSIZE_MAX;
|
||||||
BcDig half_digs[2];
|
signed char half_digs[2];
|
||||||
|
|
||||||
bc_num_init(b, maxof(scale, a->rdx) + ((BC_NUM_INT(a) + 1) >> 1) + 1);
|
bc_num_init(b, maxof(scale, a->rdx) + ((BC_NUM_INT(a) + 1) >> 1) + 1);
|
||||||
|
|
||||||
@ -2270,7 +2259,7 @@ BcStatus bc_num_sqrt(BcNum *a, BcNum *b, size_t scale) {
|
|||||||
|
|
||||||
bc_num_init(&num1, len);
|
bc_num_init(&num1, len);
|
||||||
bc_num_init(&num2, len);
|
bc_num_init(&num2, len);
|
||||||
bc_num_setup(&half, half_digs, sizeof(half_digs) / sizeof(BcDig));
|
bc_num_setup(&half, half_digs, sizeof(half_digs));
|
||||||
|
|
||||||
bc_num_one(&half);
|
bc_num_one(&half);
|
||||||
half.num[0] = 5;
|
half.num[0] = 5;
|
||||||
@ -5365,15 +5354,15 @@ void bc_program_init(BcProgram *p) {
|
|||||||
bc_num_init(&p->last, BC_NUM_DEF_SIZE);
|
bc_num_init(&p->last, BC_NUM_DEF_SIZE);
|
||||||
|
|
||||||
bc_vec_init(&p->fns, sizeof(BcFunc), bc_func_free);
|
bc_vec_init(&p->fns, sizeof(BcFunc), bc_func_free);
|
||||||
bc_map_init(&p->fn_map);
|
bc_vec_init(&p->fn_map, sizeof(struct str_len), bc_id_free);
|
||||||
bc_program_insertFunc(p, xstrdup(bc_func_main));
|
bc_program_insertFunc(p, xstrdup(bc_func_main));
|
||||||
bc_program_insertFunc(p, xstrdup(bc_func_read));
|
bc_program_insertFunc(p, xstrdup(bc_func_read));
|
||||||
|
|
||||||
bc_vec_init(&p->vars, sizeof(BcVec), bc_vec_free);
|
bc_vec_init(&p->vars, sizeof(BcVec), bc_vec_free);
|
||||||
bc_map_init(&p->var_map);
|
bc_vec_init(&p->var_map, sizeof(struct str_len), bc_id_free);
|
||||||
|
|
||||||
bc_vec_init(&p->arrs, sizeof(BcVec), bc_vec_free);
|
bc_vec_init(&p->arrs, sizeof(BcVec), bc_vec_free);
|
||||||
bc_map_init(&p->arr_map);
|
bc_vec_init(&p->arr_map, sizeof(struct str_len), bc_id_free);
|
||||||
|
|
||||||
bc_vec_init(&p->results, sizeof(BcResult), bc_result_free);
|
bc_vec_init(&p->results, sizeof(BcResult), bc_result_free);
|
||||||
bc_vec_init(&p->stack, sizeof(BcInstPtr), NULL);
|
bc_vec_init(&p->stack, sizeof(BcInstPtr), NULL);
|
||||||
@ -5692,26 +5681,6 @@ BcStatus bc_vm_posixError(BcError e, size_t line, ...) {
|
|||||||
return FLAG(s) ? BC_STATUS_ERROR : BC_STATUS_SUCCESS;
|
return FLAG(s) ? BC_STATUS_ERROR : BC_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t bc_vm_envLen(char *var) {
|
|
||||||
|
|
||||||
char *lenv = getenv(var);
|
|
||||||
size_t i, len = BC_NUM_PRINT_WIDTH;
|
|
||||||
int num;
|
|
||||||
|
|
||||||
if (!lenv) return len;
|
|
||||||
|
|
||||||
len = strlen(lenv);
|
|
||||||
|
|
||||||
for (num = 1, i = 0; num && i < len; ++i) num = isdigit(lenv[i]);
|
|
||||||
if (num) {
|
|
||||||
len = (size_t) atoi(lenv) - 1;
|
|
||||||
if (len < 2 || len >= UINT16_MAX) len = BC_NUM_PRINT_WIDTH;
|
|
||||||
}
|
|
||||||
else len = BC_NUM_PRINT_WIDTH;
|
|
||||||
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void bc_vm_clean()
|
static void bc_vm_clean()
|
||||||
{
|
{
|
||||||
BcProgram *prog = &BC_VM->prog;
|
BcProgram *prog = &BC_VM->prog;
|
||||||
@ -5883,6 +5852,8 @@ static BcStatus bc_vm_exec(void) {
|
|||||||
void bc_main(void)
|
void bc_main(void)
|
||||||
{
|
{
|
||||||
BcStatus s;
|
BcStatus s;
|
||||||
|
char *ss;
|
||||||
|
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
|
|
||||||
sigemptyset(&sa.sa_mask);
|
sigemptyset(&sa.sa_mask);
|
||||||
@ -5892,9 +5863,14 @@ void bc_main(void)
|
|||||||
sigaction(SIGTERM, &sa, NULL);
|
sigaction(SIGTERM, &sa, NULL);
|
||||||
sigaction(SIGQUIT, &sa, NULL);
|
sigaction(SIGQUIT, &sa, NULL);
|
||||||
|
|
||||||
TT.vm = xzalloc(sizeof(BcVm));
|
TT.line_len = 69;
|
||||||
TT.line_len = bc_vm_envLen("BC_LINE_LENGTH");
|
ss = getenv("BC_LINE_LENGTH");
|
||||||
|
if (ss) {
|
||||||
|
int len = atoi(ss);
|
||||||
|
if (len>=2 && len <= UINT16_MAX) TT.line_len = len;
|
||||||
|
}
|
||||||
|
|
||||||
|
TT.vm = xzalloc(sizeof(BcVm));
|
||||||
bc_program_init(&BC_VM->prog);
|
bc_program_init(&BC_VM->prog);
|
||||||
bc_parse_init(&BC_VM->prs, &BC_VM->prog, BC_PROG_MAIN);
|
bc_parse_init(&BC_VM->prs, &BC_VM->prog, BC_PROG_MAIN);
|
||||||
|
|
||||||
@ -5911,7 +5887,7 @@ void bc_main(void)
|
|||||||
if (CFG_TOYBOX_FREE) {
|
if (CFG_TOYBOX_FREE) {
|
||||||
bc_program_free(&BC_VM->prog);
|
bc_program_free(&BC_VM->prog);
|
||||||
bc_parse_free(&BC_VM->prs);
|
bc_parse_free(&BC_VM->prs);
|
||||||
free(BC_VM);
|
free(TT.vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
toys.exitval = (int) (s != BC_STATUS_ERROR ? BC_STATUS_SUCCESS : s);
|
toys.exitval = (int) (s != BC_STATUS_ERROR ? BC_STATUS_SUCCESS : s);
|
||||||
|
Loading…
Reference in New Issue
Block a user