diff --git a/w9/dbidx.c b/w9/dbidx.c index b7785ea..2bd4a35 100644 --- a/w9/dbidx.c +++ b/w9/dbidx.c @@ -37,10 +37,12 @@ *------------------------------------------------------------------- */ +#include "os.h" #include "dbidx.h" #include #include #include +#include #define MAXLINE 1024 @@ -48,7 +50,11 @@ /* Global variables */ char dbsource[32]=""; +#if BIG_ENDIAN +int Reversebytes = 0; +#else int Reversebytes = 1; +#endif int search = 0; int display_head = 0; int fasta = 0; @@ -119,14 +125,21 @@ Header *readheader(FILE *idx) } rewind(idx); - if (fread(&head->file_size, 4, 1, idx) != 1) return NULL; - if (Reversebytes) reversebytes((char *)&head->file_size, 4); - if (fread(&head->nrecords, 4, 1, idx) != 1) return NULL; - if (Reversebytes) reversebytes((char *)&head->nrecords, 4); + uint32_t tmp_file_size; + if (fread(&tmp_file_size, 4, 1, idx) != 1) return NULL; + if (Reversebytes) reversebytes((char *)&tmp_file_size, 4); + head->file_size = tmp_file_size; - if (fread(&head->record_size, 2, 1, idx) != 1) return NULL; - if (Reversebytes) reversebytes((char *)&head->record_size, 2); + uint32_t tmp_nrecords; + if (fread(&tmp_nrecords, 4, 1, idx) != 1) return NULL; + if (Reversebytes) reversebytes((char *)&tmp_nrecords, 4); + head->nrecords = tmp_nrecords; + + uint16_t tmp_rec_size; + if (fread(&tmp_rec_size, 2, 1, idx) != 1) return NULL; + if (Reversebytes) reversebytes((char *)&tmp_rec_size, 2); + head->record_size = tmp_rec_size; head->entry_name_size = head->record_size - 10; /* Each record has 10 bytes in use (ver. 1.4)*/ @@ -172,11 +185,15 @@ Acnum *readActrg(FILE *idx, Header *head, int pos) fseek(idx, 300 + head->record_size*pos, 0); - if (fread(&rec.nhits, 4, 1, idx) != 1) return NULL; - if (Reversebytes) reversebytes((char *)&rec.nhits, 4); + uint32_t tmp_nhits; + if (fread(&tmp_nhits, 4, 1, idx) != 1) return NULL; + if (Reversebytes) reversebytes((char *)&tmp_nhits, 4); + rec.nhits = tmp_nhits; - if (fread(&rec.hit_rec_num, 4, 1, idx) != 1) return NULL; - if (Reversebytes) reversebytes((char *)&rec.hit_rec_num, 4); + uint32_t tmp_hit_rec_num; + if (fread(&tmp_hit_rec_num, 4, 1, idx) != 1) return NULL; + if (Reversebytes) reversebytes((char *)&tmp_hit_rec_num, 4); + rec.hit_rec_num = tmp_hit_rec_num; if (fread(rec.acnum, name_size, 1, idx) != 1) return NULL; rec.acnum[name_size] = '\0'; @@ -198,14 +215,20 @@ Entrynam *readEntrynam(FILE *idx, Header *head, int pos) if( space = (char *)strchr(rec.entry_name, ' ') ) *space = '\0'; - if (fread(&rec.ann_offset, 4, 1, idx) != 1) return NULL; - if (Reversebytes) reversebytes((char *)&rec.ann_offset, 4); + uint32_t tmp_ann_offset; + if (fread(&tmp_ann_offset, 4, 1, idx) != 1) return NULL; + if (Reversebytes) reversebytes((char *)&tmp_ann_offset, 4); + rec.ann_offset = tmp_ann_offset; - if (fread(&rec.seq_offset, 4, 1, idx) != 1) return NULL; + uint32_t tmp_seq_offset; + if (fread(&tmp_seq_offset, 4, 1, idx) != 1) return NULL; if (Reversebytes) reversebytes((char *)&rec.seq_offset, 4); + rec.seq_offset = tmp_seq_offset; - if (fread(&rec.div_code, 2, 1, idx) != 1) return NULL; - if (Reversebytes) reversebytes((char *)&rec.div_code, 2); + uint16_t tmp_div_code; + if (fread(&tmp_div_code, 2, 1, idx) != 1) return NULL; + if (Reversebytes) reversebytes((char *)&tmp_div_code, 2); + rec.div_code = tmp_div_code; return &rec; } @@ -219,14 +242,20 @@ Entrynam *readnextEntrynam(FILE *idx, Header *head) if (fread(rec.entry_name, name_size, 1, idx) != 1) return NULL; rec.entry_name[name_size] = '\0'; - if (fread(&rec.ann_offset, 4, 1, idx) != 1) return NULL; - if (Reversebytes) reversebytes((char *)&rec.ann_offset, 4); + uint32_t tmp_ann_offset; + if (fread(&tmp_ann_offset, 4, 1, idx) != 1) return NULL; + if (Reversebytes) reversebytes((char *)&tmp_ann_offset, 4); + rec.ann_offset = tmp_ann_offset; - if (fread(&rec.seq_offset, 4, 1, idx) != 1) return NULL; - if (Reversebytes) reversebytes((char *)&rec.seq_offset, 4); + uint32_t tmp_seq_offset; + if (fread(&tmp_seq_offset, 4, 1, idx) != 1) return NULL; + if (Reversebytes) reversebytes((char *)&tmp_seq_offset, 4); + rec.seq_offset = tmp_seq_offset; - if (fread(&rec.div_code, 2, 1, idx) != 1) return NULL; - if (Reversebytes) reversebytes((char *)&rec.div_code, 2); + uint16_t tmp_div_code; + if (fread(&tmp_div_code, 2, 1, idx) != 1) return NULL; + if (Reversebytes) reversebytes((char *)&tmp_div_code, 2); + rec.div_code = tmp_div_code; return &rec; } @@ -612,8 +641,9 @@ char *getdbfile(int div_code, char *divfile) for (i=0; i < divhead->nrecords; i++) { - if (fread(&code, 2, 1, div) != 1) return NULL; - if (Reversebytes) reversebytes((char *)&code, 2); + uint16_t tmp_code; + if (fread(&tmp_code, 2, 1, div) != 1) return NULL; + if (Reversebytes) reversebytes((char *)&tmp_code, 2); if (fread(name, name_size, 1, div) != 1) return NULL; @@ -739,11 +769,13 @@ int getAcentry_rec_num(FILE *achit, Header *achithead, int offset) offset); exit(1); } - if (fread(&entry_rec_num, 4, 1, achit) != 1) { + uint32_t tmp; + if (fread(&tmp, 4, 1, achit) != 1) { fprintf(stderr, "\nError reading ACNUM.HIT at offset %d\n", offset); exit(1); } - if (Reversebytes) reversebytes((char *)&entry_rec_num, 4); + if (Reversebytes) reversebytes((char *)&tmp, 4); + entry_rec_num = tmp; if (display_head) printf("Entry record number: %u\n%", entry_rec_num); return (int)(entry_rec_num - 1); }