static rc_t CC CGEvidenceIntervals20_Read(const CGEvidenceIntervals15* cself, TEvidenceIntervalsData* data) { rc_t rc = 0; CG_LINE_START(cself->file, b, len, p); if( b == NULL || len == 0) { rc = RC(rcRuntime, rcFile, rcReading, rcData, rcDone); break; } /*DEBUG_MSG(10, ("evidenceIntervals: '%.*s'\n", len, b));*/ CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, data->interval_id, sizeof(data->interval_id)); CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, data->chr, sizeof(data->chr)); CG_LINE_NEXT_FIELD(b, len, p); rc = str2i32(b, p - b, &data->offset); CG_LINE_NEXT_FIELD(b, len, p); rc = str2u32(b, p - b, &data->length); CG_LINE_NEXT_FIELD(b, len, p); rc = str2u16(b, p - b, &data->ploidy); CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, data->allele_indexes, sizeof(data->allele_indexes)); CG_LINE_NEXT_FIELD(b, len, p); rc = str2i32(b, p - b, &data->scoreVAF); data->score = data->scoreVAF; /***TODO: do we need re-calculation? ***/ CG_LINE_NEXT_FIELD(b, len, p); rc = str2i32(b, p - b, &data->scoreEAF); CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, data->allele[0], sizeof(data->allele[0])); data->allele_length[0] = p - b; CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, data->allele[1], sizeof(data->allele[1])); data->allele_length[1] = p - b; CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, data->allele[2], sizeof(data->allele[2])); data->allele_length[2] = p - b; CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, data->allele[3], sizeof(data->allele[3])); data->allele_length[3] = p - b; CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, data->allele_alignment[1], sizeof(data->allele_alignment[1])); data->allele_alignment_length[1] = p - b; CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, data->allele_alignment[2], sizeof(data->allele_alignment[2])); data->allele_alignment_length[2] = p - b; CG_LINE_LAST_FIELD(b, len, p); rc = str2buf(b, p - b, data->allele_alignment[3], sizeof(data->allele_alignment[3])); data->allele_alignment_length[3] = p - b; ((CGEvidenceIntervals15*)cself)->records++; DEBUG_MSG(10, ( "evidenceIntervals: '%s'\t'%s'\t%i\t%u\t%u\t%s\t%u\t%u\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\n", data->interval_id, data->chr, data->offset, data->length, data->ploidy, data->allele_indexes, data->scoreVAF, data->scoreEAF, data->allele[0], data->allele[1], data->allele[2], data->allele[3], data->allele_alignment[1], data->allele_alignment[2], data->allele_alignment[3])); CG_LINE_END(); return rc; }
static rc_t CC CGReads15_Header(const CGReads15* cself, const char* buf, const size_t len) { rc_t rc = 0; size_t slen; CGReads15* self = (CGReads15*)cself; if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) { rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id)); } else if( strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0 ) { rc = str2u32(&buf[slen], len - slen, &self->batch_file_number); if( self->batch_file_number < 1 ) { rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange); } } else if( strncmp("BATCH_OFFSET\t", buf, slen = 13) == 0 ) { rc = str2u64(&buf[slen], len - slen, &self->batch_offset); } else if( strncmp("FIELD_SIZE\t", buf, slen = 11) == 0 ) { rc = str2u32(&buf[slen], len - slen, &self->field_size); } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) { rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at)); } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) { rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by)); } else if( strncmp("LANE\t", buf, slen = 5) == 0 ) { rc = str2buf(&buf[slen], len - slen, self->lane, sizeof(self->lane)); } else if( strncmp("LIBRARY\t", buf, slen = 8) == 0 ) { rc = str2buf(&buf[slen], len - slen, self->library, sizeof(self->library)); } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) { rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample)); } else if( strncmp("SLIDE\t", buf, slen = 6) == 0 ) { rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide)); } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) { rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version)); } else { rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized); } return rc; }
static rc_t CC CGReads25_Header(const CGReads15* cself, const char* buf, const size_t len) { rc_t rc = 0; size_t slen = 0; CGReads15* self = (CGReads15*)cself; /* from SRA-2617 files */ if (strncmp("APPROVAL\t", buf, slen = 9) == 0) { } else if (strncmp("TITLE\t", buf, slen = 6) == 0) { } else if (strncmp("ADDRESS\t", buf, slen = 8) == 0) { } /* From Table 1: Header Metadata Present in all Data Files */ else if (strncmp("CUSTOMER_SAMPLE_ID\t", buf, slen = 19) == 0) { } else if (strncmp("SAMPLE_SOURCE\t", buf, slen = 14) == 0) { } else if (strncmp("REPORTED_GENDER\t", buf, slen = 16) == 0) { } else if (strncmp("CALLED_GENDER\t", buf, slen = 14) == 0) { } else if (strncmp("TUMOR_STATUS\t", buf, slen = 13) == 0) { } else if (strncmp("LIBRARY_TYPE\t", buf, slen = 13) == 0) { } else if (strncmp("LIBRARY_SOURCE\t", buf, slen = 13) == 0) { } else if (strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0) { rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id)); } else if (strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0) { rc = str2u32(&buf[slen], len - slen, &self->batch_file_number); if (self->batch_file_number < 1) { rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange); } } else if (strncmp("BATCH_OFFSET\t", buf, slen = 13) == 0) { rc = str2u64(&buf[slen], len - slen, &self->batch_offset); } else if (strncmp("FIELD_SIZE\t", buf, slen = 11) == 0) { rc = str2u32(&buf[slen], len - slen, &self->field_size); } else if (strncmp("GENERATED_AT\t", buf, slen = 13) == 0) { rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at)); } else if (strncmp("GENERATED_BY\t", buf, slen = 13) == 0) { rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by)); } else if (strncmp("LANE\t", buf, slen = 5) == 0) { rc = str2buf(&buf[slen], len - slen, self->lane, sizeof(self->lane)); } else if (strncmp("LIBRARY\t", buf, slen = 8) == 0) { rc = str2buf(&buf[slen], len - slen, self->library, sizeof(self->library)); } else if (strncmp("SAMPLE\t", buf, slen = 7) == 0) { rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample)); } else if (strncmp("SLIDE\t", buf, slen = 6) == 0) { rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide)); } else if (strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0) { rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version)); } else { rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized); } return rc; }
int main(int argc, char* argv[]) { int o, rc; memset(&im, 0, sizeof(im)); strcpy(im.outputfile, DEFAULT_OUTPUT_FILE); strcpy(im.version, DEFAULT_VERSION); memcpy(im.magic, MAGIC_HEADER, MAGIC_LENGTH); im.flash_baseaddr = DEFAULT_FLASH_BASE; while ((o = getopt(argc, argv, "f:hm:o:p:v:z")) != -1) { switch (o) { case 'f': if (optarg) if (str2u32(optarg, &im.flash_baseaddr)) { ERROR("Invalid flash start address %s\n", optarg); return -1; } break; case 'h': usage(argv[0]); return -1; case 'm': if (optarg) { if (strlen(optarg) != MAGIC_LENGTH) { ERROR("Invalid magic %s\n", optarg); return -1; } memcpy(im.magic, optarg, MAGIC_LENGTH); } break; case 'o': if (optarg) strncpy(im.outputfile, optarg, sizeof(im.outputfile)); break; case 'p': if (optarg) { if (image_layout_add_partition(optarg)) return -1; } break; case 'v': if (optarg) strncpy(im.version, optarg, sizeof(im.version)); break; case 'z': zero_part_baseaddr = 1; break; } } rc = image_layout_verify(); if (rc) { ERROR("Failed validating firmware layout - error code: %d\n", rc); return -4; } print_image_info(); rc = build_image(); if (rc) { ERROR("Failed building image file '%s' - error code: %d\n", im.outputfile, rc); return -5; } return 0; }
static int image_layout_add_partition(const char *part_desc) { part_data_t *d; char memaddr[16]; char entryaddr[16]; char offset[16]; char length[16]; int t; if (im.part_count >= MAX_SECTIONS) { ERROR("Too many partitions specified\n"); return (-1); } d = &im.parts[im.part_count]; t = sscanf(part_desc, "%15[0-9a-zA-Z]:%15[0-9a-fA-Fx]:%15[0-9a-fA-Fx]:%15[0-9a-fA-Fx]:%15[0-9a-fA-Fx]:%256s", d->partition_name, offset, length, memaddr, entryaddr, d->filename); if (t != 6) { ERROR("Bad partition parameter %d, '%s'\n", t, part_desc); return (-1); } if (strlen(d->partition_name) == 0) { ERROR("No partition name specified in '%s'\n", part_desc); return (-1); } if (str2u32(offset, &d->partition_offset)) { ERROR("Bad offset value '%s'\n", offset); return (-1); } if (str2u32(length, &d->partition_length)) { ERROR("Bad length value '%s'\n", length); return (-1); } if (d->partition_length == 0) { int flen; flen = filelength(d->filename); if (flen < 0) { ERROR("Unable to determine size of '%s'\n", d->filename); return (-1); } d->partition_length = flen; } if (str2u32(memaddr, &d->partition_memaddr)) { ERROR("Bad memaddr vaule '%s'\n", memaddr); return (-1); } if (str2u32(entryaddr, &d->partition_entryaddr)) { ERROR("Bad entry address value '%s'\n", entryaddr); return (-1); } im.part_count++; d->partition_index = im.part_count; return 0; }
// Reads a LAMMPS input file. void LAMMPS_Data::read_data(string path) { fstream fid(path); if (!fid) { cout << "Error opening output file " << path << "!\n"; } int section=0; while (fid) { auto line = split(read_line(fid)); if (line.empty()) continue; else if (line[0]=="Masses") section=1; else if (line[0]=="Pair") section=2; else if (line[0]=="Bond") section=3; else if (line[0]=="Angle") section=4; else if (line[0]=="Dihedral") section=5; else if (line[0]=="Atoms") section=6; else if (line[0]=="Bonds") section=7; else if (line[0]=="Angles") section=8; else if (line[0]=="Dihedrals") section=9; switch (section) { case 1: if (line.size()==2) { //_system.atom_types.push_back(str2u32(line[0])); //_system.masses.push_back(str2dbl(line[1])); } break; case 6: Atom newatom; if (line.size() >= 6) { newatom.molecule = str2u32(line[1]); newatom.type = str2u32(line[2]); _system.atoms.push_back(newatom); } break; case 7: if (_system.connect.empty()) { _system.connect.assign(_system.atoms.size(), vector<int>(0)); } if (line.size()==4) { Bond newbond; //newbond.id = str2u32(line[0]); //newbond.type = str2u32(line[1]); newbond.atom1 = str2u32(line[2])-1; newbond.atom2 = str2u32(line[3])-1; //_system.bonds.push_back(newbond); _system.connect[newbond.atom1].push_back(newbond.atom2); _system.connect[newbond.atom2].push_back(newbond.atom1); } break; case 8: break; // No need to keep going. default: continue; }; } // Report total number of bonds. int num_bonds = 0; for (auto c=_system.connect.cbegin(); c!=_system.connect.cend(); ++c) { num_bonds += c->size(); } cout << "Read " << num_bonds/2 << " bonds from the input file.\n"; }
// Reads a LAMMPS dump output file, in atom format. void LAMMPS_Data::read_dump(string path) { fstream fid(path); if (!fid) cout << "Error opening output file " << path << "!\n"; else cout << "Opened dump " << path << ".\n"; SnapshotDump *step=NULL; while (fid) { auto line = trim(read_line(fid)); if (line.empty()) continue; else if (line=="ITEM: TIMESTEP") { _dump.push_back(SnapshotDump()); step = &_dump.back(); step->timestep = str2u32(trim(read_line(fid))); } else if (line=="ITEM: NUMBER OF ATOMS") { if (!step) { cout << "Error: NUMBER OF ATOMS specified before TIMESTEP\n"; exit(1); } unsigned n = str2u32(trim(read_line(fid))); step->scaled_coordinates.assign(n, Coord()); } else if (line.find("ITEM: BOX BOUNDS")==0) { if (!step) { cout << "Error: BOX BOUNDS specified before TIMESTEP\n"; exit(1); } auto xb = split(read_line(fid)); auto yb = split(read_line(fid)); auto zb = split(read_line(fid)); step->dx = fabs(str2dbl(xb.at(1))-str2dbl(xb.at(0))); step->dy = fabs(str2dbl(yb.at(1))-str2dbl(yb.at(0))); step->dz = fabs(str2dbl(zb.at(1))-str2dbl(zb.at(0))); } // The only thing left should be the ATOMS data. else { auto pieces = split(line); if (pieces.size() < 4) continue; if (pieces[0]=="ITEM:" && pieces[1]=="ATOMS") { vector<string> var(pieces.begin()+2, pieces.end()); // Search for coordinate and tag columns. step->xc = step->yc = step->zc = step->zc = -1; step->xs = step->ys = step->zs = 0; for (size_t i=0; i<var.size(); ++i) { if (var[i]=="x") {step->xc=i;} if (var[i]=="xs") {step->xc=i; step->xs=1; } if (var[i]=="y") {step->yc=i;} if (var[i]=="ys") {step->yc=i; step->ys=1; } if (var[i]=="z") {step->zc=i;} if (var[i]=="zs") {step->zc=i; step->zs=1; } if (var[i]=="id") step->tc=i; } if (step->xc<0 || step->yc<0 || step->zc<0) { cout << "Error: coordinate column not found\n"; exit(1); } if (step->tc<0) { cout << "Error: atom tag column not found.\n"; exit(1); } continue; } if (!step) { cout << "Error: data encountered before TIMESTEP\n"; exit(1); } auto maxc=max(step->tc,max(step->xc,max(step->yc,step->zc))); auto minc=min(step->tc,min(step->xc,min(step->yc,step->zc))); if (maxc >= (int)pieces.size()) { cout << "Not enough columns in dump data.\n"; exit(1); } if (minc < 0) { cout << "Missing data column in dump data.\n"; exit(1); } unsigned id = str2u32(pieces[step->tc])-1; if (step->scaled_coordinates.size() <= id) { cout << "Error: invalid atom id found " << id << "\n"; exit(1); } Coord &r = step->scaled_coordinates[id]; r.x = str2dbl(pieces[step->xc]); r.y = str2dbl(pieces[step->yc]); r.z = str2dbl(pieces[step->zc]); // Store coordinates scaled no matter what the input is. if (!step->xs) r.x = to_scaled(r.x, step->dx); if (!step->ys) r.y = to_scaled(r.y, step->dy); if (!step->zs) r.z = to_scaled(r.z, step->dz); } } }
static rc_t CC CGEvidenceDnbs_Read(const CGEvidenceDnbs15* cself, const char* interval_id, TEvidenceDnbsData* data, int score_allele_num) { rc_t rc = 0; TEvidenceDnbsData_dnb* m = NULL; static TEvidenceDnbsData_dnb next_rec; static char next_interval_id[32] = ""; /* local copy of unused TEvidenceDnbsData_dnb struct elements */ char reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN]; INSDC_coord_zero mate_offset_in_reference; char mate_reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN]; uint16_t score_allele[4] = {0, 0, 0, 0}; /* v1.5 has ScoreAllele[012]; v2.0 - [0123] */ char qual[CG_EVDNC_SPOT_LEN]; strcpy(data->interval_id, interval_id); data->qty = 0; /* already read one rec for this interval_id */ if( next_interval_id[0] != '\0' ) { if( strcmp(next_interval_id, interval_id) != 0 ) { /* nothing todo since next interval id is different */ return rc; } m = &data->dnbs[data->qty++]; memcpy(m, &next_rec, sizeof(next_rec)); DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'" "\t%i\tnot_used\t0\tnot_used\t%c\t0\t0\t0\t'%.*s'\t'--'\n", data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane, m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele, m->allele_alignment_length, m->allele_alignment, m->offset_in_reference, m->mapping_quality, m->read_len, m->read)); } do { int i = 0; char tmp[2]; CG_LINE_START(cself->file, b, len, p); if( b == NULL || len == 0 ) { next_interval_id[0] = '\0'; break; /* EOF */ } if( data->qty >= data->max_qty ) { TEvidenceDnbsData_dnb* x; data->max_qty += 100; x = realloc(data->dnbs, sizeof(*(data->dnbs)) * data->max_qty); if( x == NULL ) { rc = RC(rcRuntime, rcFile, rcReading, rcMemory, rcExhausted); break; } data->dnbs = x; } m = &data->dnbs[data->qty++]; /*DEBUG_MSG(10, ("%2hu evidenceDnbs: '%.*s'\n", data->qty, len, b));*/ CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, next_interval_id, sizeof(next_interval_id)); CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, m->chr, sizeof(m->chr)); CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, m->slide, sizeof(m->slide)); CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, m->lane, sizeof(m->lane)); CG_LINE_NEXT_FIELD(b, len, p); rc = str2u32(b, p - b, &m->file_num_in_lane); CG_LINE_NEXT_FIELD(b, len, p); rc = str2u64(b, p - b, &m->dnb_offset_in_lane_file); CG_LINE_NEXT_FIELD(b, len, p); rc = str2u16(b, p - b, &m->allele_index); CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, tmp, sizeof(tmp)); if( tmp[0] != 'L' && tmp[0] != 'R' ) { rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange); } m->side = tmp[0]; CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, tmp, sizeof(tmp)); if( tmp[0] != '+' && tmp[0] != '-' ) { rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange); } m->strand = tmp[0]; CG_LINE_NEXT_FIELD(b, len, p); rc = str2i32(b, p - b, &m->offset_in_allele); CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, m->allele_alignment, sizeof(m->allele_alignment)); m->allele_alignment_length = p - b; CG_LINE_NEXT_FIELD(b, len, p); rc = str2i32(b, p - b, &m->offset_in_reference); CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, reference_alignment, sizeof(reference_alignment)); CG_LINE_NEXT_FIELD(b, len, p); rc = str2i32(b, p - b, &mate_offset_in_reference); CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, mate_reference_alignment, sizeof(mate_reference_alignment)); CG_LINE_NEXT_FIELD(b, len, p); rc = str2buf(b, p - b, tmp, sizeof(tmp)); if( tmp[0] < 33 || tmp[0] > 126 ) { rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange); } m->mapping_quality = tmp[0]; for (i = 0; i < score_allele_num; ++i) { CG_LINE_NEXT_FIELD(b, len, p); rc = str2u16(b, p - b, &score_allele[i]); if(rc){ score_allele[i] =0; rc =0; } } CG_LINE_NEXT_FIELD(b, len, p); m->read_len = p - b; rc = str2buf(b, m->read_len, m->read, sizeof(m->read)); CG_LINE_LAST_FIELD(b, len, p); if( m->read_len != p - b ) { rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInconsistent); } else { rc = str2buf(b, p - b, qual, sizeof(qual)); } ((CGEvidenceDnbs15*)cself)->records++; if( strcmp(next_interval_id, data->interval_id) != 0 ) { if (score_allele_num == 3) { DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'" "\t%i\t'%s'\t%i\t'%s'\t%c\t%hu\t%hu\t%hu\t'%.*s'\t'%s'\n", data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane, m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele, m->allele_alignment_length, m->allele_alignment, m->offset_in_reference, reference_alignment, mate_offset_in_reference, mate_reference_alignment, m->mapping_quality, score_allele[0], score_allele[1], score_allele[2], m->read_len, m->read, qual)); } else if (score_allele_num == 4) { DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'" "\t%i\t'%s'\t%i\t'%s'\t%c\t%hu\t%hu\t%hu\t%hu\t'%.*s'\t'%s'\n", data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane, m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele, m->allele_alignment_length, m->allele_alignment, m->offset_in_reference, reference_alignment, mate_offset_in_reference, mate_reference_alignment, m->mapping_quality, score_allele[0], score_allele[1], score_allele[2], score_allele[3], m->read_len, m->read, qual)); } else { assert(0); } } CG_LINE_END(); if( next_interval_id[0] == '\0' ) { break; } if( strcmp(next_interval_id, data->interval_id) != 0 ) { /* next record is from next interval, remeber it and stop */ memcpy(&next_rec, m, sizeof(next_rec)); data->qty--; break; } } while( rc == 0 ); return rc; }