summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2012-06-08 01:32:34 +0200
committerManuel Traut <manut@mecka.net>2012-06-08 01:32:34 +0200
commit76de3c5a53e5bb1e872d07d969a18ab1a2f294ff (patch)
tree311e23cb947529ae04ce7a92b3ae63d6f877bbbd
parent47074177e4d6675918684fad34a6b5fe39c380e7 (diff)
libdistrio_common: return error, if lookup fails
- if requested io can't be found, a error code will be returned Signed-off-by: Manuel Traut <manut@mecka.net>
-rw-r--r--common/distrio_helper.cpp29
-rw-r--r--common/distrio_helper.h4
2 files changed, 17 insertions, 16 deletions
diff --git a/common/distrio_helper.cpp b/common/distrio_helper.cpp
index fa55d4c..6146265 100644
--- a/common/distrio_helper.cpp
+++ b/common/distrio_helper.cpp
@@ -258,53 +258,54 @@ void get_digital_list (Distrio::Digital_list_var *dig_list)
}
}
-void lookup_analog (std::string _name, Distrio::Analog_list_var ana_list,
+int lookup_analog (std::string _name, Distrio::Analog_list_var ana_list,
Distrio::Analog **ptr)
{
if (ref.init != ORB_RUNNING) {
std::cerr << "corba not initialized" << std::endl;
- return;
+ return -EINVAL;
}
for (unsigned int i = 0; i < ana_list->length (); i++) {
::CORBA::String_var name;
Distrio::Error *e;
-
try {
e = ana_list[i]->name (name);
if (!::CORBA::is_nil (e))
free (e);
+ if (! _name.compare (name.in ())) {
+ *ptr = ana_list[i];
+ return 0;
+ }
} catch (::CORBA::Exception &ex) {
std::cerr << "get name of analog io failed\n" << ex << std::cerr;
}
- if (! _name.compare (name.in ())) {
- *ptr = ana_list[i];
- return;
- }
}
+ return -EHOSTDOWN;
}
-void lookup_digital (std::string _name, Distrio::Digital_list_var dig_list,
+
+int lookup_digital (std::string _name, Distrio::Digital_list_var dig_list,
Distrio::Digital **ptr)
{
if (ref.init != ORB_RUNNING) {
std::cerr << "corba not initialized" << std::endl;
- return;
+ return -EINVAL;
}
for (unsigned int i = 0; i < dig_list->length (); i++) {
::CORBA::String_var name;
Distrio::Error *e;
-
try {
e = dig_list[i]->name (name);
if (!::CORBA::is_nil (e))
free (e);
+ if (! _name.compare (name.in ())) {
+ *ptr = dig_list[i];
+ return 0;
+ }
} catch (::CORBA::Exception &ex) {
std::cerr << "get name of digital io failed\n" << ex << std::cerr;
}
- if (! _name.compare (name.in ())) {
- *ptr = dig_list[i];
- return;
- }
}
+ return -EHOSTDOWN;
}
diff --git a/common/distrio_helper.h b/common/distrio_helper.h
index f0ad95c..3ca6592 100644
--- a/common/distrio_helper.h
+++ b/common/distrio_helper.h
@@ -59,8 +59,8 @@ void get_digital_list (Distrio::Digital_list_var *dig_list);
void get_analog_list (Distrio::Analog_list_var *ana_list);
/** lookup a digital io by a common name at the manager */
-void lookup_digital (std::string _name, Distrio::Digital_list_var dig_list,
+int lookup_digital (std::string _name, Distrio::Digital_list_var dig_list,
Distrio::Digital **ptr);
/** lookup a analog io by a common name at the manager */
-void lookup_analog (std::string _name, Distrio::Analog_list_var ana_list,
+int lookup_analog (std::string _name, Distrio::Analog_list_var ana_list,
Distrio::Analog **ptr);