27 #include <sys/types.h> 
   38 #include "analysis_xml_moduleH.h" 
   42 static char *DEFAULT_ANALYSIS_PATH[] = {
 
   43     INSTALL_LIBEXECDIR 
"/analysis",
 
   46 static char *DEFAULT_ANNOTATION_PATH[] = {
 
   47     INSTALL_SHAREDIR 
"/annotation",
 
   50 static char *DEFAULT_SCHEMA_PATH[] = {
 
   51     INSTALL_SHAREDIR 
"/schema",
 
   57 static char **ANALYSIS_PATH = (
char **)DEFAULT_ANALYSIS_PATH;
 
   58 static char **ANNOTATION_PATH = (
char **)DEFAULT_ANNOTATION_PATH;
 
   59 static char **SCHEMA_PATH = (
char **)DEFAULT_SCHEMA_PATH;
 
   61 static GHashTable *cache = NULL;
 
   63 static int next_analysis_id = 1;
 
   65 static int init_done = 0;
 
   75     gettimeofday(&tv,NULL);
 
   91     struct array_list *retval = array_list_create(8);
 
   97     for (i = 0; (dirname = ANALYSIS_PATH[
i]) != NULL; ++
i) {
 
   98     dir = opendir(dirname);
 
  104     while ((dirp = readdir(dir))) 
 
  105         array_list_append(retval,strdup(dirp->d_name));
 
  113     struct array_list *retval = array_list_create(8);
 
  123     for (i = 0; (dirname = ANALYSIS_PATH[
i]) != NULL; ++
i) {
 
  124     dir = opendir(dirname);
 
  132     path_base_len = snprintf(pbuf,PATH_MAX,
"%s/",dirname);
 
  133     pbuf_base_ptr = pbuf + path_base_len;
 
  135     while ((dirp = readdir(dir))) {
 
  136         if (dirp->d_name[0] == 
'.')
 
  139         strncpy(pbuf_base_ptr,dirp->d_name,PATH_MAX - path_base_len);
 
  140         newpath = strdup(pbuf);
 
  142         array_list_append(retval,newpath);
 
  158     for (i = 0; (dirname = ANALYSIS_PATH[
i]) != NULL; ++
i) {
 
  159     dir = opendir(dirname);
 
  165     while ((dirp = readdir(dir))) {
 
  166         if (strcmp(dirp->d_name,name) == 0) {
 
  167         len = strlen(dirp->d_name) + strlen(dirname) + 2;
 
  168         retval = 
malloc(
sizeof(
char) * len);
 
  169         snprintf(retval,len,
"%s/%s",dirname,dirp->d_name);
 
  182                     const char *desc_file_path) {
 
  188                     const char *desc_file_path) {
 
  189     struct vmi1__AnalysisDescT *analysisDesc;
 
  195     if ((fd = open(desc_file_path,O_RDONLY)) < 0) {
 
  196     verror(
"open(%s): %s\n",desc_file_path,strerror(errno));
 
  204     soap_begin_recv(&soap);
 
  205     reftab = g_hash_table_new(g_direct_hash,g_direct_equal);
 
  207     analysisDesc = soap_get_vmi1__AnalysisDescT(&soap,NULL,
"analysisDesc",NULL);
 
  209     verror(
"could not read AnalysisDesc element from %s!\n",
 
  211     g_hash_table_destroy(reftab);
 
  212     soap_end_recv(&soap);
 
  219     soap_end_recv(&soap);
 
  229     g_hash_table_destroy(reftab);
 
  254     if (stat(path,&statbuf)) 
 
  255     vwarn(
"stat(%s): %s (not using cache)\n",path,strerror(errno));
 
  257     mtime = statbuf.st_mtime;
 
  275     int path_base_len = 0;
 
  279     name = rindex(path,
'/');
 
  287     if (stat(path,&statbuf)) 
 
  288     vwarn(
"stat(%s): %s (not using cache)\n",path,strerror(errno));
 
  290     mtime = statbuf.st_mtime;
 
  293     path_base_len = snprintf(pbuf,PATH_MAX,
"%s/",path);
 
  294     pbuf_base_ptr = pbuf + path_base_len;
 
  304     strncpy(pbuf_base_ptr,
"description.xml",PATH_MAX - path_base_len);
 
  305     if (stat(pbuf,&statbuf) == 0) 
 
  310     strncpy(pbuf_base_ptr,
"description.txt",PATH_MAX - path_base_len);
 
  311     if (stat(pbuf,&statbuf)) {
 
  313         verror(
"could not read description.{xml,txt} in %s!\n",path);
 
  320     retval = analysis_load_xml(path,pbuf);
 
  339     if (!pnlist || array_list_len(pnlist) <= 0)
 
  342     i = array_list_len(pnlist);
 
  343     retval = array_list_create(i);
 
  351         verror(
"could not load analysis in %s %p %i; skipping!\n",pathname,pathname,i);
 
  357         array_list_append(retval,desc);
 
  360     array_list_free(pnlist);
 
  401     retval->
results = array_list_create(0);
 
  413     datum = 
calloc(1,
sizeof(*datum));
 
  416     datum->
values = array_list_create(1);
 
  422     datum->
name = strdup(name);
 
  427     datum->
value = strdup(value);
 
  431     datum->
msg = strdup(msg);
 
  442     if (name && !no_copy)
 
  443     v->
name = strdup(name);
 
  446     if (value && !no_copy)
 
  447     v->
value = strdup(value);
 
  451     array_list_append(datum->
values,v);
 
  463     if (name && !no_copy)
 
  464     v->
name = strdup(name);
 
  467     if (value && !no_copy) {
 
  469     memcpy(v->
value,value,len);
 
  474     array_list_append(datum->
values,v);
 
  494     array_list_free(datum->
values);
 
  499     array_list_free(datum->
values);
 
  524     analysis->
status = status;
 
  546     dir = opendir(analysis->
tmpdir);
 
  549     while ((dirp = readdir(dir))) {
 
  550         if (!strcmp(dirp->d_name,
".") || !strcmp(dirp->d_name,
"..")) 
 
  553         if (unlinkat(dfd,dirp->d_name,0)) 
 
  554         vwarn(
"could not remove %s in dir %s: %s\n",
 
  555               dirp->d_name,analysis->
tmpdir,strerror(errno));
 
  559     if (rmdir(analysis->
tmpdir))
 
  560     vwarn(
"could not remove dir %s: %s\n",
 
  561           analysis->
tmpdir,strerror(errno));
 
  579     array_list_free(analysis->
results);
 
  610     g_hash_table_iter_init(&iter,desc->
in_params);
 
  611     while (g_hash_table_iter_next(&iter,NULL,&value)) 
 
  618     g_hash_table_iter_init(&iter,desc->
out_params);
 
  619     while (g_hash_table_iter_next(&iter,NULL,&value)) 
 
  664     return ANALYSIS_PATH;
 
  679     while (*ptr != 
'\0') {
 
  685     bpath = 
calloc(pathlen + 1,
sizeof(*bpath));
 
  691     for (i = 0; nptr && *nptr != 
'\0'; ++
i) {
 
  692     nptr = index(nptr,
':');
 
  695         bpath[
i] = strdup(ptr);
 
  701         bpath[
i] = 
malloc(
sizeof(
char)*(nptr - ptr + 1));
 
  702         strncpy(bpath[i],ptr,nptr - ptr);
 
  703         bpath[
i][nptr - ptr] = 
'\0';
 
  717     char **ptr = (
char **)path;
 
  727     ANALYSIS_PATH = 
calloc(pathlen + 1,
sizeof(
char *));
 
  728     for (i = 0; i < pathlen; ++
i) 
 
  729     ANALYSIS_PATH[i] = strdup(path[i]);
 
  739     ANALYSIS_PATH = bpath;
 
  745     char **ptr = (
char **)path;
 
  755     ANNOTATION_PATH = 
calloc(pathlen + 1,
sizeof(
char *));
 
  756     for (i = 0; i < pathlen; ++
i) 
 
  757     ANNOTATION_PATH[i] = strdup(path[i]);
 
  767     ANNOTATION_PATH = bpath;
 
  773     char **ptr = (
char **)path;
 
  783     SCHEMA_PATH = 
calloc(pathlen + 1,
sizeof(
char *));
 
  784     for (i = 0; i < pathlen; ++
i) 
 
  785     SCHEMA_PATH[i] = strdup(path[i]);
 
#define vwarnopt(level, area, flags, format,...)
 
void analysis_spec_free(struct analysis_spec *spec)
 
GHashTable * in_params_long
 
int analysis_detach_evloop(struct analysis *analysis)
 
int analysis_datum_add_simple_value(struct analysis_datum *datum, char *name, char *value, int no_copy)
 
struct array_list * results
 
struct analysis_desc * x_AnalysisDescT_to_a_analysis_desc(struct soap *soap, struct vmi1__AnalysisDescT *in, GHashTable *reftab, struct analysis_desc *out)
 
char ** analysis_get_path(void)
 
static uint64_t unsigned int i
 
int target_is_evloop_attached(struct target *target, struct evloop *evloop)
 
struct analysis * analysis_create(int id, struct analysis_spec *spec, struct analysis_desc *desc, int target_id, struct target *target)
 
int target_close(struct target *target)
 
#define verror(format,...)
 
int analysis_attach_evloop(struct analysis *analysis, struct evloop *evloop)
 
struct analysis_desc * desc
 
analysis_status_t analysis_status_from_target_status(target_status_t status)
 
#define vwarn(format,...)
 
int target_attach_evloop(struct target *target, struct evloop *evloop)
 
void analysis_set_status(struct analysis *analysis, analysis_status_t status)
 
#define array_list_foreach(alist, lpc, placeholder)
 
struct analysis_spec * spec
 
void analysis_cleanup(struct analysis *analysis)
 
struct analysis_datum * analysis_create_simple_datum(struct analysis *analysis, int id, char *name, int type, char *value, char *msg, int no_copy)
 
char * analysis_find(const char *name)
 
void analysis_set_path_string(const char *path)
 
void analysis_set_annotation_path(const char **path)
 
analysis_status_t analysis_close(struct analysis *analysis)
 
int analysis_is_evloop_attached(struct analysis *analysis, struct evloop *evloop)
 
void analysis_datum_simple_value_free(struct analysis_datum_simple_value *v)
 
void analysis_param_free(struct analysis_param *param)
 
#define vdebug(devel, areas, flags, format,...)
 
REFCNT target_free(struct target *target, int force)
 
int target_detach_evloop(struct target *target)
 
void analysis_datum_free(struct analysis_datum *datum)
 
void * calloc(size_t nmemb, size_t size)
 
struct analysis_desc * analysis_load_txt(const char *path, const char *desc_file_path)
 
void analysis_desc_free(struct analysis_desc *desc)
 
struct array_list * analysis_load_all(void)
 
GHashTable * out_params_long
 
struct analysis_desc * analysis_load_pathname(const char *path)
 
struct array_list * analysis_list_names(void)
 
struct array_list * analysis_list_pathnames(void)
 
void analysis_free(struct analysis *analysis)
 
struct array_list * values
 
int target_id(struct target *target)
 
void analysis_set_path(const char **path)
 
char ** __path_string_to_vec(const char *path)
 
void analysis_set_schema_path_string(const char *path)
 
void * malloc(size_t size)
 
int analysis_datum_add_typed_value(struct analysis_datum *datum, char *name, void *value, int len, int datatype_id, int no_copy)
 
void analysis_set_annotation_path_string(const char *path)
 
struct analysis_desc * analysis_load(const char *name)
 
void analysis_datum_typed_value_free(struct analysis_datum_typed_value *v)
 
void analysis_set_schema_path(const char **path)