Please use an IDE with static code analysing functionality, e.g. Eclipse,
Qt's Designer, Code::Blocks. As a consequence, you will recognise
immediatelly that you typed '.' (dot) instead of ',' (comma) in this line:
copy_path = config.project_path("%s/%s_%d_%d", basepath. wu.name, i, j);
On 31/07/12 11:48, Игорь Угай wrote:
This code of custom assimilator:
#include <vector>
#include <set>
#include <map>
#include <string>
#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <pcrecpp.h>
#include "boinc_db.h"
#include "error_numbers.h"
#include "filesys.h"
#include "sched_msgs.h"
#include "validate_util.h"
#include "sched_config.h"
#include "sched_util.h"
extern bool noinsert;
extern bool update_db;
#define RESULTS_PATH "bwaccumdir"
using namespace std;
using namespace pcrecpp;
int save_result_files(WORKUNIT& wu, vector<RESULT>& results)
{
int retval;
unsigned int i, j;
char basepath[1024];
sprintf(basepath, RESULTS_PATH"/%s", wu.name);
retval = boinc_mkdir(config.project_path(basepath));
if (retval)
{
log_messages.printf(MSG_CRITICAL, "FAILED to create directory for results %s (
%s)\n", basepath, boincerror(retval));
return retval;
}
for (i=0; i<results.size(); i++)
{
RESULT& result = results[i];
vector<FILE_INFO> output_files;
string copy_path;
get_output_file_infos(result, output_files);
unsigned int nFiles = output_files.size();
log_messages.printf(MSG_DEBUG, "ASSIMILATING %d files for result %s\n", nFiles
, result.name);
DB_RESULT res;
res = result;
char additional_xml[1024];
memset(additional_xml, 0, sizeof(additional_xml));
strcat(additional_xml, "<result_files>\n");
bool file_copied = false;
for (j=0; j<nFiles; j++)
{
FILE_INFO& fi = output_files[j];
if (nFiles == 1)
copy_path = config.project_path("%s/%s_%d", basepath, wu.name, i);
else
copy_path = config.project_path("%s/%s_%d_%d", basepath. wu.name, i, j);
log_messages.printf(MSG_DEBUG, "COPYING file %s to %s\n", fi.name.c_str(), cop
y_path.c_str());
if (boinc_copy(fi.path.c_str(), copy_path.c_str()) == 0)
{
char tmp[1024];
sprintf(tmp, "\t<result_file>%s</result_file>\n", copy_path.c_str());
strcat(additional_xml, tmp);
file_copied = true;
}
else
{
if (!fi.optional)
log_messages,printf(MSG_NORMAL, "Could not copy file %s\n", fi.name.c_str());
}
}
strcat(additional_xml, "</result_file>\n");
strcat(res.xml_doc_out, additional_xml);
if (update_db)
{
retval = res.update();
if (retval)
{
log_messages.printf(MSG_CRITICAL, "FAILED to update result %s (%s)\n", result.
name, boincerror(retval));
return retval;
}
}
}
return 0;
}
int assimilate_handler(WORKUNIT& wu, vector<RESULT>& results, RESULT& canonical
_result)
{
int retval;
log_messages.printf(MSG_NORMAL, "ASSIMILATING %d results for WU %s\n", results
.size(), wu.name);
retval = save_result_files(wu, results);
if (retval)
{
log_messages.printf(MSG_CRITICAL, "FAILED to save result files\n");
return retval;
}
return 0;
}
This is makefile:
S += assimilator.cpp validate_util.cpp izet_assimilator.cpp
BOINC = /home/boincadm/boinc
INCLUDES = -I. -I $(BOINC) -I $(BOINC)/lib -I $(BOINC)/api -I $(BOINC)/db -I $(
BOINC)/client -I $(BOINC)/tools -I $(BOINC)/sched -I /usr/include/mysql
LIBRARIES = $(BOINC)/sched/libsched.a $(BOINC)/api/libboinc_api.a $(BOINC)/lib/
libboinc.a
all:
g++ -O2 -Wall -static -o izet_assimilator $(S) $(INCLUDES) $(LIBRARIES)
This is error output:
boincadm@debian-test-x64:~/prj/izet_assimilator$ make
g++ -O2 -Wall -static -o izet_assimilator assimilator.cpp validate_util.cpp ize
t_assimilator.cpp -I. -I /home/boincadm/boinc -I /home/boincadm/boinc/lib -I /h
ome/boincadm/boinc/api -I /home/boincadm/boinc/db -I /home/boincadm/boinc/clien
t -I /home/boincadm/boinc/tools -I /home/boincadm/boinc/sched -I /usr/include/m
ysql /home/boincadm/boinc/sched/libsched.a /home/boincadm/boinc/api/libboinc_ap
i.a /home/boincadm/boinc/lib/libboinc.a
izet_assimilator.cpp: In function ‘int save_result_files(WORKUNIT&, std::vector
<RESULT, std::allocator<RESULT> >&)’:
izet_assimilator.cpp:58: error: request for member ‘wu’ in ‘basepath’, which is
of non-class type ‘char [1024]’
izet_assimilator.cpp:70: error: cannot convert ‘<anonymous enum>’ to ‘const cha
r*’ for argument ‘1’ to ‘int printf(const char*, ...)’
izet_assimilator.cpp: In function ‘int assimilate_handler(WORKUNIT&, std::vecto
r<RESULT, std::allocator<RESULT> >&, RESULT&)’:
izet_assimilator.cpp:91: warning: format ‘%d’ expects type ‘int’, but argument
4 has type ‘size_t’
make: *** [all] Error 1
_______________________________________________
boinc_dev mailing list
[1][email protected]
[2]http://lists.ssl.berkeley.edu/mailman/listinfo/boinc_dev
To unsubscribe, visit the above URL and
(near bottom of page) enter your email address.
--
!!! New e-mail address: [3][email protected]
Dipl.-Ing. (FH) Christian Benjamin Ries, M.Sc.
University of Applied Sciences Bielefeld
Department of Engineering Sciences and Mathematics
Computational Materials Science & Engineering (CMSE)
Wilhelm-Bertelsmann-Str. 10, D-33602 Bielefeld
Office: 202 (WBSII)
Phone: +49 521 106-71222
Fax: +49 521 106-71241
Web: [4]www.christianbenjaminries.de
Blog: wp.visualgrid.de
References
1. mailto:[email protected]
2. http://lists.ssl.berkeley.edu/mailman/listinfo/boinc_dev
3. mailto:[email protected]
4. http://www.christianbenjaminries.de/
_______________________________________________
boinc_dev mailing list
[email protected]
http://lists.ssl.berkeley.edu/mailman/listinfo/boinc_dev
To unsubscribe, visit the above URL and
(near bottom of page) enter your email address.