Hello.
I would like to start changing all the const u_char*'s used to accept
arbitrary pointers into const void*'s.
>From a C standpoint this is a transperant change but if the library is
used from C++ then it is possible that the user provides a conversion to
u_char* and a conversion to something-else* and in that case the change
will break the user code.
Example of class that will break:
class Foo {
public:
operator const u_char*() const; // Support Net-SNMP
operator const int*() const;
};
Could this go into 5.5 or should I await 5.6 or even 6.0?
Note that the patch is the first of many and only changes the set_var
and add_var functions. I do not perform the cleanus that are made
possible by them here and I have not yet handled other similar
functions.
/MF
Index: clean/include/net-snmp/library/snmp_api.h
===================================================================
--- clean.orig/include/net-snmp/library/snmp_api.h 2008-05-25 07:11:39.000000000 +0200
+++ clean/include/net-snmp/library/snmp_api.h 2008-05-25 07:12:36.000000000 +0200
@@ -784,14 +784,14 @@
void snmp_store(const char *type);
void snmp_shutdown(const char *type);
netsnmp_variable_list *snmp_pdu_add_variable(netsnmp_pdu *, const oid *,
- size_t, u_char, const u_char *,
+ size_t, u_char, const void *,
size_t);
netsnmp_variable_list *snmp_varlist_add_variable(netsnmp_variable_list
** varlist,
const oid * name,
size_t name_length,
u_char type,
- const u_char * value,
+ const void * value,
size_t len);
int snmp_add_var(netsnmp_pdu *, const oid *, size_t, char,
const char *);
Index: clean/include/net-snmp/library/snmp_client.h
===================================================================
--- clean.orig/include/net-snmp/library/snmp_client.h 2008-05-25 07:11:39.000000000 +0200
+++ clean/include/net-snmp/library/snmp_client.h 2008-05-25 07:12:36.000000000 +0200
@@ -49,13 +49,13 @@
};
int snmp_set_var_value(netsnmp_variable_list *,
- const u_char *, size_t);
+ const void *, size_t);
int snmp_set_var_objid(netsnmp_variable_list * vp,
const oid * objid,
size_t name_length);
int snmp_set_var_typed_value(netsnmp_variable_list *
newvar, u_char type,
- const u_char * val_str,
+ const void * val_str,
size_t val_len);
int snmp_set_var_typed_integer(netsnmp_variable_list * newvar,
u_char type, long val);
Index: clean/snmplib/snmp_api.c
===================================================================
--- clean.orig/snmplib/snmp_api.c 2008-05-25 07:11:39.000000000 +0200
+++ clean/snmplib/snmp_api.c 2008-05-25 07:12:36.000000000 +0200
@@ -3970,7 +3970,7 @@
* return the appropriate error counter
*/
snmp_pdu_add_variable(pdu, err_var, err_var_len,
- ASN_COUNTER, (u_char *) & ltmp, sizeof(ltmp));
+ ASN_COUNTER, & ltmp, sizeof(ltmp));
return SNMPERR_SUCCESS;
} /* end snmpv3_make_report() */
@@ -6692,7 +6692,7 @@
snmp_pdu_add_variable(netsnmp_pdu *pdu,
const oid * name,
size_t name_length,
- u_char type, const u_char * value, size_t len)
+ u_char type, const void * value, size_t len)
{
return snmp_varlist_add_variable(&pdu->variables, name, name_length,
type, value, len);
@@ -6706,7 +6706,7 @@
snmp_varlist_add_variable(netsnmp_variable_list ** varlist,
const oid * name,
size_t name_length,
- u_char type, const u_char * value, size_t len)
+ u_char type, const void * value, size_t len)
{
netsnmp_variable_list *vars, *vtmp;
int rc;
@@ -6871,7 +6871,7 @@
break;
#endif /* NETSNMP_DISABLE_MIB_LOADING */
snmp_pdu_add_variable(pdu, name, name_length, ASN_INTEGER,
- (u_char *) & ltmp, sizeof(ltmp));
+ <mp, sizeof(ltmp));
break;
case 'u':
@@ -6885,7 +6885,7 @@
ltmp = strtoul(value, &ecp, 10);
if (*value && !*ecp)
snmp_pdu_add_variable(pdu, name, name_length, ASN_UNSIGNED,
- (u_char *) & ltmp, sizeof(ltmp));
+ <mp, sizeof(ltmp));
else
goto fail;
break;
@@ -6901,7 +6901,7 @@
ltmp = strtoul(value, &ecp, 10);
if (*value && !*ecp)
snmp_pdu_add_variable(pdu, name, name_length, ASN_UINTEGER,
- (u_char *) & ltmp, sizeof(ltmp));
+ <mp, sizeof(ltmp));
else
goto fail;
break;
@@ -6917,7 +6917,7 @@
ltmp = strtoul(value, &ecp, 10);
if (*value && !*ecp)
snmp_pdu_add_variable(pdu, name, name_length, ASN_COUNTER,
- (u_char *) & ltmp, sizeof(ltmp));
+ <mp, sizeof(ltmp));
else
goto fail;
break;
@@ -6932,7 +6932,7 @@
#endif /* NETSNMP_DISABLE_MIB_LOADING */
if (read64(&c64tmp, value))
snmp_pdu_add_variable(pdu, name, name_length, ASN_COUNTER64,
- (u_char *) & c64tmp, sizeof(c64tmp));
+ &c64tmp, sizeof(c64tmp));
else
goto fail;
break;
@@ -6948,7 +6948,7 @@
ltmp = strtoul(value, &ecp, 10);
if (*value && !*ecp)
snmp_pdu_add_variable(pdu, name, name_length, ASN_TIMETICKS,
- (u_char *) & ltmp, sizeof(long));
+ <mp, sizeof(long));
else
goto fail;
break;
@@ -6964,7 +6964,7 @@
atmp = inet_addr(value);
if (atmp != (in_addr_t) -1 || !strcmp(value, "255.255.255.255"))
snmp_pdu_add_variable(pdu, name, name_length, ASN_IPADDRESS,
- (u_char *) & atmp, sizeof(atmp));
+ &atmp, sizeof(atmp));
else
goto fail;
break;
@@ -6982,9 +6982,8 @@
} else {
tint = MAX_OID_LEN;
if (snmp_parse_oid(value, (oid *) buf, &tint)) {
- snmp_pdu_add_variable(pdu, name, name_length,
- ASN_OBJECT_ID, buf,
- sizeof(oid) * tint);
+ snmp_pdu_add_variable(pdu, name, name_length, ASN_OBJECT_ID,
+ buf, sizeof(oid) * tint);
} else {
result = snmp_errno; /*MTCRITICAL_RESOURCE */
}
@@ -7002,8 +7001,8 @@
}
if ('s' == type && do_hint && !parse_octet_hint(tp->hint, value, &hintptr, &itmp)) {
if (_check_range(tp, itmp, &result, "Value does not match DISPLAY-HINT")) {
- snmp_pdu_add_variable(pdu, name, name_length,
- ASN_OCTET_STR, hintptr, itmp);
+ snmp_pdu_add_variable(pdu, name, name_length, ASN_OCTET_STR,
+ hintptr, itmp);
}
SNMP_FREE(hintptr);
hintptr = buf;
@@ -7115,7 +7114,7 @@
case 'U':
if (read64(&c64tmp, value))
snmp_pdu_add_variable(pdu, name, name_length, ASN_OPAQUE_U64,
- (u_char *) & c64tmp, sizeof(c64tmp));
+ &c64tmp, sizeof(c64tmp));
else
goto fail;
break;
@@ -7123,7 +7122,7 @@
case 'I':
if (read64(&c64tmp, value))
snmp_pdu_add_variable(pdu, name, name_length, ASN_OPAQUE_I64,
- (u_char *) & c64tmp, sizeof(c64tmp));
+ &c64tmp, sizeof(c64tmp));
else
goto fail;
break;
@@ -7131,16 +7130,15 @@
case 'F':
if (sscanf(value, "%f", &ftmp) == 1)
snmp_pdu_add_variable(pdu, name, name_length, ASN_OPAQUE_FLOAT,
- (u_char *) & ftmp, sizeof(ftmp));
+ &ftmp, sizeof(ftmp));
else
goto fail;
break;
case 'D':
if (sscanf(value, "%lf", &dtmp) == 1)
- snmp_pdu_add_variable(pdu, name, name_length,
- ASN_OPAQUE_DOUBLE, (u_char *) & dtmp,
- sizeof(dtmp));
+ snmp_pdu_add_variable(pdu, name, name_length, ASN_OPAQUE_DOUBLE,
+ &dtmp, sizeof(dtmp));
else
goto fail;
break;
Index: clean/snmplib/snmp_client.c
===================================================================
--- clean.orig/snmplib/snmp_client.c 2008-05-25 07:11:39.000000000 +0200
+++ clean/snmplib/snmp_client.c 2008-05-25 07:12:36.000000000 +0200
@@ -689,7 +689,7 @@
int
snmp_set_var_typed_value(netsnmp_variable_list * newvar, u_char type,
- const u_char * val_str, size_t val_len)
+ const void * val_str, size_t val_len)
{
newvar->type = type;
return snmp_set_var_value(newvar, val_str, val_len);
@@ -699,9 +699,8 @@
snmp_set_var_typed_integer(netsnmp_variable_list * newvar,
u_char type, long val)
{
- const long v = val;
newvar->type = type;
- return snmp_set_var_value(newvar, (const u_char *)&v, sizeof(long));
+ return snmp_set_var_value(newvar, &val, sizeof(long));
}
int
@@ -755,7 +754,7 @@
int
snmp_set_var_value(netsnmp_variable_list * vars,
- const u_char * value, size_t len)
+ const void * value, size_t len)
{
int largeval = 1;
@@ -854,7 +853,9 @@
= (const char *) value;
*(vars->val.integer) = (long) *val_char;
} else {
- *(vars->val.integer) = (unsigned long) *value;
+ const u_char *val_uchar
+ = (const u_char *) value;
+ *(vars->val.integer) = (unsigned long) *val_uchar;
}
}
else {
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders