Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 721566 | Differences between
and this patch

Collapse All | Expand All

(-)a/gen_allocdefs.h (-6 / +22 lines)
Lines 4-27 Link Here
4
#define GEN_ALLOC_ready(ta,type,field,len,a,i,n,x,base,ta_ready) \
4
#define GEN_ALLOC_ready(ta,type,field,len,a,i,n,x,base,ta_ready) \
5
int ta_ready(x,n) register ta *x; register unsigned int n; \
5
int ta_ready(x,n) register ta *x; register unsigned int n; \
6
{ register unsigned int i; \
6
{ register unsigned int i; \
7
  unsigned int nlen; \
7
  if (x->field) { \
8
  if (x->field) { \
8
    i = x->a; \
9
    i = x->a; \
9
    if (n > i) { \
10
    if (n > i) { \
10
      x->a = base + n + (n >> 3); \
11
      unsigned int nnum; \
11
      if (alloc_re(&x->field,i * sizeof(type),x->a * sizeof(type))) return 1; \
12
      if (__builtin_add_overflow(base, n, &nlen)) \
13
        return 0; \
14
      if (__builtin_add_overflow(nlen, n >> 3, &nlen)) \
15
        return 0; \
16
      if (__builtin_mul_overflow(nlen, sizeof(type), &nnum)) \
17
        return 0; \
18
      x->a = nlen; \
19
      if (alloc_re(&x->field,i * sizeof(type),nnum)) return 1; \
12
      x->a = i; return 0; } \
20
      x->a = i; return 0; } \
13
    return 1; } \
21
    return 1; } \
14
  x->len = 0; \
22
  x->len = 0; \
15
  return !!(x->field = (type *) alloc((x->a = n) * sizeof(type))); }
23
  return !!(x->field = (type *) alloc((x->a = n) * sizeof(type))); }
16
24
17
#define GEN_ALLOC_readyplus(ta,type,field,len,a,i,n,x,base,ta_rplus) \
25
#define GEN_ALLOC_readyplus(ta,type,field,len,a,i,n,x,base,ta_rplus) \
18
int ta_rplus(x,n) register ta *x; register unsigned int n; \
26
int ta_rplus(x,n) register ta *x; unsigned int n; \
19
{ register unsigned int i; \
27
{ register unsigned int i; \
20
  if (x->field) { \
28
  if (x->field) { \
21
    i = x->a; n += x->len; \
29
    i = x->a; n += x->len; \
30
    if (__builtin_add_overflow(n, x->len, &n)) \
31
      return 0; \
22
    if (n > i) { \
32
    if (n > i) { \
23
      x->a = base + n + (n >> 3); \
33
      unsigned int nlen, nnum; \
24
      if (alloc_re(&x->field,i * sizeof(type),x->a * sizeof(type))) return 1; \
34
      if (__builtin_add_overflow(base, n, &nlen)) \
35
        return 0; \
36
      if (__builtin_add_overflow(nlen, n >> 3, &nlen)) \
37
        return 0; \
38
      if (__builtin_mul_overflow(nlen, sizeof(type), &nnum)) \
39
        return 0; \
40
      x->a = nlen; \
41
      if (alloc_re(&x->field,i * sizeof(type),nnum)) return 1; \
25
      x->a = i; return 0; } \
42
      x->a = i; return 0; } \
26
    return 1; } \
43
    return 1; } \
27
  x->len = 0; \
44
  x->len = 0; \
28
- 

Return to bug 721566