Merge pull request #413 from Quuxplusone/static-analysis

Various bugfixes found by compiling with extra warnings
This commit is contained in:
Pieter Hintjens 2012-08-25 01:19:09 -07:00
commit 4a43a0d074
10 changed files with 37 additions and 14 deletions

View File

@ -353,7 +353,15 @@ zmq::endpoint_t zmq::ctx_t::find_endpoint (const char *addr_)
return endpoint; return endpoint;
} }
void zmq::ctx_t::monitor_event (zmq::socket_base_t *socket_, int event_, va_list args_) void zmq::ctx_t::monitor_event (zmq::socket_base_t *socket_, int event_, ...)
{
va_list args;
va_start (event_, args);
va_monitor_event (socket_, event_, args);
va_end (args);
}
void zmq::ctx_t::va_monitor_event (zmq::socket_base_t *socket_, int event_, va_list args_)
{ {
if (monitor_fn != NULL) { if (monitor_fn != NULL) {
zmq_event_data_t data; zmq_event_data_t data;

View File

@ -97,7 +97,8 @@ namespace zmq
// Monitoring specific // Monitoring specific
int monitor (zmq_monitor_fn *monitor_); int monitor (zmq_monitor_fn *monitor_);
void monitor_event (zmq::socket_base_t *socket_, int event_, va_list args_); void monitor_event (zmq::socket_base_t *socket_, int event_, ...);
void va_monitor_event (zmq::socket_base_t *socket_, int event_, va_list args_);
enum { enum {
term_tid = 0, term_tid = 0,

View File

@ -35,7 +35,7 @@ namespace zmq
enum {retired_fd = (fd_t)(~0)}; enum {retired_fd = (fd_t)(~0)};
#else #else
typedef SOCKET fd_t; typedef SOCKET fd_t;
enum {retired_fd = INVALID_SOCKET}; enum {retired_fd = (fd_t)INVALID_SOCKET};
#endif #endif
#else #else
typedef int fd_t; typedef int fd_t;

View File

@ -190,7 +190,7 @@ void zmq::pipe_t::rollback ()
void zmq::pipe_t::flush () void zmq::pipe_t::flush ()
{ {
// If terminate() was already called do nothing. // If terminate() was already called do nothing.
if (state == terminated && state == double_terminated) if (state == terminated || state == double_terminated)
return; return;
// The peer does not exist anymore at this point. // The peer does not exist anymore at this point.

View File

@ -290,10 +290,15 @@ void zmq::session_base_t::monitor_event (int event_, ...)
{ {
va_list args; va_list args;
va_start (args, event_); va_start (args, event_);
socket->monitor_event (event_, args); va_monitor_event (event_, args);
va_end (args); va_end (args);
} }
void zmq::session_base_t::va_monitor_event (int event_, va_list args)
{
socket->va_monitor_event (event_, args);
}
void zmq::session_base_t::process_plug () void zmq::session_base_t::process_plug ()
{ {
if (connect) if (connect)

View File

@ -24,6 +24,7 @@
#define __ZMQ_SESSION_BASE_HPP_INCLUDED__ #define __ZMQ_SESSION_BASE_HPP_INCLUDED__
#include <string> #include <string>
#include <stdarg.h>
#include "own.hpp" #include "own.hpp"
#include "io_object.hpp" #include "io_object.hpp"
@ -67,6 +68,7 @@ namespace zmq
void terminated (zmq::pipe_t *pipe_); void terminated (zmq::pipe_t *pipe_);
void monitor_event (int event_, ...); void monitor_event (int event_, ...);
void va_monitor_event (int event_, va_list args);
protected: protected:

View File

@ -1001,6 +1001,11 @@ void zmq::socket_base_t::monitor_event (int event_, ...)
{ {
va_list args; va_list args;
va_start (args, event_); va_start (args, event_);
get_ctx ()->monitor_event (this, event_, args); va_monitor_event(event, args);
va_end (args); va_end (args);
} }
void zmq::socket_base_t::monitor_event (int event_, va_list args)
{
get_ctx ()->va_monitor_event (this, event_, args);
}

View File

@ -25,6 +25,7 @@
#include <string> #include <string>
#include <map> #include <map>
#include <stdarg.h>
#include "own.hpp" #include "own.hpp"
#include "array.hpp" #include "array.hpp"
@ -102,6 +103,7 @@ namespace zmq
void unlock(); void unlock();
void monitor_event (int event_, ...); void monitor_event (int event_, ...);
void va_monitor_event (int event_, va_list args);
protected: protected:

View File

@ -294,11 +294,11 @@ int zmq::tcp_address_t::resolve_interface (const char *interface_,
} }
// Use the first result. // Use the first result.
zmq_assert (res != NULL);
zmq_assert ((size_t) (res->ai_addrlen) <= sizeof (address)); zmq_assert ((size_t) (res->ai_addrlen) <= sizeof (address));
memcpy (&address, res->ai_addr, res->ai_addrlen); memcpy (&address, res->ai_addr, res->ai_addrlen);
// Cleanup getaddrinfo after copying the possibly referenced result. // Cleanup getaddrinfo after copying the possibly referenced result.
if (res)
freeaddrinfo (res); freeaddrinfo (res);
return 0; return 0;
@ -598,11 +598,9 @@ const bool zmq::tcp_address_mask_t::match_address (const struct sockaddr *ss, co
} }
if (address_mask < mask) mask = address_mask; if (address_mask < mask) mask = address_mask;
int full_bytes = mask / 8; size_t full_bytes = mask / 8;
if (full_bytes) {
if (memcmp(our_bytes, their_bytes, full_bytes)) if (memcmp(our_bytes, their_bytes, full_bytes))
return false; return false;
}
uint8_t last_byte_bits = (0xffU << (8 - (mask % 8))) & 0xffU; uint8_t last_byte_bits = (0xffU << (8 - (mask % 8))) & 0xffU;
if (last_byte_bits) { if (last_byte_bits) {

View File

@ -486,10 +486,12 @@ int zmq_recviov (void *s_, iovec *a_, size_t *count_, int flags_)
} }
zmq::socket_base_t *s = (zmq::socket_base_t *) s_; zmq::socket_base_t *s = (zmq::socket_base_t *) s_;
size_t count = (int) *count_; size_t count = *count_;
int nread = 0; int nread = 0;
bool recvmore = true; bool recvmore = true;
*count_ = 0;
for (size_t i = 0; recvmore && i < count; ++i) { for (size_t i = 0; recvmore && i < count; ++i) {
// Cheat! We never close any msg // Cheat! We never close any msg
// because we want to steal the buffer. // because we want to steal the buffer.