]> code.citadel.org Git - citadel.git/blobdiff - citadel/room_ops.c
Handle zero-length legacy netconfig files correctly (just delete them)
[citadel.git] / citadel / room_ops.c
index abd5e14b1475020ab63db518e397a49fe5954099..7d772c7daa8f30c84104d4ead96eaf8cab6d2526 100644 (file)
@@ -633,7 +633,7 @@ void lputfloor(struct floor *flbuf, int floor_num)
 
 
 /* 
- *  Traverse the room file...
+ * Iterate through the room table, performing a callback for each room.
  */
 void CtdlForEachRoom(ForEachRoomCallBack CB, void *in_data)
 {
@@ -657,7 +657,7 @@ void CtdlForEachRoom(ForEachRoomCallBack CB, void *in_data)
 }
 
 /* 
- *  Traverse the room file...
+ * Iterate through the room table, performing a callback for each room that has a netconfig entry.
  */
 void CtdlForEachNetCfgRoom(ForEachRoomNetCfgCallBack CB, void *in_data, RoomNetCfg filter)
 {
@@ -676,13 +676,12 @@ void CtdlForEachNetCfgRoom(ForEachRoomNetCfgCallBack CB, void *in_data, RoomNetC
                room_sanity_check(&qrbuf);
                if (qrbuf.QRflags & QR_INUSE)
                {
-                       OneRoomNetCfgRNCfg;
+                       OneRoomNetCfg *RNCfg;
                        RNCfg = CtdlGetNetCfgForRoom(qrbuf.QRnumber);
-                       if ((RNCfg != NULL) &&
-                           ((filter == maxRoomNetCfg) ||
-                            (RNCfg->NetConfigs[filter] != NULL)))
+                       if ((RNCfg != NULL) && ((filter == maxRoomNetCfg) || (RNCfg->NetConfigs[filter] != NULL)))
                        {
                                CB(&qrbuf, in_data, RNCfg);
+                               FreeRoomNetworkStruct(&RNCfg);
                        }
                }
        }
@@ -1132,6 +1131,7 @@ void CtdlDeleteRoom(struct ctdlroom *qrbuf)
 {
        struct floor flbuf;
        char filename[PATH_MAX];
+       char configdbkeyname[25];
 
        syslog(LOG_NOTICE, "Deleting room <%s>", qrbuf->QRname);
 
@@ -1143,9 +1143,9 @@ void CtdlDeleteRoom(struct ctdlroom *qrbuf)
        assoc_file_name(filename, sizeof filename, qrbuf, ctdl_image_dir);
        unlink(filename);
 
-       /* Delete the room's network config file */
-       assoc_file_name(filename, sizeof filename, qrbuf, ctdl_netcfg_dir);
-       unlink(filename);
+       /* Delete the room's network configdb entry */
+       netcfg_keyname(configdbkeyname, qrbuf->QRnumber);
+       CtdlDelConfig(configdbkeyname);
 
        /* Delete the messages in the room
         * (Careful: this opens an S_ROOMS critical section!)
@@ -1167,7 +1167,6 @@ void CtdlDeleteRoom(struct ctdlroom *qrbuf)
 }
 
 
-
 /*
  * Check access control for deleting a room
  */