Here's a patch against svn trunk to make libevent compile under
Solaris using Sun Studio. The main changes are:
- Changed __inline to inline.
- Changed u_intX_t to uintX_t. This was changed in event_rpcgen.py
as well. I don't use that script so I hope this was the right
thing to do...
- Added code to configure.in to detect the libraries needed to link
in socket code. (This adds -lnsl -lresolv on Solaris.)
- Fixed #includes in devpoll.c and evsignal.h to pull in required
headers.
- Removed volatile keyword from evsignal_info.evsignal_caught. I'm
not sure why that was volatile in the first place.
It still doesn't build very cleanly, but at least it builds... I've
done limited testing on solaris-amd64, linux-amd64, linux-i386,
mac-intel, and mac-ppc. I hope that more experienced eyes can look
this over and make sure that I haven't broken anything. Thanks!
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)
@@ -336,10 +344,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,12 +27,14 @@
#ifndef _EVSIGNAL_H_
#define _EVSIGNAL_H_
+#include <signal.h>
+
struct evsignal_info {
struct event_list signalqueue;
struct event ev_signal;
int ev_signal_pair[2];
int ev_signal_added;
- volatile sig_atomic_t evsignal_caught;
+ sig_atomic_t evsignal_caught;
sig_atomic_t evsigcaught[NSIG];
};
void evsignal_init(struct event_base *);
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
[email protected]
http://monkey.org/mailman/listinfo/libevent-users