Skip to content

Commit

Permalink
Merge pull request #567 from nomis52/master
Browse files Browse the repository at this point in the history
Fix some high impact defects.
  • Loading branch information
nomis52 committed Dec 9, 2014
2 parents 031a36a + d10caac commit 28bf5ab
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 23 deletions.
23 changes: 14 additions & 9 deletions common/rdm/SubDeviceDispatcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,15 +77,20 @@ void SubDeviceDispatcher::FanOutToSubDevices(
}

// Fan out to all sub devices but don't include the root device
SubDeviceMap::iterator iter = m_subdevices.begin();
FanOutTracker *tracker = new FanOutTracker(m_subdevices.size(), callback);

for (; iter != m_subdevices.end(); ++iter) {
iter->second->SendRDMRequest(
request->Duplicate(),
NewSingleCallback(this,
&SubDeviceDispatcher::HandleSubDeviceResponse,
tracker));
if (m_subdevices.empty()) {
vector<string> packets;
callback->Run(ola::rdm::RDM_WAS_BROADCAST, NULL, packets);
} else {
SubDeviceMap::iterator iter = m_subdevices.begin();
FanOutTracker *tracker = new FanOutTracker(m_subdevices.size(), callback);

for (; iter != m_subdevices.end(); ++iter) {
iter->second->SendRDMRequest(
request->Duplicate(),
NewSingleCallback(this,
&SubDeviceDispatcher::HandleSubDeviceResponse,
tracker));
}
}
}

Expand Down
10 changes: 6 additions & 4 deletions include/ola/base/FlagsPrivate.h
Original file line number Diff line number Diff line change
Expand Up @@ -193,10 +193,12 @@ class Flag<bool> : public BaseFlag {
m_has_arg(has_arg) {
if (!has_arg && default_value) {
// prefix the long option with 'no'
size_t total_size = strlen(NO_PREFIX) + strlen(name) + 1;
char* new_name = new char[total_size];
strncpy(new_name, NO_PREFIX, strlen(NO_PREFIX) + 1);
strncat(new_name, name, total_size);
size_t prefix_size = strlen(NO_PREFIX);
size_t name_size = strlen(name);
char* new_name = new char[prefix_size + name_size + 1];
memcpy(new_name, NO_PREFIX, prefix_size);
memcpy(new_name + prefix_size, name, name_size);
new_name[prefix_size + name_size] = 0;
ReplaceUnderscoreWithHyphen(new_name);
m_name = new_name;
} else {
Expand Down
25 changes: 15 additions & 10 deletions plugins/dummy/DummyPort.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,16 +136,21 @@ void DummyPort::SendRDMRequest(const ola::rdm::RDMRequest *request,
ola::rdm::RDMCallback *callback) {
UID dest = request->DestinationUID();
if (dest.IsBroadcast()) {
broadcast_request_tracker *tracker = new broadcast_request_tracker;
tracker->expected_count = m_responders.size();
tracker->current_count = 0;
tracker->failed = false;
tracker->callback = callback;
for (ResponderMap::iterator i = m_responders.begin();
i != m_responders.end(); i++) {
i->second->SendRDMRequest(
request->Duplicate(),
NewSingleCallback(this, &DummyPort::HandleBroadcastAck, tracker));
if (m_responders.empty()) {
vector<string> packets;
callback->Run(ola::rdm::RDM_WAS_BROADCAST, NULL, packets);
} else {
broadcast_request_tracker *tracker = new broadcast_request_tracker;
tracker->expected_count = m_responders.size();
tracker->current_count = 0;
tracker->failed = false;
tracker->callback = callback;
for (ResponderMap::iterator i = m_responders.begin();
i != m_responders.end(); i++) {
i->second->SendRDMRequest(
request->Duplicate(),
NewSingleCallback(this, &DummyPort::HandleBroadcastAck, tracker));
}
}
delete request;
} else {
Expand Down

0 comments on commit 28bf5ab

Please sign in to comment.