Przeglądaj źródła

Add support for swab float and double

This uses general swabbin function which is able to swab every byte in
array.

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Reviewed-by: Fabio M. Di Nitto <fdinitto@redhat.com>
Jan Friesse 13 lat temu
rodzic
commit
94d4838b1e
1 zmienionych plików z 22 dodań i 0 usunięć
  1. 22 0
      include/corosync/mar_gen.h

+ 22 - 0
include/corosync/mar_gen.h

@@ -91,6 +91,28 @@ static inline void swab_mar_uint64_t (mar_uint64_t *to_swab)
 	*to_swab = swab64 (*to_swab);
 }
 
+static inline void swabbin(char *data, size_t len)
+{
+	int i;
+	char tmp;
+
+	for (i = 0; i < len / 2; i++) {
+		tmp = data[i];
+		data[i] = data[len - i - 1];
+		data[len - i - 1] = tmp;
+	}
+}
+
+static inline void swabflt(float *flt)
+{
+	swabbin((char *)flt, sizeof(*flt));
+}
+
+static inline void swabdbl(double *dbl)
+{
+	swabbin((char *)dbl, sizeof(*dbl));
+}
+
 typedef struct {
 	mar_uint16_t length __attribute__((aligned(8)));
 	mar_uint8_t value[CS_MAX_NAME_LENGTH] __attribute__((aligned(8)));