Beispiel #1
0
static int cbfs_add_stage(int argc, char **argv)
{
    char *romname = argv[1];
    char *cmd = argv[2];
    void *rom = loadrom(romname);

    if (rom == NULL) {
        printf("Could not load ROM image '%s'.\n", romname);
        return 1;
    }

    if (argc < 5) {
        printf("not enough arguments to '%s'.\n", cmd);
        return 1;
    }

    char *filename = argv[3];
    char *cbfsname = argv[4];

    uint32_t filesize = 0;
    void *filedata = loadfile(filename, &filesize, 0, SEEK_SET);
    if (filedata == NULL) {
        printf("Could not load file '%s'.\n", filename);
        return 1;
    }

    uint32_t base = 0;
    void *cbfsfile = NULL;

    comp_algo algo = CBFS_COMPRESS_NONE;
    if (argc > 5) {
        if (argv[5][0] == 'l')
            algo = CBFS_COMPRESS_LZMA;
    }
    if (argc > 6) {
        base = strtoul(argv[6], NULL, 0);
    }
    unsigned char *stage;
    filesize = parse_elf_to_stage(filedata, &stage, algo, &base);
    cbfsfile =
        create_cbfs_file(cbfsname, stage, &filesize,
                         CBFS_COMPONENT_STAGE, &base);

    if (add_file_to_cbfs(cbfsfile, filesize, base))
        return 1;
    if (writerom(romname, rom, romsize))
        return 1;
    return 0;
}
Beispiel #2
0
static int cbfs_add(int argc, char **argv)
{
    char *romname = argv[1];
    char *cmd = argv[2];
    void *rom = loadrom(romname);

    if (rom == NULL) {
        printf("Could not load ROM image '%s'.\n", romname);
        return 1;
    }

    if (argc < 5) {
        printf("not enough arguments to '%s'.\n", cmd);
        return 1;
    }

    char *filename = argv[3];
    char *cbfsname = argv[4];

    uint32_t filesize = 0;
    void *filedata = loadfile(filename, &filesize, 0, SEEK_SET);
    if (filedata == NULL) {
        printf("Could not load file '%s'.\n", filename);
        return 1;
    }

    uint32_t base = 0;
    void *cbfsfile = NULL;

    if (argc < 6) {
        printf("not enough arguments to 'add'.\n");
        return 1;
    }
    uint32_t type;
    if (intfiletype(argv[5]) != ((uint64_t) - 1))
        type = intfiletype(argv[5]);
    else
        type = strtoul(argv[5], NULL, 0);
    if (argc > 6) {
        base = strtoul(argv[6], NULL, 0);
    }
    cbfsfile = create_cbfs_file(cbfsname, filedata, &filesize, type, &base);
    if (add_file_to_cbfs(cbfsfile, filesize, base))
        return 1;
    if (writerom(romname, rom, romsize))
        return 1;
    return 0;
}
Beispiel #3
0
void TailsAdvData::exportToFile(LoadedROM& rom,
                                const std::string& filename) {
  // Create writable ROM to export data to
  WritableROM writerom(rom,
                       FreeSpaceListing(
                        TailsAdvFreeSpace::freeSpace,
                        TailsAdvFreeSpace::numFreeSpacePairs));
  
  // If ROM expansion enabled, double size
  if (romExpanded_) {
    writerom.doubleROMSize();
  }
  
  // Write data to ROM
  exportToROM(writerom);
  
  // Write ROM to file
  writerom.writeToFile(filename);
}