mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-26 23:36:37 -04:00
Refactor mknkboot in preparation for beastpatcher integration.
- separate patching from main function. - improve cleaning up open files / allocated memory on errors. - correct check for number of arguments. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22723 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
be3c62f9ab
commit
d270452402
1 changed files with 40 additions and 18 deletions
|
|
@ -140,40 +140,36 @@ static off_t filesize(int fd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int mknkboot(const char* infile, const char* bootfile, const char* outfile)
|
||||||
{
|
{
|
||||||
char *infile, *bootfile, *outfile;
|
int fdin, fdboot = -1, fdout = -1;
|
||||||
int fdin, fdboot,fdout;
|
|
||||||
int i,n;
|
int i,n;
|
||||||
int inlength,bootlength,newlength;
|
int inlength,bootlength,newlength;
|
||||||
unsigned char* buf;
|
unsigned char* buf = NULL;
|
||||||
unsigned char* boot;
|
unsigned char* boot;
|
||||||
unsigned char* boot2;
|
unsigned char* boot2;
|
||||||
unsigned char* disable;
|
unsigned char* disable;
|
||||||
uint32_t sum;
|
uint32_t sum;
|
||||||
|
int result = 0;
|
||||||
if(argc < 3) {
|
|
||||||
usage();
|
|
||||||
}
|
|
||||||
|
|
||||||
infile = argv[1];
|
|
||||||
bootfile = argv[2];
|
|
||||||
outfile = argv[3];
|
|
||||||
|
|
||||||
fdin = open(infile, O_RDONLY|O_BINARY);
|
fdin = open(infile, O_RDONLY|O_BINARY);
|
||||||
if (fdin < 0)
|
if (fdin < 0)
|
||||||
{
|
{
|
||||||
perror(infile);
|
perror(infile);
|
||||||
|
result = 1;
|
||||||
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
fdboot = open(bootfile, O_RDONLY|O_BINARY);
|
fdboot = open(bootfile, O_RDONLY|O_BINARY);
|
||||||
if (fdboot < 0)
|
if (fdboot < 0)
|
||||||
{
|
{
|
||||||
perror(bootfile);
|
perror(bootfile);
|
||||||
|
close(fdin);
|
||||||
|
result = 2;
|
||||||
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
inlength = filesize(fdin);
|
inlength = filesize(fdin);
|
||||||
|
|
||||||
bootlength = filesize(fdboot);
|
bootlength = filesize(fdboot);
|
||||||
|
|
||||||
/* Create buffer for original nk.bin, plus our bootloader (with 12
|
/* Create buffer for original nk.bin, plus our bootloader (with 12
|
||||||
|
|
@ -185,7 +181,8 @@ int main(int argc, char *argv[])
|
||||||
if (buf==NULL)
|
if (buf==NULL)
|
||||||
{
|
{
|
||||||
printf("[ERR] Could not allocate memory, aborting\n");
|
printf("[ERR] Could not allocate memory, aborting\n");
|
||||||
return 1;
|
result = 3;
|
||||||
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****** STEP 1 - Read original nk.bin into buffer */
|
/****** STEP 1 - Read original nk.bin into buffer */
|
||||||
|
|
@ -194,7 +191,8 @@ int main(int argc, char *argv[])
|
||||||
if (n != inlength)
|
if (n != inlength)
|
||||||
{
|
{
|
||||||
printf("[ERR] Could not read from %s\n",infile);
|
printf("[ERR] Could not read from %s\n",infile);
|
||||||
return 2;
|
result = 4;
|
||||||
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****** STEP 2 - Move EOF record to the new EOF */
|
/****** STEP 2 - Move EOF record to the new EOF */
|
||||||
|
|
@ -218,7 +216,8 @@ int main(int argc, char *argv[])
|
||||||
if (n != bootlength)
|
if (n != bootlength)
|
||||||
{
|
{
|
||||||
printf("[ERR] Could not read from %s\n",bootfile);
|
printf("[ERR] Could not read from %s\n",bootfile);
|
||||||
return 3;
|
result = 5;
|
||||||
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****** STEP 5 - Create header for bootloader record */
|
/****** STEP 5 - Create header for bootloader record */
|
||||||
|
|
@ -257,18 +256,41 @@ int main(int argc, char *argv[])
|
||||||
if (fdout < 0)
|
if (fdout < 0)
|
||||||
{
|
{
|
||||||
perror(outfile);
|
perror(outfile);
|
||||||
|
result = 6;
|
||||||
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
n = write(fdout, buf, newlength);
|
n = write(fdout, buf, newlength);
|
||||||
if (n != newlength)
|
if (n != newlength)
|
||||||
{
|
{
|
||||||
printf("[ERR] Could not write output file %s\n",outfile);
|
printf("[ERR] Could not write output file %s\n",outfile);
|
||||||
return 3;
|
result = 7;
|
||||||
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
quit:
|
||||||
|
if(buf != NULL)
|
||||||
|
free(buf);
|
||||||
close(fdin);
|
close(fdin);
|
||||||
close(fdboot);
|
close(fdboot);
|
||||||
close(fdout);
|
close(fdout);
|
||||||
|
|
||||||
return 0;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
char *infile, *bootfile, *outfile;
|
||||||
|
if(argc < 4) {
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
|
||||||
|
infile = argv[1];
|
||||||
|
bootfile = argv[2];
|
||||||
|
outfile = argv[3];
|
||||||
|
|
||||||
|
return mknkboot(infile, bootfile, outfile);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue