From 02bb28d98b614303f4a0dbcc4ea2f327ac46ed80 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Mon, 5 Mar 2018 12:55:46 -0500 Subject: Use stdio in merge and meta --- merge.c | 42 ++++++++++++++++-------------------------- meta.c | 7 +++---- 2 files changed, 19 insertions(+), 30 deletions(-) diff --git a/merge.c b/merge.c index bf1a1b5..8ca5267 100644 --- a/merge.c +++ b/merge.c @@ -19,22 +19,12 @@ #include #include #include -#include #include "torus.h" -static ssize_t writeAll(int fd, const char *buf, size_t len) { - ssize_t writeLen; - while (0 < (writeLen = write(fd, buf, len))) { - buf += writeLen; - len -= writeLen; - } - return writeLen; -} - static void drawTile(int offsetY, const struct Tile *tile) { - for (int y = 0; y < CELL_ROWS; ++y) { - for (int x = 0; x < CELL_COLS; ++x) { + for (uint8_t y = 0; y < CELL_ROWS; ++y) { + for (uint8_t x = 0; x < CELL_COLS; ++x) { uint8_t color = tile->colors[y][x]; char cell = tile->cells[y][x]; @@ -48,14 +38,14 @@ static void drawTile(int offsetY, const struct Tile *tile) { int main(int argc, char *argv[]) { if (argc != 4) return EX_USAGE; - int fileA = open(argv[1], O_RDONLY); - if (fileA < 0) err(EX_IOERR, "%s", argv[1]); + FILE *fileA = fopen(argv[1], "r"); + if (!fileA) err(EX_NOINPUT, "%s", argv[1]); - int fileB = open(argv[2], O_RDONLY); - if (fileB < 0) err(EX_IOERR, "%s", argv[2]); + FILE *fileB = fopen(argv[2], "r"); + if (!fileB) err(EX_NOINPUT, "%s", argv[2]); - int fileC = open(argv[3], O_WRONLY | O_CREAT, 0644); - if (fileC < 0) err(EX_IOERR, "%s", argv[3]); + FILE *fileC = fopen(argv[3], "w"); + if (!fileC) err(EX_CANTCREAT, "%s", argv[3]); initscr(); cbreak(); @@ -78,14 +68,14 @@ int main(int argc, char *argv[]) { struct Tile tileA, tileB; for (;;) { - ssize_t lenA = read(fileA, &tileA, sizeof(tileA)); - if (lenA < 0) err(EX_IOERR, "%s", argv[1]); + size_t countA = fread(&tileA, sizeof(tileA), 1, fileA); + if (ferror(fileA)) err(EX_IOERR, "%s", argv[1]); - ssize_t lenB = read(fileB, &tileB, sizeof(tileB)); - if (lenB < 0) err(EX_IOERR, "%s", argv[2]); + size_t countB = fread(&tileB, sizeof(tileB), 1, fileB); + if (ferror(fileB)) err(EX_IOERR, "%s", argv[2]); - if (!lenA && !lenB) break; - if (!lenA || !lenB) errx(EX_IOERR, "different size inputs"); + if (!countA && !countB) break; + if (!countA || !countB) errx(EX_DATAERR, "different size inputs"); const struct Tile *tileC = (tileA.accessTime > tileB.accessTime) ? &tileA @@ -102,8 +92,8 @@ int main(int argc, char *argv[]) { tileC = (c == 'a') ? &tileA : &tileB; } - ssize_t lenC = writeAll(fileC, (char *)tileC, sizeof(*tileC)); - if (lenC < 0) err(EX_IOERR, "%s", argv[3]); + fwrite(tileC, sizeof(*tileC), 1, fileC); + if (ferror(fileC)) err(EX_IOERR, "%s", argv[3]); } endwin(); diff --git a/meta.c b/meta.c index cc6e262..3f4dcc8 100644 --- a/meta.c +++ b/meta.c @@ -17,7 +17,6 @@ #include #include #include -#include #include "torus.h" @@ -25,9 +24,9 @@ int main() { printf("tileX,tileY,createTime,modifyCount,modifyTime,accessCount,accessTime\n"); for (int i = 0;; ++i) { struct Tile tile; - ssize_t len = read(STDIN_FILENO, &tile, sizeof(tile)); - if (len < 0) err(EX_IOERR, "read"); - if (!len) return EX_OK; + size_t count = fread(&tile, sizeof(tile), 1, stdin); + if (ferror(stdin)) err(EX_IOERR, "(stdin)"); + if (!count) return EX_OK; printf( "%d,%d,%ld,%u,%ld,%u,%ld\n", -- cgit 1.4.1