OpenCoverage

xalloc.h

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/gnulib/lib/xalloc.h
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8extern _Noreturn void xalloc_die (void);-
9-
10void *xmalloc (size_t s)-
11 __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1)));-
12void *xzalloc (size_t s)-
13 __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1)));-
14void *xcalloc (size_t n, size_t s)-
15 __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2)));-
16void *xrealloc (void *p, size_t s)-
17 __attribute__ ((__alloc_size__ (2)));-
18void *x2realloc (void *p, size_t *pn);-
19void *xmemdup (void const *p, size_t s)-
20 __attribute__ ((__alloc_size__ (2)));-
21char *xstrdup (char const *str)-
22 __attribute__ ((__malloc__));-
23inline void *xnmalloc (size_t n, size_t s)-
24 __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2)));-
25inline void *-
26xnmalloc (size_t n, size_t s)-
27{-
28 if ((
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 15918 times by 20 tests
Evaluated by:
  • chmod
  • df
  • dir
  • head
  • ls
  • mkdir
  • od
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
__builtin_constant_p (n)
__builtin_constant_p (n)Description
TRUEevaluated 2626 times by 5 tests
Evaluated by:
  • dir
  • head
  • ls
  • od
  • vdir
FALSEevaluated 13292 times by 18 tests
Evaluated by:
  • chmod
  • df
  • dir
  • ls
  • mkdir
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
&& __builtin_constant_p (s)
__builtin_constant_p (s)Description
TRUEevaluated 1166 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 1460 times by 2 tests
Evaluated by:
  • head
  • od
? ((size_t) (
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 15918 times by 20 tests
Evaluated by:
  • chmod
  • df
  • dir
  • head
  • ls
  • mkdir
  • od
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
0-15918
29 (9223372036854775807L)
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 15918 times by 20 tests
Evaluated by:
  • chmod
  • df
  • dir
  • head
  • ls
  • mkdir
  • od
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
0-15918
30 <
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 15918 times by 20 tests
Evaluated by:
  • chmod
  • df
  • dir
  • head
  • ls
  • mkdir
  • od
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
0-15918
31 (18446744073709551615UL)
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 15918 times by 20 tests
Evaluated by:
  • chmod
  • df
  • dir
  • head
  • ls
  • mkdir
  • od
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
0-15918
32 ?
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 15918 times by 20 tests
Evaluated by:
  • chmod
  • df
  • dir
  • head
  • ls
  • mkdir
  • od
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
0-15918
33 (9223372036854775807L)
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 15918 times by 20 tests
Evaluated by:
  • chmod
  • df
  • dir
  • head
  • ls
  • mkdir
  • od
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
0-15918
34 :
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 15918 times by 20 tests
Evaluated by:
  • chmod
  • df
  • dir
  • head
  • ls
  • mkdir
  • od
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
0-15918
35 (18446744073709551615UL)
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 15918 times by 20 tests
Evaluated by:
  • chmod
  • df
  • dir
  • head
  • ls
  • mkdir
  • od
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
0-15918
36 - 1) / (s) < (n)) : ({ __xalloc_count_type __xalloc_count; __builtin_mul_overflow (n, s, &__xalloc_count); }))
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 15918 times by 20 tests
Evaluated by:
  • chmod
  • df
  • dir
  • head
  • ls
  • mkdir
  • od
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
)
0-15918
37 xalloc_die ();
never executed: xalloc_die ();
0
38 return
executed 15918 times by 20 tests: return xmalloc (n * s);
Executed by:
  • chmod
  • df
  • dir
  • head
  • ls
  • mkdir
  • od
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
xmalloc (n * s);
executed 15918 times by 20 tests: return xmalloc (n * s);
Executed by:
  • chmod
  • df
  • dir
  • head
  • ls
  • mkdir
  • od
  • paste
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • tail
  • tee
  • tr
  • users
  • vdir
  • wc
15918
39}-
40-
41-
42-
43-
44inline void *xnrealloc (void *p, size_t n, size_t s)-
45 __attribute__ ((__alloc_size__ (2, 3)));-
46inline void *-
47xnrealloc (void *p, size_t n, size_t s)-
48{-
49 if ((
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 780 times by 6 tests
Evaluated by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
__builtin_constant_p (n)
__builtin_constant_p (n)Description
TRUEnever evaluated
FALSEevaluated 780 times by 6 tests
Evaluated by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
&& __builtin_constant_p (s)
__builtin_constant_p (s)Description
TRUEnever evaluated
FALSEnever evaluated
? ((size_t) (
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 780 times by 6 tests
Evaluated by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
0-780
50 (9223372036854775807L)
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 780 times by 6 tests
Evaluated by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
0-780
51 <
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 780 times by 6 tests
Evaluated by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
0-780
52 (18446744073709551615UL)
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 780 times by 6 tests
Evaluated by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
0-780
53 ?
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 780 times by 6 tests
Evaluated by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
0-780
54 (9223372036854775807L)
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 780 times by 6 tests
Evaluated by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
0-780
55 :
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 780 times by 6 tests
Evaluated by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
0-780
56 (18446744073709551615UL)
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 780 times by 6 tests
Evaluated by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
0-780
57 - 1) / (s) < (n)) : ({ __xalloc_count_type __xalloc_count; __builtin_mul_overflow (n, s, &__xalloc_count); }))
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 780 times by 6 tests
Evaluated by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
)
0-780
58 xalloc_die ();
never executed: xalloc_die ();
0
59 return
executed 780 times by 6 tests: return xrealloc (p, n * s);
Executed by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
xrealloc (p, n * s);
executed 780 times by 6 tests: return xrealloc (p, n * s);
Executed by:
  • cp
  • df
  • dir
  • head
  • ls
  • shuf
780
60}-
61inline void *-
62x2nrealloc (void *p, size_t *pn, size_t s)-
63{-
64 size_t n = *pn;-
65-
66 if (! p
! pDescription
TRUEevaluated 8169 times by 24 tests
Evaluated by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
FALSEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
)
245-8169
67 {-
68 if (! n
! nDescription
TRUEevaluated 8144 times by 23 tests
Evaluated by:
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
FALSEevaluated 25 times by 1 test
Evaluated by:
  • chmod
)
25-8144
69 {-
70-
71-
72-
73-
74 enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };-
75-
76 n = DEFAULT_MXFAST / s;-
77 n += !n;-
78 }
executed 8144 times by 23 tests: end of block
Executed by:
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
8144
79 if ((
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 8169 times by 24 tests
Evaluated by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
__builtin_constant_p (n)
__builtin_constant_p (n)Description
TRUEnever evaluated
FALSEevaluated 8169 times by 24 tests
Evaluated by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
&& __builtin_constant_p (s)
__builtin_constant_p (s)Description
TRUEnever evaluated
FALSEnever evaluated
? ((size_t) (
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 8169 times by 24 tests
Evaluated by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
0-8169
80 (9223372036854775807L)
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 8169 times by 24 tests
Evaluated by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
0-8169
81 <
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 8169 times by 24 tests
Evaluated by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
0-8169
82 (18446744073709551615UL)
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 8169 times by 24 tests
Evaluated by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
0-8169
83 ?
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 8169 times by 24 tests
Evaluated by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
0-8169
84 (9223372036854775807L)
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 8169 times by 24 tests
Evaluated by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
0-8169
85 :
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 8169 times by 24 tests
Evaluated by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
0-8169
86 (18446744073709551615UL)
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 8169 times by 24 tests
Evaluated by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
0-8169
87 - 1) / (s) < (n)) : ({ __xalloc_count_type __xalloc_count; __builtin_mul_overflow (n, s, &__xalloc_count); }))
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 8169 times by 24 tests
Evaluated by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
)
0-8169
88 xalloc_die ();
never executed: xalloc_die ();
0
89 }
executed 8169 times by 24 tests: end of block
Executed by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
8169
90 else-
91 {-
92-
93-
94-
95-
96 if ((
( (92233720368...3 * 2 / s <= nDescription
TRUEnever evaluated
FALSEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
0-245
97 (
(9223372036854...73709551615UL)Description
TRUEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
FALSEnever evaluated
9223372036854775807L)
(9223372036854...73709551615UL)Description
TRUEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
FALSEnever evaluated
( (92233720368...3 * 2 / s <= nDescription
TRUEnever evaluated
FALSEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
0-245
98 <
(9223372036854...73709551615UL)Description
TRUEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
FALSEnever evaluated
( (92233720368...3 * 2 / s <= nDescription
TRUEnever evaluated
FALSEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
0-245
99 (18446744073709551615UL)
(9223372036854...73709551615UL)Description
TRUEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
FALSEnever evaluated
( (92233720368...3 * 2 / s <= nDescription
TRUEnever evaluated
FALSEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
0-245
100 ?
( (92233720368...3 * 2 / s <= nDescription
TRUEnever evaluated
FALSEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
0-245
101 (9223372036854775807L)
( (92233720368...3 * 2 / s <= nDescription
TRUEnever evaluated
FALSEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
0-245
102 :
( (92233720368...3 * 2 / s <= nDescription
TRUEnever evaluated
FALSEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
0-245
103 (18446744073709551615UL)
( (92233720368...3 * 2 / s <= nDescription
TRUEnever evaluated
FALSEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
0-245
104 ) / 3 * 2 / s
( (92233720368...3 * 2 / s <= nDescription
TRUEnever evaluated
FALSEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
0-245
105 <= n
( (92233720368...3 * 2 / s <= nDescription
TRUEnever evaluated
FALSEevaluated 245 times by 9 tests
Evaluated by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
)
0-245
106 xalloc_die ();
never executed: xalloc_die ();
0
107 n += n / 2 + 1;-
108 }
executed 245 times by 9 tests: end of block
Executed by:
  • chmod
  • cp
  • csplit
  • pinky
  • ptx
  • sort
  • uniq
  • users
  • who
245
109-
110 *pn = n;-
111 return
executed 8414 times by 24 tests: return xrealloc (p, n * s);
Executed by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
xrealloc (p, n * s);
executed 8414 times by 24 tests: return xrealloc (p, n * s);
Executed by:
  • chmod
  • comm
  • cp
  • csplit
  • cut
  • du
  • expand
  • factor
  • fold
  • join
  • mv
  • nl
  • numfmt
  • od
  • pinky
  • pr
  • ptx
  • sort
  • split
  • tsort
  • unexpand
  • uniq
  • users
  • who
8414
112}-
113-
114-
115-
116-
117inline char *xcharalloc (size_t n)-
118 __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1)));-
119inline char *-
120xcharalloc (size_t n)-
121{-
122 return
executed 203 times by 22 tests: return ((char *) (sizeof (char) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (char))));
Executed by:
  • cat
  • chgrp
  • chown
  • cp
  • date
  • dd
  • dir
  • ginstall
  • ln
  • mktemp
  • mv
  • numfmt
  • od
  • ptx
  • rm
  • seq
  • shred
  • sort
  • touch
  • truncate
  • uniq
  • vdir
((char *) (sizeof (char) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (char))));
executed 203 times by 22 tests: return ((char *) (sizeof (char) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (char))));
Executed by:
  • cat
  • chgrp
  • chown
  • cp
  • date
  • dd
  • dir
  • ginstall
  • ln
  • mktemp
  • mv
  • numfmt
  • od
  • ptx
  • rm
  • seq
  • shred
  • sort
  • touch
  • truncate
  • uniq
  • vdir
203
123}-
124-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.1.2