fritz_tffs_read: get tffs size from input file

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>
This commit is contained in:
Mathias Kresin 2017-06-18 10:28:18 +02:00
parent 04063820e8
commit 7e12863252

View file

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