I sent this patch back on 05 May 2000, constifying crypto/lhash.
-------------------------------------------------------------------------------
Note that this is a special case where you send data to the lhash
library to be stored; I declared that data to be const void* since the
lhash library doesn't modify it. However, to avoid having to cast the
results of the lhash data retrieval functions I cast the data back to
plain void* when it's returned.
This is similar to standard C functions which take a const char*, for
example, and return a char* that points into the string. IMHO this is a
legitimate reason to cast away const, and that the "const" notation on
the arguments to lhash is useful for self-documentation purposes, at
the least.
Hope you find this useful.
Index: lhash/lh_stats.c
===================================================================
RCS file: /global/.builds/psmith/ssh/cvs/openssl/crypto/lhash/lh_stats.c,v
retrieving revision 1.3
diff -u -B -b -r1.3 lh_stats.c
--- lh_stats.c 1999/04/23 22:11:09 1.3
+++ lh_stats.c 2000/05/04 17:46:22
@@ -67,7 +67,7 @@
#ifndef HEADER_BIO_H
-void lh_stats(LHASH *lh, FILE *out)
+void lh_stats(const LHASH *lh, FILE *out)
{
fprintf(out,"num_items = %lu\n",lh->num_items);
fprintf(out,"num_nodes = %u\n",lh->num_nodes);
@@ -93,7 +93,7 @@
#endif
}
-void lh_node_stats(LHASH *lh, FILE *out)
+void lh_node_stats(const LHASH *lh, FILE *out)
{
LHASH_NODE *n;
unsigned int i,num;
@@ -106,7 +106,7 @@
}
}
-void lh_node_usage_stats(LHASH *lh, FILE *out)
+void lh_node_usage_stats(const LHASH *lh, FILE *out)
{
LHASH_NODE *n;
unsigned long num;
@@ -136,7 +136,7 @@
#else
#ifndef NO_FP_API
-void lh_stats(LHASH *lh, FILE *fp)
+void lh_stats(const LHASH *lh, FILE *fp)
{
BIO *bp;
@@ -148,7 +148,7 @@
end:;
}
-void lh_node_stats(LHASH *lh, FILE *fp)
+void lh_node_stats(const LHASH *lh, FILE *fp)
{
BIO *bp;
@@ -160,7 +160,7 @@
end:;
}
-void lh_node_usage_stats(LHASH *lh, FILE *fp)
+void lh_node_usage_stats(const LHASH *lh, FILE *fp)
{
BIO *bp;
@@ -174,7 +174,7 @@
#endif
-void lh_stats_bio(LHASH *lh, BIO *out)
+void lh_stats_bio(const LHASH *lh, BIO *out)
{
char buf[128];
@@ -222,7 +222,7 @@
#endif
}
-void lh_node_stats_bio(LHASH *lh, BIO *out)
+void lh_node_stats_bio(const LHASH *lh, BIO *out)
{
LHASH_NODE *n;
unsigned int i,num;
@@ -237,7 +237,7 @@
}
}
-void lh_node_usage_stats_bio(LHASH *lh, BIO *out)
+void lh_node_usage_stats_bio(const LHASH *lh, BIO *out)
{
LHASH_NODE *n;
unsigned long num;
Index: lhash/lhash.c
===================================================================
RCS file: /global/.builds/psmith/ssh/cvs/openssl/crypto/lhash/lhash.c,v
retrieving revision 1.16
diff -u -B -b -r1.16 lhash.c
--- lhash.c 2000/03/18 15:18:27 1.16
+++ lhash.c 2000/05/04 17:48:09
@@ -109,7 +109,7 @@
static void expand(LHASH *lh);
static void contract(LHASH *lh);
-static LHASH_NODE **getrn(LHASH *lh, void *data, unsigned long *rhash);
+static LHASH_NODE **getrn(LHASH *lh, const void *data, unsigned long *rhash);
LHASH *lh_new(unsigned long (*h)(), int (*c)())
{
@@ -176,7 +176,7 @@
Free(lh);
}
-void *lh_insert(LHASH *lh, void *data)
+void *lh_insert(LHASH *lh, const void *data)
{
unsigned long hash;
LHASH_NODE *nn,**rn;
@@ -207,14 +207,14 @@
}
else /* replace same key */
{
- ret= (*rn)->data;
+ ret= (void *)(*rn)->data;
(*rn)->data=data;
lh->num_replace++;
}
return(ret);
}
-void *lh_delete(LHASH *lh, void *data)
+void *lh_delete(LHASH *lh, const void *data)
{
unsigned long hash;
LHASH_NODE *nn,**rn;
@@ -232,7 +232,7 @@
{
nn= *rn;
*rn=nn->next;
- ret=nn->data;
+ ret=(void *)nn->data;
Free(nn);
lh->num_delete++;
}
@@ -245,7 +245,7 @@
return(ret);
}
-void *lh_retrieve(LHASH *lh, void *data)
+void *lh_retrieve(LHASH *lh, const void *data)
{
unsigned long hash;
LHASH_NODE **rn;
@@ -261,7 +261,7 @@
}
else
{
- ret= (*rn)->data;
+ ret= (void *)(*rn)->data;
lh->num_retrieve++;
}
return(ret);
@@ -388,7 +388,7 @@
}
}
-static LHASH_NODE **getrn(LHASH *lh, void *data, unsigned long *rhash)
+static LHASH_NODE **getrn(LHASH *lh, const void *data, unsigned long *rhash)
{
LHASH_NODE **ret,*n1;
unsigned long hash,nn;
@@ -455,7 +455,7 @@
return((ret>>16)^ret);
}
-unsigned long lh_num_items(LHASH *lh)
+unsigned long lh_num_items(const LHASH *lh)
{
return lh ? lh->num_items : 0;
}
Index: lhash/lhash.h
===================================================================
RCS file: /global/.builds/psmith/ssh/cvs/openssl/crypto/lhash/lhash.h,v
retrieving revision 1.7
diff -u -B -b -r1.7 lhash.h
--- lhash.h 2000/05/02 12:15:40 1.7
+++ lhash.h 2000/05/04 17:48:10
@@ -73,7 +73,7 @@
typedef struct lhash_node_st
{
- void *data;
+ const void *data;
struct lhash_node_st *next;
#ifndef NO_HASH_COMP
unsigned long hash;
@@ -118,24 +118,24 @@
LHASH *lh_new(unsigned long (*h)(/* void *a */), int (*c)(/* void *a,void *b */));
void lh_free(LHASH *lh);
-void *lh_insert(LHASH *lh, void *data);
-void *lh_delete(LHASH *lh, void *data);
-void *lh_retrieve(LHASH *lh, void *data);
+void *lh_insert(LHASH *lh, const void *data);
+void *lh_delete(LHASH *lh, const void *data);
+void *lh_retrieve(LHASH *lh, const void *data);
void lh_doall(LHASH *lh, void (*func)(/*void *b*/));
void lh_doall_arg(LHASH *lh, void (*func)(/*void *a,void *b*/),void *arg);
unsigned long lh_strhash(const char *c);
-unsigned long lh_num_items(LHASH *lh);
+unsigned long lh_num_items(const LHASH *lh);
#ifndef NO_FP_API
-void lh_stats(LHASH *lh, FILE *out);
-void lh_node_stats(LHASH *lh, FILE *out);
-void lh_node_usage_stats(LHASH *lh, FILE *out);
+void lh_stats(const LHASH *lh, FILE *out);
+void lh_node_stats(const LHASH *lh, FILE *out);
+void lh_node_usage_stats(const LHASH *lh, FILE *out);
#endif
#ifdef HEADER_BIO_H
-void lh_stats_bio(LHASH *lh, BIO *out);
-void lh_node_stats_bio(LHASH *lh, BIO *out);
-void lh_node_usage_stats_bio(LHASH *lh, BIO *out);
+void lh_stats_bio(const LHASH *lh, BIO *out);
+void lh_node_stats_bio(const LHASH *lh, BIO *out);
+void lh_node_usage_stats_bio(const LHASH *lh, BIO *out);
#endif
#ifdef __cplusplus
}
--
-------------------------------------------------------------------------------
Paul D. Smith <[EMAIL PROTECTED]> Find some GNU make tips at:
http://www.gnu.org http://www.paulandlesley.org/gmake/
"Please remain calm...I may be mad, but I am a professional." --Mad Scientist
______________________________________________________________________
OpenSSL Project http://www.openssl.org
Development Mailing List [EMAIL PROTECTED]
Automated List Manager [EMAIL PROTECTED]