#include <ei.h>
#include <expat.h>
-#define EI_ENCODE_STRING_BUG
-
-#ifdef EI_ENCODE_STRING_BUG
-
-/*
- * Workaround for EI encode_string bug
- */
-
-#define put8(s,n) do { \
- (s)[0] = (char)((n) & 0xff); \
- (s) += 1; \
-} while (0)
-
-#define put16be(s,n) do { \
- (s)[0] = ((n) >> 8) & 0xff; \
- (s)[1] = (n) & 0xff; \
- (s) += 2; \
-} while (0)
-
-#define put32be(s,n) do { \
- (s)[0] = ((n) >> 24) & 0xff; \
- (s)[1] = ((n) >> 16) & 0xff; \
- (s)[2] = ((n) >> 8) & 0xff; \
- (s)[3] = (n) & 0xff; \
- (s) += 4; \
-} while (0)
-
-int ei_encode_string_len_fixed(char *buf, int *index, const char *p, int len)
-{
- char *s = buf + *index;
- char *s0 = s;
- int i;
-
- if (len <= 0xffff) {
- if (!buf) s += 3;
- else {
- put8(s,ERL_STRING_EXT);
- put16be(s,len);
- memmove(s,p,len); /* unterminated string */
- }
- s += len;
- }
- else {
- if (!buf) s += 6 + (2*len);
- else {
- /* strings longer than 65535 are encoded as lists */
- put8(s,ERL_LIST_EXT);
- put32be(s,len);
-
- for (i=0; i<len; i++) {
- put8(s,ERL_SMALL_INTEGER_EXT);
- put8(s,p[i]);
- }
-
- put8(s,ERL_NIL_EXT);
- }
- }
-
- *index += s-s0;
-
- return 0;
-}
-
-int ei_encode_string_fixed(char *buf, int *index, const char *p)
-{
- return ei_encode_string_len_fixed(buf, index, p, strlen(p));
-}
-
-int ei_x_encode_string_len_fixed(ei_x_buff* x, const char* s, int len)
-{
- int i = x->index;
- ei_encode_string_len_fixed(NULL, &i, s, len);
- if (!x_fix_buff(x, i))
- return -1;
- return ei_encode_string_len_fixed(x->buff, &x->index, s, len);
-}
-
-int ei_x_encode_string_fixed(ei_x_buff* x, const char* s)
-{
- return ei_x_encode_string_len_fixed(x, s, strlen(s));
-}
-
-#else
-
-#define ei_encode_string_len_fixed(buf, index, p, len) \
- ei_encode_string_len(buf, index, p, len)
-#define ei_encode_string_fixed(buf, index, p) \
- ei_encode_string(buf, index, p)
-#define ei_x_encode_string_len_fixed(x, s, len) \
- ei_x_encode_string_len(x, s, len)
-#define ei_x_encode_string_fixed(x, s) \
- ei_x_encode_string(x, s)
-
-#endif
#define XML_START 0
#define XML_END 1
ei_x_encode_tuple_header(&event_buf, 2);
ei_x_encode_long(&event_buf, XML_START);
ei_x_encode_tuple_header(&event_buf, 2);
- ei_x_encode_string_fixed(&event_buf, name);
+ ei_x_encode_string(&event_buf, name);
for (i = 0; atts[i]; i += 2) {}
for (i = 0; atts[i]; i += 2)
{
ei_x_encode_tuple_header(&event_buf, 2);
- ei_x_encode_string_fixed(&event_buf, atts[i]);
- ei_x_encode_string_fixed(&event_buf, atts[i+1]);
+ ei_x_encode_string(&event_buf, atts[i]);
+ ei_x_encode_string(&event_buf, atts[i+1]);
}
}
ei_x_encode_list_header(&event_buf, 1);
ei_x_encode_tuple_header(&event_buf, 2);
ei_x_encode_long(&event_buf, XML_END);
- ei_x_encode_string_fixed(&event_buf, name);
+ ei_x_encode_string(&event_buf, name);
return NULL;
}
ei_x_encode_long(&event_buf, XML_ERROR);
ei_x_encode_tuple_header(&event_buf, 2);
ei_x_encode_long(&event_buf, errcode);
- ei_x_encode_string_fixed(&event_buf, errstring);
+ ei_x_encode_string(&event_buf, errstring);
}
ei_x_encode_empty_list(&event_buf);