static bcspec_t * bcspec_new(plugin_t * plt, octet_t * spec) { octet_t oct; bcspec_t *bcs = 0; plugin_t *p; int n; /* * two parts name ":" typespec */ if ((n = octchr(spec, ':')) < 0) { oct_print( LOG_ERR, "Error in boundary condition specification", spec); return 0; } oct.len = spec->len - n - 1; oct.val = spec->val + n + 1; spec->len = n; if ((p = plugin_match(plt, spec)) == 0) { traceLog(LOG_ERR,"Doesn't match any known plugin",spec); return 0; } bcs = (bcspec_t *) Calloc(1,sizeof(bcspec_t)); bcs->plugin = p; bcs->name = oct2strdup(spec, 0); bcs->spec = octdup(&oct); return bcs; }
spocp_result_t rule_rm(junc_t * jp, octet_t * rule, ruleinst_t * rt) { element_t *ep = 0; int r = 1; /* default SUCCESS? well sort of */ spocp_result_t rc; octet_t loc; DEBUG(SPOCP_DSTORE) { oct_print(LOG_DEBUG,"- rm rule", rule); } /* * decouple */ loc.val = rule->val; loc.len = rule->len; if ((rc = element_get(&loc, &ep)) != SPOCP_SUCCESS) return rc; DEBUG(SPOCP_DSTORE) traceLog(LOG_DEBUG,"---"); if (ep) { r = element_rm(jp, ep, rt); } if (r == 1) return SPOCP_SUCCESS; else return SPOCP_OPERATIONSERROR; }
JNIEXPORT void JNICALL Java_org_sosy_1lab_cpachecker_util_octagon_OctWrapper_J_1print (JNIEnv *env, jobject obj, jlong oct1){ oct_print ((oct_t *)oct1); }
int read_rules(srv_t * srv, char *file, dbcmd_t * dbc) { FILE *fp; char *sp, *tmp; int n = 0, f = 0, r; octet_t *op; octarr_t *oa = 0; ruleset_t *rs = 0, *trs, *prs; spocp_result_t rc = SPOCP_SUCCESS; spocp_charbuf_t *buf; spocp_chunk_t *chunk = 0, *ck; spocp_chunkwrap_t *cw; spocp_ruledef_t rdef; struct stat statbuf; if ((fp = fopen(file, "r")) == 0) { LOG(SPOCP_EMERG) traceLog(LOG_ERR,"couldn't open rule file \"%s\"", file); op = oct_new( 256, NULL); sp = getcwd(op->val, op->size); traceLog(LOG_ERR,"I'm in \"%s\"", sp); oct_free(op); return -1; } stat( file, &statbuf); srv->mtime = statbuf.st_mtime; /* * The default ruleset should already be set */ if (srv->root == 0) { srv->root = rs = ruleset_new(0); } else rs = srv->root; if (rs->db == 0) rs->db = db_new(); buf = charbuf_new( fp, BUFSIZ ); if (get_more(buf) == 0) return 0; /* * have to escape CR since fgets stops reading when it hits a newline * NUL also has to be escaped since I have problem otherwise finding * the length of the 'string'. '\' hex hex is probably going to be the * choice */ while (rc == SPOCP_SUCCESS ) { cw = get_object( buf, 0 ); if (cw->status == 0) { Free(cw); break; } else if (cw->status == -1) { rc = SPOCP_LOCAL_ERROR; Free(cw); break; } else { chunk = cw->chunk; Free(cw); } if (oct2strcmp(chunk->val, ";include ") == 0) { /* include * file */ ck = chunk->next; tmp = oct2strdup( ck->val, 0 ) ; LOG(SPOCP_DEBUG) traceLog(LOG_DEBUG,"include directive \"%s\"", tmp); if ((rc = read_rules(srv, tmp, dbc)) < 0) { traceLog(LOG_ERR,"Include problem"); } } else if (*chunk->val->val == '/' || *chunk->val->val == '(') { trs = rs; if (*chunk->val->val == '/') { #ifdef AVLUS oct_print(LOG_INFO,"ruleset", chunk->val); #endif if ((trs = ruleset_find( chunk->val, rs)) == NULL) { octet_t oct; octln( &oct, chunk->val); rs = ruleset_create(chunk->val, rs); trs = ruleset_find(&oct, rs); trs->db = db_new(); } ck = chunk->next; } else { ck = chunk; } ruledef_return( &rdef, ck ) ; if( rdef.rule ) { op = chunk2sexp( rdef.rule ) ; oa = octarr_add(oa, op) ; LOG(SPOCP_DEBUG) { traceLog(LOG_DEBUG,"We've got a rule"); } } if( rdef.bcond) { op = chunk2sexp( rdef.bcond ) ; oa = octarr_add(oa, op) ; LOG(SPOCP_DEBUG) { traceLog(LOG_DEBUG,"We've got a boundary condition"); } }