int main(int argc, char **argv) { const char *root_dir; DIR *dir; if (argc < 3) { fprintf(stderr, "usage: %s <size> <root_dir>\n", argv[0]); return 1; } image_size = atoi(argv[1]); if (image_size == 0) { fprintf(stderr, "invalid size '%s'\n", argv[1]); return 1; } root_dir = argv[2]; image = malloc(image_size); if (image == NULL) { fprintf(stderr, "cannot allocate %lu bytes\n", image_size); return 1; } mem_spiffs_erase(0, image_size); mem_spiffs_mount(); // Will fail but is required. SPIFFS_format(&fs); if (mem_spiffs_mount() != SPIFFS_OK) { fprintf(stderr, "SPIFFS_mount failed: %d\n", SPIFFS_errno(&fs)); return 1; } fprintf(stderr, "adding files in directory %s\n", root_dir); if ((dir = opendir(root_dir)) == NULL) { fprintf(stderr, "unable to open directory %s\n", root_dir); return 1; } else { read_dir(dir, root_dir); } fwrite(image, image_size, 1, stdout); u32_t total, used; SPIFFS_info(&fs, &total, &used); fprintf(stderr, "Image stats: size=%u, space: total=%u, used=%u, free=%u\n", (unsigned int) image_size, total, used, total - used); return 0; }
int main(int argc, char **argv) { const char *root_dir; DIR *dir; if (argc < 3) { fprintf(stderr, "usage: %s <size> <root_dir>\n", argv[0]); return 1; } image_size = atoi(argv[1]); if (image_size == 0) { fprintf(stderr, "invalid size '%s'\n", argv[1]); return 1; } root_dir = argv[2]; image = malloc(image_size); if (image == NULL) { fprintf(stderr, "cannot allocate %lu bytes\n", image_size); return 1; } mem_spiffs_erase(0, image_size); mem_spiffs_mount(); fprintf(stderr, "adding files in directory %s\n", root_dir); if ((dir = opendir(root_dir)) == NULL) { fprintf(stderr, "unable to open directory %s\n", root_dir); return 1; } else { read_dir(dir, root_dir); } fwrite(image, image_size, 1, stdout); return 0; }
int main(int argc, char **argv) { FILE *fp; const char *filename = NULL; int i; int list = 0; const char *extDir = "."; for (i = 1; i < argc && argv[i][0] == '-'; i++) { if (strcmp(argv[i], "-d") == 0 && i + 1 < argc) { extDir = argv[i + 1]; i++; } else if (strcmp(argv[i], "-l") == 0) { list = 1; } else if (strcmp(argv[i], "-h") == 0) { show_usage(argv); } } if (argc - i < 1) { show_usage(argv); } filename = argv[i]; fp = fopen(filename, "r"); if (fp == NULL) { fprintf(stderr, "unable to open %s, err: %d\n", filename, errno); return 1; } fseek(fp, 0, SEEK_END); image_size = ftell(fp); fseek(fp, 0, SEEK_SET); image = (char *) malloc(image_size); if (fread(image, image_size, 1, fp) < 1) { fprintf(stderr, "cannot read %s, err: %d\n", filename, errno); return 1; } mem_spiffs_mount(); { spiffs_DIR d; struct spiffs_dirent de; SPIFFS_opendir(&fs, ".", &d); while (SPIFFS_readdir(&d, &de) != NULL) { if (list) { printf("%s\n", de.name); } else { char target[1024]; char *buf = NULL; FILE *out; spiffs_file in; sprintf(target, "%s/%s", extDir, de.name); fprintf(stderr, "extracting %s\n", de.name); out = fopen(target, "w"); if (out == NULL) { fprintf(stderr, "cannot write %s, err: %d\n", target, errno); return 1; } in = SPIFFS_open_by_dirent(&fs, &de, SPIFFS_RDONLY, 0); if (in < 0) { fprintf(stderr, "cannot open spiffs file %s, err: %d\n", de.name, SPIFFS_errno(&fs)); return 1; } buf = malloc(de.size); if (SPIFFS_read(&fs, in, buf, de.size) != de.size) { fprintf(stderr, "cannot read %s, err: %d\n", de.name, SPIFFS_errno(&fs)); return 1; } SPIFFS_close(&fs, in); fwrite(buf, de.size, 1, out); free(buf); fclose(out); } } SPIFFS_closedir(&d); } free(image); fclose(fp); return 0; }