View Issue Details [ Jump to Notes ] | [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0005880 | ITK | public | 2007-10-13 16:05 | 2007-11-26 10:51 | |||||
Reporter | S Pieper | ||||||||
Assigned To | Bill Lorensen | ||||||||
Priority | normal | Severity | minor | Reproducibility | always | ||||
Status | closed | Resolution | fixed | ||||||
Platform | OS | OS Version | |||||||
Product Version | |||||||||
Target Version | Fixed in Version | ||||||||
Summary | 0005880: ITK_AUTOLOAD_PATH doesn't work when more than one separator | ||||||||
Description | If I add the print statements in ObjectFactoryBase::LoadDynamicFactories()as shown in the Additional Information section below, and then I set ITK_AUTOLOAD_PATH to a string with more than one separator character I get the following: path is /Users/pieper/slicer3/latest/Slicer3-build/bin:/tmp:/usr CurrentPath is /Users/pieper/slicer3/latest/Slicer3-build/bin CurrentPath is /tmp:/usr CurrentPath is /usr done loading That is, the middle path is not correctly extracted. | ||||||||
Additional Information | /** * Load all libraries in ITK_AUTOLOAD_PATH */ void ObjectFactoryBase ::LoadDynamicFactories() { /** * follow PATH conventions */ #ifdef _WIN32 char PathSeparator = ';'; #else char PathSeparator = ':'; #endif std::string LoadPath; if (getenv("ITK_AUTOLOAD_PATH")) { LoadPath = getenv("ITK_AUTOLOAD_PATH"); } else { return; } if(LoadPath.size() == 0) { return; } std::string::size_type EndSeparatorPosition = 0; std::string::size_type StartSeparatorPosition = 0; std::cerr << "path is " << LoadPath << "\n"; while ( StartSeparatorPosition != std::string::npos ) { StartSeparatorPosition = EndSeparatorPosition; /** * find PathSeparator in LoadPath */ EndSeparatorPosition = LoadPath.find(PathSeparator, StartSeparatorPosition); if(EndSeparatorPosition == std::string::npos) { EndSeparatorPosition = LoadPath.size(); } std::string CurrentPath = LoadPath.substr(StartSeparatorPosition, EndSeparatorPosition); std::cerr << "CurrentPath is " << CurrentPath << "\n"; ObjectFactoryBase::LoadLibrariesInPath(CurrentPath.c_str()); /** * move past separator */ if(EndSeparatorPosition == LoadPath.size()) { StartSeparatorPosition = std::string::npos; } else { EndSeparatorPosition++; } } std::cerr << "done loading\n"; } | ||||||||
Tags | No tags attached. | ||||||||
Resolution Date | |||||||||
Sprint | |||||||||
Sprint Status | |||||||||
Attached Files | |||||||||
Relationships | |
Relationships |
Notes | |
(0009629) Bill Lorensen (developer) 2007-11-04 20:36 |
I added the print statements suggested by Steve and reproduced the problem. |
(0009630) Bill Lorensen (developer) 2007-11-04 20:39 |
The logic in the path parsing was flawed. The std::string substr method was being used incorrectly. The second argument is the length of the substring, not the position of the end of the substring. |
Notes |
Issue History | |||
Date Modified | Username | Field | Change |
2007-10-13 16:05 | S Pieper | New Issue | |
2007-10-27 12:15 | Bill Lorensen | Status | new => assigned |
2007-10-27 12:15 | Bill Lorensen | Assigned To | => Bill Lorensen |
2007-11-04 20:36 | Bill Lorensen | Note Added: 0009629 | |
2007-11-04 20:36 | Bill Lorensen | Status | assigned => confirmed |
2007-11-04 20:39 | Bill Lorensen | Status | confirmed => resolved |
2007-11-04 20:39 | Bill Lorensen | Resolution | open => fixed |
2007-11-04 20:39 | Bill Lorensen | Note Added: 0009630 | |
2007-11-26 10:51 | Bill Lorensen | Status | resolved => closed |
Issue History |
Copyright © 2000 - 2018 MantisBT Team |