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));
+                              &ltmp, 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));
+                                  &ltmp, 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));
+                                  &ltmp, 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));
+                                  &ltmp, 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));
+                                  &ltmp, 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

Reply via email to