C: taxonomy: fixed a bug where some taxa would not be stored in the
merged index
This commit is contained in:
@ -2463,6 +2463,32 @@ int read_merged_dmp(const char* taxdump, OBIDMS_taxonomy_p tax, int32_t* delnode
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Write the rest of the taxa from the current taxa list
|
||||||
|
while (nT < (tax->taxa)->count)
|
||||||
|
{
|
||||||
|
// Add element from taxa list
|
||||||
|
// Enlarge structure if needed
|
||||||
|
if (n == buffer_size)
|
||||||
|
{
|
||||||
|
buffer_size = buffer_size * 2;
|
||||||
|
tax->merged_idx = (ecomergedidx_t*) realloc(tax->merged_idx, sizeof(ecomergedidx_t) + sizeof(ecomerged_t) * buffer_size);
|
||||||
|
if (tax->merged_idx == NULL)
|
||||||
|
{
|
||||||
|
obi_set_errno(OBI_MALLOC_ERROR);
|
||||||
|
obidebug(1, "\nError reallocating memory for a taxonomy structure");
|
||||||
|
closedir(tax_dir);
|
||||||
|
fclose(file);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(tax->merged_idx)->merged[n].taxid = (tax->taxa)->taxon[nT].taxid;
|
||||||
|
(tax->merged_idx)->merged[n].idx = nT;
|
||||||
|
|
||||||
|
nT++;
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
// Store count
|
// Store count
|
||||||
(tax->merged_idx)->count = n;
|
(tax->merged_idx)->count = n;
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ typedef struct {
|
|||||||
*/
|
*/
|
||||||
int32_t max_taxid; /**< Maximum taxid existing in the taxon index.
|
int32_t max_taxid; /**< Maximum taxid existing in the taxon index.
|
||||||
*/
|
*/
|
||||||
int32_t buffer_size; /**< Number of taxa. // TODO kept this but not sure of its use
|
int32_t buffer_size; /**< . // TODO kept this but not sure of its use
|
||||||
*/
|
*/
|
||||||
ecotx_t taxon[]; /**< Taxon array.
|
ecotx_t taxon[]; /**< Taxon array.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user