Subversion Repositories freemyipod

Rev

Rev 955 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 955 Rev 956
Line 93... Line 93...
93
                done = true;
93
                done = true;
94
            }
94
            }
95
            for (i = 0; i < 16; i++) SHA1DATAIN[i] = tmp32[i];
95
            for (i = 0; i < 16; i++) SHA1DATAIN[i] = tmp32[i];
96
        }
96
        }
97
        else for (i = 0; i < 16; i++) SHA1DATAIN[i] = *databuf++;
97
        else for (i = 0; i < 16; i++) SHA1DATAIN[i] = *databuf++;
98
        clean_dcache();  // Not sure why we need this, but apparently we do...
-
 
99
        SHA1CONFIG |= 2;
98
        SHA1CONFIG |= 2;
100
        invalidate_dcache();  // Not sure why we need this, but apparently we do...
-
 
101
        while (SHA1CONFIG & 1) sleep(0);
99
        while (SHA1CONFIG & 1) sleep(0);
102
        SHA1CONFIG |= 8;
100
        SHA1CONFIG |= 8;
103
    }
101
    }
104
    for (i = 0; i < 5; i++) *hashbuf++ = SHA1RESULT[i];
102
    for (i = 0; i < 5; i++) *hashbuf++ = SHA1RESULT[i];
105
    clockgate_enable(0, false);
103
    clockgate_enable(0, false);
Line 229... Line 227...
229
            if (flags & 2) storesize |= 0x80000000;
227
            if (flags & 2) storesize |= 0x80000000;
230
            int offs = 0;
228
            int offs = 0;
231
            if (flags & 8)
229
            if (flags & 8)
232
            {
230
            {
233
                offs = 0x800;
231
                offs = 0x800;
234
                size = ((size + 0xf) & ~0xf);
232
                size = ((size + 0xf) & ~0xf) + offs;
235
            }
233
            }
236
            if (flags & 1)
234
            if (flags & 1)
237
            {
235
            {
238
                endptr -= ((offs + size + 0xfff) & ~0xfff);
236
                endptr -= ((size + 0xfff) & ~0xfff);
-
 
237
                memcpy(&norbuf[endptr + offs], data, size);
239
                file = endptr;
238
                file = endptr;
240
            }
239
            }
241
            else
240
            else
242
            {
241
            {
-
 
242
                memcpy(&norbuf[beginptr + offs], data, size);
243
                file = beginptr;
243
                file = beginptr;
244
                beginptr += ((offs + size + 0xfff) & ~0xfff);
244
                beginptr += ((size + 0xfff) & ~0xfff);
245
            }
245
            }
246
            memcpy(&norbuf[file + offs], data, size);
-
 
247
            if (!(flags & 4))
246
            if (!(flags & 4))
248
            {
247
            {
249
                if (dirptr >= 0x2000)
248
                if (dirptr >= 0x2000)
250
                    panicf(PANIC_KILLTHREAD, "Error: Directory is full!");
249
                    panicf(PANIC_KILLTHREAD, "Error: Directory is full!");
251
                memcpy(&norbuf[dirptr], &script[sp], 8);
250
                memcpy(&norbuf[dirptr], &script[sp], 8);
Line 254... Line 253...
254
                dirptr += 0x10;
253
                dirptr += 0x10;
255
                sp += 2;
254
                sp += 2;
256
            }
255
            }
257
            if (flags & 8)
256
            if (flags & 8)
258
            {
257
            {
-
 
258
                size -= offs;
259
                memset(&norbuf[file], 0, 0x800);
259
                memset(&norbuf[file], 0, 0x800);
260
                memcpy(&norbuf[file], "87021.0\x01", 8);
260
                memcpy(&norbuf[file], "87021.0\x01", 8);
261
                *((uint32_t*)&norbuf[file + 0xc]) = size;
261
                *((uint32_t*)&norbuf[file + 0xc]) = size;
262
                sha1(&norbuf[file + 0x800], size, &norbuf[file + 0x10]);
262
                sha1(&norbuf[file + 0x800], size, &norbuf[file + 0x10]);
263
                *((uint32_t*)&norbuf[file + 0x20]) = 0;
263
                *((uint32_t*)&norbuf[file + 0x20]) = 0;