From deff6be32a967252382dd229f0b862f0b38174cf Mon Sep 17 00:00:00 2001 From: root Date: Sun, 24 Jul 2011 14:14:32 -0400 Subject: [PATCH] sitemap now uses its own private roomlist function. I know this is probably suboptimal but I'm desperate to find a fix here. --- webcit/roomops.c | 16 +++++++------- webcit/sitemap.c | 55 +++++++++++++++++++++++++++++++++++------------- 2 files changed, 48 insertions(+), 23 deletions(-) diff --git a/webcit/roomops.c b/webcit/roomops.c index ff18f8f69..3d1e3a12c 100644 --- a/webcit/roomops.c +++ b/webcit/roomops.c @@ -337,8 +337,8 @@ void ParseGoto(folder *room, StrBuf *Line) room->Floor = (const Floor*) vFloor; } -/** - * \brief Delete the current room +/* + * Delete the current room */ void delete_room(void) { @@ -362,8 +362,8 @@ void delete_room(void) } } -/** - * \brief zap a room +/* + * zap a room */ void zap(void) { @@ -982,8 +982,8 @@ void change_view(void) { -/** - * \brief Set the message expire policy for this room and/or floor +/* + * Set the message expire policy for this room and/or floor */ void set_room_policy(void) { char buf[SIZ]; @@ -1011,8 +1011,8 @@ void set_room_policy(void) { -/** - * \brief Perform changes to a room's network configuration +/* + * Perform changes to a room's network configuration */ void netedit(void) { FILE *fp; diff --git a/webcit/sitemap.c b/webcit/sitemap.c index 4d154632d..b704ca692 100644 --- a/webcit/sitemap.c +++ b/webcit/sitemap.c @@ -125,16 +125,41 @@ void sitemap_do_wiki(void) { } +struct sitemap_room_list { + struct sitemap_room_list *next; + StrBuf *roomname; + int defview; +}; + + +/* + * Load the room list for the sitemap + */ +struct sitemap_room_list *sitemap_load_roomlist(void) { + char buf[SIZ]; + char roomname_plain[SIZ]; + struct sitemap_room_list *roomlist = NULL; + + serv_puts("LKRA"); + serv_getln(buf, sizeof buf); + if (buf[0] == '1') while(serv_getln(buf, sizeof buf), strcmp(buf, "000")) { + struct sitemap_room_list *ptr = malloc(sizeof(struct sitemap_room_list)); + extract_token(roomname_plain, buf, 0, '|', sizeof roomname_plain); + ptr->roomname = NewStrBufPlain(roomname_plain, -1); + ptr->defview = extract_int(buf, 6); + ptr->next = roomlist; + roomlist = ptr; + } + + return(roomlist); +} + + /* * Entry point for RSS feed generator */ void sitemap(void) { - HashList *roomlist = NULL; - HashPos *it = NULL; - long HKlen = 0; - const char *HashKey = NULL; - folder *room = NULL; - + struct sitemap_room_list *roomlist = NULL; output_headers(0, 0, 0, 0, 1, 0); hprintf("Content-type: text/xml\r\n"); hprintf( @@ -148,17 +173,14 @@ void sitemap(void) { wc_printf("\r\n"); wc_printf("\r\n"); - roomlist = GetRoomListHash(NULL, NULL); - if (!roomlist) syslog(LOG_CRIT, "GetRoomListHash() FAILED!"); - it = GetNewHashPos(roomlist, 0); - if (!it) syslog(LOG_CRIT, "GetNewHashPos() FAILED!"); + roomlist = sitemap_load_roomlist(); - while (GetNextHashPos(roomlist, it, &HKlen, &HashKey, (void *)&room)) + while (roomlist != NULL) { - gotoroom(room->name); + gotoroom(roomlist->roomname); /* Output the messages in this room only if it's a room type we can make sense of */ - switch(room->defview) { + switch(roomlist->defview) { case VIEW_BBS: sitemap_do_bbs(); break; @@ -171,10 +193,13 @@ void sitemap(void) { default: break; } + + struct sitemap_room_list *ptr = roomlist; + roomlist = roomlist->next; + FreeStrBuf(&ptr->roomname); + free(ptr); } - DeleteHashPos(&it); - DeleteHash(&roomlist); wc_printf("\r\n"); wDumpContent(0); } -- 2.30.2