Fix endianness of decodeflow

This commit is contained in:
Ron Pedde 2007-01-29 04:56:18 +00:00
parent e9a2c26465
commit 874821fbe1

View File

@ -169,7 +169,7 @@ int lookup_tag(char *tag, char *descr, int *type) {
return 0;
}
int decode_tag(FILE *fout, char *current, int level, int len) {
int decode_tag(FILE *fout, unsigned char *current, int level, int len) {
int type;
int subtag_len;
int tempint;
@ -179,13 +179,24 @@ int decode_tag(FILE *fout, char *current, int level, int len) {
char line[4096];
char templine[4096];
unsigned char cval;
unsigned short int sival;
unsigned int ival;
unsigned long long lival;
while(len) {
memset(tag,0,sizeof(tag));
memcpy(tag,current,4);
current += 4;
len -= 4;
memcpy((char*)&subtag_len,current,4);
subtag_len = current[0] << 24 |
current[1] << 16 |
current[2] << 8 |
current[3];
// fprintf(stderr,"Tag: %c%c%c%c, subtag len: %d, len: %d\n",
// tag[0],tag[1],tag[2],tag[3],subtag_len, len);
current += 4;
len -= 4;
@ -202,7 +213,8 @@ int decode_tag(FILE *fout, char *current, int level, int len) {
tag,subtag_len);
exit(EXIT_FAILURE);
}
sprintf(templine,"%02x (%d)\n",*((char*)current),(int)(*((char*)current)));
cval = *current;
sprintf(templine,"%02x (%d)\n",cval, (int)cval);
current += 1;
len -= 1;
break;
@ -213,7 +225,9 @@ int decode_tag(FILE *fout, char *current, int level, int len) {
tag,subtag_len);
exit(EXIT_FAILURE);
}
sprintf(templine,"%02x %d\n",*((short int*)current),(int)(*((short int *)current)));
sival = current[0] << 8 |
current[1];
sprintf(templine,"%02x %d\n",sival,(int)sival);
current += 2;
len -= 2;
break;
@ -236,7 +250,11 @@ int decode_tag(FILE *fout, char *current, int level, int len) {
*((char*)current+3),
*((int*)current));
} else {
sprintf(templine,"%04x (%d)\n",*((int*)current),*((int*)current));
ival = current[0] << 24 |
current[1] << 16 |
current[2] << 8 |
current[3];
sprintf(templine,"%04x (%d)\n",ival,ival);
}
current += 4;
len -= 4;
@ -249,7 +267,21 @@ int decode_tag(FILE *fout, char *current, int level, int len) {
exit(EXIT_FAILURE);
}
sprintf(templine,"%04x%04x (%lu)\n",*((int*)current),*((int*)current+4),*((long long*)current));
lival = current[0] << 24 |
current[1] << 16 |
current[2] << 8 |
current[3];
lival = lival << 32;
lival = lival | current [4] << 24 |
current[5] << 16 |
current[6] << 8 |
current[7];
sprintf(templine,"%04x%04x (%lu)\n",
(unsigned int)((lival >> 32) & 0xFFFFFFFF),
(unsigned int)(lival & 0xFFFFFFFF),
lival);
current += 8;
len -= 8;
break;
@ -273,9 +305,12 @@ int decode_tag(FILE *fout, char *current, int level, int len) {
exit(EXIT_FAILURE);
}
tempint = *((int*)current);
sprintf(templine,"%d.%d\n",tempint >> 16 & 0xFFFF,
tempint & 0xFFFF);
ival = current[0] << 24 |
current[1] << 16 |
current[2] << 8 |
current[3];
sprintf(templine,"%d.%d\n",ival >> 16 & 0xFFFF,
ival & 0xFFFF);
current += 4;
len -= 4;
@ -315,7 +350,7 @@ int decode_tag(FILE *fout, char *current, int level, int len) {
void decode_dmap(int conv, char *uncompressed, long uncompressed_size) {
void decode_dmap(int conv, unsigned char *uncompressed, long uncompressed_size) {
char buffer[256];
FILE *fout;
@ -365,7 +400,7 @@ int main(int argc, char *argv[]) {
int done=0;
FILE *out;
char *compressed;
char *uncompressed;
unsigned char *uncompressed;
long compressed_size;
long uncompressed_size;
int err;
@ -403,7 +438,7 @@ int main(int argc, char *argv[]) {
out=fdopen(STDOUT_FILENO,"w");
uncompressed_size=lseek(fd,0,SEEK_END);
lseek(fd,0,SEEK_SET);
uncompressed=(char*)malloc(uncompressed_size);
uncompressed=(unsigned char*)malloc(uncompressed_size);
read(fd,uncompressed,uncompressed_size);
decode_tag(out,uncompressed,0,uncompressed_size);
exit(EXIT_SUCCESS);
@ -451,7 +486,7 @@ int main(int argc, char *argv[]) {
uncompressed_size = 20 * compressed_size;
compressed=(char*)malloc(compressed_size);
uncompressed=(char*)malloc(uncompressed_size);
uncompressed=(unsigned char*)malloc(uncompressed_size);
if((!compressed) || (!uncompressed)) {
perror("malloc");