From: Art Cancro Date: Thu, 17 Aug 2023 22:32:56 +0000 (-0900) Subject: CtdlFetchMsgList() - treat no-record and zero-messages identically X-Git-Tag: v989~66 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=1a36df6a94d443c47b31b225a058748ead1adea0;p=citadel.git CtdlFetchMsgList() - treat no-record and zero-messages identically In both cases, we return 0 to the caller and set the array pointer to NULL. This simplifies the calling convention and eliminates extra code to check for both conditions --- diff --git a/citadel/server/control.c b/citadel/server/control.c index 173ea61d4..5daef726e 100644 --- a/citadel/server/control.c +++ b/citadel/server/control.c @@ -58,10 +58,6 @@ void control_find_highest(struct ctdlroom *qrbuf, void *data) { // Load the message list num_msgs = CtdlFetchMsgList(qrbuf->QRnumber, &msglist); - if (num_msgs < 0) { - return; // No msglists record? No further action. - } - if (num_msgs > 0) { for (c=0; c cfh->highest_msgnum_found) { @@ -69,7 +65,6 @@ void control_find_highest(struct ctdlroom *qrbuf, void *data) { } } } - free(msglist); } diff --git a/citadel/server/euidindex.c b/citadel/server/euidindex.c index 14aafd1d6..0c603617e 100644 --- a/citadel/server/euidindex.c +++ b/citadel/server/euidindex.c @@ -180,7 +180,7 @@ void cmd_euid(char *cmdbuf) { } num_msgs = CtdlFetchMsgList(CC->room.QRnumber, &msglist); - if (num_msgs >= 0) { + if (num_msgs > 0) { for (i = 0; i < num_msgs; ++i) { if (msglist[i] == msgnum) { free(msglist); diff --git a/citadel/server/modules/expire/serv_expire.c b/citadel/server/modules/expire/serv_expire.c index 028599ebc..9bf180ad0 100644 --- a/citadel/server/modules/expire/serv_expire.c +++ b/citadel/server/modules/expire/serv_expire.c @@ -113,9 +113,7 @@ void GatherPurgeMessages(struct ctdlroom *qrbuf, void *data) { if (!strcasecmp(qrbuf->QRname, SYSCONFIGROOM)) return; // Ok, we got this far ... now let's see what's in the room. - TRACE; num_msgs = CtdlFetchMsgList(qrbuf->QRnumber, &msglist); - TRACE; // Nothing to do if there aren't any messages if (num_msgs <= 0) { diff --git a/citadel/server/modules/nntp/serv_nntp.c b/citadel/server/modules/nntp/serv_nntp.c index 30be5027b..c8bc6013e 100644 --- a/citadel/server/modules/nntp/serv_nntp.c +++ b/citadel/server/modules/nntp/serv_nntp.c @@ -289,10 +289,6 @@ struct nntp_msglist nntp_fetch_msglist(struct ctdlroom *qrbuf) { struct cdbdata *cdbfr; nm.num_msgs = CtdlFetchMsgList(qrbuf->QRnumber, &nm.msgnums); - if (nm.msgnums < 0) { - nm.num_msgs = 0; - nm.msgnums = NULL; - } return(nm); } diff --git a/citadel/server/room_ops.c b/citadel/server/room_ops.c index 5eb5e69fa..749bcacb9 100644 --- a/citadel/server/room_ops.c +++ b/citadel/server/room_ops.c @@ -604,7 +604,7 @@ int CtdlIsNonEditable(struct ctdlroom *qrbuf) { // Retrieve a list of all messages (message numbers) in the specified room. // Returns the number of messages in the room, allocates a pointer to the array and stuffs it in the supplied location. // Caller must free that memory. -// Returns (-1) if error. +// 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; @@ -613,12 +613,17 @@ int CtdlFetchMsgList(long roomnum, long **msgs) { if (cdbfr == NULL) { syslog(LOG_ERR, "room_ops: no msglist for room %ld", roomnum); *msgs = NULL; - return (-1); + return (0); } - *msgs = malloc(cdbfr->len); - memcpy(*msgs, cdbfr->ptr, cdbfr->len); num_msgs = cdbfr->len / sizeof(long); + if (num_msgs > 0) { + *msgs = malloc(cdbfr->len); + memcpy(*msgs, cdbfr->ptr, cdbfr->len); + } + else { + *msgs = NULL; + } cdb_free(cdbfr); // BEGIN diagnostic section remove this syslog(LOG_DEBUG, "\033[7mCtdlFetchMsgList(%ld) %d messages\033[0m", roomnum, num_msgs);