OpenWrt – Diff between revs 2 and 3

Subversion Repositories:
Rev:
Show entire fileIgnore whitespace
Rev 2 Rev 3
Line 41... Line 41...
41 }; 41 };
Line 42... Line 42...
42   42  
43 static FILE *signature_file, *metadata_file, *firmware_file; 43 static FILE *signature_file, *metadata_file, *firmware_file;
44 static int file_mode = MODE_DEFAULT; 44 static int file_mode = MODE_DEFAULT;
45 static bool truncate_file; -  
46 static bool write_truncated; 45 static bool truncate_file;
Line 47... Line 46...
47 static bool quiet = false; 46 static bool quiet = false;
Line 48... Line 47...
48   47  
Line 63... Line 62...
63 " -S <file>: Append signature file to firmware image\n" 62 " -S <file>: Append signature file to firmware image\n"
64 " -I <file>: Append metadata file to firmware image\n" 63 " -I <file>: Append metadata file to firmware image\n"
65 " -s <file>: Extract signature file from firmware image\n" 64 " -s <file>: Extract signature file from firmware image\n"
66 " -i <file>: Extract metadata file from firmware image\n" 65 " -i <file>: Extract metadata file from firmware image\n"
67 " -t: Remove extracted chunks from firmare image (using -s, -i)\n" 66 " -t: Remove extracted chunks from firmare image (using -s, -i)\n"
68 " -T: Output firmware image without extracted chunks to stdout (using -s, -i)\n" -  
69 " -q: Quiet (suppress error messages)\n" 67 " -q: Quiet (suppress error messages)\n"
70 "\n", progname); 68 "\n", progname);
71 return 1; 69 return 1;
72 } 70 }
Line 280... Line 278...
280 { 278 {
281 struct fwimage_header *hdr; 279 struct fwimage_header *hdr;
282 struct fwimage_trailer tr; 280 struct fwimage_trailer tr;
283 struct data_buf dbuf = {}; 281 struct data_buf dbuf = {};
284 uint32_t crc32 = ~0; 282 uint32_t crc32 = ~0;
285 int data_len = 0; -  
286 int ret = 1; 283 int ret = 1;
287 void *buf; 284 void *buf;
288 bool metadata_keep = false; -  
Line 289... Line 285...
289   285  
290 firmware_file = open_file(name, false); 286 firmware_file = open_file(name, false);
291 if (!firmware_file) { 287 if (!firmware_file) {
292 msg("Failed to open firmware file\n"); 288 msg("Failed to open firmware file\n");
Line 303... Line 299...
303 return 1; 299 return 1;
Line 304... Line 300...
304   300  
305 do { 301 do {
Line 306... Line -...
306 char *tmp = dbuf.cur; -  
307   -  
308 if (write_truncated && dbuf.prev) -  
309 fwrite(dbuf.prev, 1, BUFLEN, stdout); 302 char *tmp = dbuf.cur;
310   303  
Line 311... Line 304...
311 dbuf.cur = dbuf.prev; 304 dbuf.cur = dbuf.prev;
312 dbuf.prev = tmp; 305 dbuf.prev = tmp;
Line 322... Line 315...
322 dbuf.cur_len = fread(dbuf.cur, 1, BUFLEN, firmware_file); 315 dbuf.cur_len = fread(dbuf.cur, 1, BUFLEN, firmware_file);
323 dbuf.file_len += dbuf.cur_len; 316 dbuf.file_len += dbuf.cur_len;
324 } while (dbuf.cur_len == BUFLEN); 317 } while (dbuf.cur_len == BUFLEN);
Line 325... Line 318...
325   318  
-   319 while (1) {
Line 326... Line 320...
326 while (1) { 320 int data_len;
327   321  
Line 328... Line 322...
328 if (extract_tail(&dbuf, &tr, sizeof(tr))) 322 if (extract_tail(&dbuf, &tr, sizeof(tr)))
Line 351... Line 345...
351 continue; 345 continue;
352 fwrite(buf, data_len, 1, signature_file); 346 fwrite(buf, data_len, 1, signature_file);
353 ret = 0; 347 ret = 0;
354 break; 348 break;
355 } else if (tr.type == FWIMAGE_INFO) { 349 } else if (tr.type == FWIMAGE_INFO) {
356 if (!metadata_file) { 350 if (!metadata_file)
357 dbuf.file_len += data_len + sizeof(tr); -  
358 metadata_keep = true; -  
359 break; 351 break;
360 } -  
Line 361... Line 352...
361   352  
362 hdr = buf; 353 hdr = buf;
363 data_len -= sizeof(*hdr); 354 data_len -= sizeof(*hdr);
364 if (validate_metadata(hdr, data_len)) 355 if (validate_metadata(hdr, data_len))
Line 373... Line 364...
373 } 364 }
Line 374... Line 365...
374   365  
375 if (!ret && truncate_file) 366 if (!ret && truncate_file)
Line 376... Line -...
376 ftruncate(fileno(firmware_file), dbuf.file_len); -  
377   -  
378 if (write_truncated) { -  
379 if (dbuf.prev) -  
380 fwrite(dbuf.prev, 1, BUFLEN, stdout); -  
381 if (dbuf.cur) -  
382 fwrite(dbuf.cur, 1, dbuf.cur_len, stdout); -  
383 if (metadata_keep) { -  
384 fwrite(buf, data_len, 1, stdout); -  
385 fwrite(&tr, sizeof(tr), 1, stdout); -  
386 } -  
387 } 367 ftruncate(fileno(firmware_file), dbuf.file_len);
388   368  
389 out: 369 out:
390 free(buf); 370 free(buf);
391 free(dbuf.cur); 371 free(dbuf.cur);
Line 408... Line 388...
408 const char *progname = argv[0]; 388 const char *progname = argv[0];
409 int ret, ch; 389 int ret, ch;
Line 410... Line 390...
410   390  
Line 411... Line 391...
411 crc32_filltable(crc_table); 391 crc32_filltable(crc_table);
412   392  
413 while ((ch = getopt(argc, argv, "i:I:qs:S:tT")) != -1) { 393 while ((ch = getopt(argc, argv, "i:I:qs:S:t")) != -1) {
414 ret = 0; 394 ret = 0;
415 switch(ch) { 395 switch(ch) {
416 case 'S': 396 case 'S':
Line 426... Line 406...
426 ret = set_file(&metadata_file, optarg, MODE_EXTRACT); 406 ret = set_file(&metadata_file, optarg, MODE_EXTRACT);
427 break; 407 break;
428 case 't': 408 case 't':
429 truncate_file = true; 409 truncate_file = true;
430 break; 410 break;
431 case 'T': -  
432 write_truncated = true; -  
433 break; -  
434 case 'q': 411 case 'q':
435 quiet = true; 412 quiet = true;
436 break; 413 break;
437 } 414 }