summaryrefslogtreecommitdiffstats
path: root/vmchooser/addScanners.cxx
diff options
context:
space:
mode:
authorBastian Wissler2009-06-18 10:46:36 +0200
committerBastian Wissler2009-06-18 10:46:36 +0200
commit45b942cea70dcb6e908e8494dc7d8b2f695cdce1 (patch)
tree24b8644e0b9db156494e6583146494f7306b2350 /vmchooser/addScanners.cxx
parentvmchooser: (diff)
downloadvmchooser-45b942cea70dcb6e908e8494dc7d8b2f695cdce1.tar.gz
vmchooser-45b942cea70dcb6e908e8494dc7d8b2f695cdce1.tar.xz
vmchooser-45b942cea70dcb6e908e8494dc7d8b2f695cdce1.zip
vmchooser binary source changes:
* added support for feature #426 (nodes from group specific xml in /etc/opt/openslx/vmchooser-${ENV}.xml gets added into xml to run) -> printers.sh / scanners.sh are still usable - but no more warning messages are printed. * removed some unnecessary output (also about missing printers.sh/scanners.sh) * new version 0.0.10 ;-)) * Changed CMakeLists.txt to produce a "release" binary * changed svn:ignore to ignore eclipse project files etc. git-svn-id: http://svn.openslx.org/svn/openslx/openslx-src-tools/vmchooser/trunk@2965 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'vmchooser/addScanners.cxx')
-rw-r--r--vmchooser/addScanners.cxx50
1 files changed, 27 insertions, 23 deletions
diff --git a/vmchooser/addScanners.cxx b/vmchooser/addScanners.cxx
index 3d3eb7f..0dc75bd 100644
--- a/vmchooser/addScanners.cxx
+++ b/vmchooser/addScanners.cxx
@@ -7,45 +7,49 @@
#include <vector>
#include <queue>
+#include <boost/filesystem.hpp>
+
+namespace bfs=boost::filesystem;
+
/**
* function addScanners(xmlNode* node, char* script)
* ----------------------------------------------------------
* runs content of script (absolute path of a script-file)
* -> this expects the script to print out scanner information
* in the following format
- *
+ *
* scanserver\tscanner\tscanner description
- *
+ *
* all other output has to be directed to /dev/null
- *
+ *
* then this function add some scanner-nodes to the xml-file
- * in "settings/eintrag/scanners"
+ * in "settings/eintrag/scanners"
* (which will be created also if needed.)
* in the following form: <br/>
- *
+ *
* &lt;scanner name=&quot;scanner&quot; path=&quot;//scanserver/scanner&quot; &gt;
* Scannerdescription
* &lt;/scanner&gt;
*/
bool addScanners(xmlNode* node, char* script) {
-
+
if(node == NULL) {
return false;
}
-
+
bool scanner = false;
vector<string> info_scanner;
-
+
const int MAX_LENGTH = 300;
char line[MAX_LENGTH];
char delims[] = "\t";
string strline;
FILE* inp = 0;
-
+
unsigned int tindex = 0;
xmlNodePtr cur = node->children;
xmlNodePtr scannernode = NULL;
-
+
// Get <scanners> node
while(cur != NULL) {
if (!xmlStrcmp(cur->name, (const xmlChar *)"scanners")){
@@ -64,28 +68,29 @@ bool addScanners(xmlNode* node, char* script) {
cerr << "No <scanners> node created" << endl;
}
}
-
+
// Parse input of scanner-Skript (called by "char* script")
// and write into <scanner> nodes
+ if( bfs::is_regular_file(bfs::path(script)) )
if( (inp = popen(script, "r" )) ) {
while(fgets(line, MAX_LENGTH, inp ) != NULL) {
strline = string(line);
if(strline.length() > 3) {
-
+
queue<unsigned int> temp;
temp.push( strline.find_first_of( delims , 0) );
-
+
while( temp.back() != string::npos ) {
temp.push( strline.find_first_of( delims, temp.back()+1 ) );
}
-
+
unsigned int t_front;
string tstr = string("");
while( tindex != string::npos ) {
-
+
// build scanner-info element
t_front = temp.front();
-
+
if(tindex == 0) {
tstr = strline.substr(0, t_front);
}
@@ -103,8 +108,8 @@ bool addScanners(xmlNode* node, char* script) {
tindex = t_front;
temp.pop();
}
-
- // Construct <scanner> nodes
+
+ // Construct <scanner> nodes
xmlNodePtr pNode = xmlNewNode(NULL, (const xmlChar*) "scanner");
xmlNewProp(pNode, (const xmlChar*) "name", (const xmlChar*) info_scanner.at(1).c_str());
xmlNewProp ( pNode, (const xmlChar*) "path", (const xmlChar*)
@@ -113,19 +118,18 @@ bool addScanners(xmlNode* node, char* script) {
if(info_scanner.size() > 2) {
xmlAddChild( pNode, xmlNewText( (const xmlChar*) info_scanner.at(2).c_str() ) );
}
-
+
if(pNode != NULL) {
xmlAddChild( scannernode, pNode);
}
-
+
info_scanner.clear();
tindex = 0;
}
}
pclose(inp);
- return true;
}
- fprintf(stderr, "Couldn't run \"%s\" script!", script);
- return false;
+
+ return true;
}