@Houdini: stimmt, hast recht
Code: Alles auswählen
static void sendAllEvents(int connfd, t_channel_id serviceUniqueKey, bool oldFormat = true )
{
	#define EVENT_CACHE (65*1024)
	char *evtList = new char[EVENT_CACHE]; // 65kb should be enough and dataLength is unsigned short
	char *event = new char[2*1024];
	if (!evtList || !event)
	{
		fprintf(stderr, "low on memory!\n");
		return ;
	}
	dprintf("sendAllEvents for " PRINTF_CHANNEL_ID_TYPE "\n", serviceUniqueKey);
	*evtList = *event = 0;
	char *p_event = event;
	if (serviceUniqueKey != 0)
	{
		// service Found
		if (EITThreadsPause())
		{
			delete[] evtList;
			delete[] event;
			return ;
		}
		lockEvents();
		int serviceIDfound = 0;
		for (MySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey::iterator e = mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.begin(); e != mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.end(); e++)
		{
			if ((*e)->get_channel_id() == serviceUniqueKey)
			{
				serviceIDfound = 1;
				for (SItimes::iterator t = (*e)->times.begin(); t != (*e)->times.end(); t++)
				{
					if ( oldFormat )
					{
						char strZeit[50];
						sprintf(strZeit, "%012llx ", (*e)->uniqueKey());
						strcat(p_event, strZeit);
						struct tm *tmZeit;
						tmZeit = localtime(&(t->startzeit));
						sprintf(strZeit, "%02d.%02d %02d:%02d %u ",
								tmZeit->tm_mday, tmZeit->tm_mon + 1, tmZeit->tm_hour, tmZeit->tm_min, (*e)->times.begin()->dauer / 60);
						strcat(p_event, strZeit);
						strcat(p_event, (*e)->name.c_str());
						strcat(p_event, "\n");
					}
					else
					{
						*((event_id_t *)p_event) = (*e)->uniqueKey();
						p_event += sizeof(event_id_t);
						*((unsigned *)p_event) = t->startzeit;
						p_event += 4;
						*((unsigned *)p_event) = t->dauer;
						p_event += 4;
						strcpy(p_event, (*e)->name.c_str());
						p_event += strlen(p_event);
						p_event++;
						if (((*e)->text).empty())
						{
							strcpy(p_event, (*e)->extendedText.substr(0, 40).c_str());
							p_event += strlen(p_event);
						}
						else
						{
							strcpy(p_event, (*e)->text.c_str());
							p_event += strlen(p_event);
						}
						p_event++;
					}
				}
				*p_events = '\0';
				if (strlen(evtList) + strlen(event) <= EVENT_CACHE)
					strcat(evtList,event);
				else
					break;
				p_events = event;
				*p_events = '\0';
			} // if = serviceID
			else if ( serviceIDfound )
				break; // sind nach serviceID und startzeit sortiert -> nicht weiter suchen
		}
		unlockEvents();
		if (EITThreadsUnPause())
		{
			delete[] evtList;
			delete[] event;
			return ;
		}
	}
	if(strlen(*evtList)<=1)		/* für den Fall, das nichts gefunden wurde, ist evtList[0] = '\n' */
	{
		struct sectionsd::msgResponseHeader responseHeader;
		responseHeader.dataLength = strlen(evtList);
		dprintf("[sectionsd] all events - response-size: 0x%x\n", responseHeader.dataLength);
		if (writeNbytes(connfd, (const char *)&responseHeader, sizeof(responseHeader), WRITE_TIMEOUT_IN_SECONDS) == true)
			writeNbytes(connfd, evtList, responseHeader.dataLength, WRITE_TIMEOUT_IN_SECONDS);
		else
			dputs("[sectionsd] Fehler/Timeout bei write");
	}
	delete[] evtList;
	delete[] event;
	return ;
}
hier ein Fix.
Kann zur Zeit leider nicht einchecken, vielleicht tust du es für mich  
