]> code.citadel.org Git - citadel.git/blobdiff - citadel/server/room_ops.c
Calls to cdb_fetch()/cdb_next_item() now check ptr for NULL or non-NULL
[citadel.git] / citadel / server / room_ops.c
index b45913c485bfe653b4645949f20205fb516e4a6c..7c48922f3a6654ffb257153834cea0c2037769a5 100644 (file)
@@ -322,11 +322,11 @@ int CtdlGetRoom(struct ctdlroom *qrbuf, const char *room_name) {
        cdbqr = cdb_fetch(CDB_ROOMS, lowercase_name, strlen(lowercase_name));
 
        // If that didn't work, try the user's personal namespace
-       if (cdbqr.len == 0) {
+       if (cdbqr.ptr == NULL) {
                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.len > 0) {
+       if (cdbqr.ptr != NULL) {
                memcpy(qrbuf, cdbqr.ptr, ((cdbqr.len > sizeof(struct ctdlroom)) ?  sizeof(struct ctdlroom) : cdbqr.len));
                room_sanity_check(qrbuf);
                return (0);
@@ -435,7 +435,7 @@ void CtdlGetFloor(struct floor *flbuf, int floor_num) {
 
        memset(flbuf, 0, sizeof(struct floor));
        cdbfl = cdb_fetch(CDB_FLOORTAB, &floor_num, sizeof(int));
-       if (cdbfl.len > 0) {
+       if (cdbfl.ptr != NULL) {
                memcpy(flbuf, cdbfl.ptr, ((cdbfl.len > sizeof(struct floor)) ?  sizeof(struct floor) : cdbfl.len));
        }
        else {
@@ -527,7 +527,7 @@ void CtdlForEachRoom(ForEachRoomCallBack callback_func, void *in_data) {
 
        cdb_rewind(CDB_ROOMS);
 
-       while (cdbqr = cdb_next_item(CDB_ROOMS), cdbqr.len>0) {
+       while (cdbqr = cdb_next_item(CDB_ROOMS), cdbqr.ptr!=NULL) {
                memset(&qrbuf, 0, sizeof(struct ctdlroom));
                memcpy(&qrbuf, cdbqr.ptr, ((cdbqr.len > sizeof(struct ctdlroom)) ?  sizeof(struct ctdlroom) : cdbqr.len) );
                room_sanity_check(&qrbuf);
@@ -542,11 +542,10 @@ void CtdlForEachRoom(ForEachRoomCallBack callback_func, void *in_data) {
 void delete_msglist(struct ctdlroom *whichroom) {
         struct cdbdata cdbml;
 
-       // Make sure the msglist we're deleting actually exists, otherwise
-       // libdb will complain when we try to delete an invalid record
+       // Make sure the msglist we're deleting actually exists; don't try to delete an invalid record
         cdbml = cdb_fetch(CDB_MSGLISTS, &whichroom->QRnumber, sizeof(long));
-        if (cdbml.len > 0) {
-               // Go ahead and delete it
+        if (cdbml.ptr != NULL) {
+               // ok it exists, go ahead and delete it
                cdb_delete(CDB_MSGLISTS, &whichroom->QRnumber, sizeof(long));
        }
 }
@@ -605,7 +604,7 @@ int CtdlFetchMsgList(long roomnum, long **msgs) {
         struct cdbdata cdbfr;
 
         cdbfr = cdb_fetch(CDB_MSGLISTS, &roomnum, sizeof(long));
-       if (cdbfr.len == 0) {
+       if (cdbfr.ptr == NULL) {
                syslog(LOG_ERR, "room_ops: no msglist for room %ld", roomnum);
                *msgs = malloc(sizeof(long));   // dummy buffer
                *msgs[0] = 0;