big bug fix for ipsw-creation without -memory; now uses an error message to yell at you for giving it bad tars to merge rather than segfaulting; decreased stack use to accomodate Window's 1 MB stack limit
This commit is contained in:
Родитель
7fbfbddf12
Коммит
e606deef03
|
@ -400,6 +400,12 @@ int main(int argc, char* argv[]) {
|
|||
for(; mergePaths < argc; mergePaths++) {
|
||||
XLOG(0, "merging %s\n", argv[mergePaths]);
|
||||
AbstractFile* tarFile = createAbstractFileFromFile(fopen(argv[mergePaths], "rb"));
|
||||
if(tarFile == NULL) {
|
||||
XLOG(1, "cannot find %s, make sure your slashes are in the right direction\n", argv[mergePaths]);
|
||||
releaseOutput(&outputState);
|
||||
closeRoot(buffer);
|
||||
exit(0);
|
||||
}
|
||||
hfs_untar(rootVolume, tarFile);
|
||||
tarFile->close(tarFile);
|
||||
}
|
||||
|
|
|
@ -173,20 +173,20 @@ void writeOutput(OutputState** state, char* ipsw) {
|
|||
if(curFile->tmpFileName == NULL) {
|
||||
ASSERT(zipWriteInFileInZip(zip, curFile->buffer, curFile->bufferSize) == 0, "error writing to zip");
|
||||
} else {
|
||||
FILE* tmpFile = fopen(curFile->tmpFileName, "wb");
|
||||
AbstractFile* tmpFile = createAbstractFileFromFile(fopen(curFile->tmpFileName, "rb"));
|
||||
char* buffer = malloc(DEFAULT_BUFFER_SIZE);
|
||||
size_t left = curFile->bufferSize;
|
||||
size_t left = tmpFile->getLength(tmpFile);
|
||||
while(left > 0) {
|
||||
size_t toRead;
|
||||
if(left > DEFAULT_BUFFER_SIZE)
|
||||
toRead = DEFAULT_BUFFER_SIZE;
|
||||
else
|
||||
toRead = left;
|
||||
fread(buffer, toRead, 1, tmpFile);
|
||||
ASSERT(tmpFile->read(tmpFile, buffer, toRead) == toRead, "error reading data");
|
||||
ASSERT(zipWriteInFileInZip(zip, buffer, toRead) == 0, "error writing to zip");
|
||||
left -= toRead;
|
||||
}
|
||||
fclose(tmpFile);
|
||||
tmpFile->close(tmpFile);
|
||||
free(buffer);
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -25,7 +25,7 @@ Dictionary* parseIPSW2(const char* inputIPSW, const char* bundleRoot, char** bun
|
|||
FILE* inputIPSWFile;
|
||||
|
||||
SHA_CTX sha1_ctx;
|
||||
char buffer[BUFFERSIZE];
|
||||
char* buffer;
|
||||
int read;
|
||||
unsigned char hash[20];
|
||||
|
||||
|
@ -44,12 +44,14 @@ Dictionary* parseIPSW2(const char* inputIPSW, const char* bundleRoot, char** bun
|
|||
|
||||
XLOG(0, "Hashing IPSW...\n");
|
||||
|
||||
buffer = malloc(BUFFERSIZE);
|
||||
SHA1_Init(&sha1_ctx);
|
||||
while(!feof(inputIPSWFile)) {
|
||||
read = fread(buffer, 1, BUFFERSIZE, inputIPSWFile);
|
||||
SHA1_Update(&sha1_ctx, buffer, read);
|
||||
}
|
||||
SHA1_Final(hash, &sha1_ctx);
|
||||
free(buffer);
|
||||
|
||||
fclose(inputIPSWFile);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче