X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fsitemap.c;h=b704ca6922e5840e771ca71056b30d5ba569f97f;hb=deff6be32a967252382dd229f0b862f0b38174cf;hp=4d154632df09fd4cd1478e654b90f8511a813fae;hpb=0f4f11234d578488a9b92042802b3568fa698db3;p=citadel.git 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); }