mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
(bitsetv_alloc, bitsetv_create, bitsetv_free,
bitsetv_zero, bitsetv_ones, bitsetv_transitive_closure, bitsetv_reflexive_transitive_closure): Use bitset_bindex, not int or unsigned int or size_t, to count bits. (bitsetv_alloc): Use size_t, not unsigned int, to count bytes. (bitsetv_dump, debug_bitsetv): Use bitset_windex instead of unsigned int. Use proper printf formats for widths of integer types. (bitsetv_alloc): Check for arithmetic overflow when computing sizes.
This commit is contained in:
@@ -30,17 +30,21 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|||||||
type TYPE. */
|
type TYPE. */
|
||||||
bitset *
|
bitset *
|
||||||
bitsetv_alloc (n_vecs, n_bits, type)
|
bitsetv_alloc (n_vecs, n_bits, type)
|
||||||
unsigned int n_vecs;
|
bitset_bindex n_vecs;
|
||||||
unsigned int n_bits;
|
bitset_bindex n_bits;
|
||||||
enum bitset_type type;
|
enum bitset_type type;
|
||||||
{
|
{
|
||||||
unsigned int vector_bytes;
|
size_t vector_bytes;
|
||||||
unsigned int bytes;
|
size_t bytes;
|
||||||
bitset *bsetv;
|
bitset *bsetv;
|
||||||
unsigned int i;
|
bitset_bindex i;
|
||||||
|
|
||||||
/* Determine number of bytes for each set. */
|
/* Determine number of bytes for each set. */
|
||||||
bytes = bitset_bytes (type, n_bits);
|
bytes = bitset_bytes (type, n_bits);
|
||||||
|
|
||||||
|
/* If size calculation overflows, memory is exhausted. */
|
||||||
|
if (BITSET_SIZE_MAX / (sizeof (bitset) + bytes) <= n_vecs)
|
||||||
|
xalloc_die ();
|
||||||
|
|
||||||
/* Allocate vector table at head of bitset array. */
|
/* Allocate vector table at head of bitset array. */
|
||||||
vector_bytes = (n_vecs + 1) * sizeof (bitset);
|
vector_bytes = (n_vecs + 1) * sizeof (bitset);
|
||||||
@@ -63,8 +67,8 @@ bitsetv_alloc (n_vecs, n_bits, type)
|
|||||||
attribute hints specified by ATTR. */
|
attribute hints specified by ATTR. */
|
||||||
bitset *
|
bitset *
|
||||||
bitsetv_create (n_vecs, n_bits, attr)
|
bitsetv_create (n_vecs, n_bits, attr)
|
||||||
unsigned int n_vecs;
|
bitset_bindex n_vecs;
|
||||||
unsigned int n_bits;
|
bitset_bindex n_bits;
|
||||||
unsigned int attr;
|
unsigned int attr;
|
||||||
{
|
{
|
||||||
enum bitset_type type;
|
enum bitset_type type;
|
||||||
@@ -79,7 +83,7 @@ void
|
|||||||
bitsetv_free (bsetv)
|
bitsetv_free (bsetv)
|
||||||
bitset *bsetv;
|
bitset *bsetv;
|
||||||
{
|
{
|
||||||
unsigned int i;
|
bitset_bindex i;
|
||||||
|
|
||||||
for (i = 0; bsetv[i]; i++)
|
for (i = 0; bsetv[i]; i++)
|
||||||
BITSET_FREE_ (bsetv[i]);
|
BITSET_FREE_ (bsetv[i]);
|
||||||
@@ -92,7 +96,7 @@ void
|
|||||||
bitsetv_zero (bsetv)
|
bitsetv_zero (bsetv)
|
||||||
struct bitset_struct **bsetv;
|
struct bitset_struct **bsetv;
|
||||||
{
|
{
|
||||||
unsigned int i;
|
bitset_bindex i;
|
||||||
|
|
||||||
for (i = 0; bsetv[i]; i++)
|
for (i = 0; bsetv[i]; i++)
|
||||||
bitset_zero (bsetv[i]);
|
bitset_zero (bsetv[i]);
|
||||||
@@ -104,7 +108,7 @@ void
|
|||||||
bitsetv_ones (bsetv)
|
bitsetv_ones (bsetv)
|
||||||
bitset *bsetv;
|
bitset *bsetv;
|
||||||
{
|
{
|
||||||
unsigned int i;
|
bitset_bindex i;
|
||||||
|
|
||||||
for (i = 0; bsetv[i]; i++)
|
for (i = 0; bsetv[i]; i++)
|
||||||
bitset_ones (bsetv[i]);
|
bitset_ones (bsetv[i]);
|
||||||
@@ -117,8 +121,8 @@ void
|
|||||||
bitsetv_transitive_closure (bsetv)
|
bitsetv_transitive_closure (bsetv)
|
||||||
bitset *bsetv;
|
bitset *bsetv;
|
||||||
{
|
{
|
||||||
unsigned int i;
|
bitset_bindex i;
|
||||||
unsigned int j;
|
bitset_bindex j;
|
||||||
|
|
||||||
for (i = 0; bsetv[i]; i++)
|
for (i = 0; bsetv[i]; i++)
|
||||||
for (j = 0; bsetv[j]; j++)
|
for (j = 0; bsetv[j]; j++)
|
||||||
@@ -134,7 +138,7 @@ bitsetv_transitive_closure (bsetv)
|
|||||||
void
|
void
|
||||||
bitsetv_reflexive_transitive_closure (bitsetv bsetv)
|
bitsetv_reflexive_transitive_closure (bitsetv bsetv)
|
||||||
{
|
{
|
||||||
int i;
|
bitset_bindex i;
|
||||||
|
|
||||||
bitsetv_transitive_closure (bsetv);
|
bitsetv_transitive_closure (bsetv);
|
||||||
for (i = 0; bsetv[i]; i++)
|
for (i = 0; bsetv[i]; i++)
|
||||||
@@ -150,12 +154,12 @@ bitsetv_dump (file, title, subtitle, bsetv)
|
|||||||
const char *title, *subtitle;
|
const char *title, *subtitle;
|
||||||
bitset *bsetv;
|
bitset *bsetv;
|
||||||
{
|
{
|
||||||
unsigned int i;
|
bitset_windex i;
|
||||||
|
|
||||||
fprintf (file, "%s\n", title);
|
fprintf (file, "%s\n", title);
|
||||||
for (i = 0; bsetv[i]; i++)
|
for (i = 0; bsetv[i]; i++)
|
||||||
{
|
{
|
||||||
fprintf (file, "%s %d\n", subtitle, i);
|
fprintf (file, "%s %lu\n", subtitle, (unsigned long) i);
|
||||||
bitset_dump (file, bsetv[i]);
|
bitset_dump (file, bsetv[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,11 +171,11 @@ void
|
|||||||
debug_bitsetv (bsetv)
|
debug_bitsetv (bsetv)
|
||||||
bitset *bsetv;
|
bitset *bsetv;
|
||||||
{
|
{
|
||||||
unsigned int i;
|
bitset_windex i;
|
||||||
|
|
||||||
for (i = 0; bsetv[i]; i++)
|
for (i = 0; bsetv[i]; i++)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "%d: ", i);
|
fprintf (stderr, "%lu: ", (unsigned long) i);
|
||||||
debug_bitset (bsetv[i]);
|
debug_bitset (bsetv[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user