]> code.citadel.org Git - citadel.git/blobdiff - citadel/server/msgbase.c
cdb_fetch() and cdb_next_item() now return a struct cdbdata instead of a pointer...
[citadel.git] / citadel / server / msgbase.c
index 5e054ac86b5077f219621f95485897fad9d660db..a1d003abf0bd6b3439ed3736f5448248956017be 100644 (file)
@@ -1104,25 +1104,23 @@ struct CtdlMessage *CtdlDeserializeMessage(long msgnum, int with_body, const cha
 //       using the CM_Free(); function.
 //
 struct CtdlMessage *CtdlFetchMessage(long msgnum, int with_body) {
-       struct cdbdata *dmsgtext;
+       struct cdbdata dmsgtext;
        struct CtdlMessage *ret = NULL;
 
        syslog(LOG_DEBUG, "msgbase: CtdlFetchMessage(%ld, %d)", msgnum, with_body);
        dmsgtext = cdb_fetch(CDB_MSGMAIN, &msgnum, sizeof(long));
-       if (dmsgtext == NULL) {
+       if (dmsgtext.len == 0) {
                syslog(LOG_ERR, "msgbase: message #%ld was not found", msgnum);
                return NULL;
        }
 
-       if (dmsgtext->ptr[dmsgtext->len - 1] != '\0') {
+       if (dmsgtext.ptr[dmsgtext.len - 1] != '\0') {
+               // FIXME LMDB cannot write to immutable memory
                syslog(LOG_ERR, "msgbase: CtdlFetchMessage(%ld, %d) Forcefully terminating message!!", msgnum, with_body);
-               dmsgtext->ptr[dmsgtext->len - 1] = '\0';
+               dmsgtext.ptr[dmsgtext.len - 1] = '\0';
        }
 
-       ret = CtdlDeserializeMessage(msgnum, with_body, dmsgtext->ptr, dmsgtext->len);
-
-       cdb_free(dmsgtext);
-
+       ret = CtdlDeserializeMessage(msgnum, with_body, dmsgtext.ptr, dmsgtext.len);
        if (ret == NULL) {
                return NULL;
        }
@@ -1134,9 +1132,8 @@ struct CtdlMessage *CtdlFetchMessage(long msgnum, int with_body) {
        //
        if ( (CM_IsEmpty(ret, eMesageText)) && (with_body) ) {
                dmsgtext = cdb_fetch(CDB_BIGMSGS, &msgnum, sizeof(long));
-               if (dmsgtext != NULL) {
-                       CM_SetAsField(ret, eMesageText, &dmsgtext->ptr, dmsgtext->len - 1);
-                       cdb_free(dmsgtext);
+               if (dmsgtext.len > 0) {
+                       CM_SetAsField(ret, eMesageText, &dmsgtext.ptr, dmsgtext.len - 1);
                }
        }
        if (CM_IsEmpty(ret, eMesageText)) {
@@ -3298,7 +3295,7 @@ int CtdlDeleteMessages(const char *room_name,     // which room
  * GetMetaData()  -  Get the supplementary record for a message
  */
 void GetMetaData(struct MetaData *smibuf, long msgnum) {
-       struct cdbdata *cdbsmi;
+       struct cdbdata cdbsmi;
        long TheIndex;
 
        memset(smibuf, 0, sizeof(struct MetaData));
@@ -3309,14 +3306,10 @@ void GetMetaData(struct MetaData *smibuf, long msgnum) {
        TheIndex = (0L - msgnum);
 
        cdbsmi = cdb_fetch(CDB_MSGMAIN, &TheIndex, sizeof(long));
-       if (cdbsmi == NULL) {
+       if (cdbsmi.len == 0) {
                return;                 /* record not found; leave it alone */
        }
-       memcpy(smibuf, cdbsmi->ptr,
-              ((cdbsmi->len > sizeof(struct MetaData)) ?
-               sizeof(struct MetaData) : cdbsmi->len)
-       );
-       cdb_free(cdbsmi);
+       memcpy(smibuf, cdbsmi.ptr, ((cdbsmi.len > sizeof(struct MetaData)) ? sizeof(struct MetaData) : cdbsmi.len));
        return;
 }