commit d4403ac482871dfe027adf4ad97af6e38f6edd86
parent 92347b13b0f859dc4bec5f746533b50715378387
Author: Matsuda Kenji <info@mtkn.jp>
Date: Wed, 12 Apr 2023 16:30:13 +0900
use stdio functions
Diffstat:
M | tools/bincrc.c | | | 58 | ++++++++++++++++++++++++++++++++++++---------------------- |
1 file changed, 36 insertions(+), 22 deletions(-)
diff --git a/tools/bincrc.c b/tools/bincrc.c
@@ -1,8 +1,5 @@
#include <stdio.h>
#include <stdint.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <unistd.h>
void
@@ -39,48 +36,65 @@ crc32(uint8_t *idata, size_t len)
int
main(int argc, char *argv[])
{
- int src, dst;
+ FILE *src, *dst;
size_t isize, osize = 256;
uint8_t idata[osize];
uint32_t cs;
+ int ret = 0;
- if(argc != 3) {
+ if (argc != 3) {
fprintf(stderr, "Usage: %s src dst\n", argv[0]);
- exit(1);
+ ret = 1;
+ goto defer;;
}
- if((src = open(argv[1], O_RDONLY)) < 0) {
+ if ((src = fopen(argv[1], "r")) == NULL) {
fprintf(stderr, "Could not open %s.\n", argv[1]);
- exit(1);
+ ret = 1;
+ goto defer;;
}
- isize = read(src, idata, osize);
- for (int i = isize; i < osize - 4; i++)
- idata[i] = 0;
-
- if((dst = open(argv[2], O_CREAT | O_WRONLY, 0777)) < 0) {
+ if ((dst = fopen(argv[2], "w")) < 0) {
fprintf(stderr, "Could not open %s.\n", argv[2]);
- exit(1);
+ ret = 1;
+ goto defer;;
+ }
+
+ if ((isize = fread(idata, 1, osize, src)) < 0) {
+ fprintf(stderr, "Read error.\n", argv[2]);
+ ret = 1;
+ goto defer;
}
+ for (int i = isize; i < osize - 4; i++)
+ idata[i] = 0;
cs = crc32(idata, osize - 4);
for (int i = 0; i < 4; i++)
idata[osize - 4 + i] = cs >> i * 8;
- if ((isize = write(dst, idata, osize)) != osize) {
+ if (fwrite(idata, 1, osize, dst) != osize) {
fprintf(stderr, "Write error.\n");
- exit(1);
+ ret = 1;
+ goto defer;;
}
- while ((isize = read(src, idata, osize)) > 0)
- write(dst, idata, isize);
+ while ((isize = fread(idata, 1, osize, src)) > 0)
+ if (fwrite(idata, 1, isize, dst) < isize) {
+ fprintf(stderr, "Write error.\n");
+ ret = 1;
+ goto defer;;
+ }
if (isize < 0) {
fprintf(stderr, "IO error.\n");
- exit(1);
+ ret = 1;
+ goto defer;;
}
- close(src);
- close(dst);
- return 0;
+defer:
+ if (src)
+ fclose(src);
+ if (dst)
+ fclose(dst);
+ return ret;
}