summaryrefslogtreecommitdiff
path: root/src/common/endianness.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2010-12-31 11:49:34 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2010-12-31 11:49:34 (GMT)
commit651c94450df8619c26e26a133289dbaa197616f4 (patch)
tree1a81a2625687116d205cb5c6583497cb657f8460 /src/common/endianness.c
parentdbec8e8af5f296f0b95cd9c07e7d96b1a4277137 (diff)
Supported a first basic packet of the Java Debug Wire Protocol.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@204 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/common/endianness.c')
-rwxr-xr-xsrc/common/endianness.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/common/endianness.c b/src/common/endianness.c
index 0b7e192..15ca52a 100755
--- a/src/common/endianness.c
+++ b/src/common/endianness.c
@@ -25,6 +25,7 @@
#include <stdarg.h>
+#include <string.h>
@@ -323,6 +324,94 @@ bool read_u64(uint64_t *target, const bin_t *data, off_t *pos, off_t len, Source
}
+
+
+
+
+
+/******************************************************************************
+* *
+* Paramètres : value = source de la valeur à transcrire. *
+* size = taille de cette source de données. *
+* data = flux de données à modifier. [OUT] *
+* pos = position courante dans ce flux. [OUT] *
+* len = taille totale des données à analyser. *
+* endian = ordre des bits dans la source. *
+* *
+* Description : Ecrit un nombre non signé sur n octets. *
+* *
+* Retour : Bilan de l'opération : true en cas de succès, false sinon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool _write_un(const bin_t *value, size_t size, bin_t *data, off_t *pos, off_t len, SourceEndian endian)
+{
+ size_t i; /* Boucle de parcours */
+
+ if (*pos < 0) return false;
+ if ((len - *pos) < size) return false;
+
+ switch (endian)
+ {
+ case SRE_LITTLE:
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+
+ memcpy(&data[*pos], value, size);
+ (*pos) += size;
+
+#elif __BYTE_ORDER == __BIG_ENDIAN
+
+ for (i = 0; i < size; i++, (*pos)++)
+ *(data + *pos) = *(value + size - i - 1);
+
+#else
+
+# error "TODO : PDP !"
+
+#endif
+
+ break;
+
+ case SRE_MIDDLE:
+ return false; /* TODO ! */
+ break;
+
+ case SRE_BIG:
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+
+ for (i = 0; i < size; i++, (*pos)++)
+ *(data + *pos) = *(value + size - i - 1);
+
+#elif __BYTE_ORDER == __BIG_ENDIAN
+
+ memcpy(&data[*pos], value, size);
+ (*pos) += size;
+
+#else
+
+# error "TODO : PDP !"
+
+#endif
+
+ break;
+
+ }
+
+ return true;
+
+}
+
+
+
+
+
+
+
+
/******************************************************************************
* *
* Paramètres : target = lieu d'enregistrement de la lecture. [OUT] *