@@ -103,7 +103,11 @@ bool spiffsMount(){
103
103
if (SPIFFS_mounted (&s_fs))
104
104
return true ;
105
105
int res = spiffsTryMount ();
106
- return (res == SPIFFS_OK);
106
+ if (res != SPIFFS_OK) {
107
+ std::cerr << " SPIFFS mount failed with error: " << res << std::endl;
108
+ return false ;
109
+ }
110
+ return true ;
107
111
}
108
112
109
113
bool spiffsFormat (){
@@ -443,6 +447,10 @@ int actionPack() {
443
447
std::cerr << " error: can't read source directory" << std::endl;
444
448
return 1 ;
445
449
}
450
+
451
+ if (s_imageSize == 0 ) {
452
+ s_imageSize = 0x10000 ;
453
+ }
446
454
447
455
s_flashmem.resize (s_imageSize, 0xff );
448
456
@@ -462,6 +470,14 @@ int actionPack() {
462
470
return result;
463
471
}
464
472
473
+ size_t getFileSize (FILE* fp)
474
+ {
475
+ fseek (fp, 0L , SEEK_END);
476
+ size_t size = (size_t ) ftell (fp);
477
+ fseek (fp, 0L , SEEK_SET);
478
+ return size;
479
+ }
480
+
465
481
/* *
466
482
* @brief Unpack action.
467
483
* @return 0 success, 1 error
@@ -470,7 +486,6 @@ int actionPack() {
470
486
*/
471
487
int actionUnpack (void ) {
472
488
int ret = 0 ;
473
- s_flashmem.resize (s_imageSize, 0xff );
474
489
475
490
// open spiffs image
476
491
FILE* fdsrc = fopen (s_imageName.c_str (), " rb" );
@@ -479,14 +494,23 @@ int actionUnpack(void) {
479
494
return 1 ;
480
495
}
481
496
497
+ if (s_imageSize == 0 ) {
498
+ s_imageSize = getFileSize (fdsrc);
499
+ }
500
+
501
+ s_flashmem.resize (s_imageSize, 0xff );
502
+
482
503
// read content into s_flashmem
483
504
fread (&s_flashmem[0 ], 4 , s_flashmem.size ()/4 , fdsrc);
484
505
485
- // close fiel handle
506
+ // close file handle
486
507
fclose (fdsrc);
487
508
488
509
// mount file system
489
- spiffsMount ();
510
+ if (!spiffsMount ()) {
511
+ std::cerr << " error: failed to mount image" << std::endl;
512
+ return 1 ;
513
+ }
490
514
491
515
// unpack files
492
516
if (! unpackFiles (s_dirName)) {
@@ -501,35 +525,53 @@ int actionUnpack(void) {
501
525
502
526
503
527
int actionList () {
504
- s_flashmem.resize (s_imageSize, 0xff );
505
-
506
528
FILE* fdsrc = fopen (s_imageName.c_str (), " rb" );
507
529
if (!fdsrc) {
508
530
std::cerr << " error: failed to open image file" << std::endl;
509
531
return 1 ;
510
532
}
511
533
534
+ if (s_imageSize == 0 ) {
535
+ s_imageSize = getFileSize (fdsrc);
536
+ }
537
+
538
+ s_flashmem.resize (s_imageSize, 0xff );
539
+
512
540
fread (&s_flashmem[0 ], 4 , s_flashmem.size ()/4 , fdsrc);
513
541
fclose (fdsrc);
514
- spiffsMount ();
542
+
543
+ if (!spiffsMount ()) {
544
+ std::cerr << " error: failed to mount image" << std::endl;
545
+ return 1 ;
546
+ }
547
+
515
548
listFiles ();
516
549
spiffsUnmount ();
517
550
return 0 ;
518
551
}
519
552
520
553
int actionVisualize () {
521
- s_flashmem.resize (s_imageSize, 0xff );
522
-
523
554
FILE* fdsrc = fopen (s_imageName.c_str (), " rb" );
524
555
if (!fdsrc) {
525
556
std::cerr << " error: failed to open image file" << std::endl;
526
557
return 1 ;
527
558
}
528
559
560
+ if (s_imageSize == 0 ) {
561
+ s_imageSize = getFileSize (fdsrc);
562
+ }
563
+
564
+ s_flashmem.resize (s_imageSize, 0xff );
565
+
566
+
529
567
fread (&s_flashmem[0 ], 4 , s_flashmem.size ()/4 , fdsrc);
530
568
fclose (fdsrc);
531
569
532
- spiffsMount ();
570
+ if (!spiffsMount ()) {
571
+ std::cerr << " error: failed to mount image" << std::endl;
572
+ return 1 ;
573
+ }
574
+
533
575
SPIFFS_vis (&s_fs);
534
576
uint32_t total, used;
535
577
SPIFFS_info (&s_fs, &total, &used);
@@ -577,7 +619,7 @@ void processArgs(int argc, const char** argv) {
577
619
TCLAP::SwitchArg listArg ( " l" , " list" , " list files in spiffs image" , false );
578
620
TCLAP::SwitchArg visualizeArg ( " i" , " visualize" , " visualize spiffs image" , false );
579
621
TCLAP::UnlabeledValueArg<std::string> outNameArg ( " image_file" , " spiffs image file" , true , " " , " image_file" );
580
- TCLAP::ValueArg<int > imageSizeArg ( " s" , " size" , " fs image size, in bytes" , false , 0x10000 , " number" );
622
+ TCLAP::ValueArg<int > imageSizeArg ( " s" , " size" , " fs image size, in bytes" , false , 0 , " number" );
581
623
TCLAP::ValueArg<int > pageSizeArg ( " p" , " page" , " fs page size, in bytes" , false , 256 , " number" );
582
624
TCLAP::ValueArg<int > blockSizeArg ( " b" , " block" , " fs block size, in bytes" , false , 4096 , " number" );
583
625
TCLAP::SwitchArg addAllFilesArg ( " a" , " all-files" , " when creating an image, include files which are normally ignored; currently only applies to '.DS_Store' files and '.git' directories" , false );
0 commit comments