summaryrefslogtreecommitdiff
path: root/source3/lib/messages.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2000-09-12 06:13:25 +0000
committerAndrew Tridgell <tridge@samba.org>2000-09-12 06:13:25 +0000
commitf0ce4f7ae3b58f45b70598e3a44539e3e12291ce (patch)
tree35c9fea99d0325807f7044bf176047aa420cd17c /source3/lib/messages.c
parenta19836ae5267fa967482f2baacd5e8cf8767bf79 (diff)
downloadsamba-f0ce4f7ae3b58f45b70598e3a44539e3e12291ce.tar.gz
samba-f0ce4f7ae3b58f45b70598e3a44539e3e12291ce.tar.bz2
samba-f0ce4f7ae3b58f45b70598e3a44539e3e12291ce.zip
- changed the msg_type to be an int instead of an enum so that it is
easier to add new message types to messages.h without breaking old binaries - added a MSG_FORCE_ELECTION message to force nmbd to hold an election (This used to be commit f1c49ca7ce56bc39259041a71479e84ebf53eeca)
Diffstat (limited to 'source3/lib/messages.c')
-rw-r--r--source3/lib/messages.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/source3/lib/messages.c b/source3/lib/messages.c
index bbda5d71ed..927cb095dd 100644
--- a/source3/lib/messages.c
+++ b/source3/lib/messages.c
@@ -43,7 +43,7 @@ static int received_signal;
struct message_rec {
int msg_version;
- enum message_type msg_type;
+ int msg_type;
pid_t dest;
pid_t src;
size_t len;
@@ -52,8 +52,8 @@ struct message_rec {
/* we have a linked list of dispatch handlers */
static struct dispatch_fns {
struct dispatch_fns *next, *prev;
- enum message_type msg_type;
- void (*fn)(enum message_type msg_type, pid_t pid, void *buf, size_t len);
+ int msg_type;
+ void (*fn)(int msg_type, pid_t pid, void *buf, size_t len);
} *dispatch_fns;
/****************************************************************************
@@ -124,7 +124,7 @@ static BOOL message_notify(pid_t pid)
/****************************************************************************
send a message to a particular pid
****************************************************************************/
-BOOL message_send_pid(pid_t pid, enum message_type msg_type, void *buf, size_t len)
+BOOL message_send_pid(pid_t pid, int msg_type, void *buf, size_t len)
{
TDB_DATA kbuf;
TDB_DATA dbuf;
@@ -150,7 +150,7 @@ BOOL message_send_pid(pid_t pid, enum message_type msg_type, void *buf, size_t l
if (!p) goto failed;
memcpy(p, &rec, sizeof(rec));
- memcpy(p+sizeof(rec), buf, len);
+ if (len > 0) memcpy(p+sizeof(rec), buf, len);
dbuf.dptr = p;
dbuf.dsize = len + sizeof(rec);
@@ -165,7 +165,7 @@ BOOL message_send_pid(pid_t pid, enum message_type msg_type, void *buf, size_t l
memcpy(p, dbuf.dptr, dbuf.dsize);
memcpy(p+dbuf.dsize, &rec, sizeof(rec));
- memcpy(p+dbuf.dsize+sizeof(rec), buf, len);
+ if (len > 0) memcpy(p+dbuf.dsize+sizeof(rec), buf, len);
dbuf.dptr = p;
dbuf.dsize += len + sizeof(rec);
@@ -187,7 +187,7 @@ BOOL message_send_pid(pid_t pid, enum message_type msg_type, void *buf, size_t l
/****************************************************************************
retrieve the next message for the current process
****************************************************************************/
-static BOOL message_recv(enum message_type *msg_type, pid_t *src, void **buf, size_t *len)
+static BOOL message_recv(int *msg_type, pid_t *src, void **buf, size_t *len)
{
TDB_DATA kbuf;
TDB_DATA dbuf;
@@ -207,10 +207,15 @@ static BOOL message_recv(enum message_type *msg_type, pid_t *src, void **buf, si
goto failed;
}
- (*buf) = (void *)malloc(rec.len);
- if (!(*buf)) goto failed;
+ if (rec.len > 0) {
+ (*buf) = (void *)malloc(rec.len);
+ if (!(*buf)) goto failed;
+
+ memcpy(*buf, dbuf.dptr+sizeof(rec), rec.len);
+ } else {
+ *buf = NULL;
+ }
- memcpy(*buf, dbuf.dptr+sizeof(rec), rec.len);
*len = rec.len;
*msg_type = rec.msg_type;
*src = rec.src;
@@ -236,7 +241,7 @@ so you can register multiple handlers for a message
****************************************************************************/
void message_dispatch(void)
{
- enum message_type msg_type;
+ int msg_type;
pid_t src;
void *buf;
size_t len;
@@ -258,8 +263,8 @@ void message_dispatch(void)
/****************************************************************************
register a dispatch function for a particular message type
****************************************************************************/
-void message_register(enum message_type msg_type,
- void (*fn)(enum message_type msg_type, pid_t pid, void *buf, size_t len))
+void message_register(int msg_type,
+ void (*fn)(int msg_type, pid_t pid, void *buf, size_t len))
{
struct dispatch_fns *dfn;