Dont just cast *enum_t to *uint32_t
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Thu, 5 Jul 2012 11:13:04 +0000 (21:13 +1000)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Thu, 5 Jul 2012 11:13:04 +0000 (21:13 +1000)
go via a temporary variable in case these scalars are different size

include/libnfs-zdr.h
lib/libnfs-zdr.c

index 4962a4b6bc986881730cb7556f815f005e31f639..c5794b6eca098ab55204f7199999fbdcf584729a 100644 (file)
@@ -231,7 +231,7 @@ bool_t libnfs_zdr_u_quad_t(ZDR *zdrs, uint64_t *u);
 bool_t libnfs_zdr_quad_t(ZDR *zdrs, int64_t *i);
 
 #define zdr_enum libnfs_zdr_enum
-bool_t libnfs_zdr_enum(ZDR *zdrs, int32_t *e);
+bool_t libnfs_zdr_enum(ZDR *zdrs, enum_t *e);
 
 #define zdr_bool libnfs_zdr_bool
 bool_t libnfs_zdr_bool(ZDR *zdrs, bool_t *b);
index fd80a8d1c7f33e3c853378008c2bbcdcb2cff41f..8a60491cfc6f3a9309fcbc587676aaba8731933a 100644 (file)
@@ -160,9 +160,15 @@ bool_t libnfs_zdr_bytes(ZDR *zdrs, char **bufp, uint32_t *size, uint32_t maxsize
 }
 
 
-bool_t libnfs_zdr_enum(ZDR *zdrs, int32_t *e)
+bool_t libnfs_zdr_enum(ZDR *zdrs, enum_t *e)
 {
-       return libnfs_zdr_u_int(zdrs, (uint32_t *)e);
+       bool_t ret;
+       int32_t i = *e;
+
+       ret = libnfs_zdr_u_int(zdrs, (uint32_t *)&i);
+       *e = i;
+
+       return ret;     
 }
 
 bool_t libnfs_zdr_bool(ZDR *zdrs, bool_t *b)