summaryrefslogtreecommitdiff
path: root/src/lib/xdr.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/xdr.cc')
-rw-r--r--src/lib/xdr.cc59
1 files changed, 30 insertions, 29 deletions
diff --git a/src/lib/xdr.cc b/src/lib/xdr.cc
index 180bff0..10d265f 100644
--- a/src/lib/xdr.cc
+++ b/src/lib/xdr.cc
@@ -1,6 +1,5 @@
#include "lib/xdr.h"
-
void XDRWriter::put(uint32_t number)
{
*buffer++ = ((number >> 24) & 0xffU);
@@ -69,30 +68,38 @@ void XDRWriter::put(double number)
put(v.i);
}
-void XDRWriter::put(char const *data){
- if (!is_fixed_length) {
+void XDRWriter::put(char const *data)
+{
+ if (!is_fixed_length)
+ {
put(next_array_len);
}
uint32_t i;
- for (i = 0; i < next_array_len; i++) {
+ for (i = 0; i < next_array_len; i++)
+ {
*buffer++ = data[i];
}
- while ((i++) % 4 != 0){
+ while ((i++) % 4 != 0)
+ {
*buffer++ = 0;
}
pos += i;
}
-template<uint32_t TSize>
-void XDRWriter::put(char const (&data)[TSize]){
- if (!is_fixed_length) {
+template <uint32_t TSize>
+void XDRWriter::put(char const (&data)[TSize])
+{
+ if (!is_fixed_length)
+ {
put(TSize);
}
uint32_t i;
- for (i = 0; i < TSize; i++) {
+ for (i = 0; i < TSize; i++)
+ {
*buffer++ = data[i];
}
- while ((i++) % 4 != 0){
+ while ((i++) % 4 != 0)
+ {
*buffer++ = 0;
}
pos += i;
@@ -100,37 +107,28 @@ void XDRWriter::put(char const (&data)[TSize]){
uint32_t XDRReader::get_uint32()
{
- uint32_t ret = ((uint8_t)data[pos]<<24) | ((uint8_t)data[pos+1]<<16)
- | ((uint8_t)data[pos+2]<<8) | (uint8_t)data[pos+3];
+ uint32_t ret = (((uint32_t)data[pos] & 0xffU) << 24) | (((uint32_t)data[pos + 1] & 0xffU) << 16) | (((uint32_t)data[pos + 2] & 0xffU) << 8) | ((uint32_t)data[pos + 3] & 0xffU);
pos += 4;
return ret;
}
int32_t XDRReader::get_int32()
{
- int32_t ret = (data[pos]<<24) | (data[pos+1]<<16) | (data[pos+2]<<8) | data[pos+3];
+ int32_t ret = (((int32_t)data[pos] & 0xff) << 24) | (((int32_t)data[pos + 1] & 0xff) << 16) | (((int32_t)data[pos + 2] & 0xff) << 8) | ((int32_t)data[pos + 3] & 0xff);
pos += 4;
return ret;
}
uint64_t XDRReader::get_uint64()
{
- uint64_t ret0 = ((uint8_t)data[pos]<<24) | ((uint8_t)data[pos+1]<<16)
- | ((uint8_t)data[pos+2]<<8) | (uint8_t)data[pos+3];
- pos += 4;
- uint64_t ret1 = ((uint8_t)data[pos]<<24) | ((uint8_t)data[pos+1]<<16)
- | ((uint8_t)data[pos+2]<<8) | (uint8_t)data[pos+3];
- pos += 4;
- return (ret0 << 32) | ret1;
+ uint64_t ret = (((uint64_t)data[pos] & 0xffU) << 56) | (((uint64_t)data[pos + 1] & 0xffU) << 48) | (((uint64_t)data[pos + 2] & 0xffU) << 40) | (((uint64_t)data[pos + 3] & 0xffU) << 32) | (((uint64_t)data[pos + 4] & 0xffU) << 24) | (((uint64_t)data[pos + 5] & 0xffU) << 16) | (((uint64_t)data[pos + 6] & 0xffU) << 8) | ((uint64_t)data[pos + 7] & 0xffU);
+ return ret;
}
int64_t XDRReader::get_int64()
{
- int64_t ret0 = (data[pos]<<24) | (data[pos+1]<<16) | (data[pos+2]<<8) | data[pos+3];
- pos += 4;
- int64_t ret1 = (data[pos]<<24) | (data[pos+1]<<16) | (data[pos+2]<<8) | data[pos+3];
- pos += 4;
- return (ret0 << 32) | ret1;
+ int64_t ret = (((int64_t)data[pos] & 0xff) << 56) | (((int64_t)data[pos + 1] & 0xff) << 48) | (((int64_t)data[pos + 2] & 0xff) << 40) | (((int64_t)data[pos + 3] & 0xff) << 32) | (((int64_t)data[pos + 4] & 0xff) << 24) | (((int64_t)data[pos + 5] & 0xff) << 16) | (((int64_t)data[pos + 6] & 0xff) << 8) | ((int64_t)data[pos + 7] & 0xff);
+ return ret;
}
float XDRReader::get_float()
@@ -166,22 +164,25 @@ char *XDRReader::get_opaque(uint32_t length)
{
char *ret = data + pos;
pos += length;
- if (length % 4) {
+ if (length % 4)
+ {
pos += 4 - (length % 4);
}
return ret;
}
-void XDRReader::get_string(char* target)
+void XDRReader::get_string(char *target)
{
uint16_t length = get_opaque_length();
uint16_t i;
- for (i = 0; i < length; i++) {
+ for (i = 0; i < length; i++)
+ {
target[i] = data[pos + i];
}
target[i] = 0;
pos += length;
- if (length % 4) {
+ if (length % 4)
+ {
pos += 4 - (length % 4);
}
}