Serialisation Support Functions
John Walker
+
+ Version $Id$
*/
/*
- Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
+ Copyright (C) 2000-2004 Kern Sibbald and John Walker
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
}
+/* serial_btime -- Serialise an btime_t 64 bit integer. */
+
+void serial_btime(uint8_t * * const ptr, const btime_t v)
+{
+ if (htonl(1) == 1L) {
+ memcpy(*ptr, &v, sizeof(btime_t));
+ } else {
+ int i;
+ uint8_t rv[sizeof(btime_t)];
+ uint8_t *pv = (uint8_t *) &v;
+
+ for (i = 0; i < 8; i++) {
+ rv[i] = pv[7 - i];
+ }
+ memcpy(*ptr, &rv, sizeof(btime_t));
+ }
+ *ptr += sizeof(btime_t);
+}
+
+
+
/* serial_float64 -- Serialise a 64 bit IEEE floating point number.
This code assumes that the host floating point
format is IEEE and that floating point quantities
*ptr += sizeof(float64_t);
}
-int serial_string(uint8_t * const ptr, char * const str)
+void serial_string(uint8_t * * const ptr, const char * const str)
{
- int len = strlen((const char *) str) + 1;
- memcpy(ptr, str, len);
- return len;
+ int len = strlen(str) + 1;
+
+ memcpy(*ptr, str, len);
+ *ptr += len;
}
return ntohl(vo);
}
-/* unserial_int64 -- Unserialise a signed 64 bit integer. */
+/* unserial_uint64 -- Unserialise an unsigned 64 bit integer. */
-int64_t unserial_int64(uint8_t * * const ptr)
+uint64_t unserial_uint64(uint8_t * * const ptr)
{
- int64_t v;
+ uint64_t v;
if (htonl(1) == 1L) {
- memcpy(&v, *ptr, sizeof(int64_t));
+ memcpy(&v, *ptr, sizeof(uint64_t));
} else {
int i;
- uint8_t rv[sizeof(int64_t)];
+ uint8_t rv[sizeof(uint64_t)];
uint8_t *pv = (uint8_t *) &v;
- memcpy(&v, *ptr, sizeof(int64_t));
+ memcpy(&v, *ptr, sizeof(uint64_t));
for (i = 0; i < 8; i++) {
rv[i] = pv[7 - i];
}
- memcpy(&v, &rv, sizeof(int64_t));
+ memcpy(&v, &rv, sizeof(uint64_t));
}
- *ptr += sizeof(int64_t);
+ *ptr += sizeof(uint64_t);
return v;
}
-/* unserial_uint64 -- Unserialise an unsigned 64 bit integer. */
+/* unserial_btime -- Unserialise a btime_t 64 bit integer. */
-uint64_t unserial_uint64(uint8_t * * const ptr)
+btime_t unserial_btime(uint8_t * * const ptr)
{
- uint64_t v;
+ btime_t v;
if (htonl(1) == 1L) {
- memcpy(&v, *ptr, sizeof(uint64_t));
+ memcpy(&v, *ptr, sizeof(btime_t));
} else {
int i;
- uint8_t rv[sizeof(uint64_t)];
+ uint8_t rv[sizeof(btime_t)];
uint8_t *pv = (uint8_t *) &v;
- memcpy(&v, *ptr, sizeof(uint64_t));
+ memcpy(&v, *ptr, sizeof(btime_t));
for (i = 0; i < 8; i++) {
rv[i] = pv[7 - i];
}
- memcpy(&v, &rv, sizeof(uint64_t));
+ memcpy(&v, &rv, sizeof(btime_t));
}
- *ptr += sizeof(uint64_t);
+ *ptr += sizeof(btime_t);
return v;
}
+
/* unserial_float64 -- Unserialise a 64 bit IEEE floating point number.
This code assumes that the host floating point
format is IEEE and that floating point quantities
return v;
}
-int unserial_string(uint8_t * const ptr, char * const str)
+void unserial_string(uint8_t * * const ptr, char * const str)
{
- int len = strlen((char *)ptr) + 1;
- memcpy(str, ptr, len);
- return len;
+ int len = strlen((char *) *ptr) + 1;
+ memcpy(str, (char *) *ptr, len);
+ *ptr += len;
}