void network_do_spoolin(HashList *working_ignetcfg, HashList *the_netmap, int *netmap_changed);
void network_consolidate_spoolout(HashList *working_ignetcfg, HashList *the_netmap);
void free_spoolcontrol_struct(SpoolControl **scc);
+void free_spoolcontrol_struct_members(SpoolControl *scc);
int writenfree_spoolcontrol_file(SpoolControl **scc, char *filename);
int read_spoolcontrol_file(SpoolControl **scc, char *filename);
if (fd != 0) {
struct stat stbuf;
- fstat(fd, &stbuf);
- if (stbuf.st_size > 0)
+ if ((fstat(fd, &stbuf) == 0) &&
+ (stbuf.st_size > 0))
{
sc->RoomInfo = NewStrBufPlain(NULL, stbuf.st_size + 1);
StrBufReadBLOB(sc->RoomInfo, &fd, 0, stbuf.st_size, &err);
closedir(dp);
}
+void free_spoolcontrol_struct(SpoolControl **sc)
+{
+ free_spoolcontrol_struct_members(*sc);
+ free(*sc);
+ *sc = NULL;
+}
+
+void free_spoolcontrol_struct_members(SpoolControl *sc)
+{
+ int i;
+ FreeStrBuf(&sc->RoomInfo);
+ FreeStrBuf(&sc->ListID);
+ for (i = 0; i < maxRoomNetCfg; i++)
+ FreeStrBuf(&sc->Users[i]);
+}
pCfgLine = pRNCFG->NetConfigs[ignet_push_share];
while (pCfgLine != NULL)
{
- if (strcmp(ChrPtr(pCfgLine->Value[0]), target_node))
+ if (!strcmp(ChrPtr(pCfgLine->Value[0]), target_node))
break;
pCfgLine = pCfgLine->next;
}
sc.RNCfg = &OneRNCFG;
sc.RNCfg->NetConfigs[ignet_push_share] = DuplicateOneGenericCfgLine(pCfgLine);
+ CalcListID(&sc);
+
end_critical_section(S_NETCONFIGS);
sc.working_ignetcfg = CtdlLoadIgNetCfg();
sc.the_netmap = CtdlReadNetworkMap();
- CalcListID(&sc);
-
/* Send ALL messages */
num_spooled = CtdlForEachMessage(MSGS_ALL, 0L, NULL, NULL, NULL,
network_spool_msg, &sc);
DeleteHash(&sc.working_ignetcfg);
DeleteHash(&sc.the_netmap);
+ free_spoolcontrol_struct_members(&sc);
QN_syslog(LOG_NOTICE, "Synchronized %d messages to <%s>\n",
num_spooled, target_node);
}
-void free_network_spoolout_room(SpoolControl *sc)
-{
- if (sc != NULL)
- {
- int i;
- for (i = subpending; i < maxRoomNetCfg; i++)
- FreeStrBuf(&sc->Users[i]);
- free(sc);
- }
-}
-
-
-
/*
* network_do_queue()
while (pSC != NULL)
{
sc = pSC->next;
- free_network_spoolout_room(pSC);
+ free_spoolcontrol_struct(&pSC);
pSC = sc;
}
/* If there is anything in the inbound queue, process it */
}
RoomNetCfgLine *DuplicateOneGenericCfgLine(const RoomNetCfgLine *data)
{
+ int i;
RoomNetCfgLine *NewData;
NewData = (RoomNetCfgLine*)malloc(sizeof(RoomNetCfgLine));
- int i;
+ memset(NewData, 0, sizeof(RoomNetCfgLine));
NewData->Value = (StrBuf **)malloc(sizeof(StrBuf*) * data->nValues);
+ memset(NewData->Value, 0, sizeof(StrBuf*) * data->nValues);
for (i = 0; i < data->nValues; i++)
{
NewData->Value[i] = NewStrBufDup(data->Value[i]);
}
+ NewData->nValues = data->nValues;
return NewData;
}
int ReadRoomNetConfigFile(OneRoomNetCfg **pOneRNCfg, char *filename)