@@ -103,7 +103,11 @@ bool spiffsMount(){
103103 if (SPIFFS_mounted (&s_fs))
104104 return true ;
105105 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 ;
107111}
108112
109113bool spiffsFormat (){
@@ -443,6 +447,10 @@ int actionPack() {
443447 std::cerr << " error: can't read source directory" << std::endl;
444448 return 1 ;
445449 }
450+
451+ if (s_imageSize == 0 ) {
452+ s_imageSize = 0x10000 ;
453+ }
446454
447455 s_flashmem.resize (s_imageSize, 0xff );
448456
@@ -462,6 +470,14 @@ int actionPack() {
462470 return result;
463471}
464472
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+
465481/* *
466482 * @brief Unpack action.
467483 * @return 0 success, 1 error
@@ -470,7 +486,6 @@ int actionPack() {
470486 */
471487int actionUnpack (void ) {
472488 int ret = 0 ;
473- s_flashmem.resize (s_imageSize, 0xff );
474489
475490 // open spiffs image
476491 FILE* fdsrc = fopen (s_imageName.c_str (), " rb" );
@@ -479,14 +494,23 @@ int actionUnpack(void) {
479494 return 1 ;
480495 }
481496
497+ if (s_imageSize == 0 ) {
498+ s_imageSize = getFileSize (fdsrc);
499+ }
500+
501+ s_flashmem.resize (s_imageSize, 0xff );
502+
482503 // read content into s_flashmem
483504 fread (&s_flashmem[0 ], 4 , s_flashmem.size ()/4 , fdsrc);
484505
485- // close fiel handle
506+ // close file handle
486507 fclose (fdsrc);
487508
488509 // mount file system
489- spiffsMount ();
510+ if (!spiffsMount ()) {
511+ std::cerr << " error: failed to mount image" << std::endl;
512+ return 1 ;
513+ }
490514
491515 // unpack files
492516 if (! unpackFiles (s_dirName)) {
@@ -501,35 +525,53 @@ int actionUnpack(void) {
501525
502526
503527int actionList () {
504- s_flashmem.resize (s_imageSize, 0xff );
505-
506528 FILE* fdsrc = fopen (s_imageName.c_str (), " rb" );
507529 if (!fdsrc) {
508530 std::cerr << " error: failed to open image file" << std::endl;
509531 return 1 ;
510532 }
511533
534+ if (s_imageSize == 0 ) {
535+ s_imageSize = getFileSize (fdsrc);
536+ }
537+
538+ s_flashmem.resize (s_imageSize, 0xff );
539+
512540 fread (&s_flashmem[0 ], 4 , s_flashmem.size ()/4 , fdsrc);
513541 fclose (fdsrc);
514- spiffsMount ();
542+
543+ if (!spiffsMount ()) {
544+ std::cerr << " error: failed to mount image" << std::endl;
545+ return 1 ;
546+ }
547+
515548 listFiles ();
516549 spiffsUnmount ();
517550 return 0 ;
518551}
519552
520553int actionVisualize () {
521- s_flashmem.resize (s_imageSize, 0xff );
522-
523554 FILE* fdsrc = fopen (s_imageName.c_str (), " rb" );
524555 if (!fdsrc) {
525556 std::cerr << " error: failed to open image file" << std::endl;
526557 return 1 ;
527558 }
528559
560+ if (s_imageSize == 0 ) {
561+ s_imageSize = getFileSize (fdsrc);
562+ }
563+
564+ s_flashmem.resize (s_imageSize, 0xff );
565+
566+
529567 fread (&s_flashmem[0 ], 4 , s_flashmem.size ()/4 , fdsrc);
530568 fclose (fdsrc);
531569
532- spiffsMount ();
570+ if (!spiffsMount ()) {
571+ std::cerr << " error: failed to mount image" << std::endl;
572+ return 1 ;
573+ }
574+
533575 SPIFFS_vis (&s_fs);
534576 uint32_t total, used;
535577 SPIFFS_info (&s_fs, &total, &used);
@@ -577,7 +619,7 @@ void processArgs(int argc, const char** argv) {
577619 TCLAP::SwitchArg listArg ( " l" , " list" , " list files in spiffs image" , false );
578620 TCLAP::SwitchArg visualizeArg ( " i" , " visualize" , " visualize spiffs image" , false );
579621 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" );
581623 TCLAP::ValueArg<int > pageSizeArg ( " p" , " page" , " fs page size, in bytes" , false , 256 , " number" );
582624 TCLAP::ValueArg<int > blockSizeArg ( " b" , " block" , " fs block size, in bytes" , false , 4096 , " number" );
583625 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