On Fri, May 04, 2007 at 08:21:08AM +0200, Wouter Wijngaards wrote: > Hi Harry, > > I looked over your patch. > * perhaps you should have configure detect __inline or inline. Some > platforms do not understand plain 'inline' I believe.
configure.in already calls AC_C_INLINE, which should define "inline" to whatever keyword the compiler uses for that feature, or nothing if it is unsupported. > * the volatile keyword is needed because the signal handler sets this > variable, then wakes up the eventloop. The eventloop reads the variable. > Thus this variable is volatile for the eventloop, since a signal handler > can change it at any time. Could you please add it back. You're right, sorry about that. I didn't realize that variables accessed in a signal handler required "volatile." Here's an updated patch. Harry
Index: http.c =================================================================== --- http.c (revision 353) +++ http.c (working copy) @@ -1569,7 +1569,7 @@ /* Requires that headers and response code are already set up */ -static __inline void +static inline void evhttp_send(struct evhttp_request *req, struct evbuffer *databuf) { struct evhttp_connection *evcon = req->evcon; Index: event_tagging.c =================================================================== --- event_tagging.c (revision 353) +++ event_tagging.c (working copy) @@ -58,7 +58,7 @@ #include "event.h" #include "log.h" -int decode_int(u_int32_t *pnumber, struct evbuffer *evbuf); +int decode_int(uint32_t *pnumber, struct evbuffer *evbuf); static struct evbuffer *_buf; /* not thread safe */ @@ -79,10 +79,10 @@ */ void -encode_int(struct evbuffer *evbuf, u_int32_t number) +encode_int(struct evbuffer *evbuf, uint32_t number) { int off = 1, nibbles = 0; - u_int8_t data[5]; + uint8_t data[5]; memset(data, 0, sizeof(data)); while (number) { @@ -111,8 +111,8 @@ */ void -evtag_marshal(struct evbuffer *evbuf, u_int8_t tag, - const void *data, u_int32_t len) +evtag_marshal(struct evbuffer *evbuf, uint8_t tag, + const void *data, uint32_t len) { evbuffer_add(evbuf, &tag, sizeof(tag)); encode_int(evbuf, len); @@ -121,7 +121,7 @@ /* Marshaling for integers */ void -evtag_marshal_int(struct evbuffer *evbuf, u_int8_t tag, u_int32_t integer) +evtag_marshal_int(struct evbuffer *evbuf, uint8_t tag, uint32_t integer) { evbuffer_drain(_buf, EVBUFFER_LENGTH(_buf)); encode_int(_buf, integer); @@ -132,13 +132,13 @@ } void -evtag_marshal_string(struct evbuffer *buf, u_int8_t tag, const char *string) +evtag_marshal_string(struct evbuffer *buf, uint8_t tag, const char *string) { evtag_marshal(buf, tag, string, strlen(string)); } void -evtag_marshal_timeval(struct evbuffer *evbuf, u_int8_t tag, struct timeval *tv) +evtag_marshal_timeval(struct evbuffer *evbuf, uint8_t tag, struct timeval *tv) { evbuffer_drain(_buf, EVBUFFER_LENGTH(_buf)); @@ -149,11 +149,11 @@ EVBUFFER_LENGTH(_buf)); } -static int __inline -decode_int_internal(u_int32_t *pnumber, struct evbuffer *evbuf, int dodrain) +static int inline +decode_int_internal(uint32_t *pnumber, struct evbuffer *evbuf, int dodrain) { - u_int32_t number = 0; - u_int8_t *data = EVBUFFER_DATA(evbuf); + uint32_t number = 0; + uint8_t *data = EVBUFFER_DATA(evbuf); int len = EVBUFFER_LENGTH(evbuf); int nibbles = 0, off; @@ -184,13 +184,13 @@ } int -decode_int(u_int32_t *pnumber, struct evbuffer *evbuf) +decode_int(uint32_t *pnumber, struct evbuffer *evbuf) { return (decode_int_internal(pnumber, evbuf, 1) == -1 ? -1 : 0); } int -evtag_peek(struct evbuffer *evbuf, u_int8_t *ptag) +evtag_peek(struct evbuffer *evbuf, uint8_t *ptag) { if (EVBUFFER_LENGTH(evbuf) < 2) return (-1); @@ -200,7 +200,7 @@ } int -evtag_peek_length(struct evbuffer *evbuf, u_int32_t *plength) +evtag_peek_length(struct evbuffer *evbuf, uint32_t *plength) { struct evbuffer tmp; int res; @@ -222,7 +222,7 @@ } int -evtag_payload_length(struct evbuffer *evbuf, u_int32_t *plength) +evtag_payload_length(struct evbuffer *evbuf, uint32_t *plength) { struct evbuffer tmp; int res; @@ -244,7 +244,7 @@ int evtag_consume(struct evbuffer *evbuf) { - u_int32_t len; + uint32_t len; evbuffer_drain(evbuf, 1); if (decode_int(&len, evbuf) == -1) return (-1); @@ -256,11 +256,11 @@ /* Reads the data type from an event buffer */ int -evtag_unmarshal(struct evbuffer *src, u_int8_t *ptag, struct evbuffer *dst) +evtag_unmarshal(struct evbuffer *src, uint8_t *ptag, struct evbuffer *dst) { - u_int8_t tag; - u_int32_t len; - u_int32_t integer; + uint8_t tag; + uint32_t len; + uint32_t integer; if (evbuffer_remove(src, &tag, sizeof(tag)) != sizeof(tag)) return (-1); @@ -283,12 +283,12 @@ /* Marshaling for integers */ int -evtag_unmarshal_int(struct evbuffer *evbuf, u_int8_t need_tag, - u_int32_t *pinteger) +evtag_unmarshal_int(struct evbuffer *evbuf, uint8_t need_tag, + uint32_t *pinteger) { - u_int8_t tag; - u_int32_t len; - u_int32_t integer; + uint8_t tag; + uint32_t len; + uint32_t integer; if (evbuffer_remove(evbuf, &tag, sizeof(tag)) != sizeof(tag) || tag != need_tag) @@ -312,10 +312,10 @@ /* Unmarshal a fixed length tag */ int -evtag_unmarshal_fixed(struct evbuffer *src, u_int8_t need_tag, void *data, +evtag_unmarshal_fixed(struct evbuffer *src, uint8_t need_tag, void *data, size_t len) { - u_int8_t tag; + uint8_t tag; /* Initialize this event buffer so that we can read into it */ evbuffer_drain(_buf, EVBUFFER_LENGTH(_buf)); @@ -332,10 +332,10 @@ } int -evtag_unmarshal_string(struct evbuffer *evbuf, u_int8_t need_tag, +evtag_unmarshal_string(struct evbuffer *evbuf, uint8_t need_tag, char **pstring) { - u_int8_t tag; + uint8_t tag; evbuffer_drain(_buf, EVBUFFER_LENGTH(_buf)); @@ -351,11 +351,11 @@ } int -evtag_unmarshal_timeval(struct evbuffer *evbuf, u_int8_t need_tag, +evtag_unmarshal_timeval(struct evbuffer *evbuf, uint8_t need_tag, struct timeval *ptv) { - u_int8_t tag; - u_int32_t integer; + uint8_t tag; + uint32_t integer; evbuffer_drain(_buf, EVBUFFER_LENGTH(_buf)); if (evtag_unmarshal(evbuf, &tag, _buf) == -1 || tag != need_tag) Index: event_rpcgen.py =================================================================== --- event_rpcgen.py (revision 353) +++ event_rpcgen.py (working copy) @@ -82,7 +82,7 @@ self.PrintIdented(file, ' ', dcl) print >>file, '' for entry in self._entries: - print >>file, ' u_int8_t %s_set;' % entry.Name() + print >>file, ' uint8_t %s_set;' % entry.Name() print >>file, '};\n' print >>file, ( @@ -95,9 +95,9 @@ self._name, self._name) + 'int %s_complete(struct %s *);' % (self._name, self._name) ) - print >>file, ('void evtag_marshal_%s(struct evbuffer *, u_int8_t, ' + print >>file, ('void evtag_marshal_%s(struct evbuffer *, uint8_t, ' 'const struct %s *);') % ( self._name, self._name) - print >>file, ('int evtag_unmarshal_%s(struct evbuffer *, u_int8_t, ' + print >>file, ('int evtag_unmarshal_%s(struct evbuffer *, uint8_t, ' 'struct %s *);') % ( self._name, self._name) # Write a setting function of every variable @@ -198,7 +198,7 @@ ' struct evbuffer *evbuf)\n' % ( self._name, self._name) + '{\n' - ' u_int8_t tag;\n' + ' uint8_t tag;\n' ' while (EVBUFFER_LENGTH(evbuf) > 0) {\n' ' if (evtag_peek(evbuf, &tag) == -1)\n' ' return (-1);\n' @@ -247,12 +247,12 @@ # Complete message unmarshaling print >>file, ( 'int\n' - 'evtag_unmarshal_%s(struct evbuffer *evbuf, u_int8_t need_tag, ' + 'evtag_unmarshal_%s(struct evbuffer *evbuf, uint8_t need_tag, ' ' struct %s *msg)' ) % (self._name, self._name) print >>file, ( '{\n' - ' u_int8_t tag;\n' + ' uint8_t tag;\n' ' int res = -1;\n' '\n' ' struct evbuffer *tmp = evbuffer_new();\n' @@ -274,7 +274,7 @@ # Complete message marshaling print >>file, ( 'void\n' - 'evtag_marshal_%s(struct evbuffer *evbuf, u_int8_t tag, ' + 'evtag_marshal_%s(struct evbuffer *evbuf, uint8_t tag, ' 'const struct %s *msg)\n' % (self._name, self._name) + '{\n' ' struct evbuffer *_buf = evbuffer_new();\n' @@ -425,7 +425,7 @@ Entry.__init__(self, type, name, tag) self._length = length - self._ctype = 'u_int8_t' + self._ctype = 'uint8_t' def GetDeclaration(self, funcname): code = [ 'int %s(struct %s *, %s **);' % ( @@ -438,7 +438,7 @@ return code def Declaration(self): - dcl = ['u_int8_t %s_data[%s];' % (self._name, self._length)] + dcl = ['uint8_t %s_data[%s];' % (self._name, self._length)] return dcl @@ -513,7 +513,7 @@ # Init base class Entry.__init__(self, type, name, tag) - self._ctype = 'u_int32_t' + self._ctype = 'uint32_t' def CodeUnmarshal(self, buf, tag_name, var_name): code = ['if (evtag_unmarshal_int(%s, %s, &%s->%s_data) == -1) {' % ( @@ -530,7 +530,7 @@ return code def Declaration(self): - dcl = ['u_int32_t %s_data;' % self._name] + dcl = ['uint32_t %s_data;' % self._name] return dcl @@ -744,15 +744,15 @@ # Init base class Entry.__init__(self, type, name, tag) - self._ctype = 'u_int8_t *' + self._ctype = 'uint8_t *' def GetDeclaration(self, funcname): - code = [ 'int %s(struct %s *, %s *, u_int32_t *);' % ( + code = [ 'int %s(struct %s *, %s *, uint32_t *);' % ( funcname, self._struct.Name(), self._ctype ) ] return code def AssignDeclaration(self, funcname): - code = [ 'int %s(struct %s *, const %s, u_int32_t);' % ( + code = [ 'int %s(struct %s *, const %s, uint32_t);' % ( funcname, self._struct.Name(), self._ctype ) ] return code @@ -760,7 +760,7 @@ name = self._name code = [ 'int', '%s_%s_assign(struct %s *msg, ' - 'const %s value, u_int32_t len)' % ( + 'const %s value, uint32_t len)' % ( self._struct.Name(), name, self._struct.Name(), self._ctype), '{', @@ -779,7 +779,7 @@ def CodeGet(self): name = self._name code = [ 'int', - '%s_%s_get(struct %s *msg, %s *value, u_int32_t *plen)' % ( + '%s_%s_get(struct %s *msg, %s *value, uint32_t *plen)' % ( self._struct.Name(), name, self._struct.Name(), self._ctype), '{', @@ -841,8 +841,8 @@ return code def Declaration(self): - dcl = ['u_int8_t *%s_data;' % self._name, - 'u_int32_t %s_length;' % self._name] + dcl = ['uint8_t *%s_data;' % self._name, + 'uint32_t %s_length;' % self._name] return dcl Index: test/regress.c =================================================================== --- test/regress.c (revision 353) +++ test/regress.c (working copy) @@ -820,7 +820,7 @@ cleanup_test(); } -int decode_int(u_int32_t *pnumber, struct evbuffer *evbuf); +int decode_int(uint32_t *pnumber, struct evbuffer *evbuf); void read_once_cb(int fd, short event, void *arg) @@ -871,10 +871,10 @@ evtag_int_test(void) { struct evbuffer *tmp = evbuffer_new(); - u_int32_t integers[TEST_MAX_INT] = { + uint32_t integers[TEST_MAX_INT] = { 0xaf0, 0x1000, 0x1, 0xdeadbeef, 0x00, 0xbef000 }; - u_int32_t integer; + uint32_t integer; int i; for (i = 0; i < TEST_MAX_INT; i++) { Index: devpoll.c =================================================================== --- devpoll.c (revision 353) +++ devpoll.c (working copy) @@ -28,6 +28,7 @@ #include "config.h" #endif +#include <sys/tree.h> #include <sys/types.h> #include <sys/resource.h> #ifdef HAVE_SYS_TIME_H @@ -47,6 +48,7 @@ #include <assert.h> #include "event.h" +#include "event-internal.h" #include "evsignal.h" #include "log.h" Index: configure.in =================================================================== --- configure.in (revision 353) +++ configure.in (working copy) @@ -37,6 +37,14 @@ dnl Checks for libraries. AC_CHECK_LIB(socket, socket) +dnl Determine required libraries for sockets. This was copied from: +dnl http://autoconf-archive.cryp.to/lib_socket_nsl.html +AC_SEARCH_LIBS([gethostbyname], [nsl]) +AC_SEARCH_LIBS([socket], [socket], [], [ + AC_CHECK_LIB([socket], [socket], [LIBS="-lsocket -lnsl $LIBS"], [], [-lnsl]) +]) +AC_SEARCH_LIBS([inet_aton], [resolv]) + dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(fcntl.h stdarg.h inttypes.h stdint.h poll.h signal.h unistd.h sys/epoll.h sys/time.h sys/queue.h sys/event.h sys/ioctl.h sys/devpoll.h port.h netinet/in6.h) @@ -129,6 +137,7 @@ dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE +AC_C_VOLATILE AC_HEADER_TIME dnl Checks for library functions. @@ -336,10 +345,6 @@ AC_TYPE_PID_T AC_TYPE_SIZE_T -AC_CHECK_TYPE(u_int64_t, unsigned long long) -AC_CHECK_TYPE(u_int32_t, unsigned int) -AC_CHECK_TYPE(u_int16_t, unsigned short) -AC_CHECK_TYPE(u_int8_t, unsigned char) AC_CHECK_TYPES([struct in6_addr], , , [#ifdef WIN32 #include <winsock2.h> Index: evsignal.h =================================================================== --- evsignal.h (revision 353) +++ evsignal.h (working copy) @@ -27,6 +27,8 @@ #ifndef _EVSIGNAL_H_ #define _EVSIGNAL_H_ +#include <signal.h> + struct evsignal_info { struct event_list signalqueue; struct event ev_signal; Index: event.h =================================================================== --- event.h (revision 353) +++ event.h (working copy) @@ -32,6 +32,7 @@ #endif #include <stdarg.h> +#include <stdint.h> #ifdef WIN32 #define WIN32_LEAN_AND_MEAN @@ -300,39 +301,39 @@ void evtag_init(void); -void evtag_marshal(struct evbuffer *evbuf, u_int8_t tag, const void *data, - u_int32_t len); +void evtag_marshal(struct evbuffer *evbuf, uint8_t tag, const void *data, + uint32_t len); -void encode_int(struct evbuffer *evbuf, u_int32_t number); +void encode_int(struct evbuffer *evbuf, uint32_t number); -void evtag_marshal_int(struct evbuffer *evbuf, u_int8_t tag, - u_int32_t integer); +void evtag_marshal_int(struct evbuffer *evbuf, uint8_t tag, + uint32_t integer); -void evtag_marshal_string(struct evbuffer *buf, u_int8_t tag, +void evtag_marshal_string(struct evbuffer *buf, uint8_t tag, const char *string); -void evtag_marshal_timeval(struct evbuffer *evbuf, u_int8_t tag, +void evtag_marshal_timeval(struct evbuffer *evbuf, uint8_t tag, struct timeval *tv); void evtag_test(void); -int evtag_unmarshal(struct evbuffer *src, u_int8_t *ptag, +int evtag_unmarshal(struct evbuffer *src, uint8_t *ptag, struct evbuffer *dst); -int evtag_peek(struct evbuffer *evbuf, u_int8_t *ptag); -int evtag_peek_length(struct evbuffer *evbuf, u_int32_t *plength); -int evtag_payload_length(struct evbuffer *evbuf, u_int32_t *plength); +int evtag_peek(struct evbuffer *evbuf, uint8_t *ptag); +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_unmarshal_int(struct evbuffer *evbuf, u_int8_t need_tag, - u_int32_t *pinteger); +int evtag_unmarshal_int(struct evbuffer *evbuf, uint8_t need_tag, + uint32_t *pinteger); -int evtag_unmarshal_fixed(struct evbuffer *src, u_int8_t need_tag, void *data, +int evtag_unmarshal_fixed(struct evbuffer *src, uint8_t need_tag, void *data, size_t len); -int evtag_unmarshal_string(struct evbuffer *evbuf, u_int8_t need_tag, +int evtag_unmarshal_string(struct evbuffer *evbuf, uint8_t need_tag, char **pstring); -int evtag_unmarshal_timeval(struct evbuffer *evbuf, u_int8_t need_tag, +int evtag_unmarshal_timeval(struct evbuffer *evbuf, uint8_t need_tag, struct timeval *ptv); #ifdef __cplusplus
_______________________________________________ Libevent-users mailing list Libevent-users@monkey.org http://monkey.org/mailman/listinfo/libevent-users