#include <stdio.h>
#include <sys/stat.h>
#include <string.h>
-#ifdef HAVE_PTHREAD_H
-#include <pthread.h>
-#endif
#include <time.h>
#include <limits.h>
#include <errno.h>
/*
* Traverse the room file...
*/
-void ForEachRoom(void (*CallBack) (struct quickroom * EachRoom))
+void ForEachRoom(void (*CallBack) (struct quickroom *EachRoom, void *out_data),
+ void *in_data)
{
struct quickroom qrbuf;
struct cdbdata *cdbqr;
cdb_free(cdbqr);
room_sanity_check(&qrbuf);
if (qrbuf.QRflags & QR_INUSE)
- (*CallBack) (&qrbuf);
+ (*CallBack)(&qrbuf, in_data);
}
}
/*
* delete_msglist() - delete room message pointers
- * FIX - this really should check first to make sure there's actually a
+ * FIXME - this really should check first to make sure there's actually a
* msglist to delete. As things stand now, calling this function on
* a room which has never been posted in will result in a message
* like "gdbm: illegal data" (no big deal, but could use fixing).
/*
* cmd_lrms() - List all accessible rooms, known or forgotten
*/
-void cmd_lrms_backend(struct quickroom *qrbuf)
+void cmd_lrms_backend(struct quickroom *qrbuf, void *data)
{
+ int FloorBeingSearched = (-1);
+ FloorBeingSearched = *(int *)data;
+
if (((CtdlRoomAccess(qrbuf, &CC->usersupp)
& (UA_KNOWN | UA_ZAPPED)))
- && ((qrbuf->QRfloor == (CC->FloorBeingSearched))
- || ((CC->FloorBeingSearched) < 0)))
+ && ((qrbuf->QRfloor == (FloorBeingSearched))
+ || ((FloorBeingSearched) < 0)))
list_roomname(qrbuf);
}
void cmd_lrms(char *argbuf)
{
- CC->FloorBeingSearched = (-1);
+ int FloorBeingSearched = (-1);
if (strlen(argbuf) > 0)
- CC->FloorBeingSearched = extract_int(argbuf, 0);
+ FloorBeingSearched = extract_int(argbuf, 0);
if (!(CC->logged_in)) {
cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
}
cprintf("%d Accessible rooms:\n", LISTING_FOLLOWS);
- ForEachRoom(cmd_lrms_backend);
+ ForEachRoom(cmd_lrms_backend, &FloorBeingSearched);
cprintf("000\n");
}
/*
* cmd_lkra() - List all known rooms
*/
-void cmd_lkra_backend(struct quickroom *qrbuf)
+void cmd_lkra_backend(struct quickroom *qrbuf, void *data)
{
+ int FloorBeingSearched = (-1);
+ FloorBeingSearched = *(int *)data;
+
if (((CtdlRoomAccess(qrbuf, &CC->usersupp)
& (UA_KNOWN)))
- && ((qrbuf->QRfloor == (CC->FloorBeingSearched))
- || ((CC->FloorBeingSearched) < 0)))
+ && ((qrbuf->QRfloor == (FloorBeingSearched))
+ || ((FloorBeingSearched) < 0)))
list_roomname(qrbuf);
}
void cmd_lkra(char *argbuf)
{
- CC->FloorBeingSearched = (-1);
+ int FloorBeingSearched = (-1);
if (strlen(argbuf) > 0)
- CC->FloorBeingSearched = extract_int(argbuf, 0);
+ FloorBeingSearched = extract_int(argbuf, 0);
if (!(CC->logged_in)) {
cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
}
cprintf("%d Known rooms:\n", LISTING_FOLLOWS);
- ForEachRoom(cmd_lkra_backend);
+ ForEachRoom(cmd_lkra_backend, &FloorBeingSearched);
cprintf("000\n");
}
/*
* cmd_lkrn() - List all known rooms with new messages
*/
-void cmd_lkrn_backend(struct quickroom *qrbuf)
+void cmd_lkrn_backend(struct quickroom *qrbuf, void *data)
{
int ra;
+ int FloorBeingSearched = (-1);
+ FloorBeingSearched = *(int *)data;
ra = CtdlRoomAccess(qrbuf, &CC->usersupp);
if ((ra & UA_KNOWN)
&& (ra & UA_HASNEWMSGS)
- && ((qrbuf->QRfloor == (CC->FloorBeingSearched))
- || ((CC->FloorBeingSearched) < 0)))
+ && ((qrbuf->QRfloor == (FloorBeingSearched))
+ || ((FloorBeingSearched) < 0)))
list_roomname(qrbuf);
}
void cmd_lkrn(char *argbuf)
{
- CC->FloorBeingSearched = (-1);
+ int FloorBeingSearched = (-1);
if (strlen(argbuf) > 0)
- CC->FloorBeingSearched = extract_int(argbuf, 0);
+ FloorBeingSearched = extract_int(argbuf, 0);
if (!(CC->logged_in)) {
cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
}
cprintf("%d Rooms w/ new msgs:\n", LISTING_FOLLOWS);
- ForEachRoom(cmd_lkrn_backend);
+ ForEachRoom(cmd_lkrn_backend, &FloorBeingSearched);
cprintf("000\n");
}
/*
* cmd_lkro() - List all known rooms
*/
-void cmd_lkro_backend(struct quickroom *qrbuf)
+void cmd_lkro_backend(struct quickroom *qrbuf, void *data)
{
int ra;
+ int FloorBeingSearched = (-1);
+ FloorBeingSearched = *(int *)data;
ra = CtdlRoomAccess(qrbuf, &CC->usersupp);
if ((ra & UA_KNOWN)
&& ((ra & UA_HASNEWMSGS) == 0)
- && ((qrbuf->QRfloor == (CC->FloorBeingSearched))
- || ((CC->FloorBeingSearched) < 0)))
+ && ((qrbuf->QRfloor == (FloorBeingSearched))
+ || ((FloorBeingSearched) < 0)))
list_roomname(qrbuf);
}
void cmd_lkro(char *argbuf)
{
- CC->FloorBeingSearched = (-1);
+ int FloorBeingSearched = (-1);
if (strlen(argbuf) > 0)
- CC->FloorBeingSearched = extract_int(argbuf, 0);
+ FloorBeingSearched = extract_int(argbuf, 0);
if (!(CC->logged_in)) {
cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
}
cprintf("%d Rooms w/o new msgs:\n", LISTING_FOLLOWS);
- ForEachRoom(cmd_lkro_backend);
+ ForEachRoom(cmd_lkro_backend, &FloorBeingSearched);
cprintf("000\n");
}
/*
* cmd_lzrm() - List all forgotten rooms
*/
-void cmd_lzrm_backend(struct quickroom *qrbuf)
+void cmd_lzrm_backend(struct quickroom *qrbuf, void *data)
{
int ra;
+ int FloorBeingSearched = (-1);
+ FloorBeingSearched = *(int *)data;
ra = CtdlRoomAccess(qrbuf, &CC->usersupp);
if ((ra & UA_GOTOALLOWED)
&& (ra & UA_ZAPPED)
- && ((qrbuf->QRfloor == (CC->FloorBeingSearched))
- || ((CC->FloorBeingSearched) < 0)))
+ && ((qrbuf->QRfloor == (FloorBeingSearched))
+ || ((FloorBeingSearched) < 0)))
list_roomname(qrbuf);
}
void cmd_lzrm(char *argbuf)
{
- CC->FloorBeingSearched = (-1);
+ int FloorBeingSearched = (-1);
if (strlen(argbuf) > 0)
- CC->FloorBeingSearched = extract_int(argbuf, 0);
+ FloorBeingSearched = extract_int(argbuf, 0);
if (!(CC->logged_in)) {
cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
}
cprintf("%d Zapped rooms:\n", LISTING_FOLLOWS);
- ForEachRoom(cmd_lzrm_backend);
+ ForEachRoom(cmd_lzrm_backend, &FloorBeingSearched);
cprintf("000\n");
}
rmailflag, raideflag, newmailcount,
CC->quickroom.QRfloor);
- set_wtmpsupp_to_current_room();
}
buf[strlen(buf) - 1] = 0;
if ((!strncasecmp(buf, flnm, strlen(flnm)))
&& (buf[strlen(flnm)] == ' '))
- strncpy(comment,
- &buf[strlen(flnm) + 1], 255);
+ safestrncpy(comment,
+ &buf[strlen(flnm) + 1],
+ sizeof comment);
}
cprintf("%s|%ld|%s\n", flnm, statbuf.st_size, comment);
}
strcpy(old_name, CC->quickroom.QRname);
extract(buf, args, 0);
buf[ROOMNAMELEN] = 0;
- strncpy(CC->quickroom.QRname, buf, ROOMNAMELEN - 1);
+ safestrncpy(CC->quickroom.QRname, buf, sizeof CC->quickroom.QRname);
extract(buf, args, 1);
buf[10] = 0;
- strncpy(CC->quickroom.QRpasswd, buf, 9);
+ safestrncpy(CC->quickroom.QRpasswd, buf, sizeof CC->quickroom.QRpasswd);
extract(buf, args, 2);
buf[15] = 0;
- strncpy(CC->quickroom.QRdirname, buf, 19);
+ safestrncpy(CC->quickroom.QRdirname, buf,
+ sizeof CC->quickroom.QRdirname);
CC->quickroom.QRflags = (extract_int(args, 3) | QR_INUSE);
if (num_parms(args) >= 7)
CC->quickroom.QRorder = (char) new_order;
return (0); /* already exists */
memset(&qrbuf, 0, sizeof(struct quickroom));
- strncpy(qrbuf.QRname, new_room_name, ROOMNAMELEN);
- strncpy(qrbuf.QRpasswd, new_room_pass, 9);
+ safestrncpy(qrbuf.QRname, new_room_name, sizeof qrbuf.QRname);
+ safestrncpy(qrbuf.QRpasswd, new_room_pass, sizeof qrbuf.QRpasswd);
qrbuf.QRflags = QR_INUSE;
qrbuf.QRnumber = get_new_room_number();
if (new_room_type > 0)
new_room_type, new_room_pass, new_room_floor);
/* post a message in Aide> describing the new room */
- strncpy(aaa, new_room_name, 255);
+ safestrncpy(aaa, new_room_name, sizeof aaa);
strcat(aaa, "> created by ");
strcat(aaa, CC->usersupp.fullname);
if (newflags & QR_MAILBOX)
lgetfloor(&flbuf, free_slot);
flbuf.f_flags = F_INUSE;
flbuf.f_ref_count = 0;
- strncpy(flbuf.f_name, new_floor_name, 255);
+ safestrncpy(flbuf.f_name, new_floor_name, sizeof flbuf.f_name);
lputfloor(&flbuf, free_slot);
cprintf("%d %d\n", OK, free_slot);
}