fritz_tffs_read: get tffs size from input file
authorMathias Kresin <dev@kresin.me>
Sun, 18 Jun 2017 08:28:18 +0000 (10:28 +0200)
committerMathias Kresin <dev@kresin.me>
Sat, 24 Jun 2017 20:36:38 +0000 (22:36 +0200)
Use the size of the input file as maximum tffs size instead of a fixed
value. The tffs on a AVM Fritz 300E can be up to 512KByte for example.

Fixes a read error for the AVM Fritz 3370 where the tffs partition size
is 64Kbyte and smaller than the former default value of 256KByte.

Signed-off-by: Mathias Kresin <dev@kresin.me>
package/utils/fritz-tools/src/fritz_tffs_read.c

index 7c311a90caa4a0246431e2afc773ab5d1661350c..d1b3038e63a9333c638d1acd6f7a988b20d39ce4 100644 (file)
 #include <sys/stat.h>
 #include <arpa/inet.h>
 
-#define DEFAULT_TFFS_SIZE      (256 * 1024)
-
 #define TFFS_ID_END            0xffff
 #define TFFS_ID_TABLE_NAME     0x01ff
 
 static char *progname;
 static char *input_file;
-static unsigned long tffs_size = DEFAULT_TFFS_SIZE;
+static unsigned long tffs_size;
 static char *name_filter = NULL;
 static bool show_all = false;
 static bool print_all_key_names = false;
@@ -334,6 +332,12 @@ int main(int argc, char *argv[])
                goto out;
        }
 
+       if (tffs_size == 0) {
+               fseek(fp, 0L, SEEK_END);
+               tffs_size = ftell(fp);
+               fseek(fp, 0L, SEEK_SET);
+       }
+
        buffer = malloc(tffs_size);
 
        if (fread(buffer, 1, tffs_size, fp) != tffs_size) {