mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-10 04:50:37 -04:00
a few more bug fixes
svn:r177
This commit is contained in:
parent
2813f1b0f1
commit
32acc283c8
1
event.h
1
event.h
@ -296,6 +296,7 @@ void evtag_test(void);
|
|||||||
int evtag_unmarshal(struct evbuffer *src, uint8_t *ptag, struct evbuffer *dst);
|
int evtag_unmarshal(struct evbuffer *src, uint8_t *ptag, struct evbuffer *dst);
|
||||||
int evtag_peek(struct evbuffer *evbuf, uint8_t *ptag);
|
int evtag_peek(struct evbuffer *evbuf, uint8_t *ptag);
|
||||||
int evtag_peek_length(struct evbuffer *evbuf, uint32_t *plength);
|
int evtag_peek_length(struct evbuffer *evbuf, uint32_t *plength);
|
||||||
|
int evtag_payload_length(struct evbuffer *evbuf, uint32_t *plength);
|
||||||
int evtag_consume(struct evbuffer *evbuf);
|
int evtag_consume(struct evbuffer *evbuf);
|
||||||
|
|
||||||
int evtag_unmarshal_int(struct evbuffer *evbuf, uint8_t need_tag,
|
int evtag_unmarshal_int(struct evbuffer *evbuf, uint8_t need_tag,
|
||||||
|
@ -260,12 +260,13 @@ class Struct:
|
|||||||
'evtag_marshal_%s(struct evbuffer *evbuf, uint8_t tag, '
|
'evtag_marshal_%s(struct evbuffer *evbuf, uint8_t tag, '
|
||||||
'const struct %s *msg)\n' % (self._name, self._name) +
|
'const struct %s *msg)\n' % (self._name, self._name) +
|
||||||
'{\n'
|
'{\n'
|
||||||
' if (_buf == NULL)\n'
|
' struct evbuffer *_buf = evbuffer_new();\n'
|
||||||
' _buf = evbuffer_new();\n'
|
' assert(_buf != NULL);\n'
|
||||||
' evbuffer_drain(_buf, -1);\n'
|
' evbuffer_drain(_buf, -1);\n'
|
||||||
' %s_marshal(_buf, msg);\n' % self._name +
|
' %s_marshal(_buf, msg);\n' % self._name +
|
||||||
' evtag_marshal(evbuf, tag, EVBUFFER_DATA(_buf), '
|
' evtag_marshal(evbuf, tag, EVBUFFER_DATA(_buf), '
|
||||||
'EVBUFFER_LENGTH(_buf));\n'
|
'EVBUFFER_LENGTH(_buf));\n'
|
||||||
|
' evbuffer_free(_buf);\n'
|
||||||
'}\n' )
|
'}\n' )
|
||||||
|
|
||||||
class Entry:
|
class Entry:
|
||||||
@ -438,9 +439,13 @@ class EntryBytes(Entry):
|
|||||||
def CodeUnmarshal(self, buf, tag_name, var_name):
|
def CodeUnmarshal(self, buf, tag_name, var_name):
|
||||||
code = [ 'if (evtag_unmarshal_fixed(%s, %s, ' % (buf, tag_name) +
|
code = [ 'if (evtag_unmarshal_fixed(%s, %s, ' % (buf, tag_name) +
|
||||||
'%s->%s_data, ' % (var_name, self._name) +
|
'%s->%s_data, ' % (var_name, self._name) +
|
||||||
'sizeof(%s->%s_data)) == -1)' % (
|
'sizeof(%s->%s_data)) == -1) {' % (
|
||||||
var_name, self._name),
|
var_name, self._name),
|
||||||
' return (-1);' ]
|
' event_warnx("%%s: failed to unmarshal %s", __func__);' % (
|
||||||
|
self._name ),
|
||||||
|
' return (-1);',
|
||||||
|
'}'
|
||||||
|
]
|
||||||
return code
|
return code
|
||||||
|
|
||||||
def CodeMarshal(self, buf, tag_name, var_name):
|
def CodeMarshal(self, buf, tag_name, var_name):
|
||||||
@ -477,9 +482,12 @@ class EntryInt(Entry):
|
|||||||
self._ctype = 'uint32_t'
|
self._ctype = 'uint32_t'
|
||||||
|
|
||||||
def CodeUnmarshal(self, buf, tag_name, var_name):
|
def CodeUnmarshal(self, buf, tag_name, var_name):
|
||||||
code = ['if (evtag_unmarshal_int(%s, %s, &%s->%s_data) == -1)' % (
|
code = ['if (evtag_unmarshal_int(%s, %s, &%s->%s_data) == -1) {' % (
|
||||||
buf, tag_name, var_name, self._name),
|
buf, tag_name, var_name, self._name),
|
||||||
' return (-1);']
|
' event_warnx("%%s: failed to unmarshal %s", __func__);' % (
|
||||||
|
self._name ),
|
||||||
|
' return (-1);',
|
||||||
|
'}' ]
|
||||||
return code
|
return code
|
||||||
|
|
||||||
def CodeMarshal(self, buf, tag_name, var_name):
|
def CodeMarshal(self, buf, tag_name, var_name):
|
||||||
@ -516,9 +524,13 @@ class EntryString(Entry):
|
|||||||
return code
|
return code
|
||||||
|
|
||||||
def CodeUnmarshal(self, buf, tag_name, var_name):
|
def CodeUnmarshal(self, buf, tag_name, var_name):
|
||||||
code = ['if (evtag_unmarshal_string(%s, %s, &%s->%s_data) == -1)' % (
|
code = ['if (evtag_unmarshal_string(%s, %s, &%s->%s_data) == -1) {' % (
|
||||||
buf, tag_name, var_name, self._name),
|
buf, tag_name, var_name, self._name),
|
||||||
' return (-1);']
|
' event_warnx("%%s: failed to unmarshal %s", __func__);' % (
|
||||||
|
self._name ),
|
||||||
|
' return (-1);',
|
||||||
|
'}'
|
||||||
|
]
|
||||||
return code
|
return code
|
||||||
|
|
||||||
def CodeMarshal(self, buf, tag_name, var_name):
|
def CodeMarshal(self, buf, tag_name, var_name):
|
||||||
@ -650,9 +662,13 @@ class EntryStruct(Entry):
|
|||||||
var_name, self._name, self._refname),
|
var_name, self._name, self._refname),
|
||||||
'if (%s->%s_data == NULL)' % (var_name, self._name),
|
'if (%s->%s_data == NULL)' % (var_name, self._name),
|
||||||
' return (-1);',
|
' return (-1);',
|
||||||
'if (evtag_unmarshal_%s(%s, %s, %s->%s_data) == -1)' % (
|
'if (evtag_unmarshal_%s(%s, %s, %s->%s_data) == -1) {' % (
|
||||||
self._refname, buf, tag_name, var_name, self._name),
|
self._refname, buf, tag_name, var_name, self._name),
|
||||||
' return (-1);']
|
' event_warnx("%%s: failed to unmarshal %s", __func__);' % (
|
||||||
|
self._name ),
|
||||||
|
' return (-1);',
|
||||||
|
'}'
|
||||||
|
]
|
||||||
return code
|
return code
|
||||||
|
|
||||||
def CodeMarshal(self, buf, tag_name, var_name):
|
def CodeMarshal(self, buf, tag_name, var_name):
|
||||||
@ -741,16 +757,20 @@ class EntryVarBytes(Entry):
|
|||||||
return code
|
return code
|
||||||
|
|
||||||
def CodeUnmarshal(self, buf, tag_name, var_name):
|
def CodeUnmarshal(self, buf, tag_name, var_name):
|
||||||
code = ['if (evtag_peek_length(%s, &%s->%s_length) == -1)' % (
|
code = ['if (evtag_payload_length(%s, &%s->%s_length) == -1)' % (
|
||||||
buf, var_name, self._name),
|
buf, var_name, self._name),
|
||||||
' return (-1);',
|
' return (-1);',
|
||||||
'if ((%s->%s_data = malloc(%s->%s_length)) == NULL)' % (
|
'if ((%s->%s_data = malloc(%s->%s_length)) == NULL)' % (
|
||||||
var_name, self._name, var_name, self._name),
|
var_name, self._name, var_name, self._name),
|
||||||
' return (-1);',
|
' return (-1);',
|
||||||
'if (evtag_unmarshal_fixed(%s, %s, %s->%s_data, '
|
'if (evtag_unmarshal_fixed(%s, %s, %s->%s_data, '
|
||||||
'%s->%s_length) == -1)' % (
|
'%s->%s_length) == -1) {' % (
|
||||||
buf, tag_name, var_name, self._name, var_name, self._name),
|
buf, tag_name, var_name, self._name, var_name, self._name),
|
||||||
' return (-1);']
|
' event_warnx("%%s: failed to unmarshal %s", __func__);' % (
|
||||||
|
self._name ),
|
||||||
|
' return (-1);',
|
||||||
|
'}'
|
||||||
|
]
|
||||||
return code
|
return code
|
||||||
|
|
||||||
def CodeMarshal(self, buf, tag_name, var_name):
|
def CodeMarshal(self, buf, tag_name, var_name):
|
||||||
@ -1058,8 +1078,6 @@ def BodyPreamble(name):
|
|||||||
pre += 'void event_errx(int eval, const char *fmt, ...);\n'
|
pre += 'void event_errx(int eval, const char *fmt, ...);\n'
|
||||||
pre += 'void event_warnx(const char *fmt, ...);\n\n'
|
pre += 'void event_warnx(const char *fmt, ...);\n\n'
|
||||||
|
|
||||||
pre += 'static struct evbuffer *_buf;\n\n'
|
|
||||||
|
|
||||||
return pre
|
return pre
|
||||||
|
|
||||||
def main(argv):
|
def main(argv):
|
||||||
|
@ -209,6 +209,26 @@ evtag_peek_length(struct evbuffer *evbuf, uint32_t *plength)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
evtag_payload_length(struct evbuffer *evbuf, uint32_t *plength)
|
||||||
|
{
|
||||||
|
struct evbuffer tmp;
|
||||||
|
int res;
|
||||||
|
|
||||||
|
if (EVBUFFER_LENGTH(evbuf) < 2)
|
||||||
|
return (-1);
|
||||||
|
|
||||||
|
tmp = *evbuf;
|
||||||
|
tmp.buffer += 1;
|
||||||
|
tmp.off -= 1;
|
||||||
|
|
||||||
|
res = decode_int_internal(plength, &tmp, 0);
|
||||||
|
if (res == -1)
|
||||||
|
return (-1);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
evtag_consume(struct evbuffer *evbuf)
|
evtag_consume(struct evbuffer *evbuf)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user