static int cmd_writesector(const struct command *c, int argc, char *argv[]) { imgtoolerr_t err; imgtool_image *img; imgtool_stream *stream = NULL; void *buffer = NULL; UINT32 size, track, head, sector; /* attempt to open image */ err = imgtool_image_open_byname(argv[0], argv[1], OSD_FOPEN_RW, &img); if (err) goto done; track = atoi(argv[2]); head = atoi(argv[3]); sector = atoi(argv[4]); stream = stream_open(argv[5], OSD_FOPEN_READ); if (!stream) { err = (imgtoolerr_t)(IMGTOOLERR_FILENOTFOUND | IMGTOOLERR_SRC_NATIVEFILE); goto done; } size = (UINT32) stream_size(stream); buffer = malloc(size); if (!buffer) { err = (imgtoolerr_t)(IMGTOOLERR_OUTOFMEMORY); goto done; } stream_read(stream, buffer, size); err = imgtool_image_write_sector(img, track, head, sector, buffer, size); if (err) goto done; done: if (buffer) free(buffer); if (stream) stream_close(stream); if (err) reporterror(err, c, argv[0], argv[1], NULL, NULL, 0); return err ? -1 : 0; }
static int cmd_writesector(const struct command *c, int argc, char *argv[]) { imgtoolerr_t err; imgtool_image *img; imgtool_stream *stream = nullptr; dynamic_buffer buffer; UINT32 size, track, head, sector; /* attempt to open image */ err = imgtool_image_open_byname(argv[0], argv[1], OSD_FOPEN_RW, &img); if (err) goto done; track = atoi(argv[2]); head = atoi(argv[3]); sector = atoi(argv[4]); stream = stream_open(argv[5], OSD_FOPEN_READ); if (!stream) { err = (imgtoolerr_t)(IMGTOOLERR_FILENOTFOUND | IMGTOOLERR_SRC_NATIVEFILE); goto done; } size = (UINT32) stream_size(stream); buffer.resize(size); stream_read(stream, &buffer[0], size); err = imgtool_image_write_sector(img, track, head, sector, &buffer[0], size); if (err) goto done; done: if (stream) stream_close(stream); if (err) reporterror(err, c, argv[0], argv[1], nullptr, nullptr, nullptr); return err ? -1 : 0; }