// 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;
}
//
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)) {
* 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));
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;
}