예제 #1
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();  // 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;
}
예제 #2
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;
}
예제 #3
0
파일: unspiffs.c 프로젝트: MrZANE42/fnc
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;
}