summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
25c5224)
Sharing code with evaluation of strings, now proper error handling is
done and frida won't crash if an invalid scheme file is loaded.
LOG4CXX_INFO(logger, "Initializing GUILE finished");
}
LOG4CXX_INFO(logger, "Initializing GUILE finished");
}
-int GuileInterpreter::evaluate(const std::string& command,
- std::ostream& stdout,
- std::ostream& stderr,
- std::string& result) {
-
+int GuileInterpreter::evaluateWithErrorHandling(SCM (*fun)(void *),
+ void* data,
+ std::ostream& stdout,
+ std::ostream& stderr,
+ std::string& result) {
SCM result_obj = scm_internal_catch(SCM_BOOL_T,
SCM result_obj = scm_internal_catch(SCM_BOOL_T,
- (SCM (*)(void *))scm_c_eval_string,
- (void*)command.c_str(),
handler, NULL);
SCM result_str = scm_object_to_string(result_obj, SCM_UNDEFINED);
handler, NULL);
SCM result_str = scm_object_to_string(result_obj, SCM_UNDEFINED);
scm_truncate_file(guile_output_port, scm_from_uint16(0));
scm_truncate_file(guile_error_port, scm_from_uint16(0));
scm_truncate_file(guile_output_port, scm_from_uint16(0));
scm_truncate_file(guile_error_port, scm_from_uint16(0));
+int GuileInterpreter::evaluate(const std::string& command,
+ std::ostream& stdout,
+ std::ostream& stderr,
+ std::string& result) {
+
+ return evaluateWithErrorHandling((SCM (*)(void *))scm_c_eval_string,
+ (void*)command.c_str(),
+ stdout, stderr, result);
+
+}
+
int GuileInterpreter::loadFile(const std::string& filename,
std::ostream& stdout,
std::ostream& stderr,
std::string& result) {
int GuileInterpreter::loadFile(const std::string& filename,
std::ostream& stdout,
std::ostream& stderr,
std::string& result) {
- LOG4CXX_INFO(logger, "Loading file \"" << filename << "\"");
- scm_c_primitive_load(filename.c_str());
- LOG4CXX_INFO(logger, "Finished file \"" << filename << "\"");
+ LOG4CXX_DEBUG(logger, "Loading file \"" << filename << "\"");
+ evaluateWithErrorHandling((SCM (*)(void *))scm_c_primitive_load,
+ (void*)filename.c_str(),
+ stdout, stderr, result);
+ LOG4CXX_DEBUG(logger, "Finished file \"" << filename << "\"");
std::string fileExtension() const {return "scm";}
private:
std::string fileExtension() const {return "scm";}
private:
+ int evaluateWithErrorHandling(SCM (*fun)(void *),
+ void* data,
+ std::ostream& stdout,
+ std::ostream& stderr,
+ std::string& result);
+
SCM guile_output_port;
SCM guile_error_port;
log4cxx::LoggerPtr logger;
SCM guile_output_port;
SCM guile_error_port;
log4cxx::LoggerPtr logger;