]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/lib/serial/SerialActiveMessageP.nc
Merge TinyOS 2.1.1 into master.
[tinyos-2.x.git] / tos / lib / serial / SerialActiveMessageP.nc
index 17ceb6b33c150d79bebf48a3a7cbce9f037aa514..7bdc56382c65d5716fcff5c5d799098ab8a5955c 100644 (file)
@@ -46,8 +46,8 @@ generic module SerialActiveMessageP () {
 }
 implementation {
 
-  serial_header_t* getHeader(message_t* msg) {
-    return (serial_header_t*)(msg->data - sizeof(serial_header_t));
+  serial_header_t* ONE getHeader(message_t* ONE msg) {
+    return TCAST(serial_header_t* ONE, (uint8_t*)msg + offsetof(message_t, data) - sizeof(serial_header_t));
   }
 
   serial_metadata_t* getMetadata(message_t* msg) {
@@ -58,6 +58,11 @@ implementation {
                                          message_t* msg,
                                          uint8_t len) {
     serial_header_t* header = getHeader(msg);
+
+    if (len > call Packet.maxPayloadLength()) {
+      return ESIZE;
+    }
+
     header->dest = dest;
     // Do not set the source address or group, as doing so
     // prevents transparent bridging. Need a better long-term
@@ -121,7 +126,7 @@ implementation {
       return NULL;
     }
     else {
-      return msg->data;
+      return (void * COUNT_NOK(len))msg->data;
     }
   }