rp2040

RP2040 Programming without SDK
Log | Files | Refs

commit d4403ac482871dfe027adf4ad97af6e38f6edd86
parent 92347b13b0f859dc4bec5f746533b50715378387
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Wed, 12 Apr 2023 16:30:13 +0900

use stdio functions

Diffstat:
Mtools/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; }