Improved the fasta parser for better memory handling and better parsing

of the last parts of fasta headers (definitions)
This commit is contained in:
Celine Mercier
2017-10-13 18:54:17 +02:00
parent 52e94bbea7
commit a258d334b1
5 changed files with 83 additions and 84 deletions

View File

@ -69,15 +69,34 @@ char* fastaSeqPtr_header_add_field(fastaSeqPtr seq, char* name, char* value)
element_from_header* table_header_add_field(element_from_header* header, char* name, char* value)
{
int nbf;
int i, j;
element_from_header* new_header;
nbf = atoi(header[0].value);
nbf++;
header = (element_from_header*) realloc(header, (nbf+1)*sizeof(element_from_header));
header[nbf].name = (char*) malloc((1+strlen(name))*sizeof(char));
strcpy(header[nbf].name, name);
header[nbf].value = (char*) malloc((1+strlen(value))*sizeof(char));
strcpy(header[nbf].value, value);
sprintf(header[0].value, "%d", nbf);
return(header);
new_header = (element_from_header*) realloc(header, ((nbf+1)*sizeof(element_from_header)));
i=0;
while ((strcmp(new_header[i].name, "definition") != 0) && (i < nbf))
i++;
if (strcmp(new_header[i].name, "definition") == 0)
{
j = nbf-1;
while (strcmp(new_header[j].name, "definition") == 0)
{
new_header[j+1].name = new_header[j].name;
new_header[j+1].value = new_header[j].value;
j--;
}
}
new_header[i].name = (char*) malloc((1+strlen(name))*sizeof(char));
strcpy(new_header[i].name, name);
new_header[i].value = (char*) malloc((1+strlen(value))*sizeof(char));
strcpy(new_header[i].value, value);
sprintf(new_header[0].value, "%d", nbf+1);
return(new_header);
}
@ -86,7 +105,7 @@ void free_header_table(element_from_header* header)
int i;
int nbf = atoi(header[0].value);
for (i = 0; i <= nbf; i++)
for (i = 0; i < nbf; i++)
{
free((header[i]).name);
free((header[i]).value);
@ -101,7 +120,7 @@ char* getItemFromHeader(char* name, element_from_header* header)
int nbf;
int i;
nbf = atoi(header[0].value);
for (i = 1; i <= nbf; i++)
for (i = 1; i < nbf; i++)
{
if (strcmp(header[i].name,name)==0)
value = header[i].value;
@ -115,7 +134,7 @@ void changeValue(element_from_header* header, char* name, char* newValue)
int i;
int nbf = atoi(header[0].value);
for (i = 1; i <= nbf; i++)
for (i = 1; i < nbf; i++)
{
if (strcmp(header[i].name, name)==0)
{