void LaunchDaemon::_AddTargets(BMessage& message) { BMessage targetMessage; for (int32 index = 0; message.FindMessage("target", index, &targetMessage) == B_OK; index++) { const char* name = targetMessage.GetString("name"); if (name == NULL) { // TODO: log error debug_printf("Target has no name, ignoring it!\n"); continue; } Target* target = FindTarget(name); if (target == NULL) { target = new Target(name); _AddTarget(target); } else if (targetMessage.GetBool("reset")) { // Remove all jobs from this target for (JobMap::iterator iterator = fJobs.begin(); iterator != fJobs.end();) { Job* job = iterator->second; JobMap::iterator remove = iterator++; if (job->Target() == target) { fJobs.erase(remove); delete job; } } } _SetCondition(target, targetMessage); _SetEvent(target, targetMessage); _SetEnvironment(target, targetMessage); _AddJobs(target, targetMessage); if (target->Event() != NULL) target->Event()->Register(*this); } }