[openib-general] Re:[PATCH] OpenSM/st.c: Fix some size_t issues related to memoryallocation in st.c

Yael Kalka yael at mellanox.co.il
Sun Feb 19 04:24:31 PST 2006


Hi Hal,

The patch in general is fine. I've added one change to the original
patch - to avoid casting issues underwindows
Below is the full patch.

Yael

Signed-off-by:  Hal Rosenstock <halr at voltaire.com>

Index: include/opensm/st.h ===================================================================
--- include/opensm/st.h	(revision 5436)
+++ include/opensm/st.h	(working copy)
@@ -40,6 +40,8 @@
 #ifndef ST_INCLUDED
 #define ST_INCLUDED
 
+#include <stdlib.h>
+
 #ifdef __cplusplus
 #  define BEGIN_C_DECLS extern "C" {
 #  define END_C_DECLS   }
@@ -79,11 +81,11 @@ struct st_table {
 enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE};
 
 st_table *st_init_table(struct st_hash_type *);
-st_table *st_init_table_with_size(struct st_hash_type *, int);
+st_table *st_init_table_with_size(struct st_hash_type *, size_t);
 st_table *st_init_numtable(void);
-st_table *st_init_numtable_with_size(int);
+st_table *st_init_numtable_with_size(size_t);
 st_table *st_init_strtable(void);
-st_table *st_init_strtable_with_size(int);
+st_table *st_init_strtable_with_size(size_t);
 int st_delete(st_table *, st_data_t *, st_data_t *);
 int st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t);  int st_insert(st_table *, st_data_t, st_data_t);

Index: opensm/st.c 
===================================================================
--- opensm/st.c	(revision 5436)
+++ opensm/st.c	(working copy)
@@ -42,7 +42,6 @@
 #endif /* HAVE_CONFIG_H */
 
 #include <stdio.h>
-#include <stdlib.h>
 #include <string.h>
 #include <opensm/st.h>
 
@@ -102,17 +101,11 @@ static struct st_hash_type type_strhash 
 #define xcalloc  calloc
 #define xrealloc realloc
 #define xfree    free
-#if 0
-void *xmalloc(long);
-void *xcalloc(long, long);
-void *xrealloc(void *, long);
-void xfree(void *);
-#endif
 
 static void rehash(st_table *);
 
-#define alloc(type) (type*)xmalloc((unsigned)sizeof(type))
-#define Calloc(n,s) (char*)xcalloc((n),(s))
+#define alloc(type) (type*)xmalloc(sizeof(type))
+#define Calloc(n,s) (char*)xcalloc((n), (s))
 
 #define EQUAL(table,x,y) ((x)==(y) || (*table->type->compare)(((void*)x),((void *)y)) == 0)
 
@@ -200,7 +193,7 @@ stat_col()
 st_table*
 st_init_table_with_size(type, size)
      struct st_hash_type *type;
-     int size;
+     size_t size;
 {
   st_table *tbl;
 
@@ -238,7 +231,7 @@ st_init_numtable(void)
 
 st_table*
 st_init_numtable_with_size(size)
-     int size;
+     size_t size;
 {
   return st_init_table_with_size(&type_numhash, size);
 }
@@ -251,7 +244,7 @@ st_init_strtable(void)
 
 st_table*
 st_init_strtable_with_size(size)
-     int size;
+     size_t size;
 {
   return st_init_table_with_size(&type_strhash, size);
 }
@@ -314,7 +307,8 @@ st_lookup(table, key, value)
     return 0;
   }
   else {
-    if (value != 0)  *value = ptr->record;
+    if (value != 0)
+      *value = ptr->record;
     return 1;
   }
 }
@@ -407,7 +401,8 @@ st_copy(old_table)
 {
   st_table *new_table;
   st_table_entry *ptr, *entry;
-  int i, num_bins = old_table->num_bins;
+  int i;
+  size_t num_bins = old_table->num_bins;
 
   new_table = alloc(st_table);
   if (new_table == 0)
@@ -417,7 +412,7 @@ st_copy(old_table)
 
   *new_table = *old_table;
   new_table->bins = (st_table_entry**)
-    Calloc((unsigned)num_bins, sizeof(st_table_entry*));
+    Calloc(num_bins, sizeof(st_table_entry*));
 
   if (new_table->bins == 0)
   {
@@ -524,7 +519,7 @@ st_delete_safe(table, key, value, never)
 }
 
 static int
-delete_never( st_data_t key, st_data_t value, st_data_t never)
+delete_never(st_data_t key, st_data_t value, st_data_t never)
 {
   if (value == never) return ST_DELETE;
   return ST_CONTINUE;






More information about the general mailing list