Bug #784

Parsing of config files depends on OS-specific line ends

Added by Anonymous over 12 years ago. Updated over 12 years ago.

Status:ResolvedStart date:01/04/2012
Priority:NormalDue date:
Assignee:J. Wienke% Done:

80%

Category:Configuration
Target version:0.6

Description

I set up rsb on Linux as well as Windoze (in that order) and once the rsb_informer/rsb_listener example worked, went on and just copied the Lunix-style rsb.conf file over to Windoze.

However, it seems the configuration file is not parsed at all with "unexpected" line ends and indeed no error message is provided. IMHO this should be changed to be OS-independent or - lacking the former - at least point out an invalid configuration file to the user.


Related issues

Blocks Robotics Service Bus - Bug #785: Parsing of rsb.conf depends on OS-specific line ends Resolved 01/04/2012

Associated revisions

Revision d0d64f7b
Added by J. Wienke over 12 years ago

  • let the ConfigFileSource test compile again on windows
  • use multiple line end formats for the test
    refs #784

History

#1 Updated by J. Wienke over 12 years ago

  • Project changed from Robotics Service Bus to Robotics Systems Commons
  • Category deleted (Configuration)
  • Assignee set to J. Wienke

This parsing is part of RSC. Move to that project.

#2 Updated by J. Wienke over 12 years ago

  • Category set to Configuration
  • Target version set to 0.6

#3 Updated by J. Wienke over 12 years ago

  • Subject changed from Parsing of rsb.conf depends on OS-specific line ends to Parsing of config files depends on OS-specific line ends
  • Description updated (diff)

#4 Updated by J. Wienke over 12 years ago

  • Status changed from New to In Progress

#5 Updated by J. Wienke over 12 years ago

Jan, I've noticed that we are not executing the ConfigFileSource test on Windows at all. Can you remember what the reason was?

#6 Updated by J. Wienke over 12 years ago

Ok, there was a compilation problem. I have narrowed it down to the fact that compilation fails as soon as the test file contains a definition of

map<string, any>

Errors are:
LINK : ..\build\rsctest.exe wurde nicht gefunden oder beim letzten inkrementellen Linkvorgang nicht erstellt; vollstõndiger Link wird durchgef³hrt.
rsc.lib(rsc.dll) : error LNK2005: "public: static struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const
 ,class boost::any> & __cdecl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,cla
ss boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<c
lass std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Myval(struct std::_Tree_nod<class std::
_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<c
har,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char
>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node *)" (?_Myval@?$_Tree_val@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocat
or@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std
@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@std@@SAAAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@2@PAU_N
ode@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allo
cator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@2@@Z) ist bereits in C
onfigFileSourceTest.cpp.obj definiert.
rsc.lib(rsc.dll) : error LNK2005: "public: static char & __cdecl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<cha
r>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,clas
s std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Isni
l(struct std::_Tree_nod<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct
std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_strin
g<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node *)" (?_Isnil@?$_Tree_val@V?$_Tmap_traits@V?$basic_strin
g@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?
$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@std@@SAAADPAU_Node@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$c
har_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_
string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@2@@Z) ist bereits in ConfigFileSourceTest.cpp.obj definiert.
rsc.lib(rsc.dll) : error LNK2005: "public: static struct std::_Tree_nod<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class
 std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::a
llocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node * & __c
decl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std:
:less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<ch
ar,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Parent(struct std::_Tree_nod<class std::_Tmap_traits<class std::
basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_tra
its<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<c
har> > const ,class boost::any> >,0> >::_Node *)" (?_Parent@?$_Tree_val@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost
@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std
@@Vany@boost@@@std@@@2@$0A@@std@@@std@@SAAAPAU_Node@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$les
s@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@b
oost@@@std@@@2@$0A@@std@@@2@PAU342@@Z) ist bereits in ConfigFileSourceTest.cpp.obj definiert.
rsc.lib(rsc.dll) : error LNK2005: "public: static struct std::_Tree_nod<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class
 std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::a
llocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node * __cde
cl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::l
ess<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char
,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Min(struct std::_Tree_nod<class std::_Tmap_traits<class std::basic
_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<c
har>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char>
> const ,class boost::any> >,0> >::_Node *)" (?_Min@?$_Tree_val@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$les
s@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@b
oost@@@std@@@2@$0A@@std@@@std@@SAPAU_Node@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic
_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std
@@@2@$0A@@std@@@2@PAU342@@Z) ist bereits in ConfigFileSourceTest.cpp.obj definiert.
rsc.lib(rsc.dll) : error LNK2005: "public: static struct std::_Tree_nod<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class
 std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::a
llocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node * & __c
decl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std:
:less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<ch
ar,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Right(struct std::_Tree_nod<class std::_Tmap_traits<class std::b
asic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_trai
ts<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<ch
ar> > const ,class boost::any> >,0> >::_Node *)" (?_Right@?$_Tree_val@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@
U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@
Vany@boost@@@std@@@2@$0A@@std@@@std@@SAAAPAU_Node@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@
V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boo
st@@@std@@@2@$0A@@std@@@2@PAU342@@Z) ist bereits in ConfigFileSourceTest.cpp.obj definiert.
..\build\rsctest.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.
LINK failed. with 2
NMAKE : fatal error U1077: ""C:\Program Files\CMake 2.8\bin\cmake.exe"": Rückgabe-Code "0xffffffff" 
Stop.
NMAKE : fatal error U1077: ""C:\Program Files\Microsoft Visual Studio 10.0\VC\BIN\nmake.exe"": Rückgabe-Code "0x2" 
Stop.
NMAKE : fatal error U1077: ""C:\Program Files\Microsoft Visual Studio 10.0\VC\BIN\nmake.exe"": Rückgabe-Code "0x2" 
Stop.

As soon as one minor thing with the map is changed every problem is gone. E.g. if string is exchanged with int or event making it a map<any, string> everything works again.

#7 Updated by J. Wienke over 12 years ago

The only other definition of map<string, any> is Properties. But I could not find any of the conflicting functions in there.

#8 Updated by J. Wienke over 12 years ago

Further observation by using /VERBOSE linker flag:

      "__declspec(dllimport) public: static char & __cdecl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Isnil(struct std::_Tree_nod<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node *)" (__imp_?_Isnil@?$_Tree_val@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@std@@SAAADPAU_Node@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@2@@Z) gefunden.

        In "PropertiesTest.cpp.obj" referenziert

        "rsc.lib(rsc.dll)" geladen

rsc.lib(rsc.dll) : error LNK2005: "public: static char & __cdecl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Isnil(struct std::_Tree_nod<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node *)" (?_Isnil@?$_Tree_val@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@std@@SAAADPAU_Node@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@2@@Z) ist bereits in ConfigFileSourceTest.cpp.obj definiert.

As visible, all Failures originate from PropertiesTest, not the config parser test.

#9 Updated by J. Wienke over 12 years ago

  • Status changed from In Progress to Resolved
  • % Done changed from 0 to 80

I have implemented a workaround by using Properties instead of the map. Also I have added a smoke test with unix and windows line endings. No error could be found with these. So the problems must be caused by something different.

Robert, can you please watch bug #785 for further discussion.

Also available in: Atom PDF