static bool read_classad_file(const char *filename, ClassAdList &classads, const char * constr) { bool success = false; FILE* file = safe_fopen_wrapper_follow(filename, "r"); if (file == NULL) { fprintf(stderr, "Can't open file of job ads: %s\n", filename); return false; } else { CondorClassAdFileParseHelper parse_helper("\n"); for (;;) { ClassAd* classad = new ClassAd(); int error; bool is_eof; int cAttrs = classad->InsertFromFile(file, is_eof, error, &parse_helper); bool include_classad = cAttrs > 0 && error >= 0; if (include_classad && constr) { classad::Value val; if (classad->EvaluateExpr(constr,val)) { if ( ! val.IsBooleanValueEquiv(include_classad)) { include_classad = false; } } } if (include_classad) { classads.Insert(classad); } else { delete classad; } if (is_eof) { success = true; break; } if (error < 0) { success = false; break; } } fclose(file); } return success; }