}
/* check if image fits to mtd device */
- fd = mtd_open(mtd, O_RDWR);
+ fd = mtd_open(mtd, O_RDWR | O_SYNC);
if(fd < 0) {
fprintf(stderr, "Could not open mtd device: %s\n", mtd);
exit(1);
return 0;
}
+ close(fd);
return 1;
}
struct mtd_info_user mtdInfo;
int fd;
- fd = mtd_open(mtd, O_RDWR);
+ fd = mtd_open(mtd, O_RDWR | O_SYNC);
if(fd < 0) {
fprintf(stderr, "Could not open mtd device: %s\n", mtd);
return 0;
struct mtd_info_user mtdInfo;
struct erase_info_user mtdLockInfo;
- fd = mtd_open(mtd, O_RDWR);
+ fd = mtd_open(mtd, O_RDWR | O_SYNC);
if(fd < 0) {
fprintf(stderr, "Could not open mtd device: %s\n", mtd);
exit(1);
struct mtd_info_user mtdInfo;
struct erase_info_user mtdEraseInfo;
- fd = mtd_open(mtd, O_RDWR);
+ fd = mtd_open(mtd, O_RDWR | O_SYNC);
if(fd < 0) {
fprintf(stderr, "Could not open mtd device: %s\n", mtd);
exit(1);
size_t r, w, e;
struct mtd_info_user mtdInfo;
struct erase_info_user mtdEraseInfo;
+ int ret = 0;
- fd = mtd_open(mtd, O_RDWR);
+ fd = mtd_open(mtd, O_RDWR | O_SYNC);
if(fd < 0) {
fprintf(stderr, "Could not open mtd device: %s\n", mtd);
exit(1);
}
if (!quiet)
fprintf(stderr, "\b\b\b\b");
-
+
+ close(fd);
return 0;
}
" erase erase all data on device\n"
" write <imagefile>|- write <imagefile> (use - for stdin) to device\n"
"Following options are available:\n"
- " -q quiet mode\n"
+ " -q quiet mode (once: no [w] on writing,\n"
+ " twice: no status messages)\n"
" -r reboot after successful command\n"
" -f force write without trx checks\n"
" -e <device> erase <device> before executing the command\n\n"
boot = 1;
break;
case 'q':
- quiet = 1;
+ quiet++;
break;
case 'e':
i = 0;
/* check trx file before erasing or writing anything */
if (!image_check(imagefd, device)) {
- if (!quiet && force)
+ if ((quiet < 2) || !force)
fprintf(stderr, "TRX check failed!\n");
if (!force)
exit(1);
i = 0;
unlocked = 0;
while (erase[i] != NULL) {
- if (!quiet)
+ if (quiet < 2)
fprintf(stderr, "Unlocking %s ...\n", erase[i]);
mtd_unlock(erase[i]);
- if (!quiet)
+ if (quiet < 2)
fprintf(stderr, "Erasing %s ...\n", erase[i]);
mtd_erase(erase[i]);
if (strcmp(erase[i], device) == 0)
}
if (!unlocked) {
- if (!quiet)
+ if (quiet < 2)
fprintf(stderr, "Unlocking %s ...\n", device);
mtd_unlock(device);
}
case CMD_UNLOCK:
break;
case CMD_ERASE:
- if (!quiet)
- fprintf(stderr, "Erasing %s ...\n", erase[i]);
+ if (quiet < 2)
+ fprintf(stderr, "Erasing %s ...\n", device);
mtd_erase(device);
break;
case CMD_WRITE:
- if (!quiet)
+ if (quiet < 2)
fprintf(stderr, "Writing from %s to %s ... ", imagefile, device);
mtd_write(imagefd, device, quiet);
- if (!quiet)
+ if (quiet < 2)
fprintf(stderr, "\n");
break;
}
+ sync();
+
if (boot)
kill(1, 15); // send SIGTERM to init for reboot