Hi,
The attached patch seems to fix the issue for me.
Since the upstream is no longer maintaining this, can you
please suggest on how to upload the changes?
Thanks,
Pranav
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 <string.h>
#include <ctype.h>
#include <stdarg.h>
+#include <stdint.h>
#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);
}