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.

Reply via email to