summaryrefslogtreecommitdiff
path: root/librabbitmq
diff options
context:
space:
mode:
authorTony Garnock-Jones <tonyg@kcbbs.gen.nz>2009-04-26 23:56:23 +0100
committerTony Garnock-Jones <tonyg@kcbbs.gen.nz>2009-04-26 23:56:23 +0100
commite954a0bf0d30c21b5563db2fd07e5d85d076edc2 (patch)
treee260702b2a6782499cbc92b67cfbca2e439cc41a /librabbitmq
parente4614ed78b85be70a6bd973a857205c4b7dcd639 (diff)
downloadrabbitmq-c-github-ask-e954a0bf0d30c21b5563db2fd07e5d85d076edc2.tar.gz
Avoid stomping on flags during content properties encoding.
Diffstat (limited to 'librabbitmq')
-rw-r--r--librabbitmq/codegen.py23
1 files changed, 14 insertions, 9 deletions
diff --git a/librabbitmq/codegen.py b/librabbitmq/codegen.py
index 9f6cde0..0967119 100644
--- a/librabbitmq/codegen.py
+++ b/librabbitmq/codegen.py
@@ -329,15 +329,20 @@ int amqp_encode_properties(uint16_t class_id,
similarity of structure between classes */
amqp_flags_t flags = * (amqp_flags_t *) decoded; /* cheating! */
- do {
- amqp_flags_t remainder = flags >> 16;
- uint16_t partial_flags = flags & 0xFFFE;
- if (remainder != 0) { partial_flags |= 1; }
- E_16(encoded, offset, partial_flags);
- offset += 2;
- flags = remainder;
- } while (flags != 0);
-
+ {
+ /* We take a copy of flags to avoid destroying it, as it is used
+ in the autogenerated code below. */
+ amqp_flags_t remaining_flags = flags;
+ do {
+ amqp_flags_t remainder = remaining_flags >> 16;
+ uint16_t partial_flags = remaining_flags & 0xFFFE;
+ if (remainder != 0) { partial_flags |= 1; }
+ E_16(encoded, offset, partial_flags);
+ offset += 2;
+ remaining_flags = remainder;
+ } while (remaining_flags != 0);
+ }
+
switch (class_id) {"""
for c in spec.allClasses(): genEncodeProperties(c)
print """ default: return -ENOENT;