summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2012-04-28 12:02:48 +0200
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2012-04-28 12:05:11 +0200
commitb4424ca2f3902459571098eb2d955fefca400d9f (patch)
treed30e355eeac5e291593482d56cbb570142523bf5
parentfe3d58004cf28fb98dd29159187d256aaf5d0781 (diff)
downloadrockbox-b4424ca2f3902459571098eb2d955fefca400d9f.tar.gz
rockbox-b4424ca2f3902459571098eb2d955fefca400d9f.tar.bz2
rockbox-b4424ca2f3902459571098eb2d955fefca400d9f.zip
Add "ipod" mode to bin2c.
ipod2c is identical to bin2c except it skipping the header of the input files. Add this behaviour as option to bin2c to be able of using bin2c instead of ipod2c. Change-Id: I71afcaca6f2f6b0fce4c6aa3dff6be5bb205f384
-rw-r--r--rbutil/tools/bin2c.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/rbutil/tools/bin2c.c b/rbutil/tools/bin2c.c
index 36e245133e..4600746d52 100644
--- a/rbutil/tools/bin2c.c
+++ b/rbutil/tools/bin2c.c
@@ -5,7 +5,6 @@
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
- * $Id$
*
* Copyright (C) 2007 Dave Chapman
*
@@ -40,6 +39,13 @@
#define O_BINARY 0
#endif
+static void usage(void)
+{
+ fprintf(stderr, "bin2c [options] infile cfile\n");
+ fprintf(stderr, " -i ipod mode\n");
+}
+
+
static off_t filesize(int fd)
{
struct stat buf;
@@ -116,14 +122,25 @@ int main (int argc, char* argv[])
unsigned char* buf;
int len;
int n;
+ int skip = 0;
+ int opts = 0;
+
- if (argc != 3) {
- fprintf(stderr,"Usage: bin2c file cname\n");
+ if(argc < 2) {
+ usage();
+ return 0;
+ }
+ if(strcmp(argv[1], "-i") == 0) {
+ skip = 8;
+ opts++;
+ }
+ if (argc < opts + 3) {
+ usage();
return 0;
}
- infile=argv[1];
- cname=argv[2];
+ infile=argv[opts + 1];
+ cname=argv[opts + 2];
fd = open(infile,O_RDONLY|O_BINARY);
if (fd < 0) {
@@ -131,7 +148,12 @@ int main (int argc, char* argv[])
return 0;
}
- len = filesize(fd);
+ len = filesize(fd) - skip;
+ n = lseek(fd, skip, SEEK_SET);
+ if (n != skip) {
+ fprintf(stderr,"Seek failed\n");
+ return 0;
+ }
buf = malloc(len);
n = read(fd,buf,len);