Make Gigabeat's scramble endian-safe.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12892 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
e5b77b1a47
commit
149a7bab5b
|
@ -26,6 +26,21 @@
|
|||
|
||||
int iaudio_decode(char *iname, char *oname);
|
||||
|
||||
unsigned int le2int(unsigned char* buf)
|
||||
{
|
||||
int32_t res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
void int2le(unsigned int val, unsigned char* addr)
|
||||
{
|
||||
addr[0] = val & 0xFF;
|
||||
addr[1] = (val >> 8) & 0xff;
|
||||
addr[2] = (val >> 16) & 0xff;
|
||||
addr[3] = (val >> 24) & 0xff;
|
||||
}
|
||||
|
||||
void usage(void)
|
||||
{
|
||||
printf("usage: descramble [options] <input file> <output file>\n");
|
||||
|
|
|
@ -49,6 +49,7 @@ int gigabeat_code(char *infile, char *outfile)
|
|||
FILE *in, *out;
|
||||
unsigned long size = 0;
|
||||
unsigned long bytes_read;
|
||||
unsigned char buf[4];
|
||||
unsigned long data;
|
||||
unsigned long key = 0x19751217;
|
||||
|
||||
|
@ -56,8 +57,11 @@ int gigabeat_code(char *infile, char *outfile)
|
|||
out = openoutfile(outfile);
|
||||
|
||||
while (!feof(in)) {
|
||||
bytes_read = fread(&data, 1, 4, in);
|
||||
bytes_read = fread(buf, 1, 4, in);
|
||||
|
||||
/* Read in little-endian */
|
||||
data = le2int(buf);
|
||||
|
||||
data = data ^ key;
|
||||
|
||||
key = key + (key << 1);
|
||||
|
@ -65,7 +69,10 @@ int gigabeat_code(char *infile, char *outfile)
|
|||
|
||||
size += bytes_read;
|
||||
|
||||
fwrite(&data, 1, bytes_read, out);
|
||||
/* Write out little-endian */
|
||||
int2le(data, buf);
|
||||
|
||||
fwrite(buf, 1, bytes_read, out);
|
||||
}
|
||||
|
||||
fprintf(stderr, "File processed successfully\n" );
|
||||
|
|
|
@ -52,6 +52,13 @@ void short2le(unsigned short val, unsigned char* addr)
|
|||
addr[1] = (val >> 8) & 0xff;
|
||||
}
|
||||
|
||||
unsigned int le2int(unsigned char* buf)
|
||||
{
|
||||
int32_t res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
void int2le(unsigned int val, unsigned char* addr)
|
||||
{
|
||||
addr[0] = val & 0xFF;
|
||||
|
|
Loading…
Reference in New Issue