When encoding, and compiling with -DUSE_VALGRIND, explicitly get valgrind to check...
authorKen Raeburn <raeburn@mit.edu>
Tue, 20 Jan 2009 23:49:08 +0000 (23:49 +0000)
committerKen Raeburn <raeburn@mit.edu>
Tue, 20 Jan 2009 23:49:08 +0000 (23:49 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@21766 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/rpc/xdr.c

index ec0d27717ff6cf71de7ce5b9c1eed03e74bb7830..417786572c46bba86325cf6a317f67ccf29405d5 100644 (file)
@@ -54,6 +54,10 @@ static char sccsid[] = "@(#)xdr.c 1.35 87/08/12";
 #define XDR_TRUE       ((long) 1)
 #define LASTUNSIGNED   ((u_int) 0-1)
 
+#ifdef USE_VALGRIND
+#include <valgrind/memcheck.h>
+#endif
+
 /*
  * for unit alignment
  */
@@ -93,6 +97,9 @@ xdr_int(XDR *xdrs, int *ip)
        switch (xdrs->x_op) {
 
        case XDR_ENCODE:
+#ifdef USE_VALGRIND
+               VALGRIND_CHECK_DEFINED(*ip);
+#endif
                if (*ip > 0x7fffffffL || *ip < -0x7fffffffL - 1L)
                        return (FALSE);
 
@@ -126,6 +133,9 @@ xdr_u_int(XDR *xdrs, u_int *up)
        switch (xdrs->x_op) {
 
        case XDR_ENCODE:
+#ifdef USE_VALGRIND
+               VALGRIND_CHECK_DEFINED(*up);
+#endif
                if (*up > 0xffffffffUL)
                        return (FALSE);
 
@@ -158,6 +168,9 @@ xdr_long(XDR *xdrs, long *lp)
 
        switch (xdrs->x_op) {
        case XDR_ENCODE:
+#ifdef USE_VALGRIND
+               VALGRIND_CHECK_DEFINED(*lp);
+#endif
                if (*lp > 0x7fffffffL || *lp < -0x7fffffffL - 1L)
                        return (FALSE);
 
@@ -181,6 +194,9 @@ xdr_u_long(XDR *xdrs, u_long *ulp)
 
        switch (xdrs->x_op) {
        case XDR_ENCODE:
+#ifdef USE_VALGRIND
+               VALGRIND_CHECK_DEFINED(*ulp);
+#endif
                if (*ulp > 0xffffffffUL)
                        return (FALSE);
 
@@ -206,6 +222,9 @@ xdr_short(register XDR *xdrs, short *sp)
        switch (xdrs->x_op) {
 
        case XDR_ENCODE:
+#ifdef USE_VALGRIND
+               VALGRIND_CHECK_DEFINED(*sp);
+#endif
                l = (long) *sp;
                return (XDR_PUTLONG(xdrs, &l));
 
@@ -236,6 +255,9 @@ xdr_u_short(register XDR *xdrs, u_short *usp)
        switch (xdrs->x_op) {
 
        case XDR_ENCODE:
+#ifdef USE_VALGRIND
+               VALGRIND_CHECK_DEFINED(*usp);
+#endif
                l = (u_long) *usp;
                return (XDR_PUTLONG(xdrs, (long *) &l));
 
@@ -261,6 +283,15 @@ xdr_char(XDR *xdrs, char *cp)
 {
        int i;
 
+#ifdef USE_VALGRIND
+       switch (xdrs->x_op) {
+       case XDR_ENCODE:
+               VALGRIND_CHECK_DEFINED(*cp);
+               break;
+       default:
+               break;
+       }
+#endif
        i = (*cp);
        if (!xdr_int(xdrs, &i)) {
                return (FALSE);
@@ -277,6 +308,15 @@ xdr_u_char(XDR *xdrs, u_char *cp)
 {
        u_int u;
 
+#ifdef USE_VALGRIND
+       switch (xdrs->x_op) {
+       case XDR_ENCODE:
+               VALGRIND_CHECK_DEFINED(*cp);
+               break;
+       default:
+               break;
+       }
+#endif
        u = (*cp);
        if (!xdr_u_int(xdrs, &u)) {
                return (FALSE);
@@ -296,6 +336,9 @@ xdr_bool(register XDR *xdrs, bool_t *bp)
        switch (xdrs->x_op) {
 
        case XDR_ENCODE:
+#ifdef USE_VALGRIND
+               VALGRIND_CHECK_DEFINED(*bp);
+#endif
                lb = *bp ? XDR_TRUE : XDR_FALSE;
                return (XDR_PUTLONG(xdrs, &lb));
 
@@ -324,6 +367,15 @@ xdr_enum(XDR *xdrs, enum_t *ep)
        /*
         * enums are treated as ints
         */
+#ifdef USE_VALGRIND
+       switch (xdrs->x_op) {
+       case XDR_ENCODE:
+               VALGRIND_CHECK_DEFINED(*ep);
+               break;
+       default:
+               break;
+       }
+#endif
        if (sizeof (enum sizecheck) == sizeof (long)) {
                return (xdr_long(xdrs, (long *)ep));
        } else if (sizeof (enum sizecheck) == sizeof (int)) {
@@ -373,6 +425,9 @@ xdr_opaque(XDR *xdrs, caddr_t cp, u_int cnt)
        }
 
        if (xdrs->x_op == XDR_ENCODE) {
+#ifdef USE_VALGRIND
+               VALGRIND_CHECK_READABLE((volatile void *)cp, cnt);
+#endif
                if (!XDR_PUTBYTES(xdrs, cp, cnt)) {
                        return (FALSE);
                }
@@ -463,6 +518,9 @@ xdr_int32(XDR *xdrs, int32_t *ip)
        switch (xdrs->x_op) {
 
        case XDR_ENCODE:
+#ifdef USE_VALGRIND
+               VALGRIND_CHECK_DEFINED(*ip);
+#endif
                l = *ip;
                return (xdr_long(xdrs, &l));    
 
@@ -487,6 +545,9 @@ xdr_u_int32(XDR *xdrs, uint32_t *up)
        switch (xdrs->x_op) {
 
        case XDR_ENCODE:
+#ifdef USE_VALGRIND
+               VALGRIND_CHECK_DEFINED(*up);
+#endif
                ul = *up;
                return (xdr_u_long(xdrs, &ul));