// CtdlGetRoom() - retrieve room data from disk
int CtdlGetRoom(struct ctdlroom *qrbuf, const char *room_name) {
- struct cdbdata *cdbqr;
+ struct cdbdata cdbqr;
char lowercase_name[ROOMNAMELEN];
char personal_lowercase_name[ROOMNAMELEN];
long len;
cdbqr = cdb_fetch(CDB_ROOMS, lowercase_name, strlen(lowercase_name));
// If that didn't work, try the user's personal namespace
- if (cdbqr == NULL) {
+ if (cdbqr.len == 0) {
snprintf(personal_lowercase_name, sizeof personal_lowercase_name, "%010ld.%s", CC->user.usernum, lowercase_name);
cdbqr = cdb_fetch(CDB_ROOMS, personal_lowercase_name, strlen(personal_lowercase_name));
}
- if (cdbqr != NULL) {
- memcpy(qrbuf, cdbqr->ptr, ((cdbqr->len > sizeof(struct ctdlroom)) ? sizeof(struct ctdlroom) : cdbqr->len));
- cdb_free(cdbqr);
+ if (cdbqr.len > 0) {
+ memcpy(qrbuf, cdbqr.ptr, ((cdbqr.len > sizeof(struct ctdlroom)) ? sizeof(struct ctdlroom) : cdbqr.len));
room_sanity_check(qrbuf);
return (0);
}
// CtdlGetFloor() - retrieve floor data from disk
void CtdlGetFloor(struct floor *flbuf, int floor_num) {
- struct cdbdata *cdbfl;
+ struct cdbdata cdbfl;
memset(flbuf, 0, sizeof(struct floor));
cdbfl = cdb_fetch(CDB_FLOORTAB, &floor_num, sizeof(int));
- if (cdbfl != NULL) {
- memcpy(flbuf, cdbfl->ptr, ((cdbfl->len > sizeof(struct floor)) ? sizeof(struct floor) : cdbfl->len));
- cdb_free(cdbfl);
+ if (cdbfl.len > 0) {
+ memcpy(flbuf, cdbfl.ptr, ((cdbfl.len > sizeof(struct floor)) ? sizeof(struct floor) : cdbfl.len));
}
else {
if (floor_num == 0) {
// Iterate through the room table, performing a callback for each room.
void CtdlForEachRoom(ForEachRoomCallBack callback_func, void *in_data) {
struct ctdlroom qrbuf;
- struct cdbdata *cdbqr;
+ struct cdbdata cdbqr;
cdb_rewind(CDB_ROOMS);
- while (cdbqr = cdb_next_item(CDB_ROOMS), cdbqr != NULL) {
+ while (cdbqr = cdb_next_item(CDB_ROOMS), cdbqr.len>0) {
memset(&qrbuf, 0, sizeof(struct ctdlroom));
- memcpy(&qrbuf, cdbqr->ptr, ((cdbqr->len > sizeof(struct ctdlroom)) ? sizeof(struct ctdlroom) : cdbqr->len) );
- cdb_free(cdbqr);
+ memcpy(&qrbuf, cdbqr.ptr, ((cdbqr.len > sizeof(struct ctdlroom)) ? sizeof(struct ctdlroom) : cdbqr.len) );
room_sanity_check(&qrbuf);
if (qrbuf.QRflags & QR_INUSE) {
callback_func(&qrbuf, in_data);
// delete_msglist() - delete room message pointers
void delete_msglist(struct ctdlroom *whichroom) {
- struct cdbdata *cdbml;
+ struct cdbdata cdbml;
// Make sure the msglist we're deleting actually exists, otherwise
// libdb will complain when we try to delete an invalid record
cdbml = cdb_fetch(CDB_MSGLISTS, &whichroom->QRnumber, sizeof(long));
- if (cdbml != NULL) {
- cdb_free(cdbml);
-
+ if (cdbml.len > 0) {
// Go ahead and delete it
cdb_delete(CDB_MSGLISTS, &whichroom->QRnumber, sizeof(long));
}
// If no messages in room, returns 0 and msgs is set to NULL.
int CtdlFetchMsgList(long roomnum, long **msgs) {
int num_msgs = 0;
- struct cdbdata *cdbfr;
+ struct cdbdata cdbfr;
cdbfr = cdb_fetch(CDB_MSGLISTS, &roomnum, sizeof(long));
- if (cdbfr == NULL) {
+ if (cdbfr.len == 0) {
syslog(LOG_ERR, "room_ops: no msglist for room %ld", roomnum);
*msgs = malloc(sizeof(long)); // dummy buffer
*msgs[0] = 0;
return (0);
}
- num_msgs = cdbfr->len / sizeof(long);
+ num_msgs = cdbfr.len / sizeof(long);
if (num_msgs > 0) {
- *msgs = malloc(cdbfr->len);
- memcpy(*msgs, cdbfr->ptr, cdbfr->len);
+ *msgs = malloc(cdbfr.len);
+ memcpy(*msgs, cdbfr.ptr, cdbfr.len);
}
else {
*msgs = NULL;
}
- cdb_free(cdbfr);
return(num_msgs);
}