*/
xcb_generic_event_t *xcb_poll_for_special_event(xcb_connection_t *c,
xcb_special_event_t *se);
-
+
/**
* @brief Returns the next event from a special queue, blocking until one arrives
*/
*/
typedef struct xcb_extension_t xcb_extension_t; /**< Opaque structure used as key for xcb_get_extension_data_t. */
-
/**
* @brief Listen for a special event
*/
static size_t memdup(char **dst, void *src, size_t len)
{
if(len)
- *dst = malloc(len);
+ *dst = malloc(len);
else
- *dst = 0;
+ *dst = 0;
if(!*dst)
- return 0;
+ return 0;
memcpy(*dst, src, len);
return len;
}
static int authname_match(enum auth_protos kind, char *name, size_t namelen)
{
if(authnameslen[kind] != namelen)
- return 0;
+ return 0;
if(memcmp(authnames[kind], name, namelen))
- return 0;
+ return 0;
return 1;
}
*idxp += valsize;
}
#endif
-
+
static int compute_auth(xcb_auth_info_t *info, Xauth *authptr, struct sockaddr *sockname)
{
if (authname_match(AUTH_MC1, authptr->name, authptr->name_length)) {
#ifdef HASXDMAUTH
#define APPEND(buf,idx,val) do_append((buf),&(idx),&(val),sizeof(val))
if (authname_match(AUTH_XA1, authptr->name, authptr->name_length)) {
- int j;
+ int j;
- info->data = malloc(192 / 8);
- if(!info->data)
- return 0;
+ info->data = malloc(192 / 8);
+ if(!info->data)
+ return 0;
- for (j = 0; j < 8; j++)
- info->data[j] = authptr->data[j];
- switch(sockname->sa_family) {
+ for (j = 0; j < 8; j++)
+ info->data[j] = authptr->data[j];
+ switch(sockname->sa_family) {
case AF_INET:
/*block*/ {
- struct sockaddr_in *si = (struct sockaddr_in *) sockname;
- APPEND(info->data, j, si->sin_addr.s_addr);
- APPEND(info->data, j, si->sin_port);
- }
- break;
+ struct sockaddr_in *si = (struct sockaddr_in *) sockname;
+ APPEND(info->data, j, si->sin_addr.s_addr);
+ APPEND(info->data, j, si->sin_port);
+ }
+ break;
#ifdef AF_INET6
case AF_INET6:
/*block*/ {
#endif
case AF_UNIX:
/*block*/ {
- uint32_t fakeaddr = htonl(0xffffffff - next_nonce());
- uint16_t fakeport = htons(getpid());
- APPEND(info->data, j, fakeaddr);
- APPEND(info->data, j, fakeport);
- }
- break;
+ uint32_t fakeaddr = htonl(0xffffffff - next_nonce());
+ uint16_t fakeport = htons(getpid());
+ APPEND(info->data, j, fakeaddr);
+ APPEND(info->data, j, fakeport);
+ }
+ break;
default:
free(info->data);
return 0; /* do not know how to build this */
- }
- {
- uint32_t now = htonl(time(0));
- APPEND(info->data, j, now);
- }
- assert(j <= 192 / 8);
- while (j < 192 / 8)
- info->data[j++] = 0;
- info->datalen = j;
- XdmcpWrap ((unsigned char *) info->data, (unsigned char *) authptr->data + 8, (unsigned char *) info->data, info->datalen);
- return 1;
+ }
+ {
+ uint32_t now = htonl(time(0));
+ APPEND(info->data, j, now);
+ }
+ assert(j <= 192 / 8);
+ while (j < 192 / 8)
+ info->data[j++] = 0;
+ info->datalen = j;
+ XdmcpWrap ((unsigned char *) info->data, (unsigned char *) authptr->data + 8, (unsigned char *) info->data, info->datalen);
+ return 1;
}
#undef APPEND
#endif
(according to POSIX, applications should not assume a particular
length for `sockaddr_un.sun_path') */
static struct sockaddr *get_peer_sock_name(int (*socket_func)(int,
- struct sockaddr *,
- socklen_t *),
- int fd)
+ struct sockaddr *,
+ socklen_t *),
+ int fd)
{
socklen_t socknamelen = sizeof(struct sockaddr) + INITIAL_SOCKNAME_SLACK;
socklen_t actual_socknamelen = socknamelen;
/* Win32 doesn't have file descriptors and the fcntl function. This block sets the socket in non-blocking mode */
#ifdef _WIN32
- u_long iMode = 1; /* non-zero puts it in non-blocking mode, 0 in blocking mode */
+ u_long iMode = 1; /* non-zero puts it in non-blocking mode, 0 in blocking mode */
int ret = 0;
ret = ioctlsocket(fd, FIONBIO, &iMode);
- if(ret != 0)
+ if(ret != 0)
return 0;
return 1;
#else
an iovec would require more work and I'm not sure of the benefit....works for now */
vec = *vector;
while(i < *count)
- {
- ret = send(c->fd,vec->iov_base,vec->iov_len,0);
+ {
+ ret = send(c->fd,vec->iov_base,vec->iov_len,0);
if(ret == SOCKET_ERROR)
{
err = WSAGetLastError();
#else
n = *count;
if (n > IOV_MAX)
- n = IOV_MAX;
+ n = IOV_MAX;
#if HAVE_SENDMSG
if (c->out.out_fd.nfd) {
return 1;
}
-#endif /* _WIN32 */
+#endif /* _WIN32 */
if(n <= 0)
{
c->in.request_completed = c->in.request_read - 1;
}
- while(c->in.pending_replies &&
+ while(c->in.pending_replies &&
c->in.pending_replies->workaround != WORKAROUND_EXTERNAL_SOCKET_OWNER &&
- XCB_SEQUENCE_COMPARE (c->in.pending_replies->last_request, <=, c->in.request_completed))
+ XCB_SEQUENCE_COMPARE (c->in.pending_replies->last_request, <=, c->in.request_completed))
{
pending_reply *oldpend = c->in.pending_replies;
c->in.pending_replies = oldpend->next;
FD_ZERO(&fds);
FD_SET(fd, &fds);
- /* Initializing errno here makes sure that for Win32 this loop will execute only once */
- errno = 0;
- do {
- ret = select(fd + 1, &fds, 0, 0, 0);
- } while (ret == -1 && errno == EINTR);
+ /* Initializing errno here makes sure that for Win32 this loop will execute only once */
+ errno = 0;
+ do {
+ ret = select(fd + 1, &fds, 0, 0, 0);
+ } while (ret == -1 && errno == EINTR);
#endif /* USE_POLL */
}
if(ret <= 0)
pthread_mutex_unlock(&c->iolock);
return NULL;
}
-
+
se->extension = ext_reply->major_opcode;
se->eid = eid;
free(file);
if (fd < 0 && !protocol && *host == '\0') {
- unsigned short port = X_TCP_PORT + display;
- fd = _xcb_open_tcp(host, protocol, port);
+ unsigned short port = X_TCP_PORT + display;
+ fd = _xcb_open_tcp(host, protocol, port);
}
return fd;
if (fd == -1 && errno == EINVAL)
#endif
{
- fd = socket(family, type, proto);
+ fd = socket(family, type, proto);
#ifndef _WIN32
- if (fd >= 0)
- fcntl(fd, F_SETFD, FD_CLOEXEC);
+ if (fd >= 0)
+ fcntl(fd, F_SETFD, FD_CLOEXEC);
#endif
}
return fd;
static int _xcb_do_connect(int fd, const struct sockaddr* addr, int addrlen) {
- int on = 1;
+ int on = 1;
- if(fd < 0)
- return -1;
+ if(fd < 0)
+ return -1;
- setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
- setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on));
+ setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
+ setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on));
- return connect(fd, addr, addrlen);
+ return connect(fd, addr, addrlen);
}
static int _xcb_open_tcp(const char *host, char *protocol, const unsigned short port)
if (protocol && strcmp("tcp",protocol) && strcmp("inet",protocol)
#ifdef AF_INET6
- && strcmp("inet6",protocol)
+ && strcmp("inet6",protocol)
#endif
- )
+ )
return -1;
-
+
if (*host == '\0')
- host = "localhost";
+ host = "localhost";
#if HAVE_GETADDRINFO
memset(&hints, 0, sizeof(hints));
xcb_connection_t *c;
int parsed = _xcb_parse_display(displayname, &host, &protocol, &display, screenp);
-
+
if(!parsed) {
c = _xcb_conn_ret_error(XCB_CONN_CLOSED_PARSE_ERR);
goto out;
#include <windef.h>
struct iovec {
- void *iov_base; /* Pointer to data. */
- int iov_len; /* Length of data. */
+ void *iov_base; /* Pointer to data. */
+ int iov_len; /* Length of data. */
};
typedef unsigned int in_addr_t;
#define XCB_PAD(i) (-(i) & 3)
-#define XCB_SEQUENCE_COMPARE(a,op,b) ((int64_t) ((a) - (b)) op 0)
+#define XCB_SEQUENCE_COMPARE(a,op,b) ((int64_t) ((a) - (b)) op 0)
#ifndef offsetof
#define offsetof(type,member) ((size_t) &((type *)0)->member)
/* xcb_out.c */
#if HAVE_SENDMSG
-#define XCB_MAX_PASS_FD 16
+#define XCB_MAX_PASS_FD 16
typedef struct _xcb_fd {
int fd[XCB_MAX_PASS_FD];